1、日期类设计报告日期类设计报告 1. 设计题目设计题目 设计一个日期类, (学号尾号设计一个日期类, (学号尾号 2、5、8 完成)要求:完成)要求: 2. 设计要求设计要求 重载带参数构造函数 (重载带参数构造函数 (int year ,int month, int day)和默认)和默认 构造函数,前者要求不合要求的数据(年月日超出范围)构造函数,前者要求不合要求的数据(年月日超出范围) 抛出异常抛出异常 计算出该日是星期几, (网上找公式) 。计算出该日是星期几, (网上找公式) 。 重载“重载“+”操作,一个日期对象和天数相加(符合交换律) 。”操作,一个日期对象和天数相加(符合交换律)
2、 。 重载“重载“-”操作,两天日期对象相减返回相差天数。”操作,两天日期对象相减返回相差天数。 重载“重载“+=”操作当前日期加天数”操作当前日期加天数 重载输入输出操作。重载输入输出操作。 3. 设计分析设计分析 由题中要求可以知道,首先要设计一个日期类由题中要求可以知道,首先要设计一个日期类(class Cdate) ,还要还要 有有构造函数, 明白函数的带参与不带参的区别; 而且在日期类之中需构造函数, 明白函数的带参与不带参的区别; 而且在日期类之中需 要设计正确的日期格式,若不正确则实现抛出异常,要设计正确的日期格式,若不正确则实现抛出异常,C+中对异常的中对异常的 处理分为抛出异
3、常、捕获异常、处理异常;在此处只要求抛出异常即处理分为抛出异常、捕获异常、处理异常;在此处只要求抛出异常即 可,接下来的实现输入日期计算星期几的代码, 。由题可以进行网上可,接下来的实现输入日期计算星期几的代码, 。由题可以进行网上 的搜索,这个应该行对简单!之后就是重载的操作啦! !的搜索,这个应该行对简单!之后就是重载的操作啦! ! 4. 设计主要模块(代码实现)设计主要模块(代码实现) 1. 定义一个日期类定义一个日期类 class CDate public: CDate() CDate(int y,int m,int d); void fun(); void display(); fr
4、iend CDate operator + (int d,CDate dt); friend CDate operator - (CDate friend CDate friend std:ostream bool isleapyear(); / 润年的判定润年的判定 bool status; bool check(); void gettian(); private: int year,month,day,day1; int d,D,D1,D2,D3; ; CDate:CDate (int y,int m,int d):year(y),month(m),day(d) 2. 实现计算星期几:实
5、现计算星期几: #include using namespace std; class Date int year,month,day; bool isleap(int i) const return i%400=0|i%4=0/闰年的判定闰年的判定 public: Date(int y, int m, int d) : year(y), month(m), day(d) void print() const char* s = “星期日星期日,“星期一星期一“,“星期二星期二“,“星期三星期三“,“星期四星期四“,“ 星期五星期五“,“星期六星期六“; int d13 = 0,31,28,3
6、1,30,31,30,31,31,30,31,30; int sum = 0; int i; if(isleap(year) d2 +; for(i=1;i year month day d.print(); 3. 重载日期加减的操作:重载日期加减的操作: CDate operator - (CDate if(dt1.year%4=0 if(dt2.year%4=0 dt1.D =(dt1.year-1)*365+(dt1.year-1)/4-(dt1.year-1)/100+(dt1.year-1)/400+d t1.D1 +dt1.day ; for(int i=0;iyear; coutday; if(yeardt; /coutendl; return 0;