ATM机器模拟(C++实现,MySQL储存)

(需提前了解C++以及MySQL基本指令)

一、功能介绍

1.新建账户

2.登录账户

3.删除账户

4.现金存取

5.余额查询

6.密码修改

7.明细查询

8.线上转账

二、环境配置(C++链接MySQL)

这个要根据自己的C++编译器在网上找对应的配置方法,可以自己上网搜索一下。

三、头文件以及全局变量

#include<stdio.h>				     /*流函数库*/ 
#include<stdlib.h>				     /*标准库*/ 
#include<string.h>				     /*字符串库*/ 
#include<winsock2.h>			     /*连接模式库*/ 
#pragma comment(lib,"libmysql");     /*驱动环境*/
#include<mysql.h>				     /*数据库操作函数环境*/ 
#define HOST "localhost"		     /*数据库服务名*/ 
#define USERNAME "root"			     /*用户名*/ 
#define PASSWORD ""	                 /*输入你的数据库密码*/ 
#define DATABASE ""  			     /*输入连接的目标数据库名字*/ 
#include<iostream>            /*输入输出*/
#include<string>              /*字符串string*/
#include<iomanip>             /*格式控制*/ 
#include<conio.h>             /*密码加密*/
#include<sstream>             /*string和int转型*/ 

从数据库读取到的数据都是string类型,而金额是int类型,需要用到转型函数

#include <windows.h>         /*Sleep(1000);*/
#include <string>            /*system("cls");*/

Sleep(int x):让程序挂机x毫秒

system("cls"):清屏

MYSQL mysql;	            /*声明数据库变量*/
MYSQL_RES *result=NULL;     /*装数据库的指针*/ 
MYSQL_FIELD *field;         /*装列的指针 */
MYSQL_ROW row;              /*装整行的数据*/


struct card{                /*用户信息的临时储存 */
	string account;
	string password;
	string name;
	string id;
	int money;	
	int locked;
};
card transer,user;        

四、MySQL表格设置

1.用户信息表:(已经注册了银行的账户)

 2.身份信息表:(所有人的所有信息,我这里只需要name和id即可)

 

 3.用户行为表:(记录每个账户的金额运转)

 五、函数介绍

1.辅助函数

①int与string互相转化

string int_to_str(int x){
	stringstream ss;
	ss<<x;
	string y;
	ss>>y;
	return y;
}

int str_to_int(string x){   
	stringstream num;
	num<<x;
	int n;
	num>>n;
	return n;
}

 ②密码加密(确保你的密码不会直接展示在MySQL的表格里面,可以尝试更多加密方法)

string code_inc(string code){
	string incode="";
	int num=code.size();
	for(int i=num-1;i>=0;i--){
		incode+=code[i]-100;
	}
	return incode;
}



string code_dec(string code){
	string outcode="";
	int num=code.size();
	for(int i=num-1;i>=0;i--){
		outcode+=code[i]+100;
	}
	return outcode;
}

2.数据库相关函数

①链接函数

bool connector(){                                /*链接数据库*/
    
    mysql_init (&mysql);                         /*初始化*/	       
    cout<<"正在连接至数据库"<<endl;
    if(mysql_real_connect(&mysql,HOST,USERNAME,PASSWORD,DATABASE,0,NULL,CLIENT_FOUND_ROWS) ){                                              /*链接函数*/
    	Sleep(5000);
    	system("cls");
    	return true;
	} 
	else{
		cout<<"连接失败!"<<endl;
		Sleep(5000);
		system("cls");
		return false; 
	}
}

②上传新用户函数

void trans_out(string acc,string pas,string name,string id,int locked,int money){                  /*上传信息*/
	string e=int_to_str(locked);
	string f=int_to_str(money);
	string pass=code_inc(pas);
	char query[200000];
	string code="insert into inf values (""'"+acc+"'"",""'"+pass+"'"",""'"+name+"'"",""'"+id+"'"",""'"+e+"'"",""'"+f+"'"")";
	strcpy(query,code.c_str());
	mysql_query(&mysql,query);
	mysql_query(&mysql,"commit");
	return;
};

③用户信息更新函数

void update(card &c){                                               /*更新信息*/
	char query[2000000];
	string mon=int_to_str(c.money);
	string loc=int_to_str(c.locked);
	string pass=code_inc(c.password);
	string code="update inf set password=""'"+pass+"'"",money=""'"+mon+"'"",locked=""'"+loc+"'"" where account=""'"+c.account+"'""";
	strcpy(query,code.c_str());
	mysql_query(&mysql,query);
	return;
};

④行为记录上传函数

void trace_rec(string acc,string s){                                /*账户记录*/
	char query[200000];
	string code="insert into trace values (""'"+acc+"'"",""'"+s+"'"",current_time)";
	strcpy(query,code.c_str());
	mysql_query(&mysql,query);
	return;
} 

⑤信息读取函数(当前用户读取,转账目标读取)

bool find_useracc(string acc){
	mysql_query(&mysql,"select * from inf");
	result=mysql_store_result(&mysql);
	if(result){
    	int flag=true;
    	while(row=mysql_fetch_row(result)){                    
    	if(row[0]==acc){
    		flag=false;
	    	user.account=row[0];
	    	user.password=code_dec(row[1]);
	    	user.name=row[2];
	    	user.id=row[3];
	    	user.money=str_to_int(row[4]);
	    	user.locked=str_to_int(row[5]);
	    	return true;
	        }
	    }  
	    if(flag){
			system("cls");
			return false;
		}
    }
    else{
    	cout<<"查询失败"<<endl;
    	Sleep(2000);
    	system("cls");
    	return false;
	}
};


bool find_traacc(string acc){
	mysql_query(&mysql,"select * from inf");
	result=mysql_store_result(&mysql);
	if(result){
    	while(row=mysql_fetch_row(result)){                    
    	if(row[0]==acc){
	    	transer.account=row[0];
	    	transer.password=code_dec(row[1]);
	    	transer.name=row[2];
	    	transer.id=row[3];
	    	transer.money=str_to_int(row[4]);
	    	transer.locked=str_to_int(row[5]);
	    	return true;
	        }
	    }  
    }
    else{
    	cout<<"查询失败"<<endl;
    	Sleep(2000);
    	system("cls");
    	return false;
	}
}

⑥明细查询函数

void tra_find(){                                                    /*查询明细*/
	system("cls");
	while(1){
	string acc=user.account;
	char query[200000];
	string code="select trace,time from trace where account = ""'"+acc+"'""";
	strcpy(query,code.c_str());
	mysql_query(&mysql,query);
	result=mysql_store_result(&mysql);
	if(result){
		cout<<"明细如下:"<<endl<<endl;
		while(row=mysql_fetch_row(result)){
			cout<<setw(35)<<setiosflags(ios::left)<<row[0]<<row[1]<<endl;
		}
		}
		cout<<endl;
		cout<<"按任意键退出查询"<<endl;
		string num;
		if(cin>>num){
			system("cls");
			return;
		}
	}
}

⑦注册信息检测函数

bool name_id_check(string name,string id){          /*检测注册信息真实性*/
	string code="select id from name_id where name = ""'"+name+"'""";
	char query[200000];
	strcpy(query,code.c_str());
	mysql_query(&mysql,query);
	result=mysql_store_result(&mysql);
	if(result){
    	while(row=mysql_fetch_row(result)){                    
    	if(row[0]==id) return true;
    	else return false;
	    }
    }
}

3.功能实现函数

①新建账户

void set_acc(){
	set_pas();
}
void set_pas(){
	system("cls");
	cout<<"请设置一个六位数字的密码:"<<endl;
	string mm1,mm2;
	cin>>mm1;
	bool flag=true;
	int len=mm1.size();
	for(int i=0;i<len;i++){
		if(mm1[i]>'9'||mm1[i]<'0') flag=false;
	}
	if(!flag) {
	    cout<<"请输入0-9的数字!"<<endl;
	    Sleep(2000);
	    set_pas();
	    return;
	} 
	if(len!=6){
		cout<<"密码要求六位!"<<endl;
		Sleep(2000);
		set_pas();
		return;
	}
	system("cls");
	cout<<"请再次确认您的密码:"<<endl;
	cin>>mm2;
	if(mm1!=mm2){
	    cout<<"前后输入不一致!创建失败!"<<endl;
		Sleep(2000); 
	    set_pas();
	    return;
	} 
	else{
		string acc="5100"+mm1;
		if(find_useracc(acc)){
			cout<<"账号已存在,设定失败!"<<endl;
			Sleep(2000);
			system("cls");
			return; 
		}
		else{
		cout<<"账号设定成功,您的账号为:"<<acc<<endl;
		Sleep(5000);
		system("cls");
		con_acc(acc,mm1);
		}
	}
}
void con_acc(string acc,string pas){
	system("cls");
	string mname,mid;
	cout<<"请输入您的姓名与身份证号以绑定这个账户:"<<endl;
	cout<<"请输入您的姓名:";
	cin>>mname;
	cout<<"请输入您的id:";
	cin>>mid;
	if(judge_id(mid)&&name_id_check(mname,mid)){
		trans_out(acc,pas,mname,mid,0,0);
		system("cls");
		cout<<"绑定成功!"<<endl;
		Sleep(2000);
		system("cls");
		return;
	}
	else{
		system("cls");
		cout<<"请输入与身份绑定的正确的身份证号码!"<<endl;
		Sleep(2000);
		con_acc(acc,pas);
		return;
	}
}
bool judge_id(string id){
	int len=id.size();
	for(int i=0;i<len;i++){
		if(id[i]>'9'||id[i]<'0') return false;
	}
	if(len!=10) return false;
	return true;
}

②登录账户

bool check_pas(){
	system("cls");
	if(user.locked){
		cout<<"您的账号正在冻结中!"<<endl;
        Sleep(2000);
        system("cls");
		return false;
	}
	int a=2;
	string mm="";
	cout<<"请输入您的密码:"<<endl;
	char x;
	for(int i=0;i<6;i++){
		x=getch();
		cout<<"*";
		mm+=x;
	}
	Sleep(2000);
	if(user.password==mm) {
		system("cls");
		return true;
	}
	else{
		while(a--){
			mm="";
			system("cls");
			cout<<"密码错误!你还有"<<a+1<<"次机会!"<<endl<<endl<<"请再次输入:"<<endl;
            for(int i=0;i<6;i++){
            	x=getch();
            	cout<<"*";
            	mm+=x;
			}
			Sleep(2000);
			if(user.password==mm) {
				system("cls");
				return true;
			}
			else continue;
		}
		system("cls");
		cout<<"您的账号被冻结!"<<endl;
		Sleep(3000);
		system("cls");
		user.locked=1;
		update(user);
		return false;
	}
	
}

③删除账户

void del_acc(){
	system("cls");
	cout<<"请输入您的账号"<<endl;
	string a;
	cin>>a;
	if(find_useracc(a)){
		if(check_pas()){
        system("cls");
		if(user.money!=0){
			cout<<"注销失败,您还拥有余额"<<user.money<<"元,请取出所有余额后再注销账户"<<endl;
			Sleep(2000);
			system("cls");
		}
		else{
			cout<<"注销账号成功!"<<endl;
			Sleep(2000);
			system("cls");
			string acc=user.account;
			char query[200000];
			string code="delete from inf where account = ""'"+acc+"'""  ";
			strcpy(query,code.c_str());
			mysql_query(&mysql,query);
		}	
		}
	} 
}

④现金存取

void take_in(){
	system("cls");
	int a;
	cout<<"请输入您要存入的金额"<<endl;
	cin>>a;
	if(a%100!=0){
		system("cls");
		cout<<"请输入正确金额,正确金额为100的整数倍"<<endl;
		Sleep(2000);
		take_in();
		return;
	}
	else{
		user.money+=a;
		system("cls");
		cout<<"存入成功!您目前拥有"<<user.money<<"元"<<endl;
		string tra="deposits "+int_to_str(a);
		trace_rec(user.account,tra);
		update(user);
		Sleep(2000);
		return;
	}
}
void take_out(){
	system("cls");
	int a;
	cout<<"请输入您要取出的金额"<<endl;
	cin>>a;
	if(a%100!=0){
		system("cls");
		cout<<"请输入正确金额,正确金额为100的整数倍"<<endl;
		Sleep(2000);
		take_out();
		return;
	}
	else if(a>user.money){
		system("cls");
		cout<<"您的余额不足!您还拥有"<<user.money<<"元"<<endl;
		Sleep(2000);
		take_out();
		return;
	}
	else{
		user.money-=a;
		system("cls");
		cout<<"取出成功!您还拥有"<<user.money<<"元"<<endl;
		string tra="withdraw "+int_to_str(a);
		trace_rec(user.account,tra);
		Sleep(2000);
		system("cls");
		update(user);
		return;
	}
}

⑤余额查询

void money_query(){
	system("cls");
	cout<<"您还拥有"<<user.money<<"元!"<<endl;
	Sleep(5000);
	system("cls"); 
}

⑥密码修改

bool check_id(){
	system("cls");
	cout<<"请输入您绑定的id"<<endl;
	string id;
	cin>>id;
	if(id==user.id) return true;
	else{
		system("cls");
		cout<<"id错误!"<<endl;
		Sleep(2000);
		system("cls");
		check_id();
	}
}
void change_pas(){
	string new_pas;
	if(check_pas()&&check_id()){
		while(1){
		system("cls");
    	cout<<"请设置一个六位数字的密码:"<<endl;
    	string mm1,mm2;
    	cin>>mm1;
    	bool flag=true;
    	int len=mm1.size();
    	for(int i=0;i<len;i++){
    		if(mm1[i]>'9'||mm1[i]<'0') flag=false;
    	}
    	if(!flag) {
    	    cout<<"请输入0-9的数字!"<<endl;
    	    Sleep(2000);
    	    continue;
    	} 
	    if(len!=6){
		    cout<<"密码要求六位!"<<endl;
		    Sleep(2000);
		    continue;
	    }
	    system("cls");
	    cout<<"请再次确认您的密码:"<<endl;
	    cin>>mm2;
	    if(mm1!=mm2){
	        cout<<"前后输入不一致!创建失败!"<<endl;
		    Sleep(2000); 
	        continue;
	    } 
     	else{
     		cout<<"密码修改成功!"<<endl;
     		user.password=mm1;
			Sleep(2000);
			system("cls"); 
			update(user);
			break;
			return;
		}
	}
}
}

⑦明细查询

void tra_find()

⑧线上转账

void trans(){
	system("cls");
	int a;
	string tran;
	cout<<"请输入您要转出的金额"<<endl;
	cin>>a;
	if(a%100!=0){
		system("cls");
		cout<<"请输入正确金额,正确金额为100的整数倍"<<endl;
		Sleep(2000);
		trans();
		return;
	} 
	else if(a>user.money){
		system("cls");
		cout<<"您的余额不足!您还拥有"<<user.money<<"元"<<endl;
		Sleep(2000);
		trans();
		return;
	}
	else{
		while(1){
			system("cls");
			cout<<"输入0退出界面"<<endl<<endl<<endl;
		    cout<<"请输入您要转入的对象的账号"<<endl;
			cin>>tran;
			if(tran=="0") return;
		else if(find_traacc(tran)){
			 user.money-=a;
			 transer.money+=a;
			 update(user);
			 update(transer);
			 system("cls");
			 cout<<"转入成功!您还拥有"<<user.money<<"元"<<endl;
			 Sleep(5000);
			 system("cls"); 
			 string tra1="transfer "+int_to_str(a)+" to "+transer.account;
			 trace_rec(user.account,tra1);
			 string tra2="get "+int_to_str(a)+" from "+user.account;
			 trace_rec(transer.account,tra2);
			 return;
		 }
		 else{
		 	 system("cls");
			 cout<<"您要转入的账户不存在!"<<endl;
			 Sleep(2000);
			 system("cls");
			 continue; 
		     }
		}
	}
}

六、总结

 可以改进的地方很多:

1.我将用户信息临时储存到user,transer当中,没有考虑到并发存取的情况。

2.界面不够友好,大多数界面没有退出功能。

3.没有进行数据备份,没有容灾措施,可能会导致数据流失的情况。

4.account当中会直接显示password,可以考虑使用随机数来替代。

5.明细查询太过简略,没有实现范围查找、翻页等功能。

附:整体代码以及MySQL结果展示

#include<stdio.h>				/*流函数库*/ 
#include<stdlib.h>				/*标准库*/ 
#include<string.h>				/*字符串库*/ 
#include<winsock2.h>			/*连接模式库*/ 
#pragma comment(lib,"libmysql");/*驱动环境*/
#include<mysql.h>				     /*数据库操作函数环境*/ 
#define HOST "localhost"		     /*数据库服务名*/ 
#define USERNAME "root"			     /*用户名*/ 
#define PASSWORD "qujinyu20030704"	/*密码*/ 
#define DATABASE "inf_bank"			/*连接目标数据库*/ 


#include<iostream>             /*输入输出*/
#include<string>              /*字符串string*/
#include<iomanip>            /*格式控制*/ 
#include<conio.h>            /*密码加密*/
#include<sstream>          /*string和int转型*/ 

 
#include <windows.h>         /*Sleep(1000);*/
#include <string>           /*system("cls");*/








using namespace std;

MYSQL mysql;	             /*声明数据库变量*/
MYSQL_RES *result=NULL;     /*装数据库的指针*/ 
MYSQL_FIELD *field;         /*装列的指针 */
MYSQL_ROW row;              /*装行的指针*/


struct card{                 /*用户信息临时储存 */
	string account;
	string password;
	string name;
	string id;
	int money;	
	int locked;
};
card transer,user;             

void set_acc();                /*创建账户*/
void set_pas();                /*创建密码,检查密码格式*/             
void con_acc(string acc,string pas);      /*信息绑定*/  
bool judge_id(string id);                 /*检测id格式*/ 
int str_to_int(string x);              
string int_to_str(int x);             
bool check_pas();                      /*检查密码,三次输错冻结账号*/
void take_in();                       /*存钱*/ 
void take_out();                      /*取钱*/
void money_query();                   /*查询余额*/
void change_pas();                    /*修改密码*/
bool check_id();                      /*检查id与账户是否对应*/
void trans();                          /*转账*/
void del_acc();                        /*注销账户*/   
string code_inc(string code);
string code_dec(string code);
bool connector(){                                                                                   /*链接数据库*/
    mysql_init (&mysql);	       
    cout<<"正在连接至数据库"<<endl;
    if(mysql_real_connect(&mysql,HOST,USERNAME,PASSWORD,DATABASE,0,NULL,CLIENT_FOUND_ROWS) ){
    	Sleep(5000);
    	system("cls");
    	return true;
	} 
	else{
		cout<<"连接失败!"<<endl;
		Sleep(5000);
		system("cls");
		return false; 
	}
}
void trans_out(string acc,string pas,string name,string id,int locked,int money){                  /*上传信息*/
	string e=int_to_str(locked);
	string f=int_to_str(money);
	string pass=code_inc(pas);
	char query[200000];
	string code="insert into inf values (""'"+acc+"'"",""'"+pass+"'"",""'"+name+"'"",""'"+id+"'"",""'"+e+"'"",""'"+f+"'"")";
	strcpy(query,code.c_str());
	mysql_query(&mysql,query);
	mysql_query(&mysql,"commit");
	return;
};
bool find_useracc(string acc){
	mysql_query(&mysql,"select * from inf");
	result=mysql_store_result(&mysql);
	if(result){
    	int flag=true;
    	while(row=mysql_fetch_row(result)){                    
    	if(row[0]==acc){
    		flag=false;
	    	user.account=row[0];
	    	user.password=code_dec(row[1]);
	    	user.name=row[2];
	    	user.id=row[3];
	    	user.money=str_to_int(row[4]);
	    	user.locked=str_to_int(row[5]);
	    	return true;
	        }
	    }  
	    if(flag){
			system("cls");
			return false;
		}
    }
    else{
    	cout<<"查询失败"<<endl;
    	Sleep(2000);
    	system("cls");
    	return false;
	}
};
bool find_traacc(string acc){
	mysql_query(&mysql,"select * from inf");
	result=mysql_store_result(&mysql);
	if(result){
    	while(row=mysql_fetch_row(result)){                    
    	if(row[0]==acc){
	    	transer.account=row[0];
	    	transer.password=code_dec(row[1]);
	    	transer.name=row[2];
	    	transer.id=row[3];
	    	transer.money=str_to_int(row[4]);
	    	transer.locked=str_to_int(row[5]);
	    	return true;
	        }
	    }  
    }
    else{
    	cout<<"查询失败"<<endl;
    	Sleep(2000);
    	system("cls");
    	return false;
	}
}
void update(card &c){                                               /*更新信息*/
	char query[2000000];
	string mon=int_to_str(c.money);
	string loc=int_to_str(c.locked);
	string pass=code_inc(c.password);
	string code="update inf set password=""'"+pass+"'"",money=""'"+mon+"'"",locked=""'"+loc+"'"" where account=""'"+c.account+"'""";
	strcpy(query,code.c_str());
	mysql_query(&mysql,query);
	return;
};
void trace_rec(string acc,string s){                                /*账户记录*/
	char query[200000];
	string code="insert into trace values (""'"+acc+"'"",""'"+s+"'"",current_time)";
	strcpy(query,code.c_str());
	mysql_query(&mysql,query);
	return;
} 
void tra_find(){                                                    /*查询明细*/
	system("cls");
	while(1){
	string acc=user.account;
	char query[200000];
	string code="select trace,time from trace where account = ""'"+acc+"'""";
	strcpy(query,code.c_str());
	mysql_query(&mysql,query);
	result=mysql_store_result(&mysql);
	if(result){
		cout<<"明细如下:"<<endl<<endl;
		while(row=mysql_fetch_row(result)){
			cout<<setw(35)<<setiosflags(ios::left)<<row[0]<<row[1]<<endl;
		}
		}
		cout<<endl;
		cout<<"按任意键退出查询"<<endl;
		string num;
		if(cin>>num){
			system("cls");
			return;
		}
	}
}
bool name_id_check(string name,string id){                           /*检测注册信息真实性*/
	string code="select id from name_id where name = ""'"+name+"'""";
	char query[200000];
	strcpy(query,code.c_str());
	mysql_query(&mysql,query);
	result=mysql_store_result(&mysql);
	if(result){
    	while(row=mysql_fetch_row(result)){                    
    	if(row[0]==id) return true;
    	else return false;
	    }
    }
}





int main(){
    if(connector()) {
    	cout<<"连接成功!"<<endl;
    	Sleep(2000);
	    system("cls");
	    while(1){
	        int choice;
	        cout<<"选择您的操作:"<<endl<<"1.注册"<<endl<<"2.登录"<<endl<<"3.注销账号"<<endl<<"4.结束程序"<<endl;
		    cin>>choice;
		    if(choice==4) {
			    system("cls");
			    cout<<"正在结束程序"<<endl;
			    Sleep(2000);
			    system("cls");
			    update(user);
			    update(transer);
			    mysql_close(&mysql);
			    break;
		    }
		    else if(choice==1){
			    set_acc();
		    }
		    else if(choice==2){
		    	system("cls");
		    	cout<<"请输入您的账号"<<endl;
		    	string a;
		    	cin>>a;
		    	if(find_useracc(a)){
		    	        if(check_pas()&&!user.locked){
		    	        string tra=+"log in";
		    	        trace_rec(user.account,tra);
		    		    cout<<"欢迎光临"<<user.account<<endl;
		    		    Sleep(2000);
		    		    while(1){
		    		    system("cls");
		    		    cout<<"请选择您的操作:"<<endl<<"1.取钱"<<endl<<"2.存钱"<<endl<<"3.转账"<<endl<<"4.查询余额"<<endl<<"5.修改密码"<<endl<<"6.明细查询"<<endl<<"7.退出账户"<<endl;
						cin>>choice;
						if(choice==1) take_out();
						else if(choice==2) take_in();
						else if(choice==3) trans();
						else if(choice==4) money_query();
						else if(choice==5) change_pas();
						else if(choice==6) tra_find();
						else if(choice==7){
							system("cls");
							cout<<"再见"<<user.account<<endl;
							string tra="log out";
			                trace_rec(user.account,tra);
							Sleep(2000);
							update(user);
							system("cls");
							break;
						}
						else{
							system("cls");
							cout<<"您输入了非法数据!"<<endl;
							Sleep(2000);
							system("cls");
						} 
					}
					    }    
				    }else{
				    	cout<<"用户信息未注册!"<<endl;
			            Sleep(2000);
			            system("cls");
					}
		        }
		    else if (choice==3) del_acc();
		    else{
			    system("cls");
			    cout<<"您输入了非法数据"<<endl;
			    Sleep(2000);
			    system("cls");
			    continue;
		   } 	
    }
}else{
	cout<<"连接失败!"<<endl;
	Sleep(2000);
	system("cls");
}
	return 0;
}









void set_acc(){
	set_pas();
}
void set_pas(){
	system("cls");
	cout<<"请设置一个六位数字的密码:"<<endl;
	string mm1,mm2;
	cin>>mm1;
	bool flag=true;
	int len=mm1.size();
	for(int i=0;i<len;i++){
		if(mm1[i]>'9'||mm1[i]<'0') flag=false;
	}
	if(!flag) {
	    cout<<"请输入0-9的数字!"<<endl;
	    Sleep(2000);
	    set_pas();
	    return;
	} 
	if(len!=6){
		cout<<"密码要求六位!"<<endl;
		Sleep(2000);
		set_pas();
		return;
	}
	system("cls");
	cout<<"请再次确认您的密码:"<<endl;
	cin>>mm2;
	if(mm1!=mm2){
	    cout<<"前后输入不一致!创建失败!"<<endl;
		Sleep(2000); 
	    set_pas();
	    return;
	} 
	else{
		string acc="5100"+mm1;
		if(find_useracc(acc)){
			cout<<"账号已存在,设定失败!"<<endl;
			Sleep(2000);
			system("cls");
			return; 
		}
		else{
		cout<<"账号设定成功,您的账号为:"<<acc<<endl;
		Sleep(5000);
		system("cls");
		con_acc(acc,mm1);
		}
	}
}
void con_acc(string acc,string pas){
	system("cls");
	string mname,mid;
	cout<<"请输入您的姓名与身份证号以绑定这个账户:"<<endl;
	cout<<"请输入您的姓名:";
	cin>>mname;
	cout<<"请输入您的id:";
	cin>>mid;
	if(judge_id(mid)&&name_id_check(mname,mid)){
		trans_out(acc,pas,mname,mid,0,0);
		system("cls");
		cout<<"绑定成功!"<<endl;
		Sleep(2000);
		system("cls");
		return;
	}
	else{
		system("cls");
		cout<<"请输入与身份绑定的正确的身份证号码!"<<endl;
		Sleep(2000);
		con_acc(acc,pas);
		return;
	}
}
bool judge_id(string id){
	int len=id.size();
	for(int i=0;i<len;i++){
		if(id[i]>'9'||id[i]<'0') return false;
	}
	if(len!=10) return false;
	return true;
}
bool check_pas(){
	system("cls");
	if(user.locked){
		cout<<"您的账号正在冻结中!"<<endl;
        Sleep(2000);
        system("cls");
		return false;
	}
	int a=2;
	string mm="";
	cout<<"请输入您的密码:"<<endl;
	char x;
	for(int i=0;i<6;i++){
		x=getch();
		cout<<"*";
		mm+=x;
	}
	Sleep(2000);
	if(user.password==mm) {
		system("cls");
		return true;
	}
	else{
		while(a--){
			mm="";
			system("cls");
			cout<<"密码错误!你还有"<<a+1<<"次机会!"<<endl<<endl<<"请再次输入:"<<endl;
            for(int i=0;i<6;i++){
            	x=getch();
            	cout<<"*";
            	mm+=x;
			}
			Sleep(2000);
			if(user.password==mm) {
				system("cls");
				return true;
			}
			else continue;
		}
		system("cls");
		cout<<"您的账号被冻结!"<<endl;
		Sleep(3000);
		system("cls");
		user.locked=1;
		update(user);
		return false;
	}
	
}
void take_in(){
	system("cls");
	int a;
	cout<<"请输入您要存入的金额"<<endl;
	cin>>a;
	if(a%100!=0){
		system("cls");
		cout<<"请输入正确金额,正确金额为100的整数倍"<<endl;
		Sleep(2000);
		take_in();
		return;
	}
	else{
		user.money+=a;
		system("cls");
		cout<<"存入成功!您目前拥有"<<user.money<<"元"<<endl;
		string tra="deposits "+int_to_str(a);
		trace_rec(user.account,tra);
		update(user);
		Sleep(2000);
		return;
	}
}
void take_out(){
	system("cls");
	int a;
	cout<<"请输入您要取出的金额"<<endl;
	cin>>a;
	if(a%100!=0){
		system("cls");
		cout<<"请输入正确金额,正确金额为100的整数倍"<<endl;
		Sleep(2000);
		take_out();
		return;
	}
	else if(a>user.money){
		system("cls");
		cout<<"您的余额不足!您还拥有"<<user.money<<"元"<<endl;
		Sleep(2000);
		take_out();
		return;
	}
	else{
		user.money-=a;
		system("cls");
		cout<<"取出成功!您还拥有"<<user.money<<"元"<<endl;
		string tra="withdraw "+int_to_str(a);
		trace_rec(user.account,tra);
		Sleep(2000);
		system("cls");
		update(user);
		return;
	}
}
void money_query(){
	system("cls");
	cout<<"您还拥有"<<user.money<<"元!"<<endl;
	Sleep(5000);
	system("cls"); 
}
bool check_id(){
	system("cls");
	cout<<"请输入您绑定的id"<<endl;
	string id;
	cin>>id;
	if(id==user.id) return true;
	else{
		system("cls");
		cout<<"id错误!"<<endl;
		Sleep(2000);
		system("cls");
		check_id();
	}
}
void change_pas(){
	string new_pas;
	if(check_pas()&&check_id()){
		while(1){
		system("cls");
    	cout<<"请设置一个六位数字的密码:"<<endl;
    	string mm1,mm2;
    	cin>>mm1;
    	bool flag=true;
    	int len=mm1.size();
    	for(int i=0;i<len;i++){
    		if(mm1[i]>'9'||mm1[i]<'0') flag=false;
    	}
    	if(!flag) {
    	    cout<<"请输入0-9的数字!"<<endl;
    	    Sleep(2000);
    	    continue;
    	} 
	    if(len!=6){
		    cout<<"密码要求六位!"<<endl;
		    Sleep(2000);
		    continue;
	    }
	    system("cls");
	    cout<<"请再次确认您的密码:"<<endl;
	    cin>>mm2;
	    if(mm1!=mm2){
	        cout<<"前后输入不一致!创建失败!"<<endl;
		    Sleep(2000); 
	        continue;
	    } 
     	else{
     		cout<<"密码修改成功!"<<endl;
     		user.password=mm1;
			Sleep(2000);
			system("cls"); 
			update(user);
			break;
			return;
		}
	}
}
}
void trans(){
	system("cls");
	int a;
	string tran;
	cout<<"请输入您要转出的金额"<<endl;
	cin>>a;
	if(a%100!=0){
		system("cls");
		cout<<"请输入正确金额,正确金额为100的整数倍"<<endl;
		Sleep(2000);
		trans();
		return;
	} 
	else if(a>user.money){
		system("cls");
		cout<<"您的余额不足!您还拥有"<<user.money<<"元"<<endl;
		Sleep(2000);
		trans();
		return;
	}
	else{
		while(1){
			system("cls");
			cout<<"输入0退出界面"<<endl<<endl<<endl;
		    cout<<"请输入您要转入的对象的账号"<<endl;
			cin>>tran;
			if(tran=="0") return;
		else if(find_traacc(tran)){
			 user.money-=a;
			 transer.money+=a;
			 update(user);
			 update(transer);
			 system("cls");
			 cout<<"转入成功!您还拥有"<<user.money<<"元"<<endl;
			 Sleep(5000);
			 system("cls"); 
			 string tra1="transfer "+int_to_str(a)+" to "+transer.account;
			 trace_rec(user.account,tra1);
			 string tra2="get "+int_to_str(a)+" from "+user.account;
			 trace_rec(transer.account,tra2);
			 return;
		 }
		 else{
		 	 system("cls");
			 cout<<"您要转入的账户不存在!"<<endl;
			 Sleep(2000);
			 system("cls");
			 continue; 
		     }
		}
	}
}
string int_to_str(int x){
	stringstream ss;
	ss<<x;
	string y;
	ss>>y;
	return y;
}
int str_to_int(string x){
	stringstream num;
	num<<x;
	int n;
	num>>n;
	return n;
}
void del_acc(){
	system("cls");
	cout<<"请输入您的账号"<<endl;
	string a;
	cin>>a;
	if(find_useracc(a)){
		if(check_pas()){
        system("cls");
		if(user.money!=0){
			cout<<"注销失败,您还拥有余额"<<user.money<<"元,请取出所有余额后再注销账户"<<endl;
			Sleep(2000);
			system("cls");
		}
		else{
			cout<<"注销账号成功!"<<endl;
			Sleep(2000);
			system("cls");
			string acc=user.account;
			char query[200000];
			string code="delete from inf where account = ""'"+acc+"'""  ";
			strcpy(query,code.c_str());
			mysql_query(&mysql,query);
		}	
		}
	} 
}
string code_inc(string code){
	string incode="";
	int num=code.size();
	for(int i=num-1;i>=0;i--){
		incode+=code[i]-100;
	}
	return incode;
}
string code_dec(string code){
	string outcode="";
	int num=code.size();
	for(int i=num-1;i>=0;i--){
		outcode+=code[i]+100;
	}
	return outcode;
}



 

 

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值