1. 作业信息
这个作业属于哪个课程 | 软件工程 |
---|---|
这个作业要求在哪里 | 作业要求 |
学号 | 3180701307 |
2.题目
编写一个ATM管理系统,语言不限,要求应包括以下主要功能:
(1)开户,销户
(2)查询账户余额
(3)存款
(4)取款
(5)转账(一个账户转到另一个账户)等...
3. 代码提交与运行截图
3.1 源代码
(1)头文件
//使用链表完成系统,账户信息从文档中读取,并用链表存放
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
(2)结构体与全局变量
int j;
struct INFO
{
char name[10];
char c[11];
int surplus;
char id[10];
char mima[7];
};
(3)开户
void kaihu()
{
int i=0;
FILE *fp;
struct INFO stu[500];
printf("请输入姓名:\n");
scanf("%s",&stu[i].name);
printf("请输入身份证号(10位):\n");
scanf("%s",&stu[i].c);
printf("请输入银行卡号(9位):\n");
scanf("%s",&stu[i].id);
printf("请输入密码(6位):\n");
scanf("%s",&stu[i].mima);
printf("请输入开户金额:\n");
scanf("%d",&stu[i].surplus);
if((fp=fopen("银行信息.txt","a+"))==NULL)
{
printf("错误!\n");
}
else
{
fprintf(fp,"%s %s %s %d %s\n",stu[i].name,stu[i].c,stu[i].id,stu[i].surplus,stu[i].mima);
printf("成功!\n");
}
fclose(fp);
}
(4)销户
void xiaohu()
{
char a,b,c,d;
char xname[10];
char xc[11];
char xid[10];
char xmima[7];
int i=0,m;
FILE *fp,*ftp;
struct INFO stu[500];
if((fp=fopen("银行信息.txt","r+"))==NULL)
{
printf("错误!\n");
exit(1);
}
while(!feof(fp))
{
fscanf(fp,"%s %s %s %d %s",&stu[i].name,&stu[i].c,&stu[i].id,&stu[i].surplus,&stu[i].mima);
i++;
}
j=i-1;
m=j;
fclose(fp);
printf("请输入姓名:\n");
a=getchar();
gets(xname);
fp=fopen("银行信息.txt","w+");
for(i=0;i<j;i++)
{
if(strcmp(stu[i].name,xname)==0)
{
printf("请输入身份证号:\n");
gets(xc);
if(strcmp(stu[i].c,xc)==0)
{
printf("请输入需要销户的银行卡号:\n");
gets(xid);
if(strcmp(stu[i].id,xid)==0)
{
printf("请输入密码:\n");
gets(xmima);
if(strcmp(stu[i].mima,xmima)==0)
{
for(i;i<j;i++)
{
stu[i]=stu[i+1];
}
j=j-1;
printf("销户成功!\n");
}
}
}
}
}
if(m==j)
{
printf("没有找到该账户!\n");
}
for(i=0;i<j;i++)
{
fprintf(fp,"%s %s %s %d %s\n",stu[i].name,stu[i].c,stu[i].id,stu[i].surplus,stu[i].mima);
}
fclose(fp);
}
(5)查询账户余额
void chaxun()
{
char a;
char xc[11];
char xid[10];
char xmima[7];
int i=0,m;
FILE *fp,*ftp;
struct INFO stu[500];
if((fp=fopen("银行信息.txt","r+"))==NULL)
{
printf("错误!\n");
exit(1);
}
while(!feof(fp))
{
fscanf(fp,"%s %s %s %d %s",&stu[i].name,&stu[i].c,&stu[i].id,&stu[i].surplus,&stu[i].mima);
i++;
}
j=i-1;
m=j;
printf("请输入银行卡号:\n");
a=getchar();
gets(xid);
for(i=0;i<j;i++)
{
if(strcmp(stu[i].id,xid)==0)
{
printf("请输入身份证号:\n");
gets(xc);
if(strcmp(stu[i].c,xc)==0)
{
printf("请输入密码:\n");
gets(xmima);
if(strcmp(stu[i].mima,xmima)==0)
{
printf("当前账户余额为%d\n",stu[i].surplus);
}
}
}
}
fclose(fp);
}
(6)存款
void cunkuan()
{
char a;
char xc[11];
char xid[10];
char xmima[7];
int xsurp;
int i=0,m;
FILE *fp,*ftp;
struct INFO stu[500];
if((fp=fopen("银行信息.txt","r+"))==NULL)
{
printf("错误!\n");
exit(1);
}
while(!feof(fp))
{
fscanf(fp,"%s %s %s %d %s",&stu[i].name,&stu[i].c,&stu[i].id,&stu[i].surplus,&stu[i].mima);
i++;
}
j=i-1;
m=j;
fclose(fp);
fp=fopen("银行信息.txt","w+");
printf("请输入银行卡号:\n");
a=getchar();
gets(xid);
for(i=0;i<j;i++)
{
if(strcmp(stu[i].id,xid)==0)
{
printf("请输入身份证号:\n");
gets(xc);
if(strcmp(stu[i].c,xc)==0)
{
printf("请输入密码:\n");
gets(xmima);
if(strcmp(stu[i].mima,xmima)==0)
{
printf("当前账户余额为%d\n",stu[i].surplus);
printf("请输入存款金额:\n");
scanf("%d",&xsurp);
xsurp=stu[i].surplus+xsurp;
stu[i].surplus=xsurp;
printf("存款成功!当前账户余额为%d\n",stu[i].surplus);
}
}
}
}
for(i=0;i<j;i++)
{
fprintf(fp,"%s %s %s %d %s\n",stu[i].name,stu[i].c,stu[i].id,stu[i].surplus,stu[i].mima);
}
fclose(fp);
}
(7)取款
void qukuan()
{
char a;
char xc[11];
char xid[10];
char xmima[7];
int xsurp;
int i=0,m;
FILE *fp,*ftp;
struct INFO stu[500];
if((fp=fopen("银行信息.txt","r+"))==NULL)
{
printf("错误!\n");
exit(1);
}
while(!feof(fp))
{
fscanf(fp,"%s %s %s %d %s",&stu[i].name,&stu[i].c,&stu[i].id,&stu[i].surplus,&stu[i].mima);
i++;
}
j=i-1;
m=j;
fclose(fp);
fp=fopen("银行信息.txt","w+");
printf("请输入银行卡号:\n");
a=getchar();
gets(xid);
for(i=0;i<j;i++)
{
if(strcmp(stu[i].id,xid)==0)
{
printf("请输入身份证号:\n");
gets(xc);
if(strcmp(stu[i].c,xc)==0)
{
printf("请输入密码:\n");
gets(xmima);
if(strcmp(stu[i].mima,xmima)==0)
{
printf("当前账户余额为%d\n",stu[i].surplus);
printf("请输入取款金额:\n");
scanf("%d",&xsurp);
if(stu[i].surplus>=xsurp)
{
xsurp=stu[i].surplus-xsurp;
stu[i].surplus=xsurp;
printf("取款成功!当前账户余额为%d\n",stu[i].surplus);
}
else
{
printf("当前账户余额不足!\n");
}
}
}
}
}
for(i=0;i<j;i++)
{
fprintf(fp,"%s %s %s %d %s\n",stu[i].name,stu[i].c,stu[i].id,stu[i].surplus,stu[i].mima);
}
fclose(fp);
}
(8)转账
void zhuanzhang()
{
char a;
char xc[11];
char xid[10];
char xmima[7];
int xsurp,zsurp;
int i=0,m,k;
FILE *fp;
struct INFO stu[500];
if((fp=fopen("银行信息.txt","r+"))==NULL)
{
printf("错误!\n");
exit(1);
}
while(!feof(fp))
{
fscanf(fp,"%s %s %s %d %s",&stu[i].name,&stu[i].c,&stu[i].id,&stu[i].surplus,&stu[i].mima);
i++;
}
j=i-1;
m=j;
fclose(fp);
fp=fopen("银行信息.txt","w+");
printf("请输入银行卡号:\n");
a=getchar();
gets(xid);
for(i=0;i<j;i++)
{
if(strcmp(stu[i].id,xid)==0)
{
printf("请输入身份证号:\n");
gets(xc);
if(strcmp(stu[i].c,xc)==0)
{
printf("请输入密码:\n");
gets(xmima);
if(strcmp(stu[i].mima,xmima)==0)
{
printf("当前账户余额为%d\n",stu[i].surplus);
printf("请输入转账金额:\n");
scanf("%d",&xsurp);
zsurp=xsurp;
if(stu[i].surplus>=xsurp)
{
xsurp=stu[i].surplus-xsurp;
stu[i].surplus=xsurp;
printf("请输入对方银行卡号:\n");
a=getchar();
gets(xid);
for(k=0;k<j;k++)
{
if(strcmp(stu[k].id,xid)==0)
{
zsurp=stu[k].surplus+zsurp;
stu[k].surplus=zsurp;
}
}
printf("转账成功!当前账户余额为%d\n",stu[i].surplus);
break;
}
else
{
printf("当前账户余额不足!转账失败!\n");
break;
}
}
}
}
}
for(i=0;i<j;i++)
{
fprintf(fp,"%s %s %s %d %s\n",stu[i].name,stu[i].c,stu[i].id,stu[i].surplus,stu[i].mima);
}
fclose(fp);
}
(9)界面
void main()
{
while(1)
{
int a;
//读文件
printf("**********ATM取款机**********\n");
printf("1.开户\n");
printf("2.销户\n");
printf("3.查询账户余额\n");
printf("4.存款\n");
printf("5.取款\n");
printf("6.转账\n");
printf("请选择操作:");
scanf("%d",&a);
switch(a)
{
case 1:
kaihu();
break;
case 2:
xiaohu();
break;
case 3:
chaxun();
break;
case 4:
cunkuan();
break;
case 5:
qukuan();
break;
case 6:
zhuanzhang();
break;
default:
break;
}
}
}
3.2运行代码截图
(1)开户
(2)销户
(3)查询账户余额
(4)存款
(5)取款
(6)转账
4. 个人小结
遇到的困难:读写文件时出现乱码,还有输入字符串时末尾字符问题导致无法识别,文件读取feof()时计数多计一行。
解决:计数全局变量减1,输入字符串之前进行getchar()防止字符串第一个字符被覆盖。至于读写的问题原因应该在于文件操作有误。
(psp表格)
psp2.1 | 任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 315 | 470 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 15 | 30 |
Development | 开发 | 10 | 20 |
Analysis | 需求分析(包括学习新技术) | 30 | 50 |
Design Spec | 生成设计文档 | 20 | 20 |
Design Review | 设计复审 | 10 | 15 |
Coding Standard | 代码规范 | 10 | 10 |
Design | 具体设计 | 30 | 60 |
Coding | 具体编码 | 60 | 120 |
Code Review | 代码复审 | 30 | 60 |
Test | 测试(自我测试,修改代码,提交修改) | 40 | 60 |
Reporting | 报告 | 10 | 20 |
Test Report | 测试报告 | 10 | 15 |
Size Measurement | 计算工作量 | 20 | 20 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 20 | 30 |