/*
*copyright(c) 2015,烟台大学计算机学院
*All rights reserved。
*文件名称:第十九周(银行系统)
*copyright(c) 2015,烟台大学计算机学院
*All rights reserved。
*文件名称:第十九周(银行系统)
*作者:王忠
*完成日期:2015.7.17
*版本号:v1.0
*
*问题描述:做一个简单的,与当前银行ATM类似的程序
*输入描述:按照菜单栏提示输入
*程序输出:
#ifndef HEAD_H_INCLUDED
#define HEAD_H_INCLUDED
#include <fstream>
#include <cstdlib>
#include <conio.h>
#include <cstring>
using namespace std;
class Bank;
class User
{
public:
void setuser(int acc,string nam,int pw,double bal,int sta,char id[18],string add);
void showuser();//显示名字
void showbalance(string prompt);//显示余额
bool passwordright();//验证密码
bool staisnor();//验证状态
friend class Bank;
private:
int account;
string name;
int password;
double balance;
int status;
char userID[18];
string address;
};
class Bank
{
public:
Bank();
~Bank();
void work();//工作
void openacc();//开户
void cancelacc();//销户
void save();//存款
void withdraw();//取款
void showacc();//查询余额
void transferacc();//转账
void reloss();//挂失
void cancelloss();//解除挂失
void repassword();//更改密码
int getuser();
private:
int num;//用户数目
User *users;
};
int inputpassword();//输入密码
int pass();//业务员
int choosemenu();//服务列表
#endif // HEAD_H_INCLUDED
#include <iostream>
#include "head.h"
using namespace std;
int main()
{
cout<<"+----------------------+\n";
cout<<"+ »¶Ó¹âÁÙ¿ÓÄãµãÒøÐÐ +\n";
cout<<"+----------------------+\n";
if(pass())
{
Bank b;
b.work();
}
return 0;
}
#include <iostream>
#include "head.h"
using namespace std;
void User::setuser(int acc,string nam,int pw,double bal,int sta,char id[18],string add)
{
account=acc;
name=nam;
password=pw;
balance=bal;
status=sta;
for(int i=0;i<10;i++)
userID[i]=id[i];
address=add;
}
void User::showuser()
{
cout<<"用户姓名:"<<name<<endl;
}
void User::showbalance(string prompt)
{
cout<<prompt<<" "<<balance<<"元"<<endl;
}
bool User::passwordright()
{
bool t=true;
int pass;
cout<<"请输入密码:";
pass=inputpassword();
if(pass!=password)
{
t=false;
cout<<"密码错误"<<endl;
}
return t;
}
bool User::staisnor()
{
bool nor=true;
if(status!=0)
{
nor=false;
cout<<"该账户处于"<<(status==1?"挂失":"销户")<<"状态"<<endl;
}
return nor;
}
#include <iostream>
#include "head.h"
using namespace std;
Bank::Bank()
{
ifstream infile("account.txt",ios::in);
if(!infile)
{
cerr<<"account open error"<<endl;
exit(1);
}
int i=0;
users=new User[i+2000];
int acc;
string nam;
int pw;
double bal;
int sta;
char id[18];
string add;
while(infile>>acc>>nam>>pw>>bal>>sta>>id>>add)
{
users[i].setuser(acc,nam,pw,bal,sta,id,add);
i++;
}
num=i;
infile.close();
}
Bank::~Bank()
{
ofstream outfile("account.txt",ios::out);
if(!outfile)
{
cerr<<"account open error"<<endl;
exit(1);
}
for(int i=0; i<num; i++)
{
outfile<<users[i].account<<" ";
outfile<<users[i].name<<" ";
outfile<<users[i].password<<" ";
outfile<<users[i].balance<<" ";
outfile<<users[i].status<<" ";
outfile<<users[i].userID<<" ";
outfile<<users[i].address<<endl;
}
outfile.close();
delete[]users;
}
void Bank::work()//工作
{
int choose;
do
{
choose=choosemenu();
switch(choose)
{
case 1:
openacc();
break;
case 2:
cancelacc();
break;
case 3:
save();
break;
case 4:
withdraw();
break;
case 5:
showacc();
break;
case 6:
transferacc();
break;
case 7:
reloss();
break;
case 8:
cancelloss();
break;
case 9:
repassword();
break;
case 0:
cout<<"欢迎下次再来"<<endl;
}
}
while(choose);
}
void Bank::openacc()//开户
{
Bank();
int acc;
string nam;
int pw;
double bal;
int sta;
char id[18];
string add;
cout<<"正在开户···"<<endl;
acc=10001+num;
cout<<"账户名:"<<acc<<endl;
cout<<"用户名:";
cin>>nam;
cout<<"身份证号:";
cin>>id;
cout<<"家庭住址:";
cin>>add;
int pass1,pass2;
cout<<"请输入密码:";
pass1=inputpassword();
cout<<"请确认密码:";
pass2=inputpassword();
if(pass1==pass2)
{
pw=pass1;
sta=0;
cout<<"存入金额:";
cin>>bal;
users[num].setuser(acc,nam,pw,bal,sta,id,add);
num++;
cout<<"开户成功"<<endl;
}
else
cout<<"两次输入密码不一致,开户不成功"<<endl;
}
void Bank::cancelacc()//销户
{
int who;
who=getuser();
if(who>=0)
{
users[who].showuser();
if(users[who].passwordright())
{
users[who].showbalance("余额");
cout<<"确认销户(y/n)?";
if(tolower(getchar())=='y')
{
users[who].showbalance("销户成功,本次取款金额为:");
users[who].balance=0;
users[who].status=2;
}
else
cout<<"用户已取消操作,销户失败."<<endl;
fflush(stdin);
}
}
}
void Bank::save()//存款
{
int who;
double money;
who=getuser();
if(who>=0)
{
if(users[who].status==0)
{
users[who].showuser();
cout<<"请输入存款金额:";
cin>>money;
ofstream file("save.txt",ios::app);
if(!file)
{
cerr<<"save open error"<<endl;
exit(1);
}
file<<users[who].account<<"存入"<<money<<endl;
file.close();
int d;
double s;
cout<<"请输入您要存入的天数:";
cin>>d;
s=0.036/365*d*money;
cout<<"到期后您的利息为:"<<s<<endl;
money+=s;
users[who].balance+=money;
users[who].showbalance("存入成功,余额为:");
}
else if(users[who].status==1)
cout<<"该用户处于挂失状态,存款失败."<<endl;
else
cout<<"该用户已经销户,存款失败."<<endl;
}
return;
}
void Bank::withdraw()//取款
{
int who;
double money;
who=getuser();
if(who>=0)
{
if(users[who].staisnor())
{
users[who].showuser();
if(users[who].passwordright())
{
cout<<"请输入取款额度:";
cin>>money;
if(money>users[who].balance)
cout<<"余额不足,取款失败."<<endl;
else
{
users[who].balance-=money;
ofstream file("save.txt",ios::app);
if(!file)
{
cerr<<"save open error"<<endl;
exit(1);
}
file<<users[who].account<<"取出"<<money<<endl;
file.close();
users[who].showbalance("取款后,余额为:");
}
}
}
}
return ;
}
void Bank::showacc()//查询
{
int who,a;
string rep;
char b;
string sta[3]= {"正常","挂失","已经销户"};
who=getuser();
if(who>=0)
{
users[who].showuser();
if(users[who].passwordright())
{
users[who].showbalance("余额:");
cout<<"状态:"<<sta[users[who].status]<<endl;
cout<<"身份证号:"<<users[who].userID<<endl;
cout<<"家庭住址:"<<users[who].address<<endl;
cout<<"是否查看账户记录?(y/n)"<<endl;
cin>>b;
if(b=='y')
{
ifstream file("save.txt",ios::in);
if(!file)
{
cerr<<"save open error"<<endl;
exit(1);
}
while(file>>a)
{
if(a==users[who].account)
{
file>>rep;
cout<<rep<<" ";
}
else
file>>rep;
}
file.close();
}
}
}
return ;
}
void Bank::transferacc()//转账
{
int whoout,whoin;
double money;
cout<<"转出账户:";
whoout=getuser();
if(whoout>=0)
{
if(users[whoout].staisnor())
{
users[whoout].showuser();
if(users[whoout].passwordright())
{
cout<<"输入转账金额:";
cin>>money;
if(money>users[whoout].balance)
cout<<"余额不足,转账失败."<<endl;
else
{
cout<<"转账到:";
whoin=getuser();
if(whoin>=0)
{
if(users[whoin].staisnor())
{
users[whoout].balance-=money;
users[whoin].balance+=money;
ofstream file("save.txt",ios::app);
if(!file)
{
cerr<<"save open error"<<endl;
exit(1);
}
file<<users[whoout].account<<"转账给"<<users[whoin].account<<money<<endl;
file<<users[whoin].account<<"收到"<<users[whoout].account<<money<<endl;
file.close();
users[whoout].showbalance("转账后,余额为:");
}
}
}
}
}
}
return;
}
void Bank::reloss()//挂失
{
int who;
who=getuser();
if(who>=0)
{
users[who].showuser();
if(users[who].passwordright())
{
if(users[who].status==0)
{
users[who].status=1;
cout<<"挂失成功"<<endl;
cout<<"如果银行收回此卡,将会将其邮寄至:"<<users[who].address<<",请确认信息,不符请于银行联系."<<endl;
}
else if(users[who].status==1)
cout<<"该账户已经处于挂失状态."<<endl;
else
cout<<"该账户已经销户,挂失失败."<<endl;
}
}
return ;
}
void Bank::cancelloss()//解除挂失
{
int who;
who=getuser();
if(who>=0)
{
users[who].showuser();
if(users[who].passwordright())
{
if(users[who].status==0)
cout<<"该账户处于正常状态,无需解除挂失."<<endl;
else if(users[who].status==1)
{
users[who].status=0;
cout<<"解除挂失成功."<<endl;
}
else
cout<<"该账户已经销户,解除挂失失败."<<endl;
}
}
return ;
}
void Bank::repassword()//更改密码
{
int who;
int pass1,pass2;
who=getuser();
if(who>=0)
{
users[who].showuser();
if(users[who].passwordright())
{
cout<<"新密码:";
pass1=inputpassword();
cout<<"再次输入:";
pass2=inputpassword();
if(pass1==pass2)
{
users[who].password=pass1;
cout<<"修改密码成功,请牢记新密码."<<endl;
}
else
cout<<"两次密码不同,修改失败."<<endl;
}
}
return ;
}
int Bank::getuser()
{
int id;
cout<<"账号:";
cin>>id;
int index=-1;
int low=0,high=num-1,mid;
while(low<=high)
{
mid=(low+high)/2;
if(users[mid].account==id)
{
index=mid;
break;
}
else if(users[mid].account>id)
high=mid-1;
else
low=mid+1;
}
if(index<0)
cout<<"该账户不存在."<<endl;
return index;
}
#include <iostream>
#include "head.h"
using namespace std;
int inputpassword()
{
char ch;
int ipass=0;
int i;
while(1)
{
for(i=0; i<6; i++)
{
ch=getch();
putchar('*');
if(isdigit(ch))
ipass=ipass*10+(ch-'0');
else
{
ipass=0;
break;
}
}
fflush(stdin);
cout<<endl;
if(ipass==0)
{
cout<<"密码要求全为数字,但不能全为0."<<endl;
cout<<"请重新输入:";
}
else
break;
}
return ipass;
}
int pass()
{
char namefile[20];
char passfile[20];
ifstream infile("password.txt",ios::in);
if(!infile)
{
cout<<"password.txt open error."<<endl;
exit(1);
}
infile>>namefile>>passfile;
infile.close();
char sname[20];
char spass[20];
char ch;
int itry=3;
int right=0;
do
{
cout<<"请输入业务员姓名:";
cin>>sname;
cout<<"请输入密码:";
int i=0;
while((ch=getch())!='\r')
{
spass[i++]=ch;
putchar('*');
}
spass[i]='\0';
fflush(stdin);
cout<<endl;
if(strcmp(spass,passfile)==0&&strcmp(sname,namefile)==0)
{
right=1;
break;
}
else
{
itry--;
if(itry>0)
cout<<"超过三次将退出,你还可以尝试"<<itry<<"次!"<<endl;
else
cout<<"对不起,您不能进入系统."<<endl;
}
}
while(itry);
return right;
}
int choosemenu()
{
int i;
while(1)
{
cout<<endl<<endl;
cout<<"+-------------------+"<<endl;
cout<<"1开户 2销户 3存款"<<endl;
cout<<"4取款 5查询 6转账"<<endl;
cout<<"7挂失 8解挂 9改密"<<endl;
cout<<" 0退出 "<<endl;
cout<<"请输入操作指令:";
cout<<endl<<endl;
cin>>i;
if(i>=0&&i<=9)
break;
else
cout<<"请重新选择:"<<endl;
}
return i;
}
经过一系列的检查,测试,bug,乱码的层层挑战,终于完成了这个简易的程序,其实一点都不简易,哈哈哈哈