ATM管理系统

博客班级 软件工程
作业要求 作业要求
作业目标 根据ATM机的功能设计代码,并完成ATM系统代码的创建
学号 3180701221

题目要求:

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

代码提交

头文件

#include <stdio.h> 
#include <conio.h>
#include <windows.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>

结构体

struct bank {
    char name[20];
    int num;
    char pswd[100];
    int money;
};

struct bank person[1000];

开户、销户

开户
void kaihu() {
    system("cls");
    printf("\n\n\n\n\n\n\n");
    printf("\t\t\t  请输入用户姓名:");
    scanf("%s", person[k].name);
    setpswd(person[k].pswd);
    while (1) {
        printf("\t\t\t  请输入初始金额(不少于一元!):");
        scanf("%d", &jine);
        fflush(stdin);
        if (jine >= 1)break;
        else printf("\t\t\t  金额不足,请重新输入!\n");
    }
    person[k].money += jine;
    // printf("\t\t\t  %s\n",person[k].pswd);
    // scanf("%d",&person[k].pswd);
    srand(time(0));                               //使每次产生的随机数不同
    int m = rand();
    person[k].num = m % 10000 + 1000000000;
    printf("\t\t\t  您的账号为:%d\n", person[k].num);     // 随机产生账号
    printf("\t\t\t  开户成功,请牢记您的账户信息:\n ");
    printf("\t\t\t  姓名%s  卡号%d  余额%d\n", person[k].name, person[k].num, person[k].money);
    printf("\t\t\t  请按任意键返回!");
    k++;
    getch();
    system("cls");
}
销户
void xiaohu() {
    int m, i, j, pswd[10], x = 0, z;
    system("cls");
    printf("\n\n\n\n\n\n\n");
    while (1) {
        printf("\t\t\t  请输入注销用户账号:");
        scanf("%d", &m);
        for (i = 0; i < k; i++) {
            if (m == person[i].num)
                break;
        }
        if (i == k) {
            printf("\t\t\t未检测到此用户");
            system("pause");
            continue;
        }
        printf("\t\t\t请问是要注销用户名为%s的账户么?\n", person[i].name);
        printf("\t\t\t[1]YES\t\t\t[2]NO");
        scanf("%d", &j);
        if (j == 2) {
            getch();
            system("cls");
            break;
        }
        else {
            for (z = 3; z > 0; z--) {
                printf("\t\t\t请输入用户账户密码:");
                //输入密码的
                x = 0;
                while (1) {
                    pswd[x] = getch();
                    if (pswd[x] != '\r') {
                        printf("*");
                        ++x;
                    }
                    else break;
                }
                //检测密码的
                for (j = 0; j < 6; j++) {
                    if (pswd[j] != person[i].pswd[j]) {
                        printf("密码输入错误,请重新输入");
                        break;
                    }   
                } 
                if (j != 6)
                    continue;
                person[i].num = 0;
                    person[i].money = 0;
                    person[i].pswd[100] = 0;
                    person[i].name[20] = 0;
                    printf("账号注销成功");
                    getch();
                    system("cls");
                    break;

            }
            printf("密码错误次数超限,请退出重新操作");
            getch();
            system("cls");
        }
    }
}

存款

void cunkuan() {
    system("cls");
    printf("\n\n\n\n\n\n\n");
    int y = putnum(); fflush(stdin);
    putpswd();
    printf("\t\t\t  请输入存款金额:");
    scanf("%d", &jine);
    person[i].money += jine;
    printf("\t\t\t  您的余额为:");
    printf("%d\n", person[i].money);
    printf("\t\t\t  存款成功按任意键返回!");
    getch();
    system("cls");

}

取款

void qukuan() {
    system("cls");
    printf("\n\n\n\n\n\n\n");
    int y = putnum();
    while (1) {
        printf("\t\t\t  请输入您的取款金额");
        scanf("%d", &jine);
        if (jine > person[i].money)
            printf("\t\t\t  您的余额不足,请重新输入!\n");
        else break;
    }
    person[i].money -= jine;
    printf("\t\t\t  您的余额为:");
    printf("%d\n", person[i].money);
    printf("\t\t\t  取款成功按任意键返回!");
    getch();
    system("cls");
}

查询账号信息

void chaxun() {
    system("cls");
    printf("\n\n\n\n\n\n\n");
    int y = putnum();
    putpswd();
    printf("\t\t\t  您的余额为:");
    printf("%d\n", person[i].money);
    printf("\t\t\t  查询成功按任意键返回!");
    getch();
    system("cls");
}

转账

int zhuanzhang() {
    system("cls");
    printf("\n\n\n\n\n\n\n");
    int num1, c;
    putnum();
    putpswd();
    printf("\t\t\t  请输入对方卡号:");
    scanf("%d", &num1);
    for (j = 0; j < 1000; j++) {
        if (person[j].num == num1)
            break;
        if (person[j].num == 0) {
            j = 0;
            printf("\t\t\t  您输入的卡号不存在,请重新输入!\n");
            printf("\t\t\t  请输入对方卡号:");
            scanf("%d", &num1);
        }
    }
    if (num != num1) {
        while (1) {
            printf("\t\t\t  请输入您的转账金额");
            scanf("%d", &jine);
            if (jine > person[i].money)
                printf("\t\t\t  您的余额不足,请重新输入!\n");
            else break;
        }
    }
    else {
        printf("\t\t\t  不能给自己转账,请按任意键返回!");
        getch();
        system("cls");
        return 0;
    }
    printf("\t\t\t  请确认您的转入用户及转账金额:\n");
    printf("\t\t\t  姓名%s  卡号%d  金额%d", person[j].name, person[j].num, jine);
    printf("\n\t\t\t  确认转账请按Y/y,返回请按N/n");
    while (1) {
        c = getch();
        if (c == 'N' || c == 'n') {
            system("cls");
            break;
        }
        if (c == 'Y' || c == 'y') {
            person[i].money -= jine;
            person[j].money += jine;
            printf("\n\t\t\t  转账成功,是否显示您的余额(按Y/y显示余额,按任意键返回)");
            c = getch();
            if (c == 'Y' || c == 'y') {
                printf("\t\t\t  您的余额为:%d", person[i].money);
                printf("\n\t\t\t  交易完成 按任意键返回!");
                getch();
                system("cls"); break;
            }
            else system("cls"); break;
        }
        else printf("\n\t\t\t  输入有误,请重新输入:");
    }
}

主菜单

void menu()
{
    int i;
    while (1)
    {
        printf("\t\t************************************************\n");
        printf("\t\t*                                              *\n");
        printf("\t\t*                欢迎进入中国银行              *\n");
        printf("\t\t*                                              *\n");
        printf("\t\t************************************************\n");
        printf("\t\t[1].开户------------------------------[2].存款\n\n");     
        printf("\t\t[3].查询------------------------------[4].取款\n\n");
        printf("\t\t[5].转账------------------------------[6].销户\n\n");
        printf("\t\t[7].退出------------------------------\n\n");
        printf("\t\t          请输入您要办理的业务的编号:");
        scanf("%d", &i);
        if (1 <= i && i <= 7) {
            switch (i)
            {
            case 1:kaihu(); break;
            case 2:cunkuan(); break;
            case 3:chaxun(); break;
            case 4:qukuan(); break;
            case 5:zhuanzhang(); break;
            case 6:xiaohu(); break;
            case 7:exit(0); break;
            }break;
        }
        else {
            printf("\t\t\t  您输入的编号有误,请重新输入!\n");
            Sleep(1000);
            fflush(stdin);
            system("cls");
        }
    }
    menu();
}

主函数

int main(void)
{
    int j;
    printf("\n\n\n\n\n\n\n\n\n\n");
    printf("\t\t\t    %c ", 1);
    printf("欢迎登录中国银行!\n\n\n\n\n\n\n\n\n\n\n\n\n");
    printf("正在进入,请等候...\n");
    printf("===============================================================================\r");
    for (j = 0; j < 80; j++) {
        Sleep(100);
        printf(">");
    }
    system("cls");
    menu();
    return 0;
}

程序运行界面

主菜单

创建账户

存款界面

转账界面

注销账户

三.个人小结

psp2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 20 15
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 200 240
Development 开发 10 30
Analysis 需求分析(包括学习新技术) 10 10
Design Spec 生成设计文档 10 20
Design Review 设计复审 10 20
Coding Standard 代码规范 10 10
Design 具体设计 20 30
Coding 具体编码 30 20
Code Review 代码复审 20 30
Test 测试(自我测试,修改代码,提交修改) 20 30
Reporting 报告 10 20
Test Report 测试报告 10 15
Size Measurement 计算工作量 20 20
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 5 10

个人总结

本次ATM系统代码,让我回顾了c语言程序设计结构体相关的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的经验不足,在代码的编写方面也开始出现了生疏。实践出真知,通过亲自动手制作,让我们再次。

posted @ 2020-11-18 13:14  李雷和韩梅梅  阅读(158)  评论(0编辑  收藏  举报