个人作业三-ATM管理系统
个人作业二-举例分析流程图与活动图的区别与联系
目录
- 一、作业信息
- 二、作业要求
- 三、代码提交
- 1.代码
- ①保存文件
- ②导入文件
- ③开户
- ④销户
- ⑤查询余额
- ⑥存钱、取钱
- ⑦转账
- ⑧菜单
- ⑨头文件、结构体、主函数
- 2.运行截图
一、作业信息
博客班级 | 软件工程导论-计算机18级 |
---|---|
作业要求 | 作业要求 |
作业目标 | 通过ATM项目熟悉软件开发的流程 |
学号 | 3180404131 |
二、作业要求
编写一个ATM管理系统,语言不限,要求应包括以下主要功能:
(1)开户,销户
(2)查询账户余额
(3)存款
(4)取款
(5)转账(一个账户转到另一个账户)等...
允许网上查询参考,但请注意不要直接抄袭,可以理解看懂别人的代码,再自己编写
(4)举例分析流程图与活动图的联系
请同学们认真完成作业,每一部分给出完整流畅的语言描述,必要时可添加图表内容帮助理解。
三、作业内容
三、代码提交
1. 代码
①保存文件
void save(int m) /*保存文件函数*/
{ int i;
FILE *fp;
if ((fp=fopen("E:\\ATM.dat","wb"))==NULL) /*创建文件并判断是否能打开*/
{ printf ("cannot open file!\n");
exit(0);
}
for (i=0;i<m;i++) /*将内存中职工的信息输出到磁盘文件中去*/
if (fwrite(&Worker[i],sizeof(struct Worker),1,fp)!=1)
printf("file write error!\n");
fclose(fp);
}
②导入文件
int read() /*导入函数*/
{ FILE*fp;
int i=0;
if((fp=fopen("E:\\ATM.dat","rb"))==NULL)
{ printf ("cannot open file!\n");
exit(0);
}
else
{
do {
fread(&Worker[i],sizeof(struct Worker),1,fp);
i++;
}while(feof(fp)==0);
}
fclose(fp);
return(i-1);
}
③开户
void Add() //开户
{
int n;
int i,j,k,sum;
int m=read();
system("cls");
printf("请输入客户信息\n");
for(n=0;n>=0;n++)
if(Worker[n].number[0]=='\0')
break;
i=n;
printf("请输入身份证号:\n");
scanf("%s",&Worker[i].number);
for(j=0,sum=0;j<N;j++)//查重
{
if(Worker[j].number[0]=='\0')
continue;
for(k=0;k<10;k++)
{
if(j!=i&&Worker[i].number[k]==Worker[j].number[k])
sum+=0;
else
sum+=1;
}
if(Worker[j+1].number=='\0')
break;
while(sum==0)
{
system("cls");
printf("输入身份证号重复,请重新输入\n");
printf("请输入身份证号\n");
scanf("%s",&Worker[i].number);
for(k=0;k<10;k++)
{
if(j!=i&&Worker[i].number[k]==Worker[j].number[k])
sum+=0;
else
sum+=1;
}
if(Worker[j+1].number==NULL)
break;
}
}
printf("请输入姓名\n");
scanf("%s",&Worker[i].name);
printf("请输入密码\n");
scanf("%s",&Worker[i].cipher);
printf("请输入存入余额\n");
scanf("%f",&Worker[i].balance);
getchar();
system("cls");
save(m);
printf("开户信息增加完成\n");
printf("%s\t%s\t%f\n",Worker[i].number,Worker[i].name,Worker[i].balance);
}
④销户
void Delete() //销户
{
int i,j,n;
int m=read();
char cipher[20],number[20];
printf("请输入要销户的身份证号:\n");
scanf("%s",number);
getchar();
printf("请输入密码:");
scanf("%s",cipher);
getchar();
for(i=0;i<N;i++)
{
if(Worker[i].number[0]=='\0')
continue;
if(strcmp(number,Worker[i].number)==0 && strcmp(cipher,Worker[i].cipher)==0)
{
for(j=i;j<i+1;j++)
Worker[j]=kong[0];
printf("客户信息已经销户成功!\n");
save(m);//储存修改后的数据
return;
}
}
if(i==N)
printf("无此客户资料!\n");
printf("%s\t%s\t%f\n",Worker[i].number,Worker[i].name,Worker[i].balance);
save(m);//储存修改后的数据
}
⑤查询余额
void Show()//查询余额
{
int i,j,n;
int m=read();
char cipher[20],number[20];
printf("请输入要查询的身份证号:\n");
scanf("%s",number);
getchar();
printf("请输入密码:");
scanf("%s",cipher);
getchar();
for(i=0;i<N;i++)
{
if(Worker[i].number[0]=='\0')
continue;
if(strcmp(number,Worker[i].number)==0 && strcmp(cipher,Worker[i].cipher)==0)
{
printf("%s\t%s\t%f\n",Worker[i].number,Worker[i].name,Worker[i].balance);
return;
}
}
if(i==N)
printf("无此客户资料!\n");
}
⑥存钱、取钱
void Save_money() //存钱
{
int i,j,n;
int m=read();
float sav_mon;
char cipher[20],number[20];
printf("请输入要存款的身份证号:\n");
scanf("%s",number);
getchar();
printf("请输入密码:");
scanf("%s",cipher);
getchar();
for(i=0;i<N;i++)
{
if(Worker[i].number[0]=='\0')
continue;
if(strcmp(number,Worker[i].number)==0 && strcmp(cipher,Worker[i].cipher)==0)
{
printf("输入要存入的款数:\n");
scanf("%f",&sav_mon);
Worker[i].balance = Worker[i].balance + sav_mon;
printf("客户已存款成功!\n");
save(m);//储存修改后的数据
printf("%s\t%s\t%f\n",Worker[i].number,Worker[i].name,Worker[i].balance);
return;
}
}
if(i==N)
printf("无此客户资料!\n");
save(m);//储存修改后的数据
}
void Withdraw_money() //取钱
{
int i,j,n;
int m=read();
float withdraw_mon;
char cipher[20],number[20];
printf("请输入要取款的身份证号:\n");
scanf("%s",number);
getchar();
printf("请输入密码:");
scanf("%s",cipher);
getchar();
for(i=0;i<N;i++)
{
if(Worker[i].number[0]=='\0')
continue;
if(strcmp(number,Worker[i].number)==0 && strcmp(cipher,Worker[i].cipher)==0)
{
printf("输入要取出的款数:\n");
scanf("%f",&withdraw_mon);
if(Worker[i].balance >= withdraw_mon)
{
Worker[i].balance = Worker[i].balance - withdraw_mon;
printf("客户已取款成功!\n");
save(m);//储存修改后的数据
}
else
printf("账户余额不足!");
printf("%s\t%s\t%f\n",Worker[i].number,Worker[i].name,Worker[i].balance);
return;
}
}
if(i==N)
printf("无此客户资料!\n");
save(m);//储存修改后的数据
}
⑦转账
void Transaccount()//转账
{
int i,j,n;
int m=read();
float trans_mon;
char cipher[20],number[20],number2[20];
printf("请输入要转账的身份证号:\n");
scanf("%s",number);
getchar();
printf("请输入密码:");
scanf("%s",cipher);
getchar();
for(i=0;i<N;i++)
{
if(Worker[i].number[0]=='\0')
continue;
if(strcmp(number,Worker[i].number)==0 && strcmp(cipher,Worker[i].cipher)==0)
{
printf("登录成功,请输入要转入的身份证号:\n");
scanf("%s",number2);
getchar();
for(j=0;j<N;j++)
{
if(Worker[j].number[0]=='\0')
continue;
if(strcmp(number2,Worker[j].number)==0)
{
printf("输入要转账的款数:\n");
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("客户已转账成功!\n");
save(m);//储存修改后的数据
printf("%s\t%s\t%f\n",Worker[i].number,Worker[i].name,Worker[i].balance);
printf("%s\t%s\t%f\n",Worker[j].number,Worker[j].name,Worker[j].balance);
}
else
printf("账户余额不足!");
}
}
if(j==N)
printf("无此转入客户资料!\n");
}
}
if(i==N)
printf("无此客户资料!\n");
save(m);//储存修改后的数据
}
⑧菜单
void Menu()
{
printf("ATM信息管理系统\n");
printf("***---------------------------***\n");
printf("------- 1.开户 2.销户 ---------\n");
printf("------- 3.存款 4.取款 ---------\n");
printf("------- 5.查询 6.转账 ---------\n");
printf("------- 7.退出 ---------\n");
printf("***---------------------------***\n");
printf("请选择功能:\n");
}
⑨头文件、结构体、主函数
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 200
void Transaccount();//转账
void Menu(); //显示菜单
void Delete(); //删除
void Save_money();//存钱
void Withdraw_money();//取钱
void Show(); //查询信息
void save(int m); //信息存入文件
int read(); //读取信息文件
void Add();//开户
struct Worker
{
char number[20];//身份证号
char name[10];//姓名
char cipher[20];//密码
float balance;//余额
}Worker[N],kong[2];
int main()
{
int a;
do
{
Menu();
scanf("%d",&a);
if(a>8||a<0)
{
system("cls");
printf("输入错误! \a\n");
continue;
}
system("cls");
switch(a)
{
case 1:
Add();break;//
case 2:
Delete();break;//
case 3:
Save_money();break;//
case 4:
Withdraw_money();break;//
case 5:
Show();break;//
case 6:
Transaccount();break;//
case 7:
exit(0);break;//
}
}while(1);
}
2、运行截图
①进入界面
②开户
③取款
④转账
⑤查询
四、个人小结
1、psp耗时表
psp2.1 | 任务内容 | 计划完成需要的时间 (min) | 实际完成需要的时间 |
---|---|---|---|
Planning | 计划 | 10 | 20 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 15 | 20 |
Development | 开发 | 120 | 480 |
Analysis | 需求分析(包括学习新技术) | 15 | 15 |
Design Spec | 生成设计文档 | 10 | 10 |
Design Review | 设计复审 | 5 | 5 |
Coding Standard | 代码规范 | 5 | 3 |
Design | 具体设计 | 10 | 12 |
Coding | 具体编码 | 60 | 70 |
Code Review | 代码复审 | 5 | 7 |
Test | 测试(自我测试,修改代码,提交修改) | 10 | 15 |
Reporting | 报告 | 15 | 15 |
Test Report | 计算工作量 | 2 | 1 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 3 | 3 |