目录
一、作业信息
作业课程 | 软件工程 |
---|---|
作业要求 | 作业要求 |
作业目标 | 编写一个ATM管理系统 |
学号 | 3180205402 |
二、作业要求
编写一个ATM管理系统,语言不限,要求应包括以下主要功能:
(1)开户,销户
(2)查询账户余额
(3)存款
(4)取款
(5)转账(一个账户转到另一个账户)等...
允许网上查询参考,但请注意不要直接抄袭,可以理解看懂别人的代码,再自己编写。
三、代码提交
1.头文件、结构体及函数定义
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 100
void Transaccount();//转账
void Menu(); //显示菜单
void Delete(); //删除
void Save_money();//存钱
void Withdraw_money();//取钱
void Show(); //查询信息
void save(int m); //信息存入文件
int read(); //读取信息文件
void Add();//增加开户
void Insert();//初始开户
struct Customer
{
char number[20];//身份证号
char name[10];//姓名
char cipher[20];//密码
float balance;//余额
}Customer[N],kong[2];
2.主函数与菜单
void Menu()
{
printf("ATM信息管理系统
");
printf("***---------------------------***
");
printf("1--转账
");
printf("2--销户
");
printf("3--存款
");
printf("4--取款
");
printf("5--查询账户余额
");
printf("6--增加开户
");
printf("7--退出系统
");
printf("8--开户
");
printf("***---------------------------***
");
printf("请选择功能:
");
}
int main()
{
int a;
do
{
Menu();
scanf("%d",&a);
if(a>8||a<0)
{
system("cls");
printf("输入错误! a
");
continue;
}
system("cls");
switch(a)
{
case 1: Transaccount();break;
case 2: Delete();break;
case 3: Save_money();break;
case 4: Withdraw_money();break;
case 5: Show();break;
case 6: Add();break;
case 7: exit(0);break;
case 8: Insert();break;
}
}while(1);
}
3. 导入文件和保存文件
void save(int m) /*保存文件函数*/
{ int i;
FILE *fp;
if ((fp=fopen("D:\Customer_list.dat","wb"))==NULL) /*创建文件并判断是否能打开*/
{ printf ("cannot open file!
");
exit(0);
}
for (i=0;i<m;i++) /*将内存中客户的信息输出到磁盘文件中去*/
if (fwrite(&Customer[i],sizeof(struct Customer),1,fp)!=1)
printf("file write error!
");
fclose(fp);
}
int read() /*导入函数*/
{ FILE*fp;
int i=0;
if((fp=fopen("D:\Customer_list.dat","rb"))==NULL)
{ printf ("cannot open file!
");
exit(0);
}
else
{
do {
fread(&Customer[i],sizeof(struct Customer),1,fp);
i++;
}while(feof(fp)==0);
}
fclose(fp);
return(i-1);
}
4.初始开户与增加开户
void Insert()//初始开户
{
int x,j,i,k,sum;
printf("请输入开户的人数:
");
scanf("%d",&x);
for(i=0;i<x;i++)
{
printf("请输入第%d个开户身份证号
",i+1);
scanf("%s",&Customer[i].number);
for(j=0,sum=0;j<x;j++) //查重
{
for(k=0;k<10;k++)
{
if(j!=i&&Customer[i].number[k]==Customer[j].number[k])
sum+=0;
else
sum+=1;
}
if(Customer[j+1].number==NULL)
break;
while(sum==0)
{
system("cls");
printf("输入身份证号重复,请重新输入
");
printf("请输入第%d个客户身份证号
",i+1);
scanf("%s",&Customer[i].number);
for(k=0;k<10;k++)
{
if(j!=i&&Customer[i].number[k]==Customer[j].number[k])
sum+=0;
else
sum+=1;
}
if(Customer[j+1].number==NULL)
break;
}
}
printf("请输入第%d个客户姓名
",i+1);
scanf("%s",&Customer[i].name);
printf("请输入第%d个客户密码
",i+1);
scanf("%s",&Customer[i].cipher);
printf("请输入第%d个客户的存入余额
",i+1);
scanf("%f",&Customer[i].balance);
system("cls");
}
save(x);
printf("录入完成
");
}
void Add() //增加开户
{
int z,a,n;
int i,j,k,sum;
int m=read();
system("cls");
printf("增加几位开户信息?
");
scanf("%d",&a);
while(a<=0)
{
system("cls");
printf("请重新输入");
printf("增加几位客户信息?
");
scanf("%d",&a);
}
for(z=0;z<a;z++)
{
printf("请输入第%d位客户信息
",z+1);
for(n=0;n>=0;n++)
if(Customer[n].number[0]==' ')
break;
i=n;
printf("请输入身份证号:
");
scanf("%s",&Customer[i].number);
for(j=0,sum=0;j<N;j++)//查重
{
if(Customer[j].number[0]==' ')
continue;
for(k=0;k<10;k++)
{
if(j!=i&&Customer[i].number[k]==Customer[j].number[k])
sum+=0;
else
sum+=1;
}
if(Customer[j+1].number==' ')
break;
while(sum==0)
{
system("cls");
printf("输入身份证号重复,请重新输入
");
printf("请输入身份证号
");
scanf("%s",&Customer[i].number);
for(k=0;k<10;k++)
{
if(j!=i&&Customer[i].number[k]==Customer[j].number[k])
sum+=0;
else
sum+=1;
}
if(Customer[j+1].number==NULL)
break;
}
}
printf("请输入姓名
");
scanf("%s",&Customer[i].name);
printf("请输入密码
");
scanf("%s",&Customer[i].cipher);
printf("请输入存入余额
");
scanf("%f",&Customer[i].balance);
system("cls");
}
save(m);
printf("开户信息增加完成
");
printf("%s %s %f
",Customer[i].number,Customer[i].name,Customer[i].balance);
}
5.销户
void Delete() //销户
{
int i,j,n;
int m=read();
char cipher[20],number[20];
printf("请输入要销户的身份证号:
");
scanf("%s",number);
getchar();
printf("请输入密码:");
scanf("%s",cipher);
getchar();
for(i=0;i<N;i++)
{
if(Customer[i].number[0]==' ')
continue;
if(strcmp(number,Customer[i].number)==0 && strcmp(cipher,Customer[i].cipher)==0)
{
for(j=i;j<i+1;j++)
Customer[j]=kong[0];
printf("客户信息已经销户成功!
");
save(m);//储存修改后的数据
return;
}
}
if(i==N)
printf("无此客户资料!
");
printf("%s %s %f
",Customer[i].number,Customer[i].name,Customer[i].balance);
save(m);//储存修改后的数据
}
6.存钱
void Save_money() //存钱
{
int i,j,n;
int m=read();
float sav_mon;
char cipher[20],number[20];
printf("请输入要存款的身份证号:
");
scanf("%s",number);
getchar();
printf("请输入密码:");
scanf("%s",cipher);
getchar();
for(i=0;i<N;i++)
{
if(Customer[i].number[0]==' ')
continue;
if(strcmp(number,Customer[i].number)==0 && strcmp(cipher,Customer[i].cipher)==0)
{
printf("输入要存入的款数:
");
scanf("%f",&sav_mon);
Customer[i].balance = Customer[i].balance + sav_mon;
printf("客户已存款成功!
");
save(m);//储存修改后的数据
printf("%s %s %f
",Customer[i].number,Customer[i].name,Customer[i].balance);
return;
}
}
if(i==N)
printf("无此客户资料!
");
save(m);//储存修改后的数据
}
7.取钱
void Withdraw_money() //取钱
{
int i,j,n;
int m=read();
float withdraw_mon;
char cipher[20],number[20];
printf("请输入要取款的身份证号:
");
scanf("%s",number);
getchar();
printf("请输入密码:");
scanf("%s",cipher);
getchar();
for(i=0;i<N;i++)
{
if(Customer[i].number[0]==' ')
continue;
if(strcmp(number,Customer[i].number)==0 && strcmp(cipher,Customer[i].cipher)==0)
{
printf("输入要取出的款数:
");
scanf("%f",&withdraw_mon);
if(Customer[i].balance >= withdraw_mon)
{
Customer[i].balance = Customer[i].balance - withdraw_mon;
printf("客户已取款成功!
");
save(m);//储存修改后的数据
}
else
printf("账户余额不足!");
printf("%s %s %f
",Customer[i].number,Customer[i].name,Customer[i].balance);
return;
}
}
if(i==N)
printf("无此客户资料!
");
save(m);//储存修改后的数据
}
8.转账
void Transaccount()//转账
{
int i,j,n;
int m=read();
float trans_mon;
char cipher[20],number[20],number2[20];
printf("请输入要转账的身份证号:
");
scanf("%s",number);
getchar();
printf("请输入密码:");
scanf("%s",cipher);
getchar();
for(i=0;i<N;i++)
{
if(Worker[i].number[0]==' ')
continue;
if(strcmp(number,Worker[i].number)==0 && strcmp(cipher,Worker[i].cipher)==0)
{
printf("登录成功,请输入要转入的身份证号:
");
scanf("%s",number2);
getchar();
for(j=0;j<N;j++)
{
if(Worker[j].number[0]==' ')
continue;
if(strcmp(number2,Worker[j].number)==0)
{
printf("输入要转账的款数:
");
scanf("%f",&trans_mon);
if(Worker[i].balance >= trans_mon)
{
Worker[i].balance = Worker[i].balance - trans_mon;
Worker[j].balance = Worker[j].balance + trans_mon;
printf("客户已转账成功!
");
save(m);//储存修改后的数据
printf("%s %s %f
",Worker[i].number,Worker[i].name,Worker[i].balance);
printf("%s %s %f
",Worker[j].number,Worker[j].name,Worker[j].balance);
}
else
printf("账户余额不足!");
}
}
if(j==N)
printf("无此转入客户资料!
");
}
}
if(i==N)
printf("无此客户资料!
");
save(m);//储存修改后的数据
}
9.查询余额
void Show()//查询余额
{
int i,j,n;
int m=read();
char cipher[20],number[20];
printf("请输入要查询的身份证号:
");
scanf("%s",number);
getchar();
printf("请输入密码:");
scanf("%s",cipher);
getchar();
for(i=0;i<N;i++)
{
if(Customer[i].number[0]==' ')
continue;
if(strcmp(number,Customer[i].number)==0 && strcmp(cipher,Customer[i].cipher)==0)
{
printf("%s %s %f
",Customer[i].number,Customer[i].name,Customer[i].balance);
return;
}
else
printf("密码错误!
");
}
if(i==N)
printf("无此客户资料!
");
}
10.运行截图
菜单
开户
查询
存款
取款
转账
四、个人小结
psp2.1 | 任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 10 | 30 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 10 | 20 |
Development | 开发 | 200 | 300 |
Analysis | 需求分析(包括学习新技术) | 10 | 30 |
Design Spec | 生成设计文档 | 15 | 30 |
Design Review | 设计复审 | 5 | 10 |
Coding Standard | 代码规范 | 5 | 8 |
Design | 具体设计 | 10 | 50 |
Coding | 具体编码 | 100 | 300 |
Code Review | 代码复审 | 10 | 20 |
Test | 测试(自我测试,修改代码,提交修改) | 10 | 30 |
Reporting | 报告 | 10 | 10 |
Test Report | 测试报告 | 5 | 10 |
Size Measurement | 计算工作量 | 3 | 3 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 10 | 10 |