在网上找了很多例子,代码都不是循序渐进的,自己一点一点按章节把代码按照老师的要求都码好了,一点一点进步吧,因为一开始就去看别人整篇的代码实在很难,带给需要帮助的人,这是第六章第二个综合实例,加入Date类以后,又单独写了一个文章,这个CSDN我实在不会用,我想把每一章对应的课件图片传上来的,太麻烦了。我有课件,需要的可以评论区找我要。

我已经到第12章的代码都码好了,以后会陆续上传上来。

//account.h#ifndef _ACCOUNT_H_
#define _ACCOUNT_H_#include "date.h"
#include <string>class SavingsAccount   //储蓄类账户
{
public:SavingsAccount(const Date &date, const std::string &id, double rate);//构造函数std::string getId() const { return id; }double getBalance() const { return balance; }double getRate() const { return rate; }static double getTotal() { return total; }    //得到账户总金额//存入现金void deposit(const Date& date, double amount, const std::string& desc);//取出现金void withdraw(const Date& date, double amount, const std::string& desc);//结算利息,每年一月1日调用一次该函数void settle(const Date& date);//显示账户信息void show()const;~SavingsAccount();private:std::string id;                //账号double balance;                  //余额double rate;                        //存款年利率Date lastDate;                    //上一次变更余额的日期double accumulation;            //余额按日累加之和static double total;            //所有账户的总金额//记录一笔账,date为日期,amount为金额,desc为说明void record(const Date & date, double amount, const std::string & desc);/*无论是存款、取款还是结算利息,都需要修改当前的余额,并且将余额的变动值输出,公用操作用一个私有成员record操作*///输出指定错误信息void error(const std::string& msg)const;//获得到指定日期为止的存款金额按日累加值double accumulate(const Date& date)const {return accumulation + balance *date.distance( lastDate);//lastDate为已创建的Date类对象}
};#endif //_ACCOUNT_H_//account.cpp#include <iostream>
#include "account.h"
using namespace std;double SavingsAccount::total = 0;
SavingsAccount::SavingsAccount(const Date& date, const std::string& id, double rate) :id(id), balance(0), rate(rate), lastDate(date), accumulation(0)
{date.show();cout << "\t#" << id << " is created" << endl;
}//记录一笔账,date为日期,amount为金额,desc为说明
void SavingsAccount::record(const Date& date, double amount, const std::string& desc)
{accumulation = accumulate(date);      //按日累加值lastDate = date;                      //变更日期,将本次日期更新成下一次的起算日期amount = floor(amount * 100 + 0.5) / 100;//保留小数点后两位,需要包含cmath头文件balance += amount;                    //变更余额total += amount;date.show();cout  << "\t#" << id << "\t" << amount << "\t" << balance << "\t"<<desc << endl;
}//输出指定错误信息
void  SavingsAccount::error(const string& msg) const
{cout << "Error(#" << id << "):" << msg << endl;
}
//存入现金
void SavingsAccount::deposit(const Date& date, double amount, const std::string& desc)
{record(date, amount,desc);
}//取出现金
void SavingsAccount::withdraw(const Date& date, double amount, const std::string& desc)
{if (amount > getBalance()){cout << "Error: not enough money" << endl;}else{record(date, -amount,desc);}}//结算利息,每年一月1日调用一次该函数
void SavingsAccount::settle(const Date& date)
{double interest = accumulate(date) * rate / date.distance(Date(date.getYear() - 1, 1, 1));//计算年息if (interest != 0){record(date, interest,"  interest");}accumulation = 0;
}//显示账户信息
void SavingsAccount::show() const
{cout << id << "\tBalance:  " << balance;
}
SavingsAccount::~SavingsAccount()
{
}//date.h
#ifndef _DATE_H_
#define _DATE_H_
class Date  //日期类
{
public:Date(int year,int month,int day);~Date();int getYear() const { return year; }int getMonth() const { return month; }int getDay() const { return day; }int getMaxDay() const;//得到当前月的天数的getMaxDay函数bool isLeapYear() const  //判断当前年是否闰年isLeapYear函数{return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);}void show() const;  //用来将当前日期输出的show函数int distance(const Date& date) const  //用来判断当前日期与指定日期相差天数的distance函数{return totalDays - date.totalDays;//当前日期-之前以有日期(为已创建的Date类的对象)}private:int year;int month;int day;int totalDays;    //该日期是从公元元年1月1日开始的第几天
};#endif //_DATE_H_ //date.cpp//date.h
#include <iostream>
#include <cstdlib>
#include "date.h"
using namespace std;namespace {  //namespace使下面的定义只在当前文件中生效const int DAYS_BEFORE_MONTH[] = { 0,31,59,90,120,151,181,212,243,273,304,334,365 };//31,28,31, 30, 31, 30, 31, 31, 30, 31, 30, 31//3月有多少天=month[3]-month[2]=90-59=3天;
}                                     //getMaxDay()以此为基础计算当前月最大天数Date::Date(int year, int month, int day):year(year),month(month),day(day)
{if (day<=0||day>getMaxDay()){cout << "Invalid date: "; show();cout << endl;exit(1);}int years = year - 1;   //基准日期为公元元年1月1日,即1年1月1日totalDays = years * 365 + years / 4 - years / 100 + years / 400 + DAYS_BEFORE_MONTH[month - 1] + day;//DAYS_BEFORE_MONTH[month - 1]获得当前month月1日与本年1月1日相差天数,在数组中查询得知if (isLeapYear() && month > 2){totalDays++;   //闰年,并且大于2月时,总天数+1}
}
//得到当前月的天数的getMaxDay函数
int Date::getMaxDay() const
{//判断month是多少,然后在DAYS_BEFORE_MONTH数组中找到对应日期if (isLeapYear()&& month==2){return 29;}else{return DAYS_BEFORE_MONTH[month] - DAYS_BEFORE_MONTH[month - 1];}
}//用来将当前日期输出的show函数
void Date::show() const
{cout << getYear() << "-" << getMonth() << "-" << getDay() ;//cout<<year <<"-"<<month<<"-"<<day <<endl;
}
//用来判断当前日期与指定日期相差天数的distance函数Date::~Date()
{
}//main// Bank_6.7.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include <iostream>
#include <cmath>
#include "account.h"
#include "date.h"using namespace std;int main()
{Date date(2008,11,1); //起始日期//建立几个账户SavingsAccount accounts[] = {SavingsAccount(date, "S3755217", 0.015),SavingsAccount(date,  "02342342" , 0.015) };const int n = sizeof(accounts) / sizeof(SavingsAccount);  //账户总数目//11月份几笔账目accounts[0].deposit(Date(2008,11, 5), 5000,"salary");accounts[1].deposit(Date(2008, 11, 25), 10000, "sell stock 0323");//12月份的几笔账目accounts[0].deposit(Date(2008, 12, 5), 5500, "salary");accounts[1].withdraw(Date(2008, 12, 20), 4000, "buy a laptop");//结算所有账户并输出各个账户信息cout << endl;for (int i = 0; i < n; i++){accounts[i].settle(Date(2009, 1, 1));accounts[i].show(); cout << endl;}cout << "Total: " << SavingsAccount::getTotal() << endl;return 0;//std::cout << "Hello World!\n";
}

C++ 个人银行账户管理 综合实例62.10_date相关推荐

  1. python 通登录银行_Python3 适合初学者学习的银行账户登录系统实例

    一.所用知识点: 1. for循环与if判断的结合 2. %s占位符的使用 3. 辅助标志的使用(标志位) 4. break的使用 二.代码示例: ''' 银行登录系统 ''' uname = &qu ...

  2. python 例子 银行_Python3实现简单的银行账户登录系统实例

    下面小编就为大家带来一篇Python3 适合初学者学习的银行账户登录系统实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 一.所用知识点: 1. for循环与if判断 ...

  3. python 通登录银行_Python3实现简单的银行账户登录系统实例

    下面小编就为大家带来一篇Python3 适合初学者学习的银行账户登录系统实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 一.所用知识点: 1. for循环与if判断 ...

  4. SAP银行账户管理(Bank Account Management)

    1. 基本概念 & 系统配置 1.1 BANK(银行): SAP系统中的BANK对应现实中的实体银行,例如"中国工商银行","中国农业银行"等.BANK ...

  5. c语言实现银行账户管理(超详细)

    目录 前言 一,需求定义 二,具体框架 1,Manager(管理员).h头文件和BankCard(银行卡).h头文件 (1)Manager.h (2)BankCard.h 2,文件框架 三,函数封装 ...

  6. 南京邮电大学Java软件开发(混合式)实验2:银行账户管理——面向对象

    一. Java 类与对象的基本知识: 1. 类的定义 2. 方法重载 3. 构造方法 4. static 关键字 5. this 关键字 6. 包与import 语句 7. 访问权限 8. 对象的使用 ...

  7. 银行账户管理项目(纯java)

    银行管理项目 温馨提示:如果你是java大佬,好了,你可以去干别的事情去了.本项目适合java初学者,对大佬没有什么帮助. 文章目录 银行管理项目 前言 一.项目说明 二.项目展示 1.主菜单 2.用 ...

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

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

  9. linux 组群设置组群密码,Linux 组群账户管理

    一.Linux组群账户配置文件 1./etc/group文件 /etc/group文件是用户组群的配置文件,内容包括用户和用户组群,并且能显示出用户是归属哪个用户组群或哪几个用户组群.一个用户可以归属 ...

最新文章

  1. Parentheses Balance (括号平衡)---栈
  2. 015 已接任务链表和任务库二叉树遍历
  3. python数学公式代码导入_NumPy 数学函数及代数运算的实现代码
  4. Alpha冲刺博客集
  5. 阿里AI再出神器,“你是什么垃圾”一拍便知
  6. 点评老师freeeim
  7. (王道408考研操作系统)第四章文件管理-第二节2:磁盘调度算法
  8. 西门子S7-1200的PID应用(恒温热水器)
  9. 洛谷 P1962 斐波那契数列
  10. java 一年 周数_Java时间:获取特定年份的最大周数
  11. html用什么打开swf文件怎么打开,swf文件用什么打开,详细教您打开swf文件的操作...
  12. 台式计算机开机黑屏,台式电脑开机黑屏只有一个点怎么处理?
  13. nas文件服务器权限安全,大势至局域网共享文件监控NAS文件权限设置的方法
  14. html弹窗乱码,javascript弹窗是乱码怎么办?
  15. 低功耗服务器cpu性能排行,电脑CPU天梯图性能排行榜 CPU性能天梯图2018年6月最新版...
  16. 2021年金属非金属矿山(地下矿山)安全管理人员最新解析及金属非金属矿山(地下矿山)安全管理人员证考试
  17. linux考试不及格反思100字,考试没考好的反思总结(精选10篇)
  18. 【Firefly云手机】最高可虚拟720台手机,支持一键操控,应用多开
  19. 生命以负熵为生:Web3行业2022年之怪现象
  20. 一篇文章,教你学会Git

热门文章

  1. JS禁止使用Enter键
  2. Bugly 之热修复学习
  3. 2012年9月8日参加中国软件开发者大会学习笔记
  4. 软件加密系统Themida应用程序保护指南(八):额外的选择
  5. 视频营销—网络营销的一种有效形式
  6. Docker快速搭建OpenProject项目管理协作平台
  7. [vijosP1076]海战
  8. JAVA基础九 数字与字符串
  9. 曾光谈防控禽流感:亚洲国家应反思禽畜饲养方式
  10. 水果的用途大全,喜欢水果的亲们一定要收藏哦!