zoukankan      html  css  js  c++  java
  • 综合实例:个人银行账户管理程序

    源程序及说明如下:

     1 /*
     2 设计一个类SavingsAccount,将id,balance,rate作为成员数据,将show,deposit,withdraw,settle作为其成员函数
     3 计算利息:由于账户的余额是不断变化的。需要将一年当中每天的余额累积起来再除以一年的总天数,得到一个日均余额,再乘以年利率。
     4 为简便起见,该类中的所有日期均用一个整数来表示该整数是一个以日为单位的相对日期
     5 */
     6 
     7 #include<iostream>
     8 #include<cmath>
     9 using namespace std;
    10 class SavingsAccount{
    11 public:
    12     SavingsAccount(int date,int id,double rate);
    13     int getId(){return id;}
    14     double getBalance(){return balance;}
    15     double getRate(){return rate;}
    16     void deposit(int date,double amount);//存入现金
    17     void withdraw(int date,double amount);//取出现金
    18     //结算利息,每年1月1日调用一次该函数
    19     void settle(int date);
    20     //显示账户信息
    21     void show();
    22     
    23 private:
    24     int id;//帐号
    25     double balance;//余额
    26     double rate;//存款的年利率
    27     int lastDate;//上次变更余额的日期
    28     double accumulation;//余额按日累加之和
    29     //记录一笔账,date为日期,amount为余额,desc为说明
    30     void record(int date,double amount);
    31     //获得到指定日期为止的存款余额按日累积值
    32     double accumulate(int date) const {
    33         return accumulation+balance*(date-lastDate);
    34     }   
    35 
    36 };
    37 SavingsAccount::SavingsAccount(int date,int id,double rate)
    38     :id(id),balance(0),rate(rate),lastDate(date),accumulation(0){
    39     cout<<date<<"	#"<<id<<" is created"<<endl;
    40 }
    41 void SavingsAccount::record(int date,double amount){
    42     accumulation=accumulate(date);
    43     lastDate=date;
    44     amount=floor(amount*100+0.5)/100;//保留小数点后两位
    45     balance+=amount;
    46     cout<<date<<"	#"<<id<<"	"<<amount<<"	"<<balance<<endl;
    47 }
    48 void SavingsAccount::deposit(int date,double amount){
    49     record(date,amount);
    50 }
    51 void SavingsAccount::withdraw(int date,double amount){
    52     if(amount>getBalance())
    53         cout<<"Erro:not enough money"<<endl;
    54     else
    55         record(date,-amount);
    56 }
    57 void SavingsAccount::settle(int date){
    58     double interest=accumulate(date)*rate/365;
    59     if(interest!=0)
    60         record(date,interest);
    61     accumulation=0;
    62 }
    63 void SavingsAccount::show(){
    64     cout<<"#"<<id<<"	Balance:"<<balance<<endl;
    65 }
    66 
    67 int main(){
    68     //建立几个账户
    69     SavingsAccount sa0(1,17120701,0.015);
    70     SavingsAccount sa1(1,17120702,0.015);
    71     //几笔帐目
    72     sa0.deposit(5,5000);
    73     sa1.deposit(25,10000);
    74     sa0.deposit(45,550);
    75     sa1.withdraw(60,4000);
    76     //开户后第90天到了银行的计息日,结算所有账户的年息
    77     sa0.settle(90);
    78     sa1.settle(90);
    79     //输出各个账户信息
    80     sa0.show();
    81     sa1.show();
    82     return 0;
    83 }

    运行结果:

  • 相关阅读:
    PHPStorm下XDebug配置
    HDU 4633 Who's Aunt Zhang (Polya定理+快速幂)
    VC++深入详解-第五章学习心得
    nginx access log logrotate配置
    判断变量是否存在(python)
    一步一步学android之布局管理器——LinearLayout
    向前辈致敬 strspn
    poj 1087 (最大流)
    cocos2d-x Touch 事件应用的一个例子
    [置顶] C#扩展方法 扩你所需
  • 原文地址:https://www.cnblogs.com/nanzh/p/8000773.html
Copyright © 2011-2022 走看看