这个作业属于哪个课程 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11478 |
这个作业的目标 | 编写一个比较基本的ATM系统 |
学号 | 3180701330 |
题目要求
编写一个ATM管理系统,语言不限,要求应包括以下主要功能:
(1)开户,销户
(2)查询账户余额
(3)存款
(4)取款
(5)转账(一个账户转到另一个账户)等...
程序设计:
(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\n", &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\n", user[count].name, user[count].pass, user[count].account, user[count].money);//写入文件
fclose(fp); //关闭文件
}
(5)开户
void regist()
{
int length;
char rePass[7];
printf("请输入用户名:\n");
//要使用一个字符串接收输入的用户名
fflush(stdin);//刷新字符缓冲区
gets(user[count].name);//读取字符串,回车结束
while (1)
{
while (1)
{
printf("请输入密码:\n");
fflush(stdin);//清空输入缓冲区
inputPass(user[count].pass);
length = strlen(user[count].pass);//计算字符串长度,其返回值是一个整数
if (length == 6)
{
break;
}
else
{
printf("密码输入有误!请输入6位密码\n");
}
}
printf("请再次输入密码:\n");
inputPass(rePass);
if (strcmp(rePass, user[count].pass) == 0)
{
break;
}
else
{
printf("两次密码输入不一致,请重新输入\n");
}
}
account = account + 1;
user[count].account = account;
user[count].money = 0;
write();
printf("注册成功\n");
printf("您的账号为:%d\n", user[count].account);
if (count >= 1)
{
printf("前一个注册的账号为:%d\n", user[count - 1].account);
}
count++;
}
(6)销户
void logout()
{
char confirm;//confirm 确认
printf("您正在使用注销功能\n");
printf("%d确认注销?\n", user[find].account);
printf("Y表示确定,其它字符表示取消\n");
scanf("%c", &confirm);
if (confirm == 'y' || confirm == 'Y')
{
printf("正在注销%d\n", user[find].account);
isLogout = 1;
}
else
{
printf("取消注销帐号%d,返回服务界面\n", user[find].account);
isLogout = 0;
}
}
(7)查询账户余额
void selectMoney()
{
printf("您正在使用查询余额功能\n");
printf("您的账户余额为:%lf\n", user[find].money);
}
(8)存款
void saveMoney()
{
int RMB;
printf("您正在使用存款功能\n");
printf("请输入存款金额:\n");
scanf("%d", &RMB);
user[find].money = user[find].money + RMB;
printf("存款成功\n");
}
(9)取款
void getMoney()
{
int RMB;
printf("您正在使用取款功能\n");
printf("请输入取款金额:\n");
scanf("%d", &RMB);
if (user[find].money >= RMB)
{
user[find].money = user[find].money - RMB;
printf("取款成功\n");
}
else
{
printf("余额不足\n");
}
}
(10)转账
void transferMoney()
{
int i, username;//账号
int isFind = 0;
int RMB;//转账金额
printf("您正在使用转账功能\n");
printf("请输入对方的帐号:\n");
scanf("%d", &username);
for (i = 0; i < count; i++)
{
if (username == user[i].account)
{
dFind = i;
isFind = 1;
break;
}
}
if (isFind == 1)
{
printf("请输入转账金额:\n");
scanf("%d,", &RMB);
if (user[find].money >= RMB)
{
user[find].money = user[find].money - RMB;
user[dFind].money = user[dFind].money + RMB;
printf("转账成功\n");
}
else
{
printf("余额不足\n");
}
}
else
{
printf("目标帐号不存在\n");
}
}
(11)登录
void login()
{
int zhanghao;
int sign = 0;
int i, j, find;
char loginPassword[7];
//提示 请输入账号
read();
printf("请输入帐号:\n");
//获取输入的账号
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("请输入密码:\n");
inputPass(loginPassword);
if (strcmp(loginPassword, user[find].pass) == 0)
{
printf("登陆成功\n");
printf("\t\t\t进入服务界面\n");
service();
break;
}
else
{
if (j == 3)
{
printf("密码三次输入错误,已锁定\n!");
break;
}
printf("密码错误,请重新输入!\n");
}
}
}
else
{
printf("账号错误\n");
}
}
(12)服务界面
void service()
{
int choise;
while (1)
{
printf("\t1、查询余额\t");
printf("\t2、存款 \t");
printf("\t3、取款 \n");
printf("\t4、转账 \t");
printf("\t6、注销 \t");
printf("\t7、退出系统\n");
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("您的输入有误,请重新输入!\n");
}
}
}
printf("\t\t\t\t1.用户注册\n");
printf("\t\t\t\t2.用户登录\n");
printf("\t\t\t\t3.退出系统\n");
printf("\t\t\t\t请选择:");
scanf("%d", &a);
if (a == 1)
{
//执行注册函数
regist();
//printf("\n\n\t\t执行注册");
}
else if (a == 2)
{
//执行登录函数
login();
//printf("\n\n\t\t执行登录");
}
else if (a == 3)
{
//quit();
printf("执行退出\n");
break;
}
else
{
printf("输入有误,请重新输入!");
}
(13)主函数
void main()
{
int a;
printf("\t\t\t欢迎进入ATM银行管理系统\n");
while (1)
{
printf("\t\t\t\t1.用户注册\n");
printf("\t\t\t\t2.用户登录\n");
printf("\t\t\t\t3.退出系统\n");
printf("\t\t\t\t请选择:");
scanf("%d", &a);
if (a == 1)
{
//执行注册函数
regist();
//printf("\n\n\t\t执行注册");
}
else if (a == 2)
{
//执行登录函数
login();
//printf("\n\n\t\t执行登录");
}
else if (a == 3)
{
//quit();
printf("执行退出\n");
break;
}
else
{
printf("输入有误,请重新输入!");
}
printf("按任意键继续...\n");
getch();
}
}
运行截图:
psp2.1 | 任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 10 | 25 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 10 | 10 |
Development | 开发 | 100 | 210 |
Analysis | 需求分析(包括学习新技术) | 12 | 45 |
Design Spec | 生成设计文档 | 5 | 5 |
Design Review | 设计复审 | 5 | 5 |
Coding Standard | 代码规范 | 3 | 2 |
Design | 具体设计 | 10 | 12 |
Coding | 具体编码 | 36 | 60 |
Code Review | 代码复审 | 5 | 3 |
Test | 测试(自我测试,修改代码,提交修改) | 10 | 30 |
Reporting | 报告 | 9 | 6 |
Test Report | 测试报告 | 3 | 2 |
Size Measurement | 计算工作量 | 2 | 1 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 3 | 3 |