一、实验目的:

  1. 掌握类和对象的概念、定义和使用方法。
  2. 掌握静态数据成员和const修饰的成员函数的用法。
  3. 掌握c++程序的一般结构。

二、实验内容:

在个人的活期储蓄账户类SavingsAccount上修改完成以下内容:

  • 在类SavingsAccount中增加一个静态数据成员total,用来记录各个账户的总金额,并为其增加相应的静态成员函数getTotal用来对其进行访问。
  • 将类SavingsAccount中不需要改变对象状态的成员函数声明为常成员函数,比如getBalance等。
  • 增加日期类Date
class  Date
{int  year, month, day;
int  totalDays;   //该日期是从公元元年1月1日开始的第几天public:Date(int year, int month, int day);    int  getYear() const { return year; }int  getMonth() const { return month; }int  getDay() const { return day; }void  show() const;          //输出当前日期
bool  isLeapYear() const;    //判断当年是否为闰年int  distance(const Date& date) const;//计算当前日期与指定日期之间相差天数
};
  • 类SavingsAccount中的int date都要改成Date类的对象。
  • 将整个程序分为5个文件:date.h account.h是类定义头文件,date.cpp account.cpp是类实现文件,5.cpp是主函数文件。

提示:

  • 利息的计算方式:一年中每天的余额累积起来再除以一年的总天数,得到一个日均余额,再乘以年利率。
  • 两个日期相差天数的计算方式:选取一个基准日期(如公元元年1月1日),在计算两个日期相差天数时,先分别将两个日期与基准日期的相对天数计算出来,再将两个相对天数相减即可。
  • 与基准日期(如公元元年1月1日)相对天数的计算方式:(1)计算公元元年到公元y-1年的总天数。平均每年有365天,闰年多一天,即365*(y-1)加上公元元年到y-1年之间的闰年数。(2)加上当年当月1日到当年1月1日之间相差的天数。(3)加上当年当月当日到当年当月1日之间相差的天数。
  • 可以把每月1日到1月1日天数放在一个数组中,该数组元素值分别是:0,31,59,90,120,151,181,212,243,73,304,334,365
  • 两个头文件里先写:
#ifndef  _DATE_H_
#define  _DATE_H_
…
#endif                                       #ifndef  _ACCOUNT_H_
#define  _ACCOUNT_H_…
#endif

要求:
 完成上述成员函数的定义;
 定义类对象,测试程序的正确性
定义两个账户s0和s1,年利率都是1.5%,都在2008年11月1日创建账户,随后s0在2008年11月5日和2008年12月5日分别存入5000元和5500元,s1在2008年11月25日和2008年12月20日分别存入10000元和取出4000元。2009年1月1日是银行的计息日。分别输出s0和s1两个账户的信息(账号、余额)及所有账户的总额。

源代码:

Main.cpp:
#include<iostream>
#include"date.h"
#include"account.h"
using namespace std;
double SavingsAccount::total = 0;
int main()
{SavingsAccount s0(1001,0.015,2008,11,1);SavingsAccount s1(1002,0.015,2008,11,1);cout<<endl;Date d01(2008,11,5),d02(2008,12,5),d11(2008,11,25),d12(2008,12,20),d2(2009,1,1);s0.deposit(d01,5000);s1.deposit(d11,10000);s0.deposit(d02,5500);s1.withdraw(d12,4000);cout<<endl;s0.settle(d2);cout<<endl;s1.settle(d2);cout<<endl;s0.show();s1.show();cout<<"所有账户总余额:"<<s0.getTotal()<<endl;
}
Account.h:
#ifndef ACCOUNT_H_
#define ACCOUNT_H_
#include "date.h"
class  SavingsAccount
{int  Id;  //帐号double  balance;  //余额double  Rate;   //年利率Date  lastDate; //上次变更余额的日期double  accumulation; //余额按日累加之和double static total;double  accumulate(Date date);   //获得到指定日期为止的存款金额按日累积值
public:SavingsAccount(int id, double rate,int year,int month,int day);  //构造函数void  deposit(Date date, double amount);  //存入现金,date为日期,amount为金额void  withdraw(Date date, double amount);  //取出现金void  settle(Date date); //结算利息,每年1月1日调用一次该函数void  show();   //输出账户信息int getId() const {return Id;}double  getBalance () const { return balance;}double  getRate() const {return Rate;}double static getTotal();
};
#endif // ACCOUNT_H_INCLUDED
Account.cpp:
#include <iostream>
#include "account.h"
using namespace std;
double SavingsAccount::accumulate(Date date)
{return balance*lastDate.distance(date);
}
SavingsAccount::SavingsAccount(int id,double rate,int year,int month,int day) :lastDate(year,month,day)
{Id=id;Rate=rate;balance=0;cout<<year<<"年"<<month<<"月"<<day<<"日:  \t";cout<<"ID为"<<Id<<"的账户创建完成"<<endl;
}
void  SavingsAccount::deposit(Date date, double amount)  存入现金,date为日期,amount为金额
{accumulation += accumulate(date);balance+=amount;lastDate = date;total += amount;cout<<"ID为"<<Id<<"的账户存入:"<<amount<<" \t"<<Id<<" 该账户余额为:"<<balance<<endl;
}
void  SavingsAccount::withdraw(Date date, double amount) 取出现金
{accumulation += accumulate(date);if(balance>=amount)balance-=amount;elsecout<<"账户余额不足"<<endl;lastDate=date;total -= amount;cout<<"ID为"<<Id<<"的账户取出:"<<amount<<" \t"<<Id<<" 该账户余额:"<<balance<<endl;
}
void  SavingsAccount::settle(Date date)   //结算利息,每年1月1日调用一次该函数
{accumulation += accumulate(date);double settle = (accumulation/356)*Rate;cout<<Id<<"结算利息:"<<settle<<endl;deposit(date,settle);
}
void  SavingsAccount::show()    //输出账户信息
{cout<<"帐号:"<<Id<<endl<<"余额:"<<balance<<endl;
}
double SavingsAccount::getTotal()
{return total;
}
Date.h:
#ifndef DATE_H_INCLUDED
#define DATE_H_INCLUDED
class  Date
{int  year, month, day;int  totalDays;   //该日期是从公元元年1月1日开始的第几天
public:Date(int year, int month, int day);int  getYear() const { return year; }int  getMonth() const { return month; }int  getDay() const { return day; }void  show() const;   //输出当前日期bool  isLeapYear(int year) const; //判断当年是否为闰年int  distance(const Date& date) const;//计算当前日期与指定日期之间相差天数
};
#endif // DATE_H_INCLUDED
Date.cpp:
#include <iostream>
#include "date.h"
using namespace std;
Date::Date(int Year, int Month, int Day)
{year=Year;month=Month;day=Day;int Days=0;for(int i=0;i<year;i++){if(isLeapYear(i)==true)Days=Days+366;elseDays=Days+365;}switch(month){case 1:Days+=0;break;case 2:Days+=31;break;case 3:Days+=59;break;case 4:Days+=90;break;case 5:Days+=120;break;case 6:Days+=151;break;case 7:Days+=181;break;case 8:Days+=212;break;case 9:Days+=243;break;case 10:Days+=273;break;case 11:Days+=304;break;case 12:Days+=334;break;default:cout<<"month error!"<<endl;}totalDays=Days+day;
}
void  Date::show() const
{cout<<getYear()<<"年"<<getMonth()<<"月"<<getDay()<<"日:  "<<endl;
} //输出当前日期
bool  Date::isLeapYear(int year) const
{if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)return true;elsereturn false;
} //判断当年是否为闰年
int  Date::distance(const Date& date) const
{cout<<date.year<<"年"<<date.month<<"月"<<date.day<<"日:  "<<"\t";return date.totalDays-totalDays;
}    //计算当前日期与指定日期之间相差天数

运行截图:

学习掌握
类和对象的概念、定义和使用方法、静态数据成员和const修饰的成员函数的用法
c++程序的一般结构,一个大的项目是由小程序逐渐精细化而产生的。
组织各种函数之间的协调调用,达到使用目的,将生活中的一些问题转化成C中相应的实现方法,如在这次实验中的天数问题,就可以使用数组、switch 语句等方法解决。
多个源文件和头文件之间的相互联系也是需要多次调试,方能共同作用。

面向对象程序设计——类与对象的应用2相关推荐

  1. mooc程序设计与算法(三)C++面向对象程序设计 类和对象提高 编程作业 5:魔兽世界之一:备战

    5:魔兽世界之一:备战 这道题是典型的,看了题目不想做题系列... 题目太长,看了,看不懂....后来,上网找了某博客中据说是老师的代码,研究了一下,觉得真的,c++面向对象编程还是很深奥的....下 ...

  2. php面向对象程序设计,PHP面向对象程序设计类的定义与用法简单示例

    本文实例讲述了PHP面向对象程序设计类的定义与用法.分享给大家供大家参考,具体如下: class Person { private $name; private $sex; private $age; ...

  3. python编程语言继承_Python面向对象程序设计类的封装与继承用法示例

    本文实例讲述了Python面向对象程序设计类的封装与继承用法.分享给大家供大家参考,具体如下: 访问限制(封装) 1.概念 面向对象语言的三大特征:封装, 继承, 多态. 广义的封装: 类和函数的定义 ...

  4. 【清华大学-郑莉教授】C++语言程序设计 类与对象

    [清华大学-郑莉教授]C++语言程序设计 类与对象 面向对象程序设计的基本特点 类与对象的基础概念和语法 类和对象 构造函数和析构函数 默认构造函数 委托构造函数 复制构造函数 右值引用 移动构造函数 ...

  5. 面向对象编程——类和对象

    面向对象编程 类和对象 类(Class):用来描述具有相同属性和方法的对象的集合 class Student:name='stu'#属性def say(self):#方法print("hel ...

  6. JAVA设计一个fan类_北京信息科技大学java语言程序设计-类和对象

    北京信息科技大学java语言程序设计-类和对象 [实验名称]实验2 类和对象 [实验目的] 1.学习和掌握Java创建对象的方法. 2.学习和掌握通过创建对象.使用类的方法. 3.学习和掌握Java类 ...

  7. Java-入门之面向对象以及类和对象的概念(一)

    面向对象,类,对象? 前言:只有光头才能变强! 一:面向对象 当我们初学java时,扑面而来的一个词就是面向对象,那什么是面向的对象呢 ? 在说面向对象之前,大家先要知道对象是什么,如果你脑子里第一想 ...

  8. python【面向对象(类和对象)】

    1.面向对象(类和对象) 1.编程思维 根据面对问题不同人呈现出来的思维模式不同,可以将编程思维分为三种: 1.面向过程编程(穷人思想)-- 会基本的逻辑和语法(遇到问题马上想到的是解决问题的具体逻辑 ...

  9. 谈谈对面向对象、类、对象的了解

    谈谈对面向对象.类.对象的了解 面向对象 强调具备了功能的对象,以类 / 对象为最小单位,考虑让谁来做. 面向对象编程语言中都有类的概念,代码的组织靠类(代码的最小组织单位是类),面向对象编程中执行一 ...

最新文章

  1. 【330天】跃迁之路——程序员高效学习方法论探索系列(实验阶段88-2018.01.01)...
  2. 基于经验的SOA成功原则
  3. 六、爬虫中重要的解析库xpath和BeautifulSoup
  4. 使用Bootstrap插件datapicker获取时间
  5. 16行代码AC——例题6-4破损的键盘(Broken Keyboard,UVa 11988)——解题报告
  6. java socket 断开连接_Socket.IO-client.java重复断开连接并重新连接
  7. Silverlight4 麦克风应用-录音机
  8. react WangEditor 编辑器阿里云OSS上传图片
  9. Eclipse查看java源代码
  10. 卓有成效的管理者—第四章 如何发挥人的长处
  11. No service of type FactoryLoggingManagerInternal available in ProjectScopeServices.
  12. 改变磁盘格式gpt_改变游戏规则或结束游戏? 准备好参加GPT-3
  13. 详解 WebRTC 高音质低延时的背后—AGC 自动增益控制
  14. 2022最新在线工单管理系统源码+PHP内核
  15. RelativeLayout 设置控件在最上层
  16. VASP自旋(NM、AM、AFM)
  17. 【sfu】network线程和主线程
  18. 最简单的商家管理系统(小白)
  19. Linux中存储设备的命名规则
  20. 学习typescript已然迫在眉睫!!!

热门文章

  1. 你的善良也要自带锋芒
  2. 将Word文档转换为PDF时出现“PDFmaker文件遗失,要在修复模式下运行安装程序吗?”的提示
  3. 1177 交换最小数
  4. AI文本科学计算器(calculator-sihui-python)混合四则运算介绍
  5. 第五课 田中さんは 会社へ 行きます。
  6. PHP:ThinkPHP5.0下载安装和各种配置
  7. 核桃的数量问题解决方法
  8. Subversion(简称svn)是近年来崛起的版本管理软件
  9. SSM框架学习----Mybatis(2)
  10. 魔兽世界排队显示服务器已满,魔兽世界怀旧服开服,服务器爆满,还有数万人排队...