个人作业三-ATM管理系统
ATM管理系统
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/ |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11478 |
| 这个作业的目标 | 培养对于一个完整作业流程和相关数据的处理能力 |
| 学号 | 3180701301 |
题目要求:
编写一个ATM管理系统,语言不限,要求应包括以下主要功能:
(1)开户,销户
(2)查询账户余额
(3)存款
(4)取款
(5)转账(一个账户转到另一个账户)等...
允许网上查询参考,但请注意不要直接抄袭,可以理解看懂别人的代码,再自己编写
代码提交:
(1)开户,销户
void regist(){
system("cls");//清屏
char rePass[7];
printf("\n\n\n\n\t\t\t\t请输入用户名:");
//要使用一个字符串接收输入的用户名
fflush(stdin);//刷新字符缓冲区
gets(user[count].name);//读取字符串,回车结束
while(1){
while(1){
printf("\n\n\t\t\t\t请输入密码:");
fflush(stdin);//清空输入缓冲区
inputPass(user[count].pass);
int length=strlen(user[count].pass);//计算字符串长度,其返回值是一个整数
if(length==6){
break;
}else{
printf("\n\n\t\t\t\t密码输入有误!请输入6位密码");
}
}
printf("\n\n\t\t\t\t请再次输入密码:");
fflush(stdin);//清空输入缓冲区
inputPass(rePass);
if(strcmp(rePass,user[count].pass)==0){
break;
}else{
printf("\n\n\t\t\t\t两次密码输入不一致,请重新输入");
}
}
account=account+1;
user[count].account=account;
user[count].money=0;
system("cls");//清屏
printf("\n\n\n\n\t\t\t\t注册成功\n");
printf("\n\n\t\t\t\t您的账号为:%d\n",user[count].account);
if(count>=1){
printf("\n\n\t\t\t\t前一个注册的账号为:%d\n",user[count-1].account);
}
count++;
}
void logout(){
system("cls");//清屏
char confirm;//confirm 确认
printf("\n\n\n\n\t\t您正在使用注销功能");
printf("\n\n\n\n\t\t%d确认注销?",user[find].account);
fflush(stdin);//清空输入缓冲区
scanf("%c",&confirm);
if(confirm=='y'||confirm=='Y'){
printf("\n\n\n\n\t\t正在注销%d",user[find].account);
isLogout=1;
}else{
printf("\n\n\n\n\t\t取消注销帐号%d,返回服务界面",user[find].account);
isLogout=0;
}
}
(2)查询账户余额
void selectMoney(){
system("cls");//清屏
printf("\n\n\n\n\t\t\t\t您正在使用查询余额功能");
printf("\n\n\t\t\t\t您的账户余额为:%lf",user[find].money);
}
(3)存款
void saveMoney(){
system("cls");//清屏
printf("\n\n\n\n\t\t\t\t您正在使用存款功能");
int RMB;
printf("\n\n\t\t\t\t请输入存款金额:");
scanf("%d",&RMB);
user[find].money=user[find].money+RMB;
printf("\n\n\t\t\t\t存款成功");
}
(4)取款
void getMoney(){
system("cls");//清屏
printf("\n\n\n\n\t\t您正在使用取款功能");
int RMB;
printf("\n\n\t\t请输入取款金额:");
scanf("%d",&RMB);
if(user[find].money>=RMB){
user[find].money=user[find].money-RMB;
printf("\n\n\t\t取款成功");
}else{
printf("\n\n\t\t余额不足");
}
}
(5)转账(一个账户转到另一个账户)
void transferMoney(){
system("cls");//清屏
int username;//账号
int isFind=0;
int RMB;//转账金额
printf("\n\n\n\n\t\t您正在使用转账功能");
printf("\n\n\t\t请输入对方的帐号:");
scanf("%d",&username);
for(int i=0;i<count;i++){
if(username==user[i].account){
dFind=i;
isFind=1;
break;
}
}
if(isFind==1){
printf("\n\n\t\t请输入转账金额:");
scanf("%d,",&RMB);
if(user[find].money>=RMB){
user[find].money=user[find].money-RMB;
user[dFind].money=user[dFind].money+RMB;
printf("\n\n\t\t转账成功");
}else{
printf("\n\n\t\t余额不足");
}
}else{
printf("\n\n\t\t目标帐号不存在");
}
}
(6)功能界面
void service(){
char choise;
while(1){
system("cls");
printf("\n\n\n\n\t\tA、查询余额");
printf("\n\n\t\tB、存款");
printf("\n\n\t\tC、取款");
printf("\n\n\t\tD、转账");
printf("\n\n\t\tE、修改密码");
printf("\n\n\t\tF、注销");
printf("\n\n\t\tG、退出系统");
printf("\n\n\t\t请选择:");
fflush(stdin);//清屏
scanf("%c",&choise);
switch(choise){
case 'a':
case 'A':
selectMoney();break;//查询余额
case 'b':
case 'B':
saveMoney();break;//存款
case 'c':
case 'C':
//printf("\n\n\t\t执行取款功能");break;
getMoney();break;//取款
case 'd':
case 'D':
transferMoney();break;//转账
case 'e':
case 'E':
printf("\n\n\t\t执行修改密码功能");break;
//updatePass();break;//修改密码
case 'f':
case 'F':
logout();
if(isLogout==1){
return;//直接结束所处函数
}
break;//注销
case 'g':
case 'G':
quit();break;//退出系统
default:
printf("\n\n\t\t您的输入有误,请重新输入!");break;
}
printf("\n\n\t\t按任意键继续");
getch();//不回显函数,不需按回车
}
}
源码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#define NUM 1001
void denglu();
void shezhi();
void enter();
void enter2();
void tuichu();
void zhuanzhang();
void chaxun();
void qukuan();
void cunkuan();
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(" \t\t\t ATM模拟系统\n");
printf(" \t\t\t *******************\n");
printf("\t\t\t |欢迎使用本银行系统|\n");
printf(" \t\t\t ********************\n");
printf("\n\n");
printf("\t\t\t ****您将有以下选择****\n");
printf("\n\n");
printf(" \t\t\t ++++++++++++++++++++\n");
printf(" \t\t\t + 1.设置 +\n");
printf(" \t\t\t + 2.登录 +\n");
printf(" \t\t\t + 3.退出 +\n");
printf(" \t\t\t ++++++++++++++++++++\n");
printf("\n\n");
printf(" \t\t\t |请输入您的操作号| \n\n\t\t\t\t ");
scanf("%d",&a);
switch(a)
{
case 1:system("cls");//清屏
shezhi();
break;
case 2:system("cls");
denglu();
break;
case 3:system("cls");
tuichu();
break;
default:printf("\t\t\t\t无此操作项\n请重新选择\n");
system("pause");
system("cls");
enter();
}
}
void load()
{
FILE *fp;
int i;
if((fp=fopen("data.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 shezhi()
{
char ch;
if(user[1000].account!=0)
{
j=user[1000].account;
}
printf("\n\n\t\t\t\t请设置您的卡号:\n\t\t\t\t ");
scanf("%s",user[j].ID);
printf("\n\t\t\t\t请设置您的密码:\n\t\t\t\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\n\t\t\t\t恭喜您注册成功!");
printf("\n\n\n");
system("pause");
printf("\t\t\t\t按回车键返回上一级\n");
printf("\n\n\n");
system("cls");
ch=getchar();//用来接收最后的回车符
if(ch=='\n')
{
enter();
}
}
void tuichu()
{
printf("\t\t\t**********谢谢**********\n");
printf("\t\t\t******感谢您的使用******\n");
printf("\t\t\t******欢迎下次光临******\n");
printf("\t\t\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(" \t\t\t+++++++++++++++++++++++++++++\n");
printf(" \t\t\t+ A T M 系 统 个 人 界 面 +\n");
printf(" \t\t\t+ 您 有 以 下 选 择 +\n");
printf(" \t\t\t+++++++++++++++++++++++++++++\n");
printf(" \t\t\t ++++++++++++++++++++\n");
printf(" \t\t\t # 1. 查询 #\n");
printf(" \t\t\t # 2. 取款 #\n");
printf(" \t\t\t # 3. 转账 #\n");
printf(" \t\t\t # 4. 存款 #\n");
printf(" \t\t\t # 5.修改密码 #\n");
printf(" \t\t\t # 6.返回目录 #\n");
printf(" \t\t\t ++++++++++++++++++++\n\n\t\t\t\t ");
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("\t\t\t\t无此操作项\n\n");
system("pause");
system("cls");
}
}while(n>4&&n<0);
}
void chaxun()
{
char ch;
printf("\t\t\t******欢迎使用查询服务******\n");
printf("\t\t\t 您的余额为%d元\n\n",user[k].account);
system("pause");
system("cls");
printf("\n\n\n");
ch=getchar();//用来接收最后的回车符
if(ch=='\n')
{
enter2();
}
}
void qukuan()
{
int i,x;
char a,ch;
printf(" \t\t\t+++++++++++++++++++++++++++++++\n");
printf(" \t\t\t+ 本银行最低取款金额为100元 +\n");
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: 自定义金额 +\n");
printf(" \t\t\t+++++++++++++++++++++++++++++++\n\n\t\t\t\t ");
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\t\t\t请输入自定义的金额:\n\t\t\t\t ");
scanf("%d",&x);
}
if(x<=user[k].account)
{
user[k].account=user[k].account-x;
printf(" \t\t\t\t您取了%d元钱\n",x);
printf(" \t\t\t\t您的余额为%d元\n",user[k].account);
}
else if(x>user[k].account)
{
printf("\t\t\t\t您卡里的余额不足\n");
printf("\t\t\t\t请重新输入提取金额:\n");
}
printf(" \t\t\t\t请选择是否继续取款\n");
printf(" \t\t\t\t是:Y 否:N\n\n\t\t\t\t ");
scanf("%s",&a);
if(a=='Y')
{
save();
qukuan();
}
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 cunkuan()
{
int a;
printf("\t\t\t\t请输入存入账户的金额:\n\n\t\t\t\t ");
scanf("%d",&a);
user[k].account=user[k].account+a;
save();
printf(" \t\t\t\t您的余额为%d元\n",user[k].account);
system("pause");//冻结屏幕
system("cls");
printf("\n\n\n");
enter2();
}
void xiugai()
{
printf("\t\t\t\t请输入新的密码\n\t\t\t\t ");
scanf("%s",user[k].key);
save();
system("pause");//冻结屏幕
system("cls");
printf("\n\n\n");
enter2();
}
void zhuanzhang()
{
int a,b,c,x;
char kahao[20];
printf("\t\t\t 请输入转账卡号:\n\t\t\t\t ");
scanf("%s",kahao);
for(a=0;a<NUM-1;a++)
{
if(!strcmp(kahao,user[a].ID))
{
printf("\t\t\t\t 卡号正确\n\n");
break;
}
}
if(strcmp(kahao,user[a].ID))
{
printf("\t\t\t\t 卡号不存在\n\n");
system("pause");
zhuanzhang();
}
printf("\t\t\t\t请输入转账金额\n\t\t\t\t ");
scanf("%d",&x);
if(x>user[k].account)
{
printf("\t\t\t\t您卡里的余额不足\n");
printf("\t\t\t\t请重新输入提取金额:\n");
}
else
{
user[k].account=user[k].account-x;
user[a].account=user[a].account+x;
save();
}
system("pause");//冻结屏幕
system("cls");
printf("\n\n\n");
enter2();
}
运行截图:
系统界面:

开户:

功能界面:

查询账户余额:

取款:

转账:

个人小结:
通过这次作业对结对编程有了一个大概的了解,由于对结对编程还不够熟练 ,所以对现在的我来说我还是比较喜欢一个人编程。
| psp2.1 | 任务内容 | 计划完成需要的时间 | 实际完成需要的时间 |
|---|---|---|---|
| planning | 计划 | 15 | 15 |
| estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 15 | 30 |
| development | 开发 | 20 | 25 |
| analysis | 需求分析 | 16 | 16 |
| design spec | 生成设计文档 | 21 | 12 |
| design review | 设计复审 | 6 | 5 |
| coding standard | 代码规范 | 5 | 5 |
| design | 具体设计 | 10 | 16 |
| coding | 具体编码 | 35 | 35 |
| code review | 代码复审 | 6 | 8 |
| test | 测试 | 10 | 8 |
| reporting | 报告 | 6 | 10 |
| test reporting | 测试报告 | 3 | 2 |
| size measurement | 计算工作量 | 3 | 2 |
| postmortem & process improvement plan | 总结并提出改进计划 | 5 | 8 |
浙公网安备 33010602011771号