关闭

银行储蓄程序(C++,simple)

标签: C++银行储蓄虚函数派生类
1480人阅读 评论(0) 收藏 举报
分类:
*/
 * Copyright (c) 2016,烟台大学计算机与控制工程学院
 * All rights reserved.
 * 文件名:text.cpp
 * 作者:常轩
 * 微信公众号:Worldhello
 * 完成日期:2016年6月1日
 * 版本号:V1.0
 * 问题描述: 	实现一个简单的银行储蓄系统,承担活期用户的存款和取款业务 (只是初步的写出)
1. 要求如下:

1) 实现描述银行的类Bank,记录系统中现有哪些储户(可用数组或vector实现),定义了生成储户的函数append,
按照账户删除储户的函数的deleteUser,按账号查询储户的函数query,并显示结果。

2) 定义储户基类Account,具有属性账号,存款人姓名和余额,操作saveMoney、getoutMoney和showAccountInfo。
虚函数saveMoney存储业务,虚函数getoutMoney处理取款业务,虚showAccountInfo函数显示储户所有信息。

3) 定义储户派生类普通储户NormalAccount,实现操作saveMoney、getoutMoney和showAccountInfo,
函数getoutMoney处理取款业务时余额不足不予取并提示信息,函数showAccountInfo显示普通储户的所有信息。

4) 定义储户派生类高级储户VIPAccount,包含普通账户的所有信息,同时包含透支上限,透支总额,
函数getoutMoney处理取款业务时超过透支上限不予取并提示信息,函数showAccountInfo显示高级储户的所有信息。

5) 编写main函数,测试上述所要求的各种功能,即可以根据菜单命令增加,删除,和查询储户,
以及储户存款和取款操作:




   a   增加账户时可选择增加普通账户和高级账户,普通账户帐号格式为“N001”,高级账户帐号格式为“V001”;
   b   根据输入的帐号删除和查询账户;

   c   储户取款和存款时要求输入帐号,根据帐号来操作账户。
 * 程序输入:无
 * 程序输出:见运行结果
 */

#include<iostream>
#include<string>
using namespace std;
//储户基类
class Account 
{
public:
	Account(string i,string n,double m=0);
	virtual void saveMoney(double s);     //存钱
	virtual void getoutMoney(double g);   //取钱
	virtual void showAccountInfo();         //查询
	string getId();
protected:
	string id;                                    //用户账号
	string name;                                  //用户姓名
    double money;                                  //用户余额
};
Account::Account(string i,string n,double m)
{
	id=i;
	name=n;
	money=m;
}
string Account::getId()
{
  return id;
}
void Account::showAccountInfo()         //V查询函数定义
{
	
}
void Account::getoutMoney(double g)         //V查询函数定义
{
	
}
void Account::saveMoney(double s)         //V查询函数定义
{
	
}
//普通储户类
class NormalAccount:public Account{
public:
	NormalAccount(string i,string n,double m):Account(i,n,m)
	{
      
	}
	void saveMoney(double s);             //N存钱
	void getoutMoney(double g);           //N取钱
    void showAccountInfo();                 //N查询
private:
	/*string name;
	string Nid;
	double money;*/
};

void NormalAccount::saveMoney(double s)  //N存钱函数定义  
{
    this->money=this->money+s;
}
void NormalAccount::getoutMoney(double g)//N取钱函数定义
{
	if(this->money<g)
	{
		cout<<"您的余额已不足!"<<endl;
	}
	else
	{
		this->money=this->money-g;
		cout<<"取款成功!"<<endl;
	}
}
void NormalAccount::showAccountInfo()            //N查询函数定义
{
	cout<<"姓名:"<<name<<endl<<"账号:"<<this->id<<endl<<"余额:"<<this->money<<endl;
	
}

//VIP储户类
class VipAccount:public Account{
public:
		VipAccount(string i,string n,double m):Account(i,n,m)
	{
    
    touzhilimit=20000;                     //V透支上限两万
	touzhimoney=0;                          //V透支总额(初始化为零
	}                               //V构造函数(初始化透支上限与总额)
	void saveMoney(double s);            //V存钱
	void getoutMoney(double g);          //V取钱
    void showAccountInfo();                //V查询
private:
/*	string name;
	string Vid;
	double money;*/
	double touzhilimit;                         //V透支上限
	double touzhimoney;                         //V透支总额
};
/*
VipAccount::VipAccount()                   //VIP储户类构造函数定义
{
	touzhilimit=20000;                     //V透支上限两万
	touzhimoney=0;                          //V透支总额(初始化为零)
}*/
void VipAccount::saveMoney(double s)     //V存钱函数定义
{
	if(this->money=0)                                                                           
    {
		if(touzhimoney>0)
			touzhimoney=touzhimoney-s;
		else
			this->money=this->money+s;
	}
	else
        this->money=this->money+s;
 
}
void VipAccount::getoutMoney(double g)   //V取钱函数定义
{
	if(g>(this->money+(touzhilimit-touzhimoney)))
	{
		cout<<"您的余额不足,已达到透支上限!"<<endl;
	}
	else
	{
		this->money=this->money-g;
		if(this->money<0)
		{
			touzhimoney=this->money*(-1)+touzhimoney;
			this->money=0;
		}
		cout<<"取款成功!"<<endl;
	}
}
void VipAccount::showAccountInfo()         //V查询函数定义
{
	cout<<"姓名:"<<this->name<<endl<<"账号:"<<this->id<<endl<<"余额:"<<this->money<<endl<<"透支总额:"<<this->touzhimoney<<"透支上限:"<<this->touzhilimit<<endl;

}

//银行类
class Bank{
public:
	Bank();
	void deleteuser();
	void query();
	void append();
	void del();
public:
	int Index;
	
	Account *user[1000];
	
};
Bank::Bank()
{
	for(int i=0;i<1000;i++)
	{
	      user[i] =NULL;
	      Index=0;
	}
}
void Bank::append()
{
	int choose;
	string ID;
	string Name;
	double Money;
    cout<<"*****        你好,选择开普通账户请按——1        *****"<<endl<<"*****              选择开高级账户请按——2        *****"<<endl;
    cin>>choose;
	if(choose==1)
	{   
		
		cout<<"开户中..."<<endl;
		cout<<"请输入账号,例如:N001或者N080"<<endl<<"账号:";
		cin>>ID;
		int tmp =1;
		for(int i=0;i<Index;i++)
		{
			
			if(user[i]->getId()==ID)
			{
				cout<<"该账号已存在!"<<endl;
				tmp =2;
			}
		}
		if(tmp==2)
			return;
		else
		{
		cout<<"姓名:";
		cin>>Name;
		cout<<"存入:";
		cin>>Money;
	    
		
		Account *n=new NormalAccount(ID,Name,Money);
		cout<<"开户成功!"<<endl;
		
        user[Index]=n;
		cout<<endl<<"当前账户状态:"<<endl;
		user[Index]->showAccountInfo();
		Index++;
		
		}
	}
    else
	{   
		cout<<"开户中..."<<endl;
		cout<<"请输入账号,例如:V001或者V080"<<endl<<"账号:";
		cin>>ID;
		int tmp =1;
		for(int i=0;i++;i<1000)
		{
			if(user[i]->getId()==ID)
			{
				cout<<"该账号已存在!"<<endl;
				tmp =2;
			}
		}
		if(tmp==2)
			return;
		cout<<"姓名:";
		cin>>Name;
		cout<<"存入:";
		cin>>Money;
		Account *n;
		n=new VipAccount(ID,Name,Money);
		cout<<"开户成功!"<<endl;
        user[Index]=n;
		cout<<endl<<"当前账户状态:"<<endl;
		user[Index]->showAccountInfo();
		Index++;
		
	}
}
void Bank::query()
{
	string n;
	cout << "请输入您要查询的用户账号:" << endl;
	cin>>n;
	int tem=1;
	for(int i=0;i<Index;i++)
	{
		if(user[i]->getId() == n)
		{
			tem=2;
			break;
		}
	}
	if(tem==2)
      user[i]->showAccountInfo();
	else
      cout<<"账户不存在!"<<endl;
}
void Bank::del()
{
	string n;
	cout << "请输入要注销的用户账号" << endl;
	cin>>n;
	int tem=1;
	int j;                            //用来记录应删除账户的下标
	for(int i=0;i<Index;i++)
	{   
        if(user[i]->getId()==n)
		{
			tem=2;
			j=i;
	        break;
		}
		
	}
	if(tem==2)
	{
		delete user[j];
		Index--;
		cout<<"注销成功!"<<endl;
	}
	else
        cout<<"没有这个账号"<<endl;
}
int menu_select();

int main()
{
	Bank bank;
    char choice;
   
	for(;;)
	{
		choice=menu_select();
		if(choice==1)
               bank.append();
			   
		else if(choice==2)
               bank.del();
		else if(choice==3)
		{
			string n;
	          cout<<"请输入您要存取款的账号"<<endl;
              cin>>n;
			  int tem=1;
              for(int i=0;i<1000;i++)
			  {
				  if(bank.user[i]->getId()==n)
				  {
					  tem=2;
					  break;
				  }
			  }
		      if(tem==1)
			  {
			    cout<<"账号输入错误"<<endl;
			  }
	       	  if(tem==2)
			  {
			        int choice;
			
							cout<<"1.取款"<<endl;
							cout<<"2.存款"<<endl;
							cout<<"请选择"<<endl;
						
			               cin>>choice;
		               	if(choice == 1)
						{
			 				double jine;
							cout<<"请输入取款金额:"<<endl;
							cin >> jine;
							bank.user[i]->getoutMoney(jine);
							bank.user[i]->showAccountInfo();
											
						}
			            if(choice == 2)
						{
							double qkuan;
							cout<<"请输入存款金额:"<<endl;
							cin>>qkuan;
							bank.user[i]->saveMoney(qkuan);
							bank.user[i]->showAccountInfo();
						}
			  }
		
			  
		}
        else if(choice==4)
              bank.query();
		
    	else
			break;
		}
	
	return 0;
}

int menu_select()
{
   char c;
   cout<<"***************************************************************"<<endl;
   cout<<"***********************银行储蓄系统 v1.0***********************"<<endl;
   cout<<"*                                                             *"<<endl;
   cout<<"*                         1.开户                              *"<<endl;
   cout<<"*                         2.销户                              *"<<endl;
   cout<<"*                         3.取款或存款                        *"<<endl;
   cout<<"*                         4.查询账户                          *"<<endl;
   cout<<"*                         5.退出                              *"<<endl;
   cout<<"***************************************************************"<<endl;
   cout<<"                    请输入(1-5)进行操作:"<<endl;
   do{
	   cin.get(c);
   }while(c<'1'||c>'5');
   return c-48;

}


下面有两张简单的运行图片:




结语:

      或许运行起来还是有BUG的,希望大家可以给我指正!

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:80425次
    • 积分:2591
    • 等级:
    • 排名:第14134名
    • 原创:180篇
    • 转载:4篇
    • 译文:0篇
    • 评论:27条
    RUNNING|~_~|My web
    微信公众号
    玩转编程、聚焦互联
    Worldhello


    微信公众号:Worldhello
    期待您的关注!
    博客专栏
    最新评论