軟件工程第四次做業——ATM管理系統

名稱 內容
課程班級 班級連接
做業要求 做業連接
本人學號 3180405308

題目要求

編寫一個ATM管理系統,語言不限,要求應包括如下主要功能:
(1)開戶,銷戶
(2)查詢帳戶餘額
(3)存款
(4)取款
(5)轉帳(一個帳戶轉到另外一個帳戶)等...ios

代碼分析

結構體

typedef struct{
    int uid;//卡號
    int password;//密碼
    float balance; //餘額
    bool flag;  //該帳戶是否存在,存在爲true
}account;

vector<account> base;

檢測函數

檢查帳戶是否存在,true爲存在函數

//檢查帳戶是否存在,true爲存在
bool check(account N){
    bool flag = true;
    if (N.uid-first > base.size() || !N.flag) {
        printf("抱歉您所尋找的帳戶並不存在,請從新輸入:\n");
        flag = false;
    }
//    if (!N.flag) {
//        printf("抱歉您所尋找的帳戶已註銷,請從新輸入:\n");
//        flag = false;
//    }
    return flag;
}

初始化函數

//初始化
void init(account &N){
    //設置卡號
    int id = int(base.size());
    N.uid = first+id; //六位卡號
    printf("您的卡號爲: %d \n",N.uid);
    
    //設置密碼
    printf("請設置您的密碼:\n");
    int psw = 0;
    scanf("%d",&psw);
    N.password = psw;  //帳戶密碼
    
    //初始化餘額
    N.balance = 0;  //帳戶餘額
    
    //將帳戶標記爲存在,沒有被註銷
    N.flag = true;
}

開戶

//開戶
void create(){
    account N;
    init(N);
    base.push_back(N);
}

註銷

//銷戶
void cancel(){
    printf("請輸入您須要刪除的帳號卡號:\n");
    int id = 0;
    scanf("%d",&id);
    while (check(base[id-first]) == false) {
        scanf("%d",&id);
    }
    
    printf("請輸入該 %d 帳號的密碼:\n",id);
    int psw = 0;
    scanf("%d",&psw);
    while (psw != base[id-first].password) {
        printf("抱歉,您輸入的密碼並不正確,請從新輸入:\n");
        scanf("%d",&psw);
    }
    
    printf("您是否確認註銷該帳戶?\t 輸入1爲確認註銷,輸入0爲不註銷\n");
    int choice = 0;
    cin>>choice;
    if (choice == 1) {
        base[id-first].flag = false;   //flag標記爲帳戶不存在
    } else {
        printf("您已取消本次註銷行爲\n");
    }
}

餘額查詢

//查詢餘額
void enquire(){
    printf("請輸入您的帳戶卡號:\n");
    int id = 0;
    scanf("%d",&id);
    while (check(base[id-first]) == false) {
        scanf("%d",&id);
    }
    
    if (base[id-first].balance == 0) {
        printf("很抱歉,您當前並未有任何存款\n");
    } else {
        printf("您的餘額爲: %f ¥\n",base[id-first].balance);
    }
}

存款

//存款
void deposit(){
    printf("請輸入您的帳戶卡號:\n");
    int id = 0;
    scanf("%d",&id);
    while (check(base[id-first]) == false) {
        scanf("%d",&id);
    }
    
    float input = 0;
    printf("請輸入您要存入的金額數目\n");
    scanf("%f",&input);
    base[id-first].balance += input;
    printf("您的餘額爲: %f ¥\n",base[id-first].balance);
}

取款

//取款
void withdraw(){
    printf("請輸入您的帳戶卡號:\n");
    int id = 0;
    scanf("%d",&id);
    while (check(base[id-first]) == false) {
        scanf("%d",&id);
    }
    
    float input = 0;
    printf("請輸入您要取出的金額數目\n");
    scanf("%f",&input);
    if (base[id-first].balance < input) {
        printf("抱歉,您的存款不足,不能取出\n");
    } else {
        base[id-first].balance -= input;
        printf("您的餘額爲: %f ¥\n",base[id-first].balance);
    }
}

轉帳

//轉帳
void transfer(){
    printf("請輸入您的帳戶卡號:\n");
    int oid = 0;
    scanf("%d",&oid);
    while (check(base[oid-first]) == false) {
        scanf("%d",&oid);
    }
    
    printf("請輸入您所要轉入的帳戶卡號:\n");
    int iid = 0;
    scanf("%d",&iid);
    while (check(base[oid-first]) == false) {
        scanf("%d",&oid);
    }
    
    float input = 0;
    printf("請輸入您要轉出的金額數目\n");
    scanf("%f",&input);
    if (base[oid-first].balance < input) {
        printf("抱歉,您的存款不足,不能轉出\n");
    } else {
        base[oid-first].balance -= input;
        base[iid-first].balance += input;
        printf("您的餘額爲: %f ¥\n",base[oid-first].balance);
        printf("對方餘額爲: %f ¥\n",base[iid-first].balance);
    }
}

菜單

//菜單
void menu(){
    int end = 0;   //是否結束,0記爲不結束
    do {
        printf("請選擇您須要進行的操做:\n1.開戶\t2.銷戶\n3.查詢當前餘額\n4.存款\t5.取款\n6.轉帳\t0.退出\n");
        int choose = 0;
        scanf("%d",&choose);
        switch (choose) {
            case 0:
                printf("Bye~\n");
                exit(0);
            case 1:
                create();
                break;
            case 2:
                cancel();
                break;
            case 3:
                enquire();
                break;
            case 4:
                deposit();
                break;
            case 5:
                withdraw();
                break;
            case 6:
                transfer();
                break;
                
            default:
                break;
        }
        printf("請問您是否須要繼續進行其餘操做?輸入1繼續進行其餘操做,輸入0則退出\n");
        scanf("%d",&end);
    } while (end);
}

運行截圖

我的小結

psp 任務內容 計劃完成須要的時間(min) 實際完成須要的時間(min)
Planning 計劃 5 3
Estimate 估計這個任務須要多少時間,並規劃大體工做步驟 5 5
Development 開發 300 300
Analysis 需求分析(包括學習新技術) 15 45
Design Spec 生成設計文檔 5 20
Design Review 設計複審 5 5
Coding Standard 代碼規範 3 3
Design 具體設計 10 12
Coding 具體編碼 200 200
Code Review 代碼複審 10 20
Test 測試(自我測試,修改代碼,提交修改) 10 60
Reporting 報告 5 5
Test Report 測試報告 5 5
Size Measurement 計算工做量 20 30
Postmortem & Process Improvement Plan 過後總結,並提出過程改進計劃 20 20

源碼

//
//  main.cpp
//  ATM管理系統
//
//  Created by Chen on 2020/11/8.
//  Copyright © 2020 xxc. All rights reserved.
//
//編寫一個ATM管理系統,語言不限,要求應包括如下主要功能:
//(1)開戶,銷戶
//(2)查詢帳戶餘額
//(3)存款
//(4)取款
//(5)轉帳(一個帳戶轉到另外一個帳戶)等...

#include <iostream>
#include <vector>
#define first 100000
using namespace std;

typedef struct{
    int uid;//卡號
    int password;//密碼
    float balance; //餘額
    bool flag;  //該帳戶是否存在,存在爲true
}account;

vector<account> base;

//檢查帳戶是否存在,true爲存在
bool check(account N){
    bool flag = true;
    if (N.uid-first > base.size() || !N.flag) {
        printf("抱歉您所尋找的帳戶並不存在,請從新輸入:\n");
        flag = false;
    }
//    if (!N.flag) {
//        printf("抱歉您所尋找的帳戶已註銷,請從新輸入:\n");
//        flag = false;
//    }
    return flag;
}

//初始化
void init(account &N){
    //設置卡號
    int id = int(base.size());
    N.uid = first+id; //六位卡號
    printf("您的卡號爲: %d \n",N.uid);
    
    //設置密碼
    printf("請設置您的密碼:\n");
    int psw = 0;
    scanf("%d",&psw);
    N.password = psw;  //帳戶密碼
    
    //初始化餘額
    N.balance = 0;  //帳戶餘額
    
    //將帳戶標記爲存在,沒有被註銷
    N.flag = true;
}

//開戶
void create(){
    account N;
    init(N);
    base.push_back(N);
}

//銷戶
void cancel(){
    printf("請輸入您須要刪除的帳號卡號:\n");
    int id = 0;
    scanf("%d",&id);
    while (check(base[id-first]) == false) {
        scanf("%d",&id);
    }
    
    printf("請輸入該 %d 帳號的密碼:\n",id);
    int psw = 0;
    scanf("%d",&psw);
    while (psw != base[id-first].password) {
        printf("抱歉,您輸入的密碼並不正確,請從新輸入:\n");
        scanf("%d",&psw);
    }
    
    printf("您是否確認註銷該帳戶?\t 輸入1爲確認註銷,輸入0爲不註銷\n");
    int choice = 0;
    cin>>choice;
    if (choice == 1) {
        base[id-first].flag = false;   //flag標記爲帳戶不存在
    } else {
        printf("您已取消本次註銷行爲\n");
    }
}

//查詢餘額
void enquire(){
    printf("請輸入您的帳戶卡號:\n");
    int id = 0;
    scanf("%d",&id);
    while (check(base[id-first]) == false) {
        scanf("%d",&id);
    }
    
    if (base[id-first].balance == 0) {
        printf("很抱歉,您當前並未有任何存款\n");
    } else {
        printf("您的餘額爲: %f ¥\n",base[id-first].balance);
    }
}

//存款
void deposit(){
    printf("請輸入您的帳戶卡號:\n");
    int id = 0;
    scanf("%d",&id);
    while (check(base[id-first]) == false) {
        scanf("%d",&id);
    }
    
    float input = 0;
    printf("請輸入您要存入的金額數目\n");
    scanf("%f",&input);
    base[id-first].balance += input;
    printf("您的餘額爲: %f ¥\n",base[id-first].balance);
}

//取款
void withdraw(){
    printf("請輸入您的帳戶卡號:\n");
    int id = 0;
    scanf("%d",&id);
    while (check(base[id-first]) == false) {
        scanf("%d",&id);
    }
    
    float input = 0;
    printf("請輸入您要取出的金額數目\n");
    scanf("%f",&input);
    if (base[id-first].balance < input) {
        printf("抱歉,您的存款不足,不能取出\n");
    } else {
        base[id-first].balance -= input;
        printf("您的餘額爲: %f ¥\n",base[id-first].balance);
    }
}

//轉帳
void transfer(){
    printf("請輸入您的帳戶卡號:\n");
    int oid = 0;
    scanf("%d",&oid);
    while (check(base[oid-first]) == false) {
        scanf("%d",&oid);
    }
    
    printf("請輸入您所要轉入的帳戶卡號:\n");
    int iid = 0;
    scanf("%d",&iid);
    while (check(base[oid-first]) == false) {
        scanf("%d",&oid);
    }
    
    float input = 0;
    printf("請輸入您要轉出的金額數目\n");
    scanf("%f",&input);
    if (base[oid-first].balance < input) {
        printf("抱歉,您的存款不足,不能轉出\n");
    } else {
        base[oid-first].balance -= input;
        base[iid-first].balance += input;
        printf("您的餘額爲: %f ¥\n",base[oid-first].balance);
        printf("對方餘額爲: %f ¥\n",base[iid-first].balance);
    }
}

//菜單
void menu(){
    int end = 0;   //是否結束,0記爲不結束
    do {
        printf("請選擇您須要進行的操做:\n1.開戶\t2.銷戶\n3.查詢當前餘額\n4.存款\t5.取款\n6.轉帳\t0.退出\n");
        int choose = 0;
        scanf("%d",&choose);
        switch (choose) {
            case 0:
                printf("Bye~\n");
                exit(0);
            case 1:
                create();
                break;
            case 2:
                cancel();
                break;
            case 3:
                enquire();
                break;
            case 4:
                deposit();
                break;
            case 5:
                withdraw();
                break;
            case 6:
                transfer();
                break;
                
            default:
                break;
        }
        printf("請問您是否須要繼續進行其餘操做?輸入1繼續進行其餘操做,輸入0則退出\n");
        scanf("%d",&end);
    } while (end);
}


int main(int argc, const char * argv[]) {
    menu();
    return 0;
}
相關文章
相關標籤/搜索