这个作业属于哪个课程 | 计算机18级 |
---|---|
这个作业要求在哪里 | 作业要求 |
这个作业的目标 | 实现ATM管理系统 |
学号 | 3180701208 |
一.题目要求
编写一个ATM管理系统,语言不限,要求应包括以下主要功能:
(1)开户,销户
(2)查询账户余额
(3)存款
(4)取款
(5)转账(一个账户转到另一个账户)等...
二.代码提交
1.结构体的创建
1 struct User
2 {
3 char name[50]; //账号
4 double money; //金额
5 int flag; //账号能否正常使用
6 char key[50]; //密码
7 } user[100];
2.开户
1 void KaiHu() // 开户
2 {
3 printf("开户中.....\n");
4 Sleep(1000);
5 int id = UserNumber + 1;
6 while (1)
7 {
8
9 for (int i = 0; i < 11; i++)
10 {
11 user[id].name[i] = rand()%9+1+'0';
12 }
13 user[id].name[11] = '\0';
14 int flag = 0;
15 for (int i = 1; i <= UserNumber; i++)
16 {
17 if (strcmp(user[id].name, user[i].name) == 0)
18 {
19 flag = i;
20 break;
21 }
22 }
23 if (!flag)break;
24 }
25 printf("开户成功,账户为:%s\n", user[id].name);
26 while (1)
27 {
28 user[id].d = 2;
29 user[id].flag = 1;
30 user[id].money = 0.01;
31 strcpy(user[id].key,"111111");
32 char ss[50], cc[50];
33 while (1)
34 {
35 printf("请输入账户密码:");
36 strcpy(ss, get_password());
37 if (strlen(ss) != 6)
38 {
39 printf("密码必须6位,请重新输入密码\n");
40 memset(ss, '\0', sizeof(char) * 50);
41 }
42 else
43 {
44 printf("请再次输入账户密码:");
45 strcpy(cc, get_password());
46 if (strcmp(ss, cc) != 0)
47 {
48 printf("两次密码不一致\n请重新输入密码\n");
49 memset(ss, 0, sizeof(ss));
50 memset(cc, 0, sizeof(cc));
51 }
52 else
53 {
54 strcmp(user[id].key, ss);
55 UserNumber++;
56 ChuCun();
57 printf("密码设置成功\n,开户成功\n按任意键返回\n");
58 getchar();
59 getchar();
60 return;
61 }
62 }
63 }
64 }
65}
3.登录
1 int login() //登陆
2 {
3
4 char a[50];
5 char b[50];
6 int count = 0, i, flag = 0;
7 while (1)
8 {
9 printf("\t请输入您的用户名:");
10 scanf("%s", a);
11 printf("\t请输入您的密码 :");
12 strcpy(b, get_password());
13
14 int fff = 0;
15 for (int i = 1; i <= UserNumber; i++)
16 {
17 if (strcmp(a, user[i].name) == 0 && strcmp(b, user[i].key) == 0)
18 {
19 fff = 1;
20 userID = i;
21 }
22 }
23
24
25 if (!fff)
26 printf("\t用户名或者密码输入错误!请重新输入!\n");
37 else
38 {
39 printf("\t\t\t正在登陆 请稍后\n");
40 printf("\t\t\t");
41 for (i = 0; i < 8; i++)
42 {
43 printf("■");
44 Sleep(100); //让系统在此处停留500毫秒之后在运行。
45 }
46 printf("\n");
47 break;
48 }
49 count++;
50 if (count == 3)
51 {
52 printf("\t\t您输入错误已超过三次,系统已退出!\n");
53 system("color 4a");
54 flag = 1;
55 break;
56 }
57 }
58 return flag;
59 }
4.存款
1 void savemoney()//存款
2 {
3 int a, i;
4 char c;
5 while (1)
6 {
7 printf("\t请输入您的存款金额:");
8 scanf("%d", &a);
9 if (a < 0 || a % 100 != 0)
10 printf("\t输入有误,请重新输入!\n");
11 else
12 break;
13 }
14 getchar();
15 user[userID].money += a;
16 printf("\t存款成功\n");
17 getchar();
18}
5.取款
1 void drawmoney()//取款
2 {
3 int a, i;
4 char c;
5 while (1)
6 {
7 printf("\t请输入您的取款金额:");
8 scanf("%d", &a);
9 if (a > user[userID].money)
10 printf("\t账户余额不足,请重新输入!\n");
11 else if (a < 0 || a % 100 != 0)
12 printf("\t输入有误,请重新输入!\n");
13 else
14 break;
15 }
16 getchar();
17 user[userID].money -= a;
18 printf("\t取款成功,请收好您的钞票!\n");
19 }
6.查询余额
1 void showmoney()//查询余额
2 {
3 printf("\t用户名 :%s\n", user[userID].name);
4 printf("\t账户余额:%.2lf\n", user[userID].money);
5 printf("\t请按Enter键返回\n");
6 getchar();
7 }
7.转账
1 void transfer() // 转账
2 {
3
4 char a[50];
5 while (1)
6 {
7
8 printf("请输入转账人账户:");
9 scanf("%s", a);
10 int flag = 0;
11 for (int i = 1; i <= UserNumber; i++)
12 {
13
14 if (strcmp(a, user[i].name) == 0)
15 {
16 flag = i;
17 break;
18 }
19 }
20
21 if (flag == 0)
22 {
23 printf("收款人未在此银行或不存在,转账失败\n");
24 while (1)
25 {
26
27 printf("1.重新输入账号\n2.退出\n请输入编号:");
28 int b=0;
29 scanf("%d", &b);
30 if (b == 2)
31 return;
32 else if (b == 1)
33 break;
34 else
35 printf("编号错误\n");
36 }
37 }
38 else
69 {
70 printf("请输入转账金额:");
71 double s=0;
72 //scanf("%lf",&s);
73 int x = 0;
74 while (1)
75 {
76 if (x){
77 printf("余额不足,是否重新输入转账金额y/n(n将返回菜单)");
78 char ff[5];
79 scanf("%s",ff);
80 if(ff[0]=='n' || ff[0]=='N')
81 return ;
82 else printf("重新输入转账金额\n");
83 }
84
85 x = 0;
86 scanf("%lf", &s);
87 if (user[userID].money - 2.50 < s)
88 x = 1;
89 if (!x)
90 {
91 printf("转账金额为:%.2f\n是否确认转账y/n (n将返回菜单)", s);
92 char f[5];
93 scanf("%s", f);
94 if (f[0] == 'n' || f[0] == 'N')
95 return;
96 user[flag].money += s;
97 user[userID].money -= s;
98 ChuCun();
99 printf("转账成功\n");
100 Sleep(800);
101 return;
102 }
103 }
104 }
105 }
106 }
8.主菜单
1void Menu()
2{
3 int d;
4 printf("----欢迎使用ATM管理系统-----\n");
5 printf("1.注册\n");
6 printf("2.登录\n");
7 printf("3.取款\n");
8 printf("4.存款\n");
9 printf("5.查询余额\n");
10 printf("6.转账\n");
11 printf("7.销户\n");
12 printf("8.退出系统\n\n");
13 printf("请输入你的选择:");
14 scanf("%d",&d);
15
16}
三、运行截图
主菜单
开户
登录
存款
取款
查询余额
转账
销户
四、实验小结
psp2.1 | 任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 10 | 8 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 10 | 12 |
Development | 开发 | 120 | 160 |
Analysis | 需求分析(包括学习新技术) | 12 | 6 |
Design Spec | 生成设计文档 | 10 | 10 |
Design Review | 设计复审 | 5 | 5 |
Coding Standard | 代码规范 | 3 | 10 |
Design | 具体设计 | 10 | 20 |
Coding | 具体编码 | 36 | 30 |
Code Review | 代码复审 | 10 | 10 |
Test | 测试(自我测试,修改代码,提交修改) | 20 | 20 |
Reporting | 报告 | 10 | 3 |
Test Report | 测试报告 | 5 | 3 |
Size Measurement | 计算工作量 | 5 | 3 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 5 | 4 |