博客班级 | AHPU软件工程 |
---|---|
作业要求 | ATM管理系统 |
作业目标 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11478 |
学号 | 3180701131 |
一.题目要求 |
作业目标
编写一个ATM管理系统,语言不限,要求应包括以下主要功能:
(1)开户,销户
(2)查询账户余额
(3)存款
(4)取款
(5)转账(一个账户转到另一个账户)等...
二. 代码
界面
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
FILE *fp1;
struct users
{
int num;
char code[20];
float money;
int flag; //该账户是否存在,存在为true
}x[200];
void openaccount();
void cancleaccount();
void getmoney();
void savemoney();
void inquire();
void transfer();
//主函数,功能页面
void main()
{
printf("welcome!\n");
printf("\n");
int t;
do
{
printf("*********************ATM管理系统*******************\n");
printf("\n");
printf(" 1.开户 \n");
printf(" 2.销户 \n");
printf(" 3.查询账户余额 \n");
printf(" 4.存款 \n");
printf(" 5.取款 \n");
printf(" 6.转账 \n");
printf(" 0.退出系统 \n");
printf("\n");
printf("******************Designed by 吴山茶******************\n");
printf("\n");
printf("请选择功能:");
scanf("%d",&t);
system("cls");
switch(t)
{ case 1:openaccount();printf("\n");break;
case 2:cancleaccount();printf("\n");break;
case 3:inquire();printf("\n");break;
case 4:savemoney();printf("\n");break;
case 5:getmoney();printf("\n");break;
case 6:transfer();printf("\n");break;
case 0:break;
default:break;
}
}while(t!=0);
exit(0);
}
读出文件数据
int read()
{
FILE * fp;
fp=fopen("D:\\users.txt","rb"); /*用只读的方式打开文件*/
if(fp==NULL)
{
printf("文件打开错误!\n");
exit(1);
}
int n=0;
do
{
fread(&x[n],sizeof(struct users),1,fp); /*依次读出文件中结构体数组中每一个元素*/
n++;
}while(feof(fp)==0); /*指针指向末尾停止*/
fclose(fp);
return(n-1); /*返回结构体数组的元素个数:i-1*/
}
保存x[i]的账户信息
void save(int k)
{
int i;
FILE * fp;
fp=fopen("D:\\users.txt","wb"); /*重写的方式打开文件*/
if(fp==NULL)
{
printf("文件打开错误!\n");
exit(1);
}
for(i=0;i<k;i++) /*控制依次写入k个x[]元素*/
if (fwrite(&x[i], sizeof (struct users),1,fp)==-1)
printf("保存失败\n");
fclose(fp);
}
void openaccount(){
srand((int)time(0));
int i=read();
char temp[20];
x[i].num=rand()%10000+100000000; /*设置随机种子,并保证每次种子不同,作为帐号*/
printf("账号:%d\n",x[i].num);
do
{
/*确认两次密码输入是否一致*/
printf("\n\t\t密 码:");
scanf("%s",x[i].code);
printf("\n\t\t确认密码:");
scanf("%s",temp);
if(strcmp(x[i].code,temp)!=0)
printf("\n\t\t两次密码不一致,请重新输入");
}while(strcmp(x[i].code,temp)!=0);
x[i].money=0;
x[i].flag=1;
save(i+1); /*调入save(),将输入的账户信息续写在文件中*/
printf("开户成功!\n");``
system("pause");
}
销户操作
void cancleaccount()
{
printf("请输入要销户的账号:");
int i=read(),j,k,n;
char temp[20];
scanf("%d",&n);
for(j=0;j<i;j++) /*由i控制依次检查文件中的x[]元素,找到所要查询的账号*/
{
if((x[j].num==n)&&(x[j].flag==1))
{
k=j;
do
{
/*核验身份*/
printf("\n\t\t密 码:");
scanf("%s",temp);
if(strcmp(x[k].code,temp)!=0)
printf("\n\t\t密码错误,请重新输入");
}while(strcmp(x[k].code,temp)!=0);
printf("您是否确认注销该账户?\t 输入1为确认注销,输入0为不注销\n");
int choice = 0;
scanf("%d",&choice);
if (choice == 1) {
x[k].flag=0; //flag标记为账户不存在
printf("%d",x[k].flag);
printf("销户成功!\n");
save(i);
printf("%d",x[k].flag);
}
else
printf("您已取消本次注销行为\n");
break;
}
else
{
if(j==i-1)
{
printf("该账号不存在!\n");
break;
}
}
}
system("pause");
}
void cancleaccount()
{
printf("请输入要销户的账号:");
int i=read(),j,k,n;
char temp[20];
scanf("%d",&n);
for(j=0;j<i;j++) /*由i控制依次检查文件中的x[]元素,找到所要查询的账号*/
{
if((x[j].num==n)&&(x[j].flag==1))
{
k=j;
do
{
/*核验身份*/
printf("\n\t\t密 码:");
scanf("%s",temp);
if(strcmp(x[k].code,temp)!=0)
printf("\n\t\t密码错误,请重新输入");
}while(strcmp(x[k].code,temp)!=0);
printf("您是否确认注销该账户?\t 输入1为确认注销,输入0为不注销\n");
int choice = 0;
scanf("%d",&choice);
if (choice == 1) {
x[k].flag=0; //flag标记为账户不存在
printf("%d",x[k].flag);
printf("销户成功!\n");
save(i);
printf("%d",x[k].flag);
}
else
printf("您已取消本次注销行为\n");
break;
}
else
{
if(j==i-1)
{
printf("该账号不存在!\n");
break;
}
}
}
system("pause");
}
转账业务
void transfer()
{
printf("请输入您的账号:");
int i=read(),j,k,l,n,p,q;
float m;
char temp[20];
scanf("%d",&n);
for(j=0;j<i;j++) /*由i控制依次检查文件中的x[]元素,找到所要查询的账号*/
{
if(x[j].num==n&&x[j].flag==1)
{
k=j;
do
{
/*核验身份*/
printf("\n\t\t密 码:");
scanf("%s",temp);
if(strcmp(x[k].code,temp)!=0)
printf("\n\t\t密码错误,请重新输入");
}while(strcmp(x[k].code,temp)!=0);
printf("请输入您要转入钱的账号:");
scanf("%d",&n);
for(p=0;p<i;p++) /*由i控制依次检查文件中的x[]元素,找到所要查询的账号*/
{
if(x[p].num==n&&x[p].flag==1)
{
l=p;
printf("请输入您要转入的金额:");
scanf("%f",&m);
x[k].money-=m;
x[l].money+=m;
save(i);
break;
}
else
{
if(p==i-1)
{
printf("该账号不存在!\n");
break;
}
}
}
break;
}
else
{
if(j==i-1)
{
printf("该账号不存在!\n");
break;
}
}
}
}
作业小结
(1)psp表格
psp2.1 | 任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 120 | 80 |
Development | 开发 | 100 | 150 |
Analysis | 需求分析(包括学习新技术) | 10 | 10 |
Design Spec | 生成设计文档 | 30 | 40 |
Design Review | 设计复审 | 5 | 10 |
Coding Standard | 代码规范 | 6 | 6 |
Design | 具体设计 | 10 | 12 |
Coding | 具体编码 | 36 | 21 |
Code Review | 代码复审 | 5 | 7 |
Test | 测试(自我测试,修改代码,提交修改) | 10 | 15 |
Reporting | 报告 | 9 | 6 |
Test Report | 测试报告 | 3 | 2 |
Size Measurement | 计算工作量 | 2 | 1 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 3 | 3 |
(2)心得和经验
独立完成本次实验耗时较长,代码能力有待提高。