博客班级 | 班级链接 |
---|---|
作业要求 | 作业链接 |
作业目标 | 编写一个ATM管理系统 |
学号 | 3180701111 |
题目要求
编写一个ATM管理系统,语言不限,要求应包括以下主要功能:
(1)开户,销户
(2)查询账户余额
(3)存款
(4)取款
(5)转账(一个账户转到另一个账户)等...
代码
头文件部分
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#define NUM 1001
函数声明
//用户登录
void denglu();
//用户注册
void zhuce();
//一级菜单
void enter();
//二级菜单
void enter2();
//退出系统
void tuichu();
//转账
void zhuanzhang();
//查询
void chaxun();
//取款
void qukuan();
//存款
void cunkuan();
//修改密码
void xiugai();
//读取文件
void load();
//写入文件
void save();
结构体定义
struct yonghu
{
char ID[20];//用户账户
char key[20];//用户密码
int account;//账户余额
}user[NUM];
用户注册
void zhuce()
{
char ch;
if(user[1000].account!=0)
{
j=user[1000].account;
}
printf("
请设置您的卡号:
");
scanf("%s",user[j].ID);
printf("
请设置您的密码:
");
scanf("%s",user[j].key);
user[j].account=0;
printf("卡号:%s
余额:%4d
",user[j].ID,user[j].account);
user[1000].account=++j;
save();
printf("
恭喜您注册成功!");
printf("
");
system("pause");
printf(" 按回车键返回上一级
");
printf("
");
system("cls");
ch=getchar();//用来接收最后的回车符
if(ch=='
')
{
enter();
}
}
用户登陆
void denglu()
{
int i,n,m;
char id[20],kw[20];
printf(" 连续输错账号或密码三次,将返回主菜单
");
for(i=0;i<3;i++)
{
printf("请输入登录账号
");
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
",2-i);
if((2-i)==0)
{
printf("账号输入错误3次,即将返回菜单......
");
system("pause");
enter();
}
}
if(m==1)
{
printf("请输入登录密码
");
for(n=0;n<3;n++)
{
scanf("%s",kw);
if(strcmp(kw,user[k].key)==0)
{
system("cls");
enter2();
}
else
{
printf("密码输入错误,剩余输入次数%d
",2-n);
if((2-n)==0)
{
printf("密码输入错误3次,即将返回菜单......
");
system("pause");
enter();
}
}
}
}
}
}
一级菜单
void enter()//一级菜单函数
{
int a;
load();
system("cls");
printf(" ATM模拟系统
");
printf(" *******************
");
printf(" |欢迎使用本银行系统|
");
printf(" ********************
");
printf("
");
printf(" ****您将有以下选择****
");
printf("
");
printf(" ++++++++++++++++++++
");
printf(" + 1.设置 +
");
printf(" + 2.登录 +
");
printf(" + 3.退出 +
");
printf(" ++++++++++++++++++++
");
printf("
");
printf(" |请输入您的操作号|
");
scanf("%d",&a);
switch(a)
{
case 1:system("cls");//清屏
zhuce();
break;
case 2:system("cls");
denglu();
break;
case 3:system("cls");
tuichu();
break;
default:printf(" 无此操作项
请重新选择
");
system("pause");
system("cls");
enter();
}
}
二级菜单
void enter2()
{
int n;
do
{
printf("
");
printf(" +++++++++++++++++++++++++++++
");
printf(" + A T M 系 统 个 人 界 面 +
");
printf(" + 您 有 以 下 选 择 +
");
printf(" +++++++++++++++++++++++++++++
");
printf(" ++++++++++++++++++++
");
printf(" # 1. 查询 #
");
printf(" # 2. 取款 #
");
printf(" # 3. 转账 #
");
printf(" # 4. 存款 #
");
printf(" # 5.修改密码 #
");
printf(" # 6.返回目录 #
");
printf(" ++++++++++++++++++++
");
scanf("%d",&n);
switch(n)
{
case 1:system("cls");
chaxun();
break;
case 2:system("cls");
qukuan();
break;
case 3:system("cls");
zhuanzhang();
break;
case 4:system("cls");
cunkuan();
break;
case 5:system("cls");
xiugai();
break;
case 6:system("cls");
enter();
break;
default:printf(" 无此操作项
");
system("pause");
system("cls");
}
}while(n>4&&n<0);
}
程序退出
void tuichu()
{
printf(" **********谢谢**********
");
printf(" ******感谢您的使用******
");
printf(" ******欢迎下次光临******
");
printf(" **********再见**********
");
exit(0);
}
转账
void zhuanzhang()
{
int a,x;
char kahao[20];
printf(" 请输入转账卡号:
");
scanf("%s",kahao);
for(a=0;a<NUM-1;a++)
{
if(!strcmp(kahao,user[a].ID))
{
printf(" 卡号正确
");
break;
}
}
if(strcmp(kahao,user[a].ID))
{
printf(" 卡号不存在
");
system("pause");
zhuanzhang();
}
printf(" 请输入转账金额
");
scanf("%d",&x);
if(x>user[k].account)
{
printf(" 您卡里的余额不足
");
printf(" 请重新输入提取金额:
");
}
else
{
user[k].account=user[k].account-x;
user[a].account=user[a].account+x;
save();
}
system("pause");//冻结屏幕
system("cls");
printf("
");
enter2();
}
查询
void chaxun()
{
char ch;
printf(" ******欢迎使用查询服务******
");
printf(" 您的余额为%d元
",user[k].account);
system("pause");
system("cls");
printf("
");
ch=getchar();//用来接收最后的回车符
if(ch=='
')
{
enter2();
}
}
取款
void qukuan()
{
int i,x;
char a,ch;
printf(" +++++++++++++++++++++++++++++++
");
printf(" + 本银行最低取款金额为100元 +
");
printf(" + 您卡号的余额为 +
");
printf(" + %d元 +
",user[k].account);
printf(" + 请选择你要提取的金额: +
");
printf(" + 1: 100元 2:200元 +
");
printf(" + 3.500元 4:1000元 +
");
printf(" + 5:2000元 6:5000元 +
");
printf(" + 7: 自定义金额 +
");
printf(" +++++++++++++++++++++++++++++++
");
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(" 请输入自定义的金额:
");
scanf("%d",&x);
}
if(x<=user[k].account)
{
user[k].account=user[k].account-x;
printf(" 您取了%d元钱
",x);
printf(" 您的余额为%d元
",user[k].account);
}
else if(x>user[k].account)
{
printf(" 您卡里的余额不足
");
printf(" 请重新输入提取金额:
");
}
printf(" 请选择是否继续取款
");
printf(" 是:Y 否:N
");
scanf("%s",&a);
if(a=='Y')
{
save();
qukuan();
}
else
if(a=='N')
{
save();
system("pause");//冻结屏幕
system("cls");
printf("
");
}
else
{
save();
system("pause");//冻结屏幕
system("cls");
printf("
");
}
ch=getchar();//用来接收最后的回车符
if(ch=='
')
{
system("cls");
enter2();
}
}
存款
void cunkuan()
{
int a;
printf(" 请输入存入账户的金额:
");
scanf("%d",&a);
user[k].account=user[k].account+a;
save();
printf(" 您的余额为%d元
",user[k].account);
system("pause");//冻结屏幕
system("cls");
printf("
");
enter2();
}
修改密码
void xiugai()
{
printf(" 请输入新的密码
");
scanf("%s",user[k].key);
save();
system("pause");//冻结屏幕
system("cls");
printf("
");
enter2();
}
读取文件
void load()
{
FILE *fp;
int i;
if((fp=fopen("data.txt","r"))==NULL)
{
printf("不能打开文件
");
return;
}
for(i=0;!feof(fp);i++)
{
fread(&user[i],sizeof(struct yonghu),1,fp);
}
fclose(fp);
system("cls");
printf("文件读取成功
");
}
写入文件
void save()
{
FILE *fp;
if((fp=fopen("data.txt","w"))==NULL)
{
printf("无法打开文件
");
exit(0);
}
fwrite(user,sizeof(struct yonghu),NUM,fp);
printf("文件写入完成
");
fclose(fp);
}
运行界面
一级菜单
二级菜单
程序退出
用户注册
用户登录
存款
取款
转账
查询
作业小结
psp表格
psp2.1 | 任务内容 | 计划需要完成的时间(min | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 120 | 180 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 100 | 150 |
Development | 开发 | 20 | 15 |
Analysis | 需求分析(包括学习新技术) | 30 | 30 |
Design Spec | 生成设计文档 | 30 | 40 |
Design Review | 设计复审 | 5 | 10 |
Coding Standard | 代码规范 | 20 | 15 |
Design | 具体设计 | 20 | 10 |
Coding | 具体编码 | 100 | 120 |
Code Review | 代码复审 | 10 | 15 |
Test | 测试(自我测试,修改代码,提交修改) | 10 | 10 |
Reporting | 报告 | 10 | 10 |
Test Report | 测试报告 | 5 | 10 |
Size Measurement | 计算工作量 | 5 | 5 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 15 | 20 |
心得和体会
本次ATM管理系统设计的较为简单,许多功能未能加入,界面做的不够美观友好,尚有许多提升空间,希望以后能做的更好。