#include<iostream>
#include<string>
using namespace std;
class Bank

{

public:

Bank(string _name)

{

name = _name;

}

string getName() const

{

return name;

}

virtual void printMessage() const = 0;

virtual void deposit(double m) = 0;

virtual void withdraw(double m) = 0;

virtual double getMoney() const = 0;

protected:

string name;

};

class ICBC : public Bank

{

public:

ICBC(double _money = 0):Bank("ICBC")

{

money = _money;

}

void printMessage() const

{

cout << "Welcome to Industrial and Commercial Bank of China" << endl;

}

void deposit(double m)

{

money += m;

}

void withdraw(double m)

{

if (money > m) money -= m;

else money = 0;

}

double getMoney() const

{

return money;

}

private:

double money;

};

class ABC : public Bank

{

public:

ABC(double _money = 0):Bank("ABC")

{

money = _money;

}

void printMessage() const

{

cout << "Welcome to Agricultural Bank of China" << endl;

}

void deposit(double m)

{

money += m;

}

void withdraw(double m)

{

if (money > m) money -= m;

else money = 0;

}

double getMoney() const

{

return money;

}

private:

double money;

};
 
 
 
class AccountManager

{

public:

AccountManager(int _size);

~AccountManager();

void setBank(int i, Bank *bank);

Bank* getBank(int i);

void deposit(Bank *bank, double money);

void withdraw(Bank *bank, double money);

void transfer(Bank *bank1, Bank *bank2, double money);

void printAccount() const; //print the welcome message, bank name and money for each array element

private:

Bank* *bankList; //bank array, where each element is a (Bank*) type

int size; //the length of the bank array

};
 
 
AccountManager::AccountManager(int _size){
 size = _size;
    bankList = new Bank*[size];
}

AccountManager::~AccountManager(){
 delete [] bankList;
}

void AccountManager::setBank(int i, Bank *bank){
 bankList[i] = bank;
}

Bank* AccountManager::getBank(int i){
 return bankList[i];
}

void AccountManager::deposit(Bank *bank, double money){
 bank->deposit(money);
}

void AccountManager::withdraw(Bank *bank, double money){
 bank->withdraw(money);
}

void AccountManager::transfer(Bank *bank1, Bank *bank2, double money){
 if(bank1->getMoney()>=money){
    bank1->withdraw(money);
    bank2->deposit(money); 
 }
 else{
  bank2->deposit(bank1->getMoney());
  bank1->withdraw(bank1->getMoney());
 }
 
}

void AccountManager::printAccount() const{
    for(int i=0;i<size;i++){
     bankList[i]->printMessage();
     cout<<bankList[i]->getName()<<" ";
     cout<<bankList[i]->getMoney()<<endl;
    }
}
 
 
 
 
 
 
 
 
 
 
 
 int main()

{

AccountManager accountManager(2);

Bank *bank1 = new ICBC (100);

accountManager.setBank(0, bank1);

Bank *bank2 = new ABC;

accountManager.setBank(1, bank2);

accountManager.printAccount();

accountManager.deposit(accountManager.getBank(0), 100);

accountManager.deposit(accountManager.getBank(1), 100);

accountManager.printAccount();

accountManager.withdraw(accountManager.getBank(0), 50);

accountManager.withdraw(accountManager.getBank(1), 50);

accountManager.printAccount();

accountManager.transfer(accountManager.getBank(0), accountManager.getBank(1), 500);

accountManager.printAccount();

return 0;

}

Bank homework 10 2016 4 25的更多相关文章

  1. Windows 10 2016 LTS版本下载与激活

    Windows 10 2016 LTS版是针对企业用户推出的长期支持版本,有如下2个优点:1.不会被强制升级.2.去掉小娜,应用商店等不常用的功能,系统相对简洁. 安装文件下载地址如下(x86/x64 ...

  2. Alpha冲刺(2/10)——2019.4.25

    所属课程 软件工程1916|W(福州大学) 作业要求 Alpha冲刺(2/10)--2019.4.25 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪 ...

  3. OneZero第五次站立会议(2016.3.25)

    会议时间:2016年3月25日 12:45~12:57 会议成员:冉华,张敏,王巍,夏一鸣. 会议目的:汇报前一天工作,全体成员评论,确定会后修改内容. 会议内容:1.界面原型已经确定.(夏负责) 2 ...

  4. iros2016-Monday 10/10/2016

    Workshop Day Integrating Multiple Knowledge Representation and Reasoning Techniques in Robotics (MIR ...

  5. 2016 - 1 - 25 第三方网络框架 AFN的简单使用

    AFNetworking 底层是对NSURlSession 和对 NSURLConnect 的包装 1.具体使用方法可以参照github上的主页面,在这里只是举一个文件上传的简单列子 - (void) ...

  6. 2016.8.25 JavaScript入门之二

    1.字符串中,引用字符串:要用/"转换: 例如:var myStr="I am a \"double quoted\" string inside \" ...

  7. “耐撕”团队 2016.03.25 站立会议

    1.时间:2016.3.23  2.成员: Z 郑蕊 * 组长 (博客:http://www.cnblogs.com/zhengrui0452/), P 濮成林(博客:http://www.cnblo ...

  8. 2016/2/25 html+css学习资源

    html+css学习资源 1.Position is Everything,一个描述和展示在各种浏览器中发现的bug,并提供css解决方法的网站,顶! 2.一个国外的网页设计论坛 3.http://c ...

  9. 2016/1/25 多线程 作业 方法一 继承Thread 方法二 实现Runnable 多线程笔记

    /* * 1,尝试定义一个继承Thread类的类,并覆盖run()方法, * 在run()方法中每隔100毫秒打印一句话.*/ package Stream; //方法一 继承Thread 实现多线程 ...

随机推荐

  1. NPOI生成单元格(列)下拉框

    客户提出能否将导入模板中,课程一列添加下拉框方便选择,不用手输入,以减少输入错误的可能性.于是在网上找了点代码,稍加整理后,形成了以下方案,代码部分: 一:生成课程列表,并放置在excel的单独she ...

  2. Django(进阶篇)之model

    Model 解析 Django的数据库,涉及相关操作时就是以下流程: 1.创建数据库,设计表结构和字段 2.使用Mysqldb来连接数据库,并编写数据访问层 3.业务逻辑层去调用数据访问层执行数据库操 ...

  3. 68. Longest Common Prefix

    Longest Common Prefix Write a function to find the longest common prefix string amongst an array of ...

  4. JAVA设计模式之合成模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述合成(Composite)模式的: 合成模式属于对象的结构模式,有时又叫做“部分——整体”模式.合成模式将对象组织到树结构中,可以用来描述 ...

  5. php代码运行提速的20个小技巧(转)

    用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则 不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中 ...

  6. APP自适应的例子

    <!DOCTYPE html><html lang="zh"> <head> <meta charset="UTF-8" ...

  7. IMX6下移植WKxxx驱动

    wkXXX.c #include<linux/init.h> #include <linux/module.h> #include <linux/kernel.h> ...

  8. WPF TextBlock文本纵向排列

    一.将TextBlock文本纵向排列输出有两种模式. 1.文字正常放置,只是纵向排列. 2.文字同样旋转90度,纵向排列. 二.详见下文实例 1.文本正常放置,纵向排列. (1)后台代码 string ...

  9. ADAS技术应用

    ADAS技术应用: LDW:Lane Departure Warning 车道偏离警告VD: Vihicle Detection 车辆检测FCW: Front Collision Warning 前向 ...

  10. oracle rownum paging issues

    rownum是oracle预处理字段,默认标序是1,只有记录集已经满足条件后才会进行后续编号.由于第一条记录rownum默认是1,而你的条件是rownum>=6 对第一条记录比较它的rownum ...