ATM管理系统
| 博客班级 | https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19 |
| ---- | ---- | ---- |
| 作业要求 | https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19/homework/11477 |
| 作业目标 | 编写一个ATM管理系统,具有开户,销户,存款等功能 |
| 学号 | 3190704104 |
代码提交
include <stdio.h>
include <string.h>
include <stdlib.h>
include <conio.h>
include <time.h>
include <windows.h>
using namespace std;
/flagI标记当前登录账户,flagN标记当前转账的账户/
int flagI, flagN;
int userID = 0;
int UserNumber = 0;
struct User //这里面变量的位置不要动
{
char name[50]; //账号
double money; //金额
int flag; //账号能否正常使用, 1表示能,2表示冻结,3表示挂失,,等等,你自己可以随便定义;
int d; //账户类型
char key[50]; //密码
} user[10000];
void ChuCun() //更新用户信息
{
FILE* fp;
if ((fp = fopen("user.txt", "w")) != NULL)
{
for(int i=1; i<=UserNumber; i++)
{
fwrite(&user[i], sizeof(struct User), 1, fp);
}
fclose(fp);
}
else printf("用户信息更新失败");
}
void TiQu() //提取用户信息
{
UserNumber = 0;
FILE* fp;
if ((fp = fopen("user.txt", "r")) != NULL)
{
while (!feof(fp))
{
fread(&user[++UserNumber], sizeof(struct User), 1, fp);
}
fclose(fp);
}
else printf("用户信息加载失败");
UserNumber--; //
}
void drawmoney()//功能1:取款业务
{
int a, i;
char c;
while (1)
{
printf("\t请输入您的取款金额(整百):");
scanf("%d", &a);
if (a > user[userID].money)
printf("\t账户余额不足,请重新输入!\n");
else if (a < 0 || a % 100 != 0)
printf("\t输入有误,请重新输入!\n");
else
break;
}
getchar();
user[userID].money -= a;
printf("\t取款成功,请收好您的钞票!\n");
printf("\t是否打印凭条? y/n ");
scanf("%c", &c);
getchar();
if (c == 'Y' || c == 'y')
{
printf("\t正在打印请稍后。。。。。\n\t\t");
for (i = 0; i < 10; i++)
{
printf("■");
Sleep(200);
}
printf("\n");
ChuCun();
printf("\t打印完成,请收好您的凭条\n");
printf("\t请按Enter键退出\n");
getchar();
}
else
{
printf("\t请按Enter键退出\n");
getchar();
}
}
void savemoney()//功能2:存款业务
{
int a, i;
char c;
while (1)
{
printf("\t请输入您的存款金额(整百):");
scanf("%d", &a);
if (a < 0 || a % 100 != 0)
printf("\t输入有误,请重新输入!\n");
else
break;
}
getchar();
user[userID].money += a;
printf("\t存款成功\n");
printf("\t是否打印凭条? y/n ");
scanf("%c", &c);
getchar();
if (c == 'Y' || c == 'y')
{
printf("\t正在打印请稍侯。。。。。\n\t\t");
for (i = 0; i < 10; i++)
{
printf("■");
Sleep(200);
}
printf("\n");
ChuCun();
printf("\t打印完成,请收好您的凭条\n");
printf("\t请按Enter键退出\n");
getchar();
}
else
{
printf("\t请按Enter键退出\n");
getchar();
}
}
void showmoney()//功能3:查询余额
{
printf("\t用户名 :%s\n", user[userID].name);
printf("\t账户余额:%.2lf\n", user[userID].money);
printf("\t请按Enter键返回\n");
getchar();
}
char* get_password()//星号密码获取函数;
{
int i = 0;
char a[50];
char ch = '\0';
while (ch != '\r')
{
ch = _getch();//无回显的从键盘接收一个字符,
if (ch == 8) //8是退格符的 ASSIC码。
{
a[--i] = '\0';
putchar(8);
putchar(' ');
putchar(8);
}
else
{
if (ch == '\r')
break;
a[i++] = ch;
printf("*");//输出星号
}
}
a[i] = '\0';
printf("\n");
return &a[0];
}
void updatekey()//功能4:密码修改业务
{
char ch[10];
char str[10];
int i;
printf("\t请输入您的初始密码 :");
strcpy(ch, get_password());
while (1)
{
if (strcmp(ch, user[userID].key) != 0)
{
printf("\t您的初始密码输入错误请重新输入:");
strcpy(ch, get_password());
}
else
break;
}
while (1)
{
printf("\t请输入您要修改的密码 :");
strcpy(ch, get_password());
printf("\t请再次输入要修改的密码:");
strcpy(str, get_password());
if (strcmp(ch, str) == 0)
{
strcpy(user[userID].key, ch);
printf("\t正在为您修改,请稍候\n\t");
for (i = 0; i < 10; i++)
{
printf("■");
Sleep(200);
}
ChuCun();
printf("\n\t密码修改成功\n");
printf("\t请按回车键退出\n");
getchar();
break;
}
else
printf("\t您两次密码输入不一致,请重新输入!\n");
}
}
void transfer() // 功能5: 转账
{
char a[50];
while (1)
{
printf("请输入转账人账户:");
scanf("%s", a);
int flag = 0;
for (int i = 1; i <= UserNumber; i++)
{
if (strcmp(a, user[i].name) == 0)
{
flag = i;
break;
}
}
if (flag == 0)
{
printf("收款人未在此银行或不存在,转账失败\n");
while (1)
{
printf("1.重新输入账号\n2.退出\n请输入编号:");
int b=0;
scanf("%d", &b);
if (b == 2)
return;
else if (b == 1)
break;
else
printf("编号错误\n");
}
}
else if (flag == userID)
{
printf("本次转账为自己转给自己,鉴于你的笨比行为,本次转账将收取250元手续费\n请输入转账金额:");
double s=0;
int x = 0;
while (1)
{
if (x)
printf("余额不足,请重新输入转账金额:");
x = 0;
scanf("%lf", &s);
if (user[userID].money - 2.50 < s)
x = 1;
if (!x)
{
printf("转账金额为:%.2f\n是否确认转账y/n (n将返回菜单)", s);
char f[5];
scanf("%s", f);
if (f[0] == 'n' || f[0] == 'N')
return;
user[flag].money += s;
user[userID].money -= ( s + 2.50 );
ChuCun();
printf("转账成功\n");
Sleep(800);
return;
}
}
}
else
{
printf("请输入转账金额:");
double s=0;
//scanf("%lf",&s);
int x = 0;
while (1)
{
if (x){
printf("余额不足,是否重新输入转账金额y/n(n将返回菜单)");
char ff[5];
scanf("%s",ff);
if(ff[0]=='n' || ff[0]=='N')
return ;
else printf("重新输入转账金额\n");
}
x = 0;
scanf("%lf", &s);
if (user[userID].money - 2.50 < s)
x = 1;
if (!x)
{
printf("转账金额为:%.2f\n是否确认转账y/n (n将返回菜单)", s);
char f[5];
scanf("%s", f);
if (f[0] == 'n' || f[0] == 'N')
return;
user[flag].money += s;
user[userID].money -= s;
ChuCun();
printf("转账成功\n");
Sleep(800);
return;
}
}
}
}
}
void exitsystem()//功能6:退出系统
{
system("cls");
ChuCun();
printf("\n");
printf("请按Enter键退出\n");
getchar();
}
int login() //登陆函数;
{
char a[50];
char b[50];
int count = 0, i, flag = 0;
while (1)
{
printf("\t请输入您的用户名:");
scanf("%s", a);
printf("\t请输入您的密码 :");
strcpy(b, get_password());
int fff = 0;
for (int i = 1; i <= UserNumber; i++)
{
if (strcmp(a, user[i].name) == 0 && strcmp(b, user[i].key) == 0)
{
fff = 1;
userID = i;
}
}
if (!fff)
printf("\t用户名或者密码输入错误!请重新输入!\n");
else if(user[userID].flag==3){
printf("该用户已经挂失,请重新登录!\n");
system("pause");
return 1;
}
else if(user[userID].flag==2){
printf("该用户已经冻结,请重新登录!\n");
system("pause");
return 1;
}
else
{
printf("\t\t\t正在登陆 请稍后\n");
printf("\t\t\t");
for (i = 0; i < 8; i++)
{
printf("■");
Sleep(100); //让系统在此处停留500毫秒之后在运行。
}
printf("\n");
break;
}
count++;
if (count == 3)
{
printf("\t\t您输入错误已超过三次,系统已退出!\n");
system("color 4a");
flag = 1;
break;
}
}
return flag;
}
void wel()//欢迎界面;
{
printf("\t\t\t欢迎欢迎热烈欢迎\n");
}
void menu()//主菜单;
{
printf("1.取款\n");
printf("2.存款\n");
printf("3.查询余额\n");
printf("4.修改密码\n");
printf("5.转账\n");
printf("6.退出系统\n");
}
void init()
{
UserNumber = 1;
strcpy(user[1].name,"11111111111");
strcpy(user[1].key,"123456");
user[1].money = 0.01;
user[1].flag = 1;
user[1].d = 1;
ChuCun();
return;
}
int main()
{
/* init();
return 0;*///这两段先运行一次,运行一次之后注释掉。
srand((int)time(0));
TiQu();//加载用户信息
system("color f");
while(1)
{
system("cls");
for (int i = 1; i <= UserNumber; i++)
{
printf("-%s-%s-%.2f-%d-%d-\n", user[i].name, user[i].key, user[i].money, user[i].flag, user[i].d);
}
wel();
printf("\t\t\t确定登陆?Y/N ");
char c;
scanf("%c", &c);
getchar();
if (c == 'n' || c == 'N')
{
exitsystem();
break;
}
else
{
int f;
system("cls"); //清屏
printf("\t\t\t进入中,请稍候.......\n\n");
Sleep(800);
printf(" *******************************\n");
printf(" * 欢迎使用 ATM 柜台机 *\n");
f = login();
system("cls");
if (f == 1)
{
printf("正在退出系统。。。。");
Sleep(3000);
exitsystem();
}
else
{
if (user[userID].d == 2)
{
while (1)
{
menu(); //菜单
printf("\n\t请输入代号:");
int m;
scanf("%d", &m);
getchar();
if (m == 1)
{
Sleep(500);
drawmoney();
system("cls");
}
else if (m == 2)
{
Sleep(500);
savemoney();
system("cls");
}
else if (m == 3)
{
Sleep(500);
showmoney();
system("cls");
}
else if (m == 4)
{
Sleep(500);
updatekey();
system("cls");
}
else if (m == 5)
{
Sleep(500);
transfer();
system("cls");
}
else if (m == 6)
{
exitsystem();
break;
}
}
}
else if (user[userID].d == 1)
{
while (1)
{
menu1(); //菜单
printf("\n\t请输入代号:");
int m;
scanf("%d", &m);
getchar();
if (m == 1)
{
Sleep(500);
ChaXunYongHuXinXi();
system("cls");
}
else if (m == 2)
{
Sleep(500);
GuaShi();
system("cls");
}
else if (m == 3)
{
Sleep(500);
JieGuaShi();
system("cls");
}
else if (m == 4)
{
Sleep(500);
KaiHu();
system("cls");
}
else if (m == 5)
{
Sleep(500);
XiuGaiYongHuMiMa();
system("cls");
}
else if (m == 6)
{
exitsystem();
break;
}
}
}
}
}
ChuCun();
}
return 0;
}
运行界面:
六项功能
个人小结:
| psp2.1 |任务内容| 计划完成需要的时间(min) |实际完成需要的时间(min) |
| --------------|--------|----------|--------- | ------ |
| Planning |计划 |10 |12 |
| Estimate |估计这个任务需要多少时间,并规划大致工作步骤 |5 |4 |
| Development |开发 |180 |200 |
| Analysis |需求分析(包括学习新技术) |15 |18 |
| Design Spec |生成设计文档 |5 |5 |
| Design Review |设计复审 |10 |12 |
| Coding Standard |代码规范 |3 |3 |
| Design |具体设计 |15 |15 |
| Coding |具体编码 |120 |110 |
| Code Review |代码复审 |10 |11 |
| Test |测试(自我测试,修改代码,提交修改) |10 |10 |
| Reporting |报告 |10 |10 |
| Test Report |测试报告 |2 |2 |
| Size Measurement |计算工作量 |3 |3 |
| Postmortem & Process Improvement Plan |事后总结,并提出过程改进计划 |10 |10 |