#include "stdio.h" |
#include "stdlib.h" |
#include "conio.h" |
#define N 200 |
void zhanghao(); //账号 |
void xuanzhe(); //选择函数 |
void enter_ATM(); //账号输入函数 |
void input_code(); //密码输入函数 |
void caozuo(); //基本操作界面 |
void qukuan(); //取款函数 |
void success(); //操作成功函数 |
void delay(); //延时函数 |
void YU_E(); //余额查询函数 |
void cunkuan(); //存款函数 |
void panduan( double z); //判断取款是否合法函数 |
void exit (); //退出界面函数 |
void mima(); //密码修改 |
void zhuanzhang(); //转账函数 |
void read(); //文件写入函数 |
void write(); //文件读取函数 |
void guanli(); //管理员函数 |
void tequancode(); //管理员密码 |
void hu(); //户 |
void xinxi(); //信息 |
void gmima(); //管理员改密 |
void CAOZUO(); //管理员操作函数 |
void yinghang(); //银行账户查询函数 |
void jia(); //账户添加函数 |
void shanchu(); //账户删除函数 |
typedef struct |
{ |
long int zhanghao; |
int mima; |
double yu_e; |
}atm; |
atm guan[N]; |
int k; |
////////////////////////////////////////////////////////////主函数 |
void main() |
{ |
xuanzhe(); |
} |
////////////////////////////////////////////////////////////功能选择函数 |
void xuanzhe() |
{ |
system ( "cls" ); |
printf ( "* 请选择功能 *\n" ); |
printf ( "* 1.管理员 2.用户 *\n" ); |
switch (getch()) |
{ |
case '1' :tequancode(); break ; |
case '2' :enter_ATM(); break ; |
default :{ |
printf ( "\a非法输入" ); |
delay(); |
system ( "cls" ); |
xuanzhe(); |
}; break ; |
} |
} |
///////////////////////////////////////////////////////////柜台机账号输入函数 |
void enter_ATM() |
{ |
delay(); |
system ( "cls" ); |
read(); |
printf ( "* 欢迎使用 ATM 柜台机 *\n" ); |
printf ( "* 请输入卡号 *\n" ); |
long int user; |
scanf ( "%d" , &user); |
if (user == 0) |
{ |
printf ( "* 账号错误 *\n" ); |
enter_ATM(); |
} |
else if (user != (guan[k].zhanghao)) |
{ |
for (k = 1; k<N; k++) |
{ |
if (user == (guan[k].zhanghao)) |
input_code(); |
} |
system ( "cls" ); |
printf ( "* 账户不存在,请从新输入 *\n" ); |
enter_ATM(); |
} |
else |
input_code(); |
} |
////////////////////////////////////////////////////////////////密码输入函数 |
void input_code() |
{ |
long int code; |
int temp = 3; |
read(); |
system ( "cls" ); |
printf ( "* 请输入密码 *\n" ); |
scanf ( "%d" , &code); |
while (code != guan[k].mima) |
{ |
temp--; |
system ( "cls" ); |
printf ( "* 密码错误,请重新输入 *\n" ); |
printf ( "* 您还有 " ); |
printf ( "%d" , temp); |
printf ( " 次机会 *\n" ); |
scanf ( "%d" , &code); |
if (temp == 1) |
{ |
system ( "cls" ); |
printf ( "* 您已经 3 次输入密码 *\n" ); |
printf ( "* 系统将退出操作 *\n" ); |
delay(); |
enter_ATM(); |
} |
} |
caozuo(); |
} |
//////////////////////////////////////////////////////////////////主操作界面函数 |
void caozuo() |
{ |
system ( "cls" ); |
printf ( "********************************\n" ); |
printf ( "* 请选择一下业务 *\n" ); |
printf ( "* 1.修改密码 *\n" ); |
printf ( "* 2.查询余额 *\n" ); |
printf ( "* 3.取款 *\n" ); |
printf ( "* 4.存款 *\n" ); |
printf ( "* 5.转账 *\n" ); |
printf ( "* 6.退出 *\n" ); |
printf ( "********************************\n" ); |
switch (getch()) |
{ |
case '1' : mima(); break ; |
case '2' : YU_E(); break ; |
case '3' : qukuan(); break ; |
case '4' : cunkuan(); break ; |
case '5' : zhuanzhang(); break ; |
case '6' : exit (); break ; |
default :{ |
printf ( "\a非法操作\n" ); |
caozuo(); |
}; |
} |
} |
//////////////////////////////////////////////////////////////////////密码修改函数 |
void mima() |
{ |
long int mm1, mm2, mm3; |
int temp; |
system ( "cls" ); |
printf ( "旧密码:" ); |
scanf ( "%d" , &mm1); |
printf ( "\n" ); |
if (mm1 != guan[k].mima) |
{ |
system ( "cls" ); |
printf ( "旧密码错误,请重新输入\n" ); |
delay(); |
mima(); |
} |
printf ( "新密码:" ); |
scanf ( "%d" , &mm2); |
if (mm2<100000 || mm2>999999) |
{ |
system ( "cls" ); |
printf ( " 密码必须等于6位数 \n" ); |
printf ( " 请重新输入! \n" ); |
delay(); |
mima(); |
} |
temp = mm2 % 111111; |
if (temp == 0) |
{ |
system ( "cls" ); |
printf ( " 密码过于简单 \n" ); |
printf ( " 请重新输入! \n" ); |
delay(); |
mima(); |
} |
printf ( "\n" ); |
printf ( "确认新密码:" ); |
scanf ( "%d" , &mm3); |
if (mm2 != mm3) |
{ |
system ( "cls" ); |
printf ( "确认密码不一致,请重新输入\n" ); |
delay(); |
mima(); |
} |
if (mm3 = mm2) |
{ |
guan[k].mima = mm3; |
write(); |
success(); |
} |
} |
////////////////////////////////////////////////////////////////////余额查询函数 |
void YU_E() |
{ |
read(); |
system ( "cls" ); |
printf ( "你的余额为:%lf\n" , (guan[k].yu_e)); |
printf ( "1.返回 2.退出 \n" ); |
switch (getch()) |
{ |
case '1' : caozuo(); break ; |
case '2' : exit (); break ; |
} |
} |
/////////////////////////////////////////////////////////////////////////取款函数 |
void qukuan() |
{ |
double temp; |
system ( "cls" ); |
printf ( " 请选择您要取款的金额 \n" ); |
printf ( " 1.100 2.200 \n" ); |
printf ( " 3.500 4.800 \n" ); |
printf ( " 5.1000 6.其它 \n" ); |
printf ( " \n" ); |
printf ( " 7.返回 8.退出 \n" ); |
switch (getch()) |
{ |
case '1' : panduan(100); break ; |
case '2' : panduan(200); break ; |
case '3' : panduan(500); break ; |
case '4' : panduan(800); break ; |
case '5' : panduan(1000); break ; |
case '6' : |
system ( "cls" ); |
printf ( "请输入您要取款的金额:" ); |
scanf ( "%lf" , &temp); |
panduan(temp); break ; |
case '7' :caozuo(); break ; |
case '8' : exit (); break ; |
} |
} |
///////////////////////////////////////////////////////////////////判断取款是否合法函数 |
void panduan( double z) |
{ |
int beishu; |
if (z>(guan[k].yu_e)) |
{ |
system ( "cls" ); |
printf ( " 余额不足! \n" ); |
printf ( " 请重新操作 \n" ); |
printf ( " 1.返回 2.退出 \n" ); |
switch (getch()) |
{ |
case '1' : qukuan(); |
case '2' : exit (); |
} |
} |
beishu = ( int )z % 100; |
if (beishu != 0) |
{ |
system ( "cls" ); |
delay(); |
printf ( " 本ATM机只支持 100 的人民币 \n" ); |
printf ( " 请重新操作 \n" ); |
printf ( " \n" ); |
printf ( " 1.返回 2.退出 \n" ); |
switch (getch()) |
{ |
case '1' : qukuan(); |
case '2' : exit (); |
} |
} |
if (z == 5000.00 || z>5000.00) |
{ |
system ( "cls" ); |
printf ( " 每次取款不能超过 5000 元 \n" ); |
printf ( " 请重新操作 \n" ); |
printf ( " \n" ); |
printf ( " 1.返回 2.退出 \n" ); |
switch (getch()) |
{ |
case '1' : qukuan(); |
case '2' : exit (); |
} |
} |
(guan[k].yu_e) -= z; |
write(); |
success(); |
} |
/////////////////////////////////////////////////////////////////存款函数 |
void cunkuan() |
{ |
double cun; |
system ( "cls" ); |
printf ( " 请放入人民币:" ); |
scanf ( "%lf" , &cun); |
while (cun<0) |
{ |
system ( "cls" ); |
printf ( " 非法存款 \n" ); |
printf ( " 请重新放入人民币 \n" ); |
scanf ( "%lf" , &cun); |
} |
(guan[k].yu_e) += cun; |
write(); |
success(); |
} |
/////////////////////////////////////////////////////////////////转账号函数 |
void zhuanzhang() |
{ |
int i, hao; |
double money; |
long int a = 2109999999; |
system ( "cls" ); |
delay(); |
read(); |
printf ( "* 请输入账号 *\n" ); |
scanf ( "%d" , &hao); |
printf ( "* 请输入金额 *\n" ); |
scanf ( "%lf" , &money); |
if (hao<1000000000 || hao>a) |
{ |
printf ( "* 账号错误,操作取消 *\n" ); |
delay(); |
delay(); |
caozuo(); |
} |
else if (money>guan[k].yu_e || money<0) |
{ |
printf ( "* 金额错误,操作取消 *\n" ); |
delay(); |
delay(); |
caozuo(); |
} |
else |
{ |
read(); |
for (i = 1; i<N; i++) |
{ |
if (guan[i].zhanghao == hao) break ; |
} |
guan[k].yu_e -= money; |
guan[i].yu_e += money; |
write(); |
success(); |
} |
} |
///////////////////////////////////////////////////////延时函数 |
void delay() |
{ |
long int bl1; |
int bl2; |
for (bl1 = 600000; bl1>0; bl1--) |
{ |
for (bl2 = 300; bl2>0; bl2--); |
} |
} |
/////////////////////////////////////////////////操作成功函数 |
void success() |
{ |
system ( "cls" ); |
printf ( " 操作已成功 \n" ); |
printf ( " \n" ); |
printf ( " 1.返回 2.退出 \n" ); |
switch (getch()) |
{ |
case '1' :caozuo(); break ; |
case '2' : exit (); break ; |
} |
} |
//////////////////////////////////////////////系统退出函数 |
void exit () |
{ |
system ( "cls" ); |
printf ( "* 欢迎您的再次使用 *\n" ); |
printf ( "* 系统正在退出... *\n" ); |
delay(); |
xuanzhe(); |
} |
////////////////////////////////////////////////////文件读取函数 |
void read() |
{ |
int i; |
FILE *fp; |
fp = fopen ( "xinxi.txt" , "r" ); |
if (fp == NULL) |
{ |
printf ( "打开文件失败\n" ); |
return ; |
} |
for (i = 0; i<N; i++) |
{ |
fscanf (fp, "%d " , &(guan[i].zhanghao)); |
fscanf (fp, "%d " , &(guan[i].mima)); |
fscanf (fp, "%lf\n" , &(guan[i].yu_e)); |
} |
fclose (fp); |
} |
/////////////////////////////////////////////////////////////文件写入函数 |
void write( int i) |
{ |
FILE *fp; |
fopen_s(fp, "用户信息.dat" , "ab+" ); |
if (fp == NULL) |
{ |
printf ( "打开文件失败\n" ); |
return ; |
} |
fprintf (fp, "%d " , guan[i].zhanghao); |
fprintf (fp, "%d " , guan[i].mima); |
fprintf (fp, "%lf\n" , guan[i].yu_e); |
fclose (fp); |
} |
void tequancode() |
{ |
long int code; |
int temp = 2; |
read(); |
system ( "cls" ); |
printf ( "* 请输入管理员密码 *\n" ); |
scanf ( "%d" , &code); |
while (code != guan[0].mima) |
{ |
system ( "cls" ); |
printf ( "* 密码错误,请重新输入 *\n" ); |
printf ( "* 您还有 " ); |
printf ( "%d" , temp); |
printf ( " 次机会 *\n" ); |
scanf ( "%d" , &code); |
temp--; |
if (temp == 0) |
{ |
system ( "cls" ); |
printf ( "*\a 您已经 3 次输入密码 *\n" ); |
printf ( "* 系统将退出操作 *\n" ); |
delay(); |
xuanzhe(); |
} |
} |
guanli(); |
} |
////////////////////////////////////////////////////////////////管理员函数 |
void guanli() |
{ |
system ( "cls" ); |
delay(); |
printf ( "* 1.信息查询 *\n" ); |
printf ( "* 2.操作 *\n" ); |
printf ( "* 3.退出 *\n" ); |
switch (getch()) |
{ |
case '1' :zhanghao(); break ; |
case '2' :CAOZUO(); break ; |
case '3' : exit (); break ; |
default :{ |
printf ( "\a非法操作" ); |
guanli(); |
}; |
} |
} |
/////////////////////////////////////账号 |
void zhanghao() |
{ |
system ( "cls" ); |
read(); |
printf ( " 请输入账号 \n" ); |
long int user; |
scanf ( "%d" , &user); |
if (user != (guan[k].zhanghao)) |
{ |
for (k = 1; k<N; k++) |
{ |
if (user == (guan[k].zhanghao)) |
hu(); |
} |
system ( "cls" ); |
printf ( "* 账户不存在,请从新输入 *\n" ); |
delay(); |
guanli(); |
} |
else |
{ |
delay(); |
hu(); |
} |
} |
////////////////////////////////////////////////账户 |
void hu() |
{ |
system ( "cls" ); |
printf ( "* 1.信息 2.改密码 *\n" ); |
printf ( "* 3.返回 4.退出 *\n" ); |
switch (getch()) |
{ |
case '1' :xinxi(); break ; |
case '2' :gmima(); break ; |
case '3' :zhanghao(); break ; |
case '4' :guanli(); break ; |
default :{ |
printf ( "\a非法操作\n" ); |
hu(); |
}; |
} |
} |
///////////////////////////////////////////////信息 |
void xinxi() |
{ |
system ( "cls" ); |
read(); |
printf ( "*账号 密码 余额*\n" ); |
printf ( "%d " , guan[k].zhanghao); |
printf ( "%d " , guan[k].mima); |
printf ( "%lf \n" , guan[k].yu_e); |
printf ( "* 1.返回 2.退出 *\n" ); |
switch (getch()) |
{ |
case '1' :hu(); break ; |
case '2' :guanli(); break ; |
} |
} |
///////////////////////////////////////////管理员改密 |
void gmima() |
{ |
long int mm1, mm2, mm3; |
char temp; |
system ( "cls" ); |
printf ( "旧密码:" ); |
scanf ( "%d" , &mm1); |
printf ( "\n" ); |
if (mm1 != guan[k].mima) |
{ |
system ( "cls" ); |
printf ( "旧密码错误,请重新输入\n" ); |
delay(); |
gmima(); |
} |
printf ( "新密码:" ); |
scanf ( "%d" , &mm2); |
if (mm2<100000 || mm2>999999) |
{ |
system ( "cls" ); |
printf ( " 密码必须等于6位数 \n" ); |
printf ( " 请重新输入! \n" ); |
delay(); |
gmima(); |
} |
temp = mm2 % 111111; |
if (temp == 0) |
{ |
system ( "cls" ); |
printf ( " 密码过于简单 \n" ); |
printf ( " 请重新输入! \n" ); |
delay(); |
gmima(); |
} |
printf ( "\n" ); |
printf ( "确认新密码:" ); |
scanf ( "%d" , &mm3); |
if (mm2 != mm3) |
{ |
system ( "cls" ); |
printf ( "确认密码不一致,请重新输入\n" ); |
delay(); |
gmima(); |
} |
if (mm3 = mm2) |
{ |
guan[k].mima = mm3; |
write(); |
hu(); |
} |
} |
///////////////////////////////////////////管理员操作函数 |
void CAOZUO() |
{ |
system ( "cls" ); |
delay(); |
printf ( "* 1.查询所有账户 *\n" ); |
printf ( "* 2.添加账户 *\n" ); |
printf ( "* 3.删除账户 *\n" ); |
printf ( "* 4.返回 5.退出 *\n" ); |
switch (getch()) |
{ |
case '1' :yinghang(); break ; |
case '2' :jia(); break ; |
case '3' :shanchu(); break ; |
case '4' :guanli(); break ; |
case '5' :xuanzhe(); break ; |
default :{ printf ( "\a非法操作\n" ); |
CAOZUO(); }; |
} |
} |
//////////////////////////////////////////银行账户查询函数 |
void yinghang() |
{ |
system ( "cls" ); |
delay(); |
read(); |
printf ( "*账号 密码 余额*\n" ); |
for (; k<N; k++) |
{ |
if (guan[k].zhanghao != 0 && guan[k].zhanghao>0) |
{ |
printf ( "%d " , guan[k].zhanghao); |
printf ( "%d " , guan[k].mima); |
printf ( "%lf\n" , guan[k].yu_e); |
} |
} |
printf ( "* 1.返回 2.退出 *\n" ); |
switch (getch()) |
{ |
case '1' :CAOZUO(); break ; |
case '2' :guanli(); break ; |
} |
} |
//////////////////////////////////////////账户添加函数 |
void jia() |
{ |
int mm1, mm2; |
int temp; |
system ( "cls" ); |
delay(); |
read(); |
printf ( "* 请输入密码 *\n" ); |
scanf ( "%d" , &mm1); |
if (mm1<100000 || mm1>999999) |
{ |
system ( "cls" ); |
printf ( " 密码必须等于6位数 \n" ); |
printf ( " 请重新输入: \n" ); |
delay(); |
scanf ( "%d" , &mm1); |
} |
temp = mm1 % 111111; |
if (temp == 0) |
{ |
system ( "cls" ); |
printf ( " 密码过于简单 \n" ); |
printf ( " 请重新输入: \n" ); |
delay(); |
scanf ( "%d" , &mm1); |
} |
printf ( "\n" ); |
printf ( "确认密码:\n" ); |
scanf ( "%d" , &mm2); |
if (mm1 != mm2) |
{ |
system ( "cls" ); |
printf ( "确认密码不一致,操作取消\n" ); |
delay(); |
CAOZUO(); |
} |
if (mm1 = mm2) |
{ |
for (; k<N; k++) |
{ |
if (guan[k].zhanghao == 0) |
{ |
guan[k].zhanghao = guan[k - 1].zhanghao + 1; |
guan[k].mima = mm2; |
write(); |
break ; |
} |
} |
printf ( "账号创建成功!\n" ); |
printf ( "您的账号是%d,请妥善保管!\n" , guan[k].zhanghao); |
printf ( "* 1.返回 2.退出 *\n" ); |
switch (getch()) |
{ |
case '1' :CAOZUO(); break ; |
case '2' :guanli(); break ; |
} |
} |
} |
/////////////////////////////////////////账户删除函数 |
void shanchu() |
{ |
system ( "cls" ); |
delay(); |
read(); |
printf ( "* 请输入账号 *\n" ); |
long int user; |
scanf ( "%d" , &user); |
if (user == 0) |
{ |
printf ( "* 账号错误,操作取消 *\n" ); |
CAOZUO(); |
} |
else if (user != (guan[k].zhanghao)) |
{ |
for (k = 1; k<N; k++) |
{ |
if (user == (guan[k].zhanghao)) |
{ |
for (; k<N; k++) |
{ |
guan[k].zhanghao = guan[k + 1].zhanghao; |
guan[k].mima = guan[k + 1].mima; |
guan[k].yu_e = guan[k + 1].yu_e; |
write(); |
} |
printf ( "账号删除成功!\n" ); |
printf ( "* 1.返回 2.退出 *\n" ); |
switch (getch()) |
{ |
case '1' :CAOZUO(); break ; |
case '2' :guanli(); break ; |
} |
} |
} |
system ( "cls" ); |
printf ( "* 账户不存在 *\n" ); |
delay(); |
CAOZUO(); |
} |
else |
{ |
for (; k<N; k++) |
{ |
guan[k].zhanghao = guan[k + 1].zhanghao; |
guan[k].mima = guan[k + 1].mima; |
guan[k].yu_e = guan[k + 1].yu_e; |
write(); |
} |
printf ( "账号删除成功!\n" ); |
printf ( "* 1.返回 2.退出 *\n" ); |
switch (getch()) |
{ |
case '1' :CAOZUO(); break ; |
case '2' :guanli(); break ; |
} |
} |
} |
初级程序员
by: 赶蚊子 发表于:2017-06-20 11:02:11 顶(0) | 踩(0) 回复
受教了
回复评论