#include<iostream>
#include <string>
#include<fstream>
using namespace std;
class consumer;
class Bank //银行类
{
public:
void set_account();//银行开户功能
void del_account(); //注销账户功能
void transfer(int); //转账功能
void enter_account(); //查询功能
void addmoney(int,float);//存款功能
void exitYH();// 退出系统
void functionshow();
void save();
void load();// 功能界面
protected:
consumer *account[20];
static int acnum;//账户数
};
class consumer:public Bank//用户类,继承银行类的属性
{
public:
friend class Bank;
consumer(int id,string Name,double IN,string PassWord,float m)
{
ID=id;name=Name;in=IN;money=m;passwd=PassWord;
}
consumer(){ID=0;name='0';in=0;money=0;passwd='0';}
int get_id(){return ID;}
void savemoney();// 存钱
string get_passwd(){return passwd;}// 弹出密码
void display();
void fetchmoney(); //取钱
void change_passwd();
void add_money(float);//计算加余额
void dec_money(float);//计算减余额
float get_money();//转帐
private:
int ID; //开户帐号
string passwd; // 用户密码
string name; // 用户姓名
float money; //开户金额
double in;
};
void consumer::savemoney()//存钱函数
{
float c;
char ch;
do
{
cout<<endl<<"请输入要存入的金额:"<<endl ;
cin>>c;
while(c<=0)
{
cout<<"输入错误,请重新输入!"<<endl;
cout<<"→";
cin>>c;
}
money=money+c;
cout<<"操作已成功!"<<endl;
cout<<"是否要继续该项操作:(Y/N) "<<endl;
cout<<"→";
cin>>ch;
while(ch!='n'&&ch!='N'&&ch!='Y'&&ch!='y')
{
cout<<"→";
cin>>ch;
}
}
while(ch=='y'||ch=='Y');
}
int Bank::acnum=0;
void consumer::display()//用户信息界面
{
system("cls");
cout<<"************************************"<<endl;
cout<<"用户姓名:"<<name<<endl;
cout<<"帐号: "<<ID<<endl;
cout<<"余额: "<<money<<endl;
cout<<"按输入键回到上一菜单"<<endl;
cout<<"************************************"<<endl;
cout<<"→";
}
void consumer::fetchmoney() //取钱
{
float m;
char ch;
do
{
cout<<endl<<"输入取款金额:"<<endl ;
cin>>m;
while(m<=0)
{
cout<<"请输入正确的数字!"<<endl;
cout<<"→";
cin>>m;
}
if(money<m)
{
cout<<"对不起,你的余额不足!"<<endl;
}
else
{
money=money-m;
cout<<endl<<"操作成功,请收好钱!"<<endl;
}
cout<<"是否要继续该项操作:(Y/N) "<<endl;
cout<<"→";
cin>>ch;
while(ch!='n'&&ch!='N'&&ch!='Y'&&ch!='y')//选择错误时判定
{
cout<<"→";
cin>>ch;
}
}while(ch=='y'||ch=='Y');
}
void consumer::change_passwd()
{
string pwd,repwd;
cout<<"请输入新密码:";
cin>>pwd;
cout<<"请再输入一次新密码:";
cin>>repwd;
if(pwd!=repwd)
cout<<"你输入的两次密码不一样,按输入键返回上一层菜单!"<<endl;
else
cout<<"密码修改成功,请牢记!"<<endl;cin.get();
passwd=pwd;
}
void consumer::add_money(float x)
{money=x+money;}
void consumer::dec_money(float x)
{money=money-x;}
float consumer::get_money()
{return money;}
void Bank::set_account()
{
int id;
string nam;
string passw;
float m;
double in;
cout<<"请输入开户号:"<<endl;
cin>>id;
cout<<"请输入开户人姓名:"<<endl;
cin>>nam;
cout<<"请输入开户密码:"<<endl;
cin>>passw;
cout<<"请输入存入金额:"<<endl;
cin>>m;
cout<<"请输入开户人身份证号码:"<<endl;
cin>>in;
while(m<=0)
{
cout<<"请输入正确的数字!"<<endl;
cin>>m;
}
consumer * acc = new consumer(id,nam,in,passw,m);
account[acnum] = acc;
cout<<"开户成功!!"<<endl<<endl;
acnum++;
save();
cin.get();
return;
}
void Bank::del_account() //注销账户功能
{
int id;
cout<<endl<<"请输入你要注销的帐户号:";
cin>>id;
int flag = 1;
int i = 0;
while((i<acnum)&&(flag)) //循环查找
{
if(id == account[i]->get_id())
{
flag = 0;
}
else
{
i++;
}
}
if(flag)
{
cout<<"该帐号不存在,请重新输入!"<<endl;
return; //返回到登陆界面
}
for(int j=i;j<acnum;j++) //所有被删号后的数据重新存储
{
account[j] = account[j+1];
}
account[acnum-1]=NULL;
acnum--; //账号总数自减一次
cout<<"你的账号已注销!!"<<endl<<endl;
save();
cin.get();
return;
}
void Bank::transfer(int x)
{
int id;
cout<<"请输入帐号:";
cin>>id;
int flag = 1;
int i = 0;
while((i<acnum)&&(flag)) //查找要转入的账号
{
if(id==account[i]->get_id()) flag = 0; else i++;
}
if(flag)
{
cout<<"帐号不存在!"<<endl<<endl;
return ;
}
float b;
cout<<endl<<"请输入你要转帐的金额:";
cin>>b;
while(b<=0)
{
cout<<"请输入正确的数字!"<<endl;
cout<<"→";
cin>>b;
}
if(account[x]->get_money()<b) //调用友元类consumer的公有成员函数
cout<<"对不起,金额不够!!"<<endl;
else {account[x]->dec_money(b);account[i]->add_money(b);}
cout<<"转账成功!!"<<endl;
return;
}
void Bank::enter_account()
{
int id;
cout<<"请输入帐号:";
cin>>id;
int flag = 1;
int i = 0;
while((i<acnum)&&(flag)) //循环查找
{
if(id==account[i]->get_id()) flag = 0; else i++;
}
if(flag)
{
cout<<"帐号不存在!"<<endl;
return;
}
cout<<"请输入密码:";
string passw;
cin>>passw;
for(int x=1;x<3;++x)
{
if(passw!=account[i]->get_passwd())
{
cout<<"密码错误"<<endl;
cin>>passw;
}
else
break;
}
if(x==3)
exit(0);
account[i]->display();cin.get();cin.get();
int n;
do{system("cls");
cout<<"请选择下列操作:"<<endl;
cout<<"★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl;
cout<<"★ ★"<<endl;
cout<<"★ 1.查看账户信息 ★"<<endl;
cout<<"★ ★"<<endl;
cout<<"★ 2.取款 ★"<<endl;
cout<<"★ ★"<<endl;
cout<<"★ 3.存款 ★"<<endl;
cout<<"★ ★"<<endl;
cout<<"★ 4.修改密码 ★"<<endl;
cout<<"★ ★"<<endl;
cout<<"★ 5.转账 ★"<<endl;
cout<<"★ ★"<<endl;
cout<<"★ 6.返回上一菜单 ★"<<endl;
cout<<"★ ★"<<endl;
cout<<"★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl;
cout<<"→";
cin>>n;
switch(n)
{
case 1: account[i]->display();break;
case 2: account[i]->fetchmoney();save();break;//从2-5功能,每执行一次调用一次save函数,重新写入数据
case 3:account[i]->savemoney();save();break;
case 4:account[i]->change_passwd();save();break;
case 5:transfer(i);save();break;
case 6:return;
}
cin.get();cin.get();
}
while(1);
}
void Bank::addmoney(int x,float y)
{
account[x]->money=account[x]->money-y;
}
void Bank::exitYH()//退出系统
{
cout<<endl<<"感谢您对本银行的支持,欢迎下次光临!"<<endl;
exit(0);
}
void Bank::functionshow()
{
int n;
do
{system("cls");
load();
cout<<endl<<"请输入相应的操作序号进行操作:"<<endl;
cout<<"★★★★★★★★★★★晏♂氏银行欢迎您★★★★★★★★★★★"<<endl;
cout<<"★ ★"<<endl;
cout<<"★ 1. 开户 ★"<<endl;
cout<<"★ ★"<<endl;
cout<<"★ 2.账户登录 ★"<<endl;
cout<<"★ ★"<<endl;
cout<<"★ 3.账户注销 ★"<<endl;
cout<<"★ ★"<<endl;
cout<<"★ 4.退出系统 ★"<<endl;
cout<<"★ ★"<<endl;
cout<<"★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl;
cout<<"→";
cin>>n;
while(n<1||n>4)
{
cout<<"操作错误,请输入正确的操作序号!"<<endl;
cout<<"→";
cin>>n;
}
switch(n)
{
case 1: set_account();//开户
break;
case 2:enter_account();//登录
break;
case 3: del_account();//注销
break;
case 4: exitYH();//退出
break;
}
cin.get();//输入流类istream的成员函数
}
while(true);
}
void Bank::save()
{
ofstream ofile("bankdat.dat",ios::out);//以输出方式打开文件
ofstream outfile("bankdat.dat",ios::out);//以输出方式打开文件 bankdat.dat接收从内存输出的数据
int n=0;
outfile<<acnum<<" ";
for(n=0;n<acnum;n++)
{
outfile<<account[n]->ID<<" ";//把信息写入磁盘文件bankdat.dat
outfile<<account[n]->money<<" ";
outfile<<account[n]->name<<" ";
outfile<<account[n]->passwd<<" ";
outfile<<account[n]->in<<" ";
}
outfile.close();
}
void Bank::load()
{
ifstream infile("bankdat.dat",ios::in);//以输入方式打开文件
if(!infile)
{
cerr<<"读取错误,无资料中!"<<endl;
return;
}
int n=0;
int id,m;
string nam,passw;double in;
infile>>acnum;
for(n=0;n<acnum;n++)//全部读入
{
infile>>id;//从磁盘文件bankdat.dat读入信息
infile>>m;
infile>>nam;
infile>>passw;
infile>>in;
account[n]->passwd;
consumer * acc = new consumer(id,nam,in,passw,m); //每读入一个n开辟一段内存
account[n] = acc; //赋值首地址
}
infile.close();
cout<<"读取资料正常!"<<endl;
}
int main()
{
Bank yh;
yh.functionshow();
return 0;
}
一个简单的银行系统
最新推荐文章于 2022-03-18 17:05:42 发布