面向对象程序设计——类与对象的应用2
一、实验目的:
- 掌握类和对象的概念、定义和使用方法。
- 掌握静态数据成员和const修饰的成员函数的用法。
- 掌握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相关推荐
- mooc程序设计与算法(三)C++面向对象程序设计 类和对象提高 编程作业 5:魔兽世界之一:备战
5:魔兽世界之一:备战 这道题是典型的,看了题目不想做题系列... 题目太长,看了,看不懂....后来,上网找了某博客中据说是老师的代码,研究了一下,觉得真的,c++面向对象编程还是很深奥的....下 ...
- php面向对象程序设计,PHP面向对象程序设计类的定义与用法简单示例
本文实例讲述了PHP面向对象程序设计类的定义与用法.分享给大家供大家参考,具体如下: class Person { private $name; private $sex; private $age; ...
- python编程语言继承_Python面向对象程序设计类的封装与继承用法示例
本文实例讲述了Python面向对象程序设计类的封装与继承用法.分享给大家供大家参考,具体如下: 访问限制(封装) 1.概念 面向对象语言的三大特征:封装, 继承, 多态. 广义的封装: 类和函数的定义 ...
- 【清华大学-郑莉教授】C++语言程序设计 类与对象
[清华大学-郑莉教授]C++语言程序设计 类与对象 面向对象程序设计的基本特点 类与对象的基础概念和语法 类和对象 构造函数和析构函数 默认构造函数 委托构造函数 复制构造函数 右值引用 移动构造函数 ...
- 面向对象编程——类和对象
面向对象编程 类和对象 类(Class):用来描述具有相同属性和方法的对象的集合 class Student:name='stu'#属性def say(self):#方法print("hel ...
- JAVA设计一个fan类_北京信息科技大学java语言程序设计-类和对象
北京信息科技大学java语言程序设计-类和对象 [实验名称]实验2 类和对象 [实验目的] 1.学习和掌握Java创建对象的方法. 2.学习和掌握通过创建对象.使用类的方法. 3.学习和掌握Java类 ...
- Java-入门之面向对象以及类和对象的概念(一)
面向对象,类,对象? 前言:只有光头才能变强! 一:面向对象 当我们初学java时,扑面而来的一个词就是面向对象,那什么是面向的对象呢 ? 在说面向对象之前,大家先要知道对象是什么,如果你脑子里第一想 ...
- python【面向对象(类和对象)】
1.面向对象(类和对象) 1.编程思维 根据面对问题不同人呈现出来的思维模式不同,可以将编程思维分为三种: 1.面向过程编程(穷人思想)-- 会基本的逻辑和语法(遇到问题马上想到的是解决问题的具体逻辑 ...
- 谈谈对面向对象、类、对象的了解
谈谈对面向对象.类.对象的了解 面向对象 强调具备了功能的对象,以类 / 对象为最小单位,考虑让谁来做. 面向对象编程语言中都有类的概念,代码的组织靠类(代码的最小组织单位是类),面向对象编程中执行一 ...
最新文章
- 【C++ grammar】nullptr and Dynamic Memory Allocation (空指针和动态内存分配)
- oracle中dbms_DBMS中的功能依赖性和属性关闭
- 【Flink】Flink on yarn 支持指定 application id 吗? yarn.application.id
- [HTML/HTML5]3 页面结构
- redhat7 防火墙设置
- Spring Cloud Alibaba Sentinel之流控规则篇
- UNIX环境高级编程习题——第三章
- UTC时间如何转换成北京时间—C语言代码
- DeepFaceLab 新手入门教程
- 图解数字签名-数字证书-公钥加密-私钥签名原理
- android 仿新浪微博转发 评论悬浮框的功能
- 利用Madmom识别和弦
- npm EPERM: operation not permitted, rename解决
- MCE公司:新型STAT3抑制剂
- 乐学python怎么样_铁乐学Python_day07_集合and浅谈深浅copy
- 开学啦!来淘宝教育体验开学第一课
- 普中tft彩屏驱动程序下载_tft彩屏驱动程序
- 2023年Java面试题大全(最新版版)面试题附答案详解,看完BTA可进
- 写给自己,学习如逆水行舟,不进则退
- 便利贴--23{移动端滑动模块-改良}
热门文章
- 乡镇覆盖率达96%,安能物流赴港会成为中国版“ODFL”吗?
- idea plugins 插件合集
- 优思学院|六西格玛绿带和黑带的年薪收入有多少?
- java 计算器算法_计算器算法
- windows系统如何隐藏桌面快捷方式的小箭头图标
- vs2008 win8 64bit 安装
- Windows电脑网线直连iperf测试
- 用 C++ 可以开发的 7 件事 | 解释 C++ 的特点和学习的优点
- Android中TextView中添加的文本上下两行又重叠
- 【网络爬虫】给关键字获取百度知道搜索数据的网络爬虫