搜档网
当前位置:搜档网 › ATM机 源代码

ATM机 源代码

#include
#include
#include
#include

using namespace std;

typedef struct
{
int id;
char name[16];
char password[32];
float money;
}USER;

void create();
int service();

int main()
{
mkdir("ATM");
int choice;
while(choice != 3)
{
system("cls");
cout << setw(70) << "****************** 欢迎使用 ATM 自助取款机 ******************\n" << endl;
cout << setw(23) << "请选择以下服务:\n" << endl;
cout << setw(14) << "1. 开户" << endl;
cout << setw(14) << "2. 服务" << endl;
cout << setw(14) << "3. 取卡" << endl;
cout << endl;
cout << setw(70) << "****************** 欢迎使用 ATM 自助取款机 ******************\n" << endl;
cout << "请选择: ";
cin >> choice;

switch(choice)
{
case 1:
create();
break;
case 2:
service();
break;
}
}

return 0;
}

///////////////////////// 开户 ////////////////////////////////////////
int getuserid();
void getusername(char *);
void getpassword(char *);
float getmoney(USER);

void create()
{
USER user;

user.id = getuserid();
getusername(https://www.sodocs.net/doc/1c670433.html,);
getpassword(user.password);
user.money = getmoney(user);

FILE *fp;
fp = fopen("ATM\\user.dat","rb+");
if(fp == NULL)
{
fp = fopen("ATM\\user.dat","wb+");
}
fseek(fp,0,SEEK_END);
fwrite(&user,sizeof(USER),1,fp);
fclose(fp);
}

////////////////////////////////////////////////////////
int getuserid()
{
int lastid;
FILE *fp;
fp = fopen("ATM\\lastid.dat","rb+");
if(fp == NULL)
{
lastid=1001;
fp = fopen("ATM\\lastid.dat","wb+");
fwrite(&lastid,sizeof(int),1,fp);
}
else
{
fread(&lastid,sizeof(int),1,fp);
fseek(fp,-sizeof(int),SEEK_END);
lastid++;
fwrite(&lastid,sizeof(int),1,fp);
}

fclose(fp);
return lastid;
}

///////////////////////////
void getusername(char name[])
{
cout << "请输入用户名: ";
cin >> name;
}

///////////////////////////
void getpsw(char password1[],char password2[],int &n1,int &n2)
{
cout << "请输入密码(长度小与 32 位): ";
for(int i=0; i<32; i++)
{
password1[i] = getch();
if( '\x0d' == password1[i] )
{
n1 = i+1;

password1[i] = '\0';
break;
}
cout << "*";
}

cout << "\n请确定密码(长度小与 32 位): ";
for( i=0; i<32; i++)
{
password2[i] = getch();
if( '\r' == password2[i] )
{
n2 = i+1;
password2[i] = '\0';
break;
}
cout << "*";
}
}



void getpassword(char password[])
{
char password1[32];
char password2[32];
int n1=0,n2=0;

getpsw(password1,password2,n1,n2);

while( strcmp(password1,password2) != 0 )
{
cout << "\n输入密码错误 !" << endl;
cout << "\n请重新输入密码: " << endl;
getpsw(password1,password2,n1,n2);
}

for(int i=0; i{
password[i] = password1[i];
}
}


///////////////////////////
float getmoney(USER user)
{
cout << "\n创建成功, 账号为 " << user.id << endl;
cout << "请输入金额: ";
cin >> user.money;
return user.money;
}


//////////////////////////////// 服务 /////////////////////////////////////
void research(USER&);
int withdraw(USER&);
void deposit(USER&);
int transfer(USER&);
void setpassword(USER&);
bool check(USER&);

int service()
{
USER user;
// check(user);

if( !check(user))
{
return -1;
}

int choice;
while(choice != 6)
{
system("cls");
cout << setw(70) << "****************** 欢迎使用 ATM 自助取款机 ******************\n" << endl;
cout << setw(23) << "请选择以下服务:\n" << endl;
cout << setw(14) << "1. 查询" << endl;
cout << setw(14) << "2. 取款" << endl;
cout << setw(14) << "3. 存款" << endl;
cout << setw(14) << "4. 转账" << endl;
cout << setw(18) << "5. 修改密码" << endl;
cout << setw(14) << "6. 返回" << endl;
cout << endl;
cout << setw(70) << "****************** 欢迎使用 ATM 自助取款机 ******************\n" << endl;

cout << "请选择: ";
cin >> choice;

switch(choice)
{
case 1:
research(user);
break;
case 2:
withdraw(user);
break;
case 3:
deposit(user);
break;
case 4:
transfer(user);
break;
case 5:
setpassword(user

);
break;
}
}
return 0;
}


///////////////////////////////////////////////////////////////////////////////////

//////////////////////得到密码
void getpsw2(char password[],int n3)
{
for(int i=0; i<32; i++)
{
password[i] = getch();
if( '\x0d' == password[i] )
{
n3 = i;
password[i] = '\0';
break;
}
cout << "*";
}
}




//////判断密码是否真确
bool checkpassword(int id,char password[],USER &user)
{
FILE *fp;
fp = fopen("ATM\\user.dat","rb+");
if(NULL == fp)
{
cout << "文件打开失败 !" << endl;
exit(-1);
}
// fseek(fp,0,SEEK_SET);
while( ! feof(fp) )
{
fread(&user,sizeof(USER),1,fp);
if(user.id == id )
{
if( strcmp(user.password,password)==0 )
{
fclose(fp);
return true;
}
else
break;
}
}

fclose(fp);
return false;
}


bool check(USER &user)
{
int id,i=1,n3=0;
char password[32];
cout << "请输入账号: ";
cin >> id;
cout << "请输入密码: ";
getpsw2(password,n3);

while( ! checkpassword(id,password,user) )
{
if( 3 == i )
{
cout << "\n对不起, 密码错误超过三次, 不能继续登录 !" << endl;
cout << endl;
cout << "\n系统将自动退出" << endl;
cout << "请按任意键继续....." << endl;
getch();
return false;
}
cout << "\n密码错误 !" << endl;
cout << "请重新输入密码: ";
getpsw2(password,n3);
i++;
}
return true;
}

////////////////////// 查询 //////////////////
void research(USER &user)
{
cout << "\n账号: " << user.id << endl;
cout << "用户名: " << https://www.sodocs.net/doc/1c670433.html, << endl;
cout << "余额: " << user.money << endl;
cout << "请按任意键继续....." << endl;
getch();
}


/////////////////////// 取款 /////////////////
int withdraw(USER &user)
{
USER usertemp;
float money;
cout << "\n请输入取款金额: ";
cin >> money;

if(money > user.money)
{
cout << "余额不足 ." << endl;
cout << "请按任意键继续....." << endl;
getch()

;
return -1;
}
else
{
user.money = user.money - money;
FILE *fp;
fp=fopen("ATM\\user.dat","rb+");
while( 1 )
{
fread(&usertemp,sizeof(USER),1,fp);
if(feof(fp))
{
cout << "取款失败 ."<< endl;
cout << "请输入任意键继续......" << endl;
getch();
break;
}
else if(usertemp.id == user.id)
{
fseek(fp,-sizeof(USER),SEEK_CUR);
fwrite(&user,sizeof(USER),1,fp);
cout << "取款成功 ."<< endl;
cout << "请输入任意键继续......" << endl;
getch();
break;
}
}
fclose(fp);
}

return 0;
}


/////////////////////// 存款 /////////////////
void deposit(USER &user)
{
USER usertemp;
float money;
cout << "\n请输入存款金额: ";
cin >> money;
user.money = user.money + money;

FILE *fp;
fp=fopen("ATM\\user.dat","rb+");
while( 1 )
{
fread(&usertemp,sizeof(USER),1,fp);
if(feof(fp))
{
cout << "存款失败 ."<< endl;
cout << "请输入任意键继续......" << endl;
getch();
break;
}
else if(usertemp.id == user.id)
{
fseek(fp,-sizeof(USER),SEEK_CUR);
fwrite(&user,sizeof(USER),1,fp);
cout << "存款成功 ."<< endl;
cout << "请输入任意键继续......" << endl;
getch();
break;
}
}
fclose(fp);
}


/////////////////////////// 转账 //////////////
int transfer(USER &user)
{
bool sign =false,sign2=false;
int toid;
float money;
cout << "请输入要转账的用户账号: ";
cin >> toid;
cout << "请输入要转账的金额: ";
cin >> money;

if(user.money < money)
{
cout << "余额不足 !" << endl;
sign = false;
cout << "请按任意键继续....." << endl;
getch();
return -1;
}

USER user1;
FILE *fp;
fp=fopen("ATM\\user.dat","rb+");
while( ! feof(fp) )
{
fre

ad(&user1,sizeof(USER),1,fp);
if( user.id == user1.id )
{

user.money = user.money - money;
fseek(fp,-sizeof(USER),SEEK_CUR);
fwrite(&user,sizeof(USER),1,fp);
fclose(fp);
sign = true;
break;
}
}

if(sign == true)
{
USER user2;
FILE *fp2;
fp2=fopen("ATM\\user.dat","rb+");
while( ! feof(fp2) )
{
fread(&user2,sizeof(USER),1,fp2);
if( toid == user2.id )
{
sign2 = true;
user2.money = user2.money + money;
fseek(fp2,-sizeof(USER),SEEK_CUR);
fwrite(&user2,sizeof(USER),1,fp2);
fclose(fp2);
cout << "转账成功 !" << endl;
cout << "请按任意键继续....." << endl;
getch();
break;
}
}
if(sign2 == false)
{
FILE *fp;
fp=fopen("ATM\\user.dat","rb+");
while( ! feof(fp) )
{
fread(&user1,sizeof(USER),1,fp);
if( user.id == user1.id )
{

user.money = user.money + money;
fseek(fp,-sizeof(USER),SEEK_CUR);
fwrite(&user,sizeof(USER),1,fp);
fclose(fp);
break;
}
}
cout << "转账失败 ." << endl;
cout << "没有该用户 ." << endl;
cout << "请按任意键继续....." << endl;
getch();
}
}
return 0;
}


//////////////////////////// 更改密码 /////////////
void setpassword(USER &user)
{
char password[32];
getpassword(password);
USER usertemp;

FILE *fp;
fp=fopen("ATM\\user.dat","rb+");
while( 1 )
{
fread(&usertemp,sizeof(USER),1,fp);
if(usertemp.id == user.id)
{
strcpy(user.password,password);
fseek(fp,-sizeof(USER),SEEK_CUR);
fwrite(&user,sizeof(USER),1,fp);

cout << "\n修改密码成功 ."<< endl;
cout << "请输入任意键继续......" << endl;
getch();
break;
}
}
fclose(fp);
}

相关主题