模仿ATM机的源代码.docx
《模仿ATM机的源代码.docx》由会员分享,可在线阅读,更多相关《模仿ATM机的源代码.docx(34页珍藏版)》请在冰豆网上搜索。
模仿ATM机的源代码
#include
#include
#include
#include
#include
//注册信息
structinformation
{
charname[20];
charID[19];
charAccountName[20];
charpassword[8];
doublebalance1;
}card1;
//交易信息
structtrading
{
characcountname[20];
doublebalance2;
chartime_1[10];
chartime_2[10];
}card2;
charaddress_1[10]="F:
\\ATM\\";
charaddress_2[20]="F:
\\ATM\\卡号.txt";
charaddress_3[20]="F:
\\ATM\\注册.txt";
//函数声明:
voidinquiresgui(characcount[20]);//查询界面
voidwithdrawalsgui(characcount[20],intt);//取款界面
voidMenu();//进入主菜单
voidMenugui(characcount[20]);//主菜单界面
voidInterfacegui();//主界面
voidGotoxy(intx,inty);//光标函数
voidRegistered();//注册函数
voiddeposit(characcount[20]);//存款函数
voidtransfer(characcount[20]);//转账函数
voidCipheramend(characcount[20]);//修改密码
voidAccount(characcount[20]);//从文件中获取卡号
voidcode(charpassword[8]);//输入秘密时显示星号
voidpassword1(charpassword[8]);//输入密码,并检查两次输入的密码是否一致
voidnameid(charname[20],charID[19]);//输入姓名和身份证号码
intaccountjudge(intt,characcount[20]);//输入账号并判断账号是否存在
intpasswordjudge(inti,intk,characcount[20]);//输入密码并判断密码是否正确
intbalancejudge(characcount[20],doublebalance);//判断账户余额是否足够
voidbalanceModify(characcount[20],doublemoney);//修改账户余额
voidtime1(chara[30]);//时间函数
voidbalanceinquires(characcount[20]);//余额查询函数
voiddetailgui(characcount[20]);//明细查询界面
voiddepositinquires(characcount[20]);//存款查询
voidtransferinquires(characcount[20]);//转账查询
voidwithdrawalsinquires(characcount[20]);//取款查询
voidbalanceinquires(characcount[20]);//余额查询
voidGotoxy(intx,inty)//定位到第y行的第x列
{
intxx=0x0b;
HANDLEhOutput;
COORDloc;
loc.X=x;
loc.Y=y;
hOutput=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOutput,loc);
return;
}
/********************************************************
主界面
*********************************************************/
voidInterfacegui()
{
inti;
charm;
system("cls");
Gotoxy(16,6);
for(i=1;i<=50;i++)
{
printf("*");
}
printf("\n\n");
printf("\t\t\t\t欢迎您的到来!
\n");
printf("\n");
printf("\t\t\t\t注册账号<1>\n");
printf("\t\t\t\t进入主菜单<2>\n");
printf("\t\t\t\t退出管理系统<0>\n");
printf("\n");
printf("\t\t");
for(i=1;i<=50;i++)
{
printf("*");
}
printf("\n");
system("color34");
m=getch();
switch(m)
{
case'0':
//按0退出系统
break;
case'1':
//按1进入注册界面
Registered();break;
case'2':
//按2进入主菜单
Menu();break;
default:
//输入非法
Interfacegui();
break;
}
}
/*****************************************************************
注册界面
******************************************************************/
/***********************************
注册函数
***********************************/
voidRegistered()
{
charaddress1[50],address2[50],address3[50];
charm;
FILE*fp;
system("cls");
system("color34");
Gotoxy(25,8);
printf("确认<1>\t返回<0>\n");
m=getch();
switch(m)
{
case'1':
//按1开始注册
nameid(card1.name,card1.ID);break;
case'0':
//按0返回主界面
Interfacegui();break;
default:
Registered();break;
}
Account(card1.AccountName);//从文件中获取卡号
password1(card1.password);//输入密码,并检查两次输入的密码是否一致
Gotoxy(0,12);
printf("\t\t请输入初始金额:
");
scanf("%lf",&card1.balance1);//输入初始金额
fp=fopen(address_3,"a");//打开储存注册信息的文件
fprintf(fp,"%-20s%s%s%-15.2lf%s\n",card1.name,card1.ID,card1.AccountName,card1.balance1,card1.password);//将注册信息保存到文件中
fclose(fp);//关闭储存注册信息的文件
strcpy(address1,address_1);
strcpy(address2,address_1);
strcpy(address3,address_1);
fp=fopen(strcat(strcat(address1,card1.AccountName),"存款.txt"),"w+");
fclose(fp);
fp=fopen(strcat(strcat(address2,card1.AccountName),"取款.txt"),"w+");
fclose(fp);
fp=fopen(strcat(strcat(address3,card1.AccountName),"转账.txt"),"w+");
fclose(fp);
do
{
system("cls");
system("color34");
Gotoxy(33,10);
printf("注册成功!
\n");//注册成功
Gotoxy(30,12);
printf("返回<0>\t退出<1>\n");
m=getch();
switch(m)
{
case'0':
//按0返回主界面
Interfacegui();break;
case'1':
//按1退出系统
break;
}
}while(m!
='0'&&m!
='1');
}
//输入姓名和身份证号码
voidnameid(charname[20],charID[19])
{
//inti;
intn=0;
system("cls");
system("color34");
Gotoxy(0,7);
printf("\t\t请输入您的名字:
");
scanf("%s",name);//输入名字
getchar();
do
{
if(n)
{
system("cls");
system("color34");
Gotoxy(0,7);
printf("\t\t您输入的身份证号码不合法!
\n");
}
printf("\t\t请输入您的身份证号码:
");
scanf("%s",ID);
n=1;
}while(strlen(ID)<18);
//getchar();
}
//输入秘密时显示星号
voidcode(charpassword[8])
{
inti;
for(i=0;i<=6;i++)
{
password[i]=getch();
if(password[i]==13)
{
break;
}
printf("*");
}
password[i]='\0';
}
//从文件中获取卡号
voidAccount(characcount[20])
{
intm;
FILE*fp;
system("cls");
system("color34");
fp=fopen(address_2,"r+");//打开储卡号的文件
do
{
fscanf(fp,"%s%d",account,&m);
}while(m!
=0);
m=1;
fseek(fp,-1L,1);
fprintf(fp,"%d\n",m);//将已开通的卡标记为0;
fclose(fp);//关闭储卡号的文件
Gotoxy(0,6);
printf("\t\t您的卡号为:
%s\n",account);//将客户获得的卡号输出到显示屏上
}
/****************************************/
//输入密码,并检查两次输入的密码是否一致
voidpassword1(charpassword[8])
{
intnum=0;
charpassword1[8],password2[8];
//输入密码并检查两次输入的密码好是否一致
do
{
if(num)
{
system("cls");
system("color34");
Gotoxy(0,6);
printf("\t\t您两次输入的密码不一致,请重新输入");
}
Gotoxy(0,8);
printf("\t\t请输入密码(6位数字):
\n\n");
printf("\t\t请确认密码(6位数字):
\n");
Gotoxy(37,8);
code(password1);//输入秘密时显示星号
Gotoxy(37,10);
code(password2);
printf("\n");
num=1;
}while(strcmp(password1,password2)!
=0);//检查两次输入的密码是否一致,若不一致,则重新输入
strcpy(password,password1);
}
/*************************************************************
进入主菜单
**************************************************************/
voidMenu()
{
intt,k;
inti=3;
characcount[20];
//输入账号并判断账号是否存在
t=1;
do
{
system("cls");
system("color34");
t=accountjudge(t,account);
}while(t==0);
//输入密码并判断密码是否正确
k=1;
do
{
k=passwordjudge(i,k,account);
i--;
}while(k==0&&i>0);
if(i>=0&&k!
=0)
{
Menugui(account);
}
}
//输入账号并判断账号是否存在
intaccountjudge(intt,characcount[20])
{
charm;
characcount1[20],account2[20];
FILE*fp1;
Gotoxy(0,7);
if(t==0)
{
printf("\t\t您输入的账号无效!
\n");
}
printf("\t\t请输入账号:
");
scanf("%s",account1);
fp1=fopen(address_2,"r");//打开储存账号的文件
//检查账号是否存在
do
{
fscanf(fp1,"%s%c",account2,&m);
if(strcmp(account1,account2)==0)
{
t=1;
break;
}
}while(m!
='0');
fclose(fp1);//关闭储存账号的文件
if(m=='0')
{
t=0;
}
strcpy(account,account1);
returnt;//t=0时账号不存在,t=1时账号不存在
}
//输入密码并判断密码是否正确
intpasswordjudge(inti,intt,characcount[20])//account:
卡号
{
charpassword1[8];
FILE*fp1;
system("cls");
system("color34");
Gotoxy(0,7);
if(t==0)
{
printf("\t\t您输入的密码不正确,您还有%d次机会!
\n",i);
}
printf("\t\t请输入密码:
");
code(password1);
fp1=fopen(address_3,"r");//打开储存注册信息的文件
//从文件中寻找该账号所储存的信息
do
{
fscanf(fp1,"%s%s%s%lf%s",card1.name,card1.ID,card1.AccountName,&card1.balance1,card1.password);
}while(strcmp(account,card1.AccountName));
fclose(fp1);//打开储存注册信息的文件
if(strcmp(password1,card1.password)!
=0)
{
t=0;
}
else
{
t=1;
}
returnt;//t=0时密码错误,t=1时密码正确
}
/*****************************************
主菜单
*****************************************/
voidMenugui(characcount[20])
{
inti;
charm;
system("cls");
system("color34");
Gotoxy(16,6);
for(i=1;i<=50;i++)
{
printf("*");
}
printf("\n\n");
printf("\t\t请选择要进行的操作:
\n");
printf("\t\t\t存款<1>\t转账<2>\n");
printf("\t\t\t取款<3>\t查询<4>\n");
printf("\t\t\t修改密码<5>\t返回主界面<0>\n");
printf("\n");
printf("\t\t");
for(i=1;i<=50;i++)
{
printf("*");
}
printf("\n");
m=getch();
switch(m)
{
case'0':
//按0返回主界面
Interfacegui();break;
case'1':
//按1进入存款界面
deposit(account);break;
case'2':
//按2进入转账界面
transfer(account);break;
case'3':
//按3进入取款界面
withdrawalsgui(account,1);break;
case'4':
//按4进入查询界面
inquiresgui(account);break;
case'5':
//按5进入修改密码界面
Cipheramend(account);break;
default:
//输入非法
//printf("输入非法,请重新输入!
\n");
Menugui(account);break;
}
}
/******************************
存款界面
******************************/
voiddeposit(characcount[20])
{
charm;
chartime[30];
doublemoney;//money:
要转账的金额
charaddress[50];
FILE*fp;
system("cls");
system("color34");
Gotoxy(0,7);
printf("\t\t请输入要存入的金额:
");
scanf("%lf",&money);//输入要存储的金额
balanceModify(account,money);//修改账号余额
time1(time);//获得存款的时间
strcpy(address,address_1);
strcat(strcat(address,account),"存款.txt");
fp=fopen(address,"a");//打开储存存款信息的文件
fprintf(fp,"%s%s%.2lf\n",time,account,money);//储存存款信息
fclose(fp);//打开储存存款信息的文件
do
{
system("cls");
system("color34");
Gotoxy(0,7);
printf("\t\t\t\t存款成功!
\n");
printf("\t\t返回主菜单<0>\t退出系统<1>");
m=getch();
}while(m!
='0'&&m!
='1');
if(m=='0')
{
Menugui(account);
}
}
//修改账户余额
voidbalanceModify(characcount[20],doublemoney)
{
FILE*fp;
fp=fopen(address_3,"r+");//打开储存注册信息的文件
do
{
fscanf(fp,"%s%s%s%lf%s",card1.name,card1.ID,card1.AccountName,&card1.balance1,card1.password);
}while(strcmp(account,card1.AccountName)!
=0);//寻找用户信息
fseek(fp,-24L,1);
card1.balance1+=money;//增加账户余额
fprintf(fp,"%-15.2lf",card1.balance1);//修改账户余额
fclose(fp);//关闭储存注册信息的文件
}
//时间函数
voidtime1(chara[30])
{
structtm*local;
time_tt;
t=time(NULL);
local=localtime(&t);
strftime(a,30,"%c",local);
}
/******************************
转账界面(转账)
*******************************/
voidtransfer(characcount[20])
{
charaddress1[50],address2[50];
FILE*fp;
doublemoney1,money2;
intk=1;
intt=1;
intm=1;
characcount1[20],account2[20];
chartime[30];
charn