atm
| 博客班级 | 班级链接 |
|---|---|
| 作业要求 | 作业链接 |
| 作业目标 | 编写一个ATM管理系统 |
| 学号 | 3180701109 |
一、题目要求
编写一个ATM管理系统,语言不限,要求应包括以下主要功能:
(1)开户,销户
(2)查询账户余额
(3)存款
(4)取款
(5)转账(一个账户转到另一个账户)等...
二、代码部分
头文件
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
函数声明
int mingyan(); //用户名验证
int guayan(int); //挂失验证
int miyan(int); //密码函数
float T=0; 定义全局变量T,记录用户一天取款数的总和
void Debit(); //取款函数
void Credit(); //存款函数
void Quary(); //查询函数
void logout(); //销户函数
void Openbit(); //开户函数
void account(); //转账函数
void lose(); //挂失函数
void tuichu(); //退出函数
void chaall(); //查询所有用户信息
定义变量
char gUser[100][30]; //用户名
char gMima[100][30]; //密码
char Ggua[100][30]; //挂失用户名
float YuE[100]; //存款余额
int UserShu=0; //用户数
int guashu=0; //挂失用户数
主函数
void main()
{
int order; //命令
while(order)
{
printf(" ================================================================ \n");
printf("|| 欢迎使用模拟ATM自助存取款 ||\n");
printf("|| ||\n");
printf("|| <1> 开户 <4> 取款 <8> 挂失 ||\n");
printf("|| <2> 存款 <5> 销户 ||\n");
printf("|| <3> 查询 <6> 转账 <0> 退出 ||\n");
printf("|| <7> 查询所有用户信息 ||\n");
printf("|| ||\n");
printf(" ================================================================ \n");
printf("请输入您的指令: ");
scanf("%d",&order);
printf("\n");
switch(order)
{
case 1: //开户
Openbit();
break;
case 2: //存款
Credit();
break;
case 3: //查询
Quary();
break;
case 4: //取款
Debit();
break;
case 5: //销户
logout();
break;
case 6: //转账
account();
break;
case 7: //查询所有用户信息
chaall();
break;
case 8: //挂失
lose();
break;
case 0:
printf("欢迎您再次使用!\n");
exit(0);
break;
}
}
}
取款函数
void Debit() //取款
{
int i,m;
float n;
i=mingyan();
m=guayan(i);
if(m==1)
m=miyan(i);
while(m==1)
{
printf("请输入您的取款金额: ");
scanf("%f",&n);
if(n>2000)
{
printf("每笔取款不得超过2000\n");
Debit();
break;
}
T=n+T;
if(T>20000)
{
printf("每天取款总数不能超过20000,请您改天再进行取款");
break;
}
if(n<=YuE[i])
{
printf("请取走您的钞票。\n");
YuE[i]=YuE[i]-n;
break;
}
else
printf("您的余额不足,请重新输入。\n");
}
}
存款函数
void Credit() //存款
{
int i,m;
float n;
i=mingyan();
m=guayan(i);
if(m==1)
m=miyan(i);
while(m==1)
{
printf("请输入您的存款金额: ");
scanf("%f",&n);
YuE[i]=YuE[i]+n;
printf("存款成功!");
printf("您的当前余额为: %.2f\n",YuE[i]);
m=0;
}
m=1;
main();
}
查询函数
void Quary() //查询
{
int i,m;
i=mingyan();
m=guayan(i);
if(m==1)
m=miyan(i);
}
开户函数
void Openbit() //开户
{
int i,n=UserShu,j=0;
float m;
char User[32],mima1[32],mima2[32];
printf("请输入您的用户名: ");
getchar();
scanf("%s",User);
for(i=0;i<n+1;i++)
{
if(strcmp(User,gUser[i])==0)
{
printf("该用户名已存在\n");
break;
}
else
{
strcpy(gUser[UserShu],User);
while(j!=1)
{
printf("请输入您的密码: ");
scanf("%s",mima1);
printf("请再次输入您的密码: ");
scanf("%s",mima2);
if(strcmp(mima1,mima2)==0)
{
printf("密码设置成功\n");
printf("请输入您的存款金额: ");
scanf("%f",&m);
printf("恭喜您,开户成功\n");
strcpy(gMima[UserShu],mima1);
YuE[UserShu]=m;
j=1;
}
else
printf("两次输入不相同,请重新输入。\n ");
}
UserShu++;
break;
}
}
}
销户函数
void logout() //销户
{
int i,n,m;
i=mingyan();
m=guayan(i);
if(m==1)
m=miyan(i);
while(m==1)
{
printf("您确定要注销您的账户?\n <1>确认 <2>取消 \n");
scanf("%d",&n);
if(n==1)
{
for(;i<UserShu;i++)
{
strcpy(gUser[i],gUser[i+1]);
strcpy(gMima[i],gMima[i+1]);
YuE[i]=YuE[i+1];
}
}
UserShu--;
printf("销户成功!\n");
m=0;
}
}
转账函数
void account() //转账
{
int i,n,j,s=1;
float k;
char User[32];
i=mingyan();
n=guayan(i);
if(n==1)
n=miyan(i);
while(n==1)
{
printf("请输入目标账户:");
scanf("%s",User);
for(j=0;j<UserShu;j++)
{
if(strcmp(gUser[j],User)==0)
{
n=2;
break;
}
}
if(j==UserShu)
printf("目标账户不存在,请重新输入。\n");
}
while(n==2)
{
printf("请输入转账金额:");
scanf("%f",&k);
if(k<=YuE[i])
{
YuE[i]=YuE[i]-k;
YuE[j]=YuE[j]+k;
printf("转账成功!\n您的当前余额为: %.2f\n",YuE[i]);
break;
}
else
printf("余额不足,请重新输入。\n");
}
}
挂失函数
void lose() //挂失
{
int n,i,m;
i=mingyan();
m=guayan(i);
if(m==1)
m=miyan(i);
if(m==1)
{
printf("您确定要挂失您的账户?\n <1>确认 <2>取消 \n");
scanf("%d",&n);
if(n==1)
{
strcpy(Ggua[guashu],gUser[i]);
guashu++;
printf("%s 账户挂失成功!\n",gUser[i]);
}
}
}
剩余实现功能函数
void tuichu()
{
}
void chaall() //查询所有用户信息
{
int i;
for(i=0;i<UserShu;i++)
printf("用户名:%15s 余额:%.2f\n",gUser[i],YuE[i]);
}
int mingyan() //用户名验证
{
int m=1,i;
char User[32];
while(m==1)
{
printf("请输入您的用户名: ");
scanf("%s",User);
for(i=0;i<UserShu;i++)
if(strcmp(gUser[i],User)==0)
{
m=0;
break;
}
if(i==UserShu)
printf("该用户不存在,请确认后再输入。 \n");
}
return i;
}
int guayan(int i) //挂失验证
{
int j,n;
for(j=0;j<guashu;j++)
{
if(strcmp(gUser[i],Ggua[j])==0)
{
printf("此用户已经挂失,请解挂后再进行操作!\n");
n=0;
break;
}
}
if(j==guashu)
n=1;
return n;
}
int miyan(int i) //密码验证
{
char mima[32];
while(1)
{
printf("请输入您的密码: ");
scanf("%s",mima);
if(strcmp(gMima[i],mima)==0)
{
printf("登陆成功!\n");
printf("用户名:%s 余额: %.2f \n",gUser[i],YuE[i]);
break;
}
else
printf("您输入的密码不正确,请重新输入。\n");
}
return 1;
}
运行截图



三.个人小结
1)在软件开发中,掌握时间是一个很重要的技能,请通过psp表格做到:
a.理清开发的完整环节,争取在每个环节都有实际的工作,一开始边界不清楚是正常的,但请尝试按照自己的理解努力对应每个环节的实际工作
b.预估每个环节的时间,并真实统计这些环节的耗时,在完成后填写完整的psp耗时表
c.这些表格是给自己看的,请不要伪造数据
d.psp表格模板如下,表格里的时间只是示意
| psp | 任务内容 | 计划需要完成的时间(min | 实际完成需要的时间(min) |
|---|---|---|---|
| Planning | 计划 | 120 | 160 |
| Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 150 | 210 |
| Development | 开发 | 20 | 10 |
| Analysis | 需求分析(包括学习新技术) | 20 | 30 |
| Design Spec | 生成设计文档 | 40 | 30 |
| Design Review | 设计复审 | 5 | 15 |
| Coding Standard | 代码规范 | 20 | 10 |
| Design | 具体设计 | 20 | 10 |
| Coding | 具体编码 | 100 | 120 |
| Code Review | 代码复审 | 10 | 15 |
| Test | 测试(自我测试,修改代码,提交修改) | 10 | 20 |
| Reporting | 报告 | 10 | 10 |
| Test Report | 测试报告 | 5 | 15 |
| Size Measurement | 计算工作量 | 5 | 10 |
| Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 20 | 20 |

浙公网安备 33010602011771号