(需提前了解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;
}