<>主要功能模块:
一、 登录界面
从左到右依次为:前十一位数代表账户号,接下来的六位数代表账户密码,带小数点的代表账户余额,接下来的1代表账户正常(3代表账户已经挂失),后面的1代表是管理员的账户,如果为2代表是普通用户账号。
二、普通用户
有六项功能
三、管理员
也是有六项功能
<>该自动取款具备管理员和普通用户两个界面,代码如下:
#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(
"本次转账为自己转给自己,鉴于你的无脑行为,本次转账将收取2.50元手续费\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 menu1() { printf(
"1.查看用户信息\n"); printf("2.挂失\n"); printf("3.解挂失\n"); printf("4.开户\n"); printf(
"5.修改用户密码\n"); printf("6.退出系统\n"); } void ChaXunYongHuXinXi() //查询用户信息 { while (
1) { printf("请输入要查找的用户的账户:"); char s[50]; scanf("%s", s); int flag = 0; for (int
i= 1; i <= UserNumber; i++) { if (strcmp(s, user[i].name) == 0) { flag = i;
break; } } if (flag == 0) { printf("用户不存在,是否重新查找y/n \n"); char f[5]; scanf("%s",
f); if (f[0] == 'n' || f[0] == 'N') return; } else if (user[flag].d == 1) {
printf("管理员账户,无权查看\n是否重新查找y/n \n"); char f[5]; scanf("%s", f); if (f[0] == 'n'
|| f[0] == 'N') return; } else { printf("查询成功\n"); printf("账号:%s\n", user[flag].
name); //printf("密码:%s\n", user[flag].key); printf("存款:%.2f\n", user[flag].money
); printf("账户状态:%d , ( 1.正常 2.冻结 3.挂失 )\n", user[flag].flag); printf(
"按任意键返回菜单\n"); getchar(); getchar(); return; } } } void GuaShi() // 挂失 { while (
1) { printf("请输入要挂失的用户的账户:"); char s[50]; scanf("%s", s); int flag = 0; for (int
i= 1; i <= UserNumber; i++) { if (strcmp(s, user[i].name) == 0) { flag = i;
break; } } if (flag == 0) { printf("用户不存在,是否重新查找y/n \n"); char f[5]; scanf("%s",
f); if (f[0] == 'n' || f[0] == 'N') return; } else if (user[flag].d == 1) {
printf("管理员账户,无权查看\n是否重新查找y/n \n"); char f[5]; scanf("%s", f); if (f[0] == 'n'
|| f[0] == 'N') return; } else { printf("查询成功\n"); printf("账号:%s\n", user[flag].
name); //printf("密码:%s\n", user[flag].key); printf("存款:%.2f\n", user[flag].money
); printf("账户状态:%d , ( 1.正常 2.冻结 3.挂失 )\n", user[flag].flag); printf("是否挂失y/n
(n将返回菜单)"); char f[5]; scanf("%s", f); if (f[0] == 'n' || f[0] == 'N') return;
else { user[flag].flag = 3; ChuCun(); } printf("挂失成功\n按任意键返回菜单\n"); getchar();
getchar(); return; } } } void JieGuaShi() // 解挂失 { while (1) { printf(
"请输入要解挂失的用户的账户:"); char s[50]; scanf("%s", s); int flag = 0; for (int i = 1; i
<= UserNumber; i++) { if (strcmp(s, user[i].name) == 0) { flag = i; break; } }
if (flag == 0) { printf("用户不存在,是否重新查找y/n \n"); char f[5]; scanf("%s", f); if (f[
0] == 'n' || f[0] == 'N') return; } else if (user[flag].d == 1) { printf(
"管理员账户,无权查看\n是否重新查找y/n \n"); char f[5]; scanf("%s", f); if (f[0] == 'n' || f[0]
== 'N') return; } else { printf("查询成功\n"); printf("账号:%s\n", user[flag].name);
//printf("密码:%s\n", user[flag].key); printf("存款:%.2f\n", user[flag].money);
printf("账户状态:%d , ( 1.正常 2.冻结 3.挂失 )\n", user[flag].flag); printf("是否解挂失y/n
(n将返回菜单)"); char f[5]; scanf("%s", f); if (f[0] == 'n' || f[0] == 'N') return;
else { user[flag].flag = 1; ChuCun(); } printf("解挂失成功\n按任意键返回菜单\n"); getchar();
getchar(); return; } } } void KaiHu() // 开户 { printf("开户中.....\n"); Sleep(1000);
int id = UserNumber + 1; while (1) { for (int i = 0; i < 11; i++) { user[id].
name[i] = rand()%9+1+'0'; } user[id].name[11] = '\0'; int flag = 0; for (int i =
1; i <= UserNumber; i++) { if (strcmp(user[id].name, user[i].name) == 0) { flag
= i; break; } } if (!flag)break; } printf("开户成功,账户为:%s\n", user[id].name); while
(1) { user[id].d = 2; user[id].flag = 1; user[id].money = 0.01; strcpy(user[id].
key,"111111"); char ss[50], cc[50]; while (1) { printf("请输入账户密码:"); strcpy(ss,
get_password()); if (strlen(ss) != 6) { printf("密码必须6位,请重新输入密码\n"); memset(ss,
'\0', sizeof(char) * 50); } else { printf("请再次输入账户密码:"); strcpy(cc, get_password
()); if (strcmp(ss, cc) != 0) { printf("两次密码不一致\n请重新输入密码\n"); memset(ss, 0,
sizeof(ss)); memset(cc, 0, sizeof(cc)); } else { strcmp(user[id].key, ss);
UserNumber++; ChuCun(); printf("密码设置成功\n,开户成功\n按任意键返回\n"); getchar(); getchar();
return; } } } } } void XiuGaiYongHuMiMa() // 修改用户密码 { while (1) { printf(
"请输入要修改密码的用户的账户:"); char s[50]; scanf("%s", s); int flag = 0; for (int i = 1; i
<= UserNumber; i++) { if (strcmp(s, user[i].name) == 0) { flag = i; break; } }
if (flag == 0) { printf("用户不存在,是否重新查找y/n \n"); char f[5]; scanf("%s", f); if (f[
0] == 'n' || f[0] == 'N') return; } else if (user[flag].d == 1) { printf(
"管理员账户,无权查看\n是否重新查找y/n \n"); char f[5]; scanf("%s", f); if (f[0] == 'n' || f[0]
== 'N') return; } else { printf("查询成功\n"); printf("账号:%s\n", user[flag].name);
//printf("密码:%s\n", user[flag].key); printf("存款:%.2f\n", user[flag].money);
printf("账户状态:%d , 1.正常 2.冻结 3.挂失\n", user[flag].flag); printf("是否修改密码y/n
(n将返回菜单)"); char f[5]; scanf("%s", f); if (f[0] == 'n' || f[0] == 'N') return;
else { char ss[50],cc[50]; while (1) { printf("请输入账户新密码:"); strcpy(ss,
get_password()); if (strlen(ss) != 6) { printf("密码必须6位,请重新输入新密码\n"); memset(ss,
'\0', sizeof(char) * 50); } else { printf("请再次输入账户新密码:"); strcpy(cc,
get_password()); if (strcmp(ss, cc) != 0) { printf("两次密码不一致,密码更改失败\n请重新输入密码\n");
memset(ss,0,sizeof(ss)); memset(cc,0,sizeof(cc)); } else { strcpy(user[flag].key
,ss); ChuCun(); printf("密码修改成功,按任意键返回\n"); getchar(); getchar(); return; } } } }
} } } 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; }