博客班级 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18 |
---|---|
作业要求 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11478 |
作业目标 | 能编写一个基本的ATM管理系统 |
学号 | 3180701329 |
一.题目要求 |
编写一个ATM管理系统,语言不限,要求应包括以下主要功能:
(1)开户,销户
(2)查询账户余额
(3)存款
(4)取款
(5)转账(一个账户转到另一个账户)等...
允许网上查询参考,但请注意不要直接抄袭,可以理解看懂别人的代码,再自己编写
二、代码提交与运行截图
2.1 代码运行
(1)头文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
(2)结构体与全局变量
struct users
{
char name[20];//用户名
char pass[7];//密码
int account;//账号
float money;//余额
}user[100];
int count=0;
int account=10000;
int find;
int dFind;
int isLogout=0;
(3)从文件中读出数据
void read()
{
FILE *fp;
fp=fopen("baocun.txt", "r"); //打开文件
while(feof(fp)==0)
{
fscanf(fp,"%s%s%d%ld
",&user[count].name,&user[count].pass,&user[count].account,&user[count].money);//读入文件
count++;
account++;
}
fclose(fp); //关闭文件
}
(4)将文件写入文件中
void write()
{
FILE *fp;
fp=fopen("baocun.txt", "w"); //打开文件
fprintf(fp, "%s %s %d %ld
",user[count].name,user[count].pass,user[count].account,user[count].money);//写入文件
fclose(fp); //关闭文件
}
(5)开户
void regist()
{
int length;
char rePass[7];
printf("请输入用户名:
");
//要使用一个字符串接收输入的用户名
fflush(stdin);//刷新字符缓冲区
gets(user[count].name);//读取字符串,回车结束
while(1)
{
while(1)
{
printf("请输入密码:
");
fflush(stdin);//清空输入缓冲区
inputPass(user[count].pass);
length=strlen(user[count].pass);//计算字符串长度,其返回值是一个整数
if(length==6)
{
break;
}
else
{
printf("密码输入有误!请输入6位密码
");
}
}
printf("请再次输入密码:
");
inputPass(rePass);
if(strcmp(rePass,user[count].pass)==0)
{
break;
}
else
{
printf("两次密码输入不一致,请重新输入
");
}
}
account=account+1;
user[count].account=account;
user[count].money=0;
write();
printf("注册成功
");
printf("您的账号为:%d
",user[count].account);
if(count>=1)
{
printf("前一个注册的账号为:%d
",user[count-1].account);
}
count++;
}
(6)销户
void logout()
{
char confirm;//confirm 确认
printf("您正在使用注销功能
");
printf("%d确认注销?
",user[find].account);
printf("Y表示确定,其它字符表示取消
");
scanf("%c",&confirm);
if(confirm=='y'||confirm=='Y')
{
printf("正在注销%d
",user[find].account);
isLogout=1;
}else
{
printf("取消注销帐号%d,返回服务界面
",user[find].account);
isLogout=0;
}
}
(7)查询账户余额
void selectMoney()
{
printf("您正在使用查询余额功能
");
printf("您的账户余额为:%lf
",user[find].money);
}
(8)存款
void saveMoney()
{
int RMB;
printf("您正在使用存款功能
");
printf("请输入存款金额:
");
scanf("%d",&RMB);
user[find].money=user[find].money+RMB;
printf("存款成功
");
}
(9)取款
void getMoney()
{
int RMB;
printf("您正在使用取款功能
");
printf("请输入取款金额:
");
scanf("%d",&RMB);
if(user[find].money>=RMB)
{
user[find].money=user[find].money-RMB;
printf("取款成功
");
}
else
{
printf("余额不足
");
}
}
(10)转账
void transferMoney()
{
int i,username;//账号
int isFind=0;
int RMB;//转账金额
printf("您正在使用转账功能
");
printf("请输入对方的帐号:
");
scanf("%d",&username);
for(i=0;i<count;i++)
{
if(username==user[i].account)
{
dFind=i;
isFind=1;
break;
}
}
if(isFind==1)
{
printf("请输入转账金额:
");
scanf("%d,",&RMB);
if(user[find].money>=RMB)
{
user[find].money=user[find].money-RMB;
user[dFind].money=user[dFind].money+RMB;
printf("转账成功
");
}
else
{
printf("余额不足
");
}
}
else
{
printf("目标帐号不存在
");
}
}
(11)登录
void login()
{
int zhanghao;
int sign=0;
int i,j,find;
char loginPassword[7];
//提示 请输入账号
read();
printf("请输入帐号:
");
//获取输入的账号
scanf("%d",&zhanghao);
//将输入的账号与用户数组里的每一位用户的帐号进行对比
for(i=0;i<count;i++)
{
if(zhanghao==user[i].account)
{
sign=1;//将F标记设置为1
find=i;
break;
}
}
//如果匹配到了,提示请输入密码
if(sign==1)
{
for(j=1;j<=3;j++)
{
printf("请输入密码:
");
inputPass(loginPassword);
if(strcmp(loginPassword,user[find].pass)==0)
{
printf("登陆成功
");
printf(" 进入服务界面
");
service();
break;
}
else
{
if(j==3)
{
printf("密码三次输入错误,已锁定
!");
break;
}
printf("密码错误,请重新输入!
");
}
}
}
else
{
printf("账号错误
");
}
}
(12)服务界面
void service()
{
int choise;
while(1)
{
printf(" 1、查询余额 ");
printf(" 2、存款 ");
printf(" 3、取款
");
printf(" 4、转账 ");
printf(" 6、注销 ");
printf(" 7、退出系统
");
printf("请选择:");
scanf("%d",&choise);
switch(choise)
{
case 1:
selectMoney();break;//查询余额
case 2:
saveMoney();break;//存款
case 3:
getMoney();break;//取款
case 4:
transferMoney();break;//转账
case 6:
logout();
if(isLogout==1)
{
return;//直接结束所处函数
}
break;//注销
case 7:
break;return;//退出系统
default:
printf("您的输入有误,请重新输入!
");
}
}
}
printf(" 1.用户注册
");
printf(" 2.用户登录
");
printf(" 3.退出系统
");
printf(" 请选择:");
scanf("%d",&a);
if(a==1)
{
//执行注册函数
regist();
//printf("
执行注册");
}
else if(a==2)
{
//执行登录函数
login();
//printf("
执行登录");
}
else if(a==3)
{
//quit();
printf("执行退出
");
break;
}
else
{
printf("输入有误,请重新输入!");
}
(13)主函数
void main()
{
int a;
printf(" 欢迎进入ATM银行管理系统
");
while(1)
{
printf(" 1.用户注册
");
printf(" 2.用户登录
");
printf(" 3.退出系统
");
printf(" 请选择:");
scanf("%d",&a);
if(a==1)
{
//执行注册函数
regist();
//printf("
执行注册");
}
else if(a==2)
{
//执行登录函数
login();
//printf("
执行登录");
}
else if(a==3)
{
//quit();
printf("执行退出
");
break;
}
else
{
printf("输入有误,请重新输入!");
}
printf("按任意键继续...
");
getch();
}
}
2.2 运行截图
(1)用户信息文件
(2)查询余额
(3)存款
(4)取款
(5)转账
(6)开户
(7)销户
(8)登录
(9)退出系统
三、个人小结
(1).psp表格
psp2.1 | 任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 10 | 8 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 10 | 12 |
Development | 开发 | 100 | 150 |
Analysis | 需求分析(包括学习新技术) | 12 | 5 |
Design Spec | 生成设计文档 | 5 | 5 |
Design Review | 设计复审 | 5 | 5 |
Coding Standard | 代码规范 | 3 | 2 |
Design | 具体设计 | 10 | 12 |
Coding | 具体编码 | 36 | 21 |
Code Review | 代码复审 | 5 | 7 |
Test | 测试(自我测试,修改代码,提交修改) | 10 | 15 |
Reporting | 报告 | 9 | 6 |
Test Report | 测试报告 | 3 | 2 |
Size Measurement | 计算工作量 | 2 | 1 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 3 | 3 |
2)当你完成所有工作,你可以把你遇到的问题,如何解决变成经验与大家分享,共同进步
在这次作业之前,文件的读写对我来说是陌生的,通过这次作业,我基本掌握了文件的读写操作。