Loading

软件工程第四次作业——ATM管理系统

名称 内容
课程班级 班级链接
作业要求 作业链接
本人学号 3180405308

题目要求

编写一个ATM管理系统,语言不限,要求应包括以下主要功能:
(1)开户,销户
(2)查询账户余额
(3)存款
(4)取款
(5)转账(一个账户转到另一个账户)等...

代码分析

结构体

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;
}
posted @ 2020-11-15 22:28  明天起重新做人  阅读(223)  评论(0编辑  收藏  举报