一个活期储蓄账户包括:

信息: 账号(id)、金额(balance)、年利率(rate)等
操作: 显示账户信息(show)、存款(deposit)、取款(withdraw)、结算利息(settle)等


实现该类的难点在于利息的变化,由于账户的余额是不断变化的,因此:

  • 余额 x 年利率 = 年利?(NO)
  • 一年当中的余额累积起来/一年的总天数=日均余额
    日均余额 x 年利率 = 年利 (YES)

例子: 年利率是1.5%,对下面程序中的账户,第5天存入5000,第45天存入5500,第90天结算。 那么利息是:((45-5)5000+(90-45)(5000+5500))/365 *1.5% =27.64
看了这个例子带入程序中的表达式,就能理解 accumulate的计算式accumulation + balance * (date - lastDate);
因为存了多少取了多少直接加减就是了,所以重点就是在利息的计算。

#include<iostream>
#include<cmath>
using namespace std;class SavingAccount
{private:int id;                 //账户名double balance;         //余额double rate;            //年利率int lastDate;                            //上次算过利息的最后一天double accumulation;void record(int date, double amount);    //指定天数的总金额double accumulate(int date) const        //accumulation是用来算利息的{return accumulation + balance * (date - lastDate);           }
public :SavingAccount(int date, int id, double rate);int getId(){return id;}double getBalance(){return balance;}double getRate(){return rate;}void deposit(int date, double amount);void withdraw(int date, double amount);void settle(int date);void show();
};SavingAccount::SavingAccount(int date, int id, double rate)                //构造函数初始化账户:id(id), balance(0), rate(rate), lastDate(date), accumulation(0)
{cout << date << "\t #" << id << "\t"<<"is created" << endl;}void SavingAccount::record(int date, double amount)   //amount最终实际上是主函数传进来的。record函数起一个变更当前存款的作用
{accumulation = accumulate(date);lastDate = date;amount = floor(amount * 100 + 0.5) / 100;         //四舍五入balance += amount;cout << date << "\t #" << id << "\t" << amount << "\t" << balance << endl;
}void SavingAccount::deposit(int date, double amount)
{record(date, amount);
}void SavingAccount::withdraw(int date, double amount)
{if (amount > getBalance())cout << "Error:not enough money" << endl;elserecord(date, -amount);
}void SavingAccount::settle(int date)
{double interest = accumulate(date)*rate / 365;        //按日来结算if (interest != 0)record(date, interest);accumulation = 0;
}void SavingAccount::show()
{cout << "#" << id << "\tBalance:" << balance<<endl;
}int main()
{SavingAccount zhanghu0(1, 100000, 0.015);             //创建两个账户,年利率百分之1.5SavingAccount zhanghu1(1, 111111, 0.015); zhanghu0.deposit(5, 5000);                      //第五天存进5000zhanghu1.deposit(25, 10000);zhanghu0.deposit(45, 5500);zhanghu1.withdraw(60, 4000);                     //第60天取出4000zhanghu0.settle(90);                  //第90天结算zhanghu1.settle(90);zhanghu0.show();zhanghu1.show();return 0;
}

结果为:

C++之个人银行账户管理程序相关推荐

  1. 【C++ 第七章 个人银行账户管理程序案例】

    [第七章] 个人银行账户管理程序  案例实现 //account.cpp #include"account.h" #include<cmath> #include< ...

  2. 个人银行账户管理程序

    这个程序是一个银行账户管理的程序,是用C++来实现程序功能的,该程序包含六个文件,其中有date.h头文件 是日期类的头文件,date.cpp是日期类的实现文件,accumulator.h是按日将数值 ...

  3. shell银行账户管理程序_如何在德国设立银行账户?德国银行卡比较和解析

    什么是Current Account? 通过Expatrio在线办理的自保金账户是一个特殊的,有限制条款的冻结账户,不能作为储蓄和消费账户使用.因此您需要设立一个欧元往来账户(current acco ...

  4. shell银行账户管理程序_德国邮政 Postbank 银行 开户 中文 参考教程

    精 选 众家 » 生活点滴 » 德国邮政 Postbank 银行 开户 中文 参考教程 德国邮政 Postbank 银行 开户 中文 参考教程 2014-07-29 2518 次阅读 德国邮政银行Po ...

  5. C++转Java个人银行账户管理程序

    4.9 1.private,public等在Java里面需要单独写在每一个成员前面 java private int id; private void record(int date, double ...

  6. 个人银行账户管理程序(C++语言程序设计第4版)

    银行作业分享,欢迎批评指正.到第12章. 文章目录 Array.h accumulator.h date.h account.h account.cpp date.cpp main.cpp comma ...

  7. java转账_使用Java模拟银行账户存、取款、转账功能

    半枯 package bank;import java.util.Scanner;/** * 1.建立一个银行账户类(Acount),具有建立新帐号.查询余额.存款.取款.转账 * 即从本账户把钱转给 ...

  8. python银行系统-Python实现银行账户资金交易管理系统

    用类和对象实现一个银行账户的资金交易管理, 包括存款.取款和打印交易详情, 交易详情中包含每次交易的时间.存款或者取款的金额.每次交易后的余额. 如: 下面按照要求定义一个账户 Account 类.账 ...

  9. C#实验报告 类与对象的访问性:银行账户存取款、新建账户、查询余额

    实验4 C#程序的流程控制 一.实验目的 (1)理解面向对象的概念,掌握C#定义类和创建对象的方法 (2)区分类的不同数据成员,包括常量.字段和属性的定义方法,并学会控制其访问性 (3)掌握类的方法成 ...

  10. C++编程练习:设计一个银行账户类,包含户名、帐号以及当前余额属性,并且能完成开户、存款、取款和查询余额等行为。

    文章目录 例题 分析 代码 测试 结语 例题 设计一个银行账户(Account)类,包含户名.帐号以及当前余额属性,可完成开户.存款.取款和查询余额等行为.银行账户类的定义要求如下: class Ac ...

最新文章

  1. 直击灵魂!统计学知识十问十答,你都会吗?
  2. SQL总结(三)其他查询
  3. 数组之删除排序数组中的重复项
  4. Web 第二阶段Java Script (续)
  5. 盘点2015年前20款表现出色的免费开源软件
  6. 给产品经理背景的朋友介绍SAP C4C
  7. Objective-C中的self和super
  8. Oracle 屠刀下的 Java 软件公司怎么活?
  9. OpenCV入门: Mat数据类型及其转换,访问
  10. 做Meta分析要用哪些软件?Meta分析软件盘点,含软件安装包!
  11. 百家号怎么发送链接,发送自己的链接变成文字等解答
  12. 微信小程序 数组 Json 导出到excel
  13. Linux下分区、挂载、删除分区说明
  14. python七段数码管绘制英文字母_Python实例之七段数码管绘制理解
  15. 罗克韦尔自动化启用位于硅谷的新建电动汽车创新中心
  16. 受尽苦难而不厌_信息安全工程师正在为确保我们的安全而苦难
  17. 2020 Leetcode 春季赛战队赛 题目汇总
  18. 浮云E绘图SDK3.0,快速开发电路图、电子图纸、工业控制流程图、工艺流程图等绘图项目
  19. FeignClient设置请求头信息
  20. Ubuntu18.04运行ORB-SLAM3(Demo+本地Realsense D415运行)

热门文章

  1. NXP TJA1040, TJA1042, TJA1050 TJA1051, TJA1057, TJA1044, TJA1055区别
  2. 分享教程,制作Srt字幕最简单的方法
  3. [转]关于uboot的main_loop
  4. 3dmax材质编辑器模糊字有重影怎么解决?
  5. 对SMART法则的多种解释
  6. android 分辨率转换器,Nevercenter Pixelmash(图片像素转换器) v202010 官方版
  7. xp系统从u盘启动计算机,电脑高手教你如何用u盘启动装xp系统!
  8. 笔记本计算机内存都多大,你的电脑速度慢吗?笔记本电脑“内存”到底要多大才够用?...
  9. VS2019报本次安装Visual Studio 所用的安装程序不完整错误
  10. 解决Error: Call to undefined function eregi() 报错方法