一个简单的银行系统

#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;
}





  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
功能需求详细说明: 0、 显示所有账户 a) 查询出所有账户信息(账户名、账户ID、账户密码、账户余额); 1、 添加账户 a) 添加时先判断输入的账户Id在当前系统中存在不存在,不能重复,如果重复,提示退出程序; b) 添加账户分为两种情况: i. accounts数组未满,只需遍历当前的系统账户信息,找到为null的位置将新的账户信息添加进去; ii. accounts满了,进行扩容操作,每次扩容10个,提示(在数组扩容之后要将原系统中的账户信息移到对应的新对象数组中); 2、 存钱 a) 判断存入的账户存在还是不存在,如果不存在给出相应提示; b) 如果存在,在存入金额的时候,判断金额是否合法(不能小于等于0),如果合法提示输入密码,再次确认密码,如果密码输入错误,给出相关提示,如果正确,进行存钱; 3、 取钱 a) 判断取钱的账户存在还是不存在,如果不存在给出相应提示; b) 取钱判断输入的金额是否合法,如果合法提示输入密码,如果密码输入错误,给出相关提示; c) 取款金额要小于等于现有存款金额,不能超出现有余额,若超出,则取款失败,给出相关提示; 4、 转账 a) 要判断本人账户存在还是不存在,然后判断对方账户存在还是不存在,如果其中之一不存在,给出错误提示; b) 进行转账前,要判断本人账户余额是否满足转账金额,如果不足,提示账户余额不足,输出现有余额; c) 在转账金额满足的情况下需要确认密码才能进行转账,转账成功之后,给出相关提示; 5、 修改密码 a) 首先提示输入账户ID,如果不存在给出相关错误提示; b) 输入原密码,再次确认密码,在原密码和确认密码输入正确的情况下方可进入修改密码界面,如果不正确那么提示密码输入错误,如果输入的新密码和旧密码一样,提示新密码和原密码不能一样; c) 在新密码和确认新密码输入不正确的情况下,提示输入错误之后再次提示用户进行输入,在此处可以做一个循环提示,当新密码和确认新密码都输入正确满足条件时则提示修改密码成功;

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值