个人作业三-ATM管理系统

所在班级 AHPU-软件工程导论
作业要求 个人作业三-ATM管理系统
作业目标 实现ATM管理系统
学号 3180701202
一.题目要求
编写一个ATM管理系统,语言不限,要求应包括以下主要功能:

(1)开户,销户

(2)查询账户余额

(3)存款

(4)取款

(5)转账(一个账户转到另一个账户)等...

二.代码提交
1.开户
void BuildUser()
{
printf("\n\t\t\t开始录入用户:\n");
USERDATA userdata;
int i=0;FILE fp; //判断是否继续录入,如果继续按1,否则按2
char ch;
if((fp=fopen("iddata.txt","a+"))NULL)
{
printf("Failure to open admin.txt!\n");
exit(0);
}
do{
system("cls");
printf("\n\t\t\t请输入你的卡号:");
gets(userdata.UserID);
printf("\n\t\t\t请输入用户密码:");
gets(userdata.UserPassword);
fprintf(fp,"%-10s%-10s%-10s%-10.2f\n",userdata.Name,userdata.UserID,userdata.UserPassword,userdata.money); //见录入数据保存到文件中
system("cls");
printf("\n\t\t\t录入成功。\n\t\t\t继续录入请按 1 \n\t\t\t结束录入并推出登陆请按 2\n");
printf("\t\t\t----");
scanf("%d",&i);
ch=getchar();
}while(i
1);
fclose(fp);
if(i2) main();
}
2.登录
void denglu(struct per *head)
{
char d[20];
char mima[20];
int i,j;
FILE *fp; //定义文件指针
struct per p,q=NULL;
if((fp=fopen("save.txt","rb+"))
NULL) //打开一个二进制文件,为读方式
{
printf("不能打开文件\n"); //如不能打开,则结束程序
}
p=(struct per
)malloc(sizeof(struct per)); //申请空间
head=p;
while(!feof(fp)) //循环读数据直到文件尾结束
{
if(1!=fread(p,sizeof(struct per),1,fp))
break; //如果没读到数据,跳出循环
p->next=(struct per *)malloc(sizeof(struct per)); //为下一个结点申请空间
q=p; //保存当前节点的指针,作为下一结点的前驱
p=p->next; //指针后移,新读入数据链到当前表尾
}
q->next=NULL; //最后一个结点的后继指针为空
fclose(fp);
printf(" **********************\n");
printf(" 欢迎来都建设银行\n");
printf(" **********************\n");
for(j=1;j<4;j++) //限制卡号输入的次数的循环
{
printf("请输入您的卡号\n");
scanf("%s",d);
for(q=head;q!=NULL;q=q->next) //遍历链表
{
if(strcmp(q->ID,d)!=0) //核对账号
{
continue; //跳出循环
}
else
{
for(i=1;i<4;i++) //限制密码输入的次数的循环
{
printf("\n\n请输入您的密码\n");
scanf("%s",mima);
if(strcmp(q->mima,mima)!=0) //核对密码
{
printf("密码不正确。请重新输入密码\n");
system("pause");
system("cls");
continue; //若密码不对,跳出循环
}
else
{
system("cls");
caidan(head); //调用菜单函数
}
}
printf("\n\n\n您输入密码三次错误,谢谢光临\n");
system("pause");
system("cls");
exit(0);
}
}
printf("\n\n\n您输入的卡号有误,请重试\n");
system("pause");
system("cls");
}
printf("您的卡号三次输入错误,谢谢使用\n");
exit(0);
}
3.查询余额
void chaxun(struct per *head)
{
head=NULL; //链表头指针
FILE fp; //定义文件指针
struct per p,q=NULL;
if((fp=fopen("save.txt","rb+"))==NULL) //打开一个二进制文件,为读方式
{
printf("不能打开文件\n"); //如不能打开,则结束程序
}
p=(struct per
)malloc(sizeof(struct per)); //申请空间
head=p;
while(!feof(fp)) //循环读数据直到文件尾结束
{
if(1!=fread(p,sizeof(struct per),1,fp))
break; //如果没读到数据,跳出循环
p->next=(struct per *)malloc(sizeof(struct per)); //为下一个结点申请空间
q=p; //保存当前结点的指针,作为下一个结点的前驱
p=p->next; //指针后移,新读入数据链到当前表尾
}
q->next=NULL; //最后一个结点的后继指针为空
fclose(fp);
printf("您卡上原有余额%d元\n\n",q->money);
system("pause");
system("cls");
}
4.存款
void savemoney()
{
FILE *fp;
int a,i;
char c;
printf("\t请输入您的存款数额:");
scanf("%d",&a);
getchar();
user.money+=a;
if((fp=fopen("data/client.dat","wb"))!=NULL)
{
fwrite(&user, sizeof(client), 1 ,fp);
fclose(fp);
}
printf("\t存款成功\n");
printf("\t请按Enter键退出\n");
getchar();

}
5.取款
void drawmoney()
{
FILE *fp;
int a,i;
char c;
while(1){
printf("\t请输入您的取款金额:");
scanf("%d",&a);
if(a>user.money)
printf("\t账户余额不足,请重新输入!\n");
else if(a<0)
printf("\t输入有误,请重新输入!\n");
else
break;
}
getchar();
user.money-=a;
if((fp=fopen("data/client.dat","wb"))!=NULL)
{
fwrite(&user, sizeof(client), 1 ,fp);
fclose(fp);
}
printf("\t取款成功,请收好您的钞票!\n");
printf("\t请按Enter键退出\n");
getchar();

}
6.转账
void zhuanzhang(struct per head)
{
head=NULL;
FILE fp; //定义文件指针
struct per p,q=NULL;
if((fp=fopen("save.txt","rb+"))==NULL) //打开一个二进制文件,为读方式
{
printf("不能打开文件\n"); //如不能打开,则结束程序
}
p=(struct per
)malloc(sizeof(struct per)); //申请空间
head=p;
while(!feof(fp)) //循环读数据直到文件尾结束
{
if(1!=fread(p,sizeof(struct per),1,fp))
break; //如果没读到数据,跳出循环
p->next=(struct per )malloc(sizeof(struct per)); //为下一个结点申请空间
q=p; //保存当前结点的指针,作为下一个结点的前驱
p=p->next; //指针后移,新读入数据链到当前表尾
}
q->next=NULL; //最后一个结点的后继指针为空
fclose(fp);
int i,j,k;
printf("请输入帐号号码\n");
scanf("%d",&i);
printf("请再次输入帐号号码\n"); //核对卡号
scanf("%d",&j);
if(i!=j)
{
printf("两次账号不同,请重新输入\n");
zhuanzhang(head);
}
else
{
system("cls");
printf("
\n");
printf("
1: 100元 ***** 2:200元 \n");
printf("
\n");
printf("
3: 300元 ***** 4:400元 \n");
printf("
\n");
printf("
5: 500元 ***** 6:600元 \n");
printf("
*\n");
printf("请输入转账金额\n");
scanf("%d",&k);
if(k>6||k<=0)
{
printf("对不起,您的输入有误\n\n");
return;
}
else
{
k=k
100;
if(k>q->money) //对余额进行判断
{
printf("对不起,您的余额不足\n");
system("pause");
system("cls");
caidan(head);
}
else
{
printf("您已成功转账%d元\n",k);
q->money-=k;
if((fp=fopen("save.txt","wb+"))NULL)
{
printf("cannot open file\n");
return;
}
if(fwrite(q,sizeof(per),1,fp)!=1) //将数据重新写入文件
printf("file write error\n");
q->next=NULL;
fclose(fp);
system("pause");
system("cls");
}
}
}
}
7.销户
void logout()
{
char confirm;//confirm 确认
printf("您正在使用注销功能\n");
printf("%d确认注销?\n",user[find].account);
printf("Y表示确定,其它字符表示取消\n");
scanf("%c",&confirm);
if(confirm
'y'||confirm=='Y')
{
printf("正在注销%d\n",user[find].account);
isLogout=1;
}else
{
printf("取消注销帐号%d,返回服务界面\n",user[find].account);
isLogout=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管理系统简单的实现了我们日常生活中需要的开户、存款、取款等功能。还有许多不足需要完善。

posted @ 2020-11-18 22:51  得起a  阅读(144)  评论(0编辑  收藏  举报