ATM管理系统
一.源代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#define NUM 1001
void denglu();
void kaihu();
void enter();
void enter2();
void tuichu();
void turn();
void search();
void withdraw();
void deposit();
void xiugai();
void load();
int j=0,k;
struct yonghu
{
char ID[20];
char key[20];
int account;
}user[NUM];
//进入界面
void main()
{
enter();
}
//主函数结束
void enter()
{
int a;
load();
system("cls");
printf("\n\n*********A T M 模 拟 系 统 ************\n\n");
printf("******1.开户******\n\n");
printf("******2.登录******\n\n");
printf("******3.退出******\n\n");
printf("请输入您的选择\n\n");
scanf("%d",&a);
switch(a)
{
case 1:system("cls");
kaihu();
break;
case 2:system("cls");
denglu();
break;
case 3:system("cls");
tuichu();
break;
default:
printf("\t无此操作项\n请重新选择\n");
system("pause");
system("cls");
enter();
}
}
//文件读取
void load()
{
FILE *fp;
int i;
if((fp=fopen("atmdata.txt","r"))==NULL)
{
printf("不能打开文件\n");
return;
}
for(i=0;!feof(fp);i++)
{
fread(&user[i],sizeof(struct yonghu),1,fp);
}
fclose(fp);
system("cls");
printf("文件读取成功\n");
}
//文件写入
void save()
{
FILE *fp;
if((fp=fopen("data.txt","w"))==NULL)
{
printf("无法打开文件\n");
exit(0);
}
fwrite(user,sizeof(struct yonghu),NUM,fp);
printf("文件写入完成\n");
fclose(fp);
}
//开户
void kaihu()
{
char ch;
if(user[100].account!=0)
{
j=user[100].account;
}
printf("\n\t请设置您的卡号:\n\t ");
scanf("%s",user[j].ID);
printf("\n\t请设置您的密码:\n\t ");
scanf("%s",user[j].key);
user[j].account=0;
printf("卡号:%s \n余额:%4d\n",user[j].ID,user[j].account);
user[1000].account=++j;
save();
printf("\n\t恭喜您开户成功!");
system("pause");
printf("\t按回车键返回上一级\n");
printf("\n");
system("cls");
ch=getchar();
if(ch=='\n')
{
enter();
}
}
void tuichu()
{
printf("\t******欢迎下次使用******\n");
exit(0);
}
void denglu()
{
int i,n,m;
char id[20],kw[20];
printf("\t\t连续输错账号或密码三次,将返回主菜单\n");
for(i=0;i<3;i++)
{
printf("请输入登录账号\n");
scanf("%s",id);
for(k=0;k<NUM-1;k++)
{
if(strcmp(id,user[k].ID)==0)
{
m=1;
break;
}
else
m=0;
}
if(m==0)
{
printf("该账号不存在,剩余输入次数%d\n",2-i);
if((2-i)==0)
{
printf("账号输入错误3次,即将返回菜单......\n");
system("pause");
enter();
}
}
if(m==1)
{
printf("请输入登录密码\n");
for(n=0;n<3;n++)
{
scanf("%s",kw);
if(strcmp(kw,user[k].key)==0)
{
system("cls");
enter2();
}
else
{
printf("密码输入错误,剩余输入次数%d\n",2-n);
if((2-n)==0)
{
printf("密码输入错误3次,即将返回菜单......\n");
system("pause");
enter();
}
}
}
}
}
}
void enter2()
{
int n;
do
{
printf("\n\n\n");
printf(" *************** A T M 系 统 个 人 界 面 ****************\n");
printf("\n******1.******查询\n");
printf("\n******2.取款******\n");
printf("\n******3.转账******\n");
printf("\n******4.存款******\n");
printf("\n******5.修改密码******\n");
printf("\n******6.返回目录******\n");
scanf("%d",&n);
switch(n)
{
case 1:system("cls");
search();
break;
case 2:system("cls");
withdraw();
break;
case 3:system("cls");
turn();
break;
case 4:system("cls");
deposit();
break;
case 5:system("cls");
xiugai();
break;
case 6:system("cls");
enter();
break;
default:printf("\t无此操作项\n");
system("pause");
system("cls");
}
}while(n>4&&n<0);
}
//查询余额
void search()
{
char ch;
printf("\t您的余额为%d元\n",user[k].account);
system("pause");
system("cls");
printf("\n");
ch=getchar();
if(ch=='\n')
{
enter2();
}
}
//取款
void withdraw()
{
int i,x;
char a,ch;
printf(" \t\t\t+ 您卡号的余额为 +\n");
printf(" \t\t\t+ %d元 +\n",user[k].account);
printf(" \t\t\t+ 请选择你要提取的金额: +\n");
printf(" \t\t\t+ 1: 100元 2:200元 +\n");
printf(" \t\t\t+ 3.500元 4:1000元 +\n");
printf(" \t\t\t+ 5:2000元 6:5000元 +\n");
printf(" \t\t\t+ 7: 自定义金额(不少于100元) +\n");
scanf("%d",&i);
if(i==1)
{
x=100;
}
else
if(i==2)
{
x=200;
}
else
if(i==3)
{
x=500;
}
else
if(i==4)
{
x=1000;
}
else
if(i==5)
{
x=2000;
}
else
if(i==6)
{
x=5000;
}
else
if(i==7)
{
printf("\t请输入自定义的金额:\n\t");
scanf("%d",&x);
}
if(x<=user[k].account)
{
user[k].account=user[k].account-x;
printf(" \t您取了%d元钱\n",x);
printf(" \t您的余额为%d元\n",user[k].account);
}
else
if(x>user[k].account)
{
printf("\t您卡里的余额不足\n");
printf("\t请重新输入提取金额:\n");
}
printf(" \t请选择是否继续取款\n");
printf(" \t是:Y 否:N\n\n\t");
scanf("%s",&a);
if(a=='Y')
{
save();
withdraw();
}
else
if(a=='N')
{
save();
system("pause");
system("cls");
printf("\n\n\n");
}
else
{
save();
system("pause");
system("cls");
printf("\n\n\n");
}
ch=getchar();
if(ch=='\n')
{
system("cls");
enter2();
}
}
//存款
void deposit()
{
int a;
printf("\t请输入存入账户的金额:\n\n\t");
scanf("%d",&a);
user[k].account=user[k].account+a;
save();
printf(" \t您的余额为%d元\n",user[k].account);
system("pause");
system("cls");
printf("\n");
enter2();
}
//修改密码
void xiugai()
{
printf("\t请输入新的密码\n\t");
scanf("%s",user[k].key);
save();
system("pause");
system("cls");
printf("\n");
enter2();
}
//转账
void turn()
{
int a,x;
char kahao[20];
printf("\t请输入转账卡号:\n\t");
scanf("%s",kahao);
for(a=0;a<NUM-1;a++)
{
if(!strcmp(kahao,user[a].ID))
{
printf("\t卡号正确\n");
break;
}
}
if(strcmp(kahao,user[a].ID))
{
printf("\t卡号不存在\n");
system("pause");
turn();
}
printf("\t请输入转账金额\n\t");
scanf("%d",&x);
if(x>user[k].account)
{
printf("\t您卡里的余额不足\n");
printf("\t请重新输入提取金额:\n");
}
else
{
user[k].account=user[k].account-x;
user[a].account=user[a].account+x;
save();
}
system("pause");
system("cls");
printf("\n");
enter2();
}
二.运行结果
开户
存款
取款
查询
转账
三.个人小结
psp耗时表
psp2.1 | 任务内容 | 计划完成需要的时间 (min) | 实际完成需要的时间 |
---|---|---|---|
Planning | 计划 | 10 | |
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 |