C++课程设计——日期类设计报告

上传人:dus****log 文档编号:67438802 上传时间:2022-03-31 格式:DOC 页数:15 大小:33.50KB
返回 下载 相关 举报
C++课程设计——日期类设计报告_第1页
第1页 / 共15页
C++课程设计——日期类设计报告_第2页
第2页 / 共15页
C++课程设计——日期类设计报告_第3页
第3页 / 共15页
点击查看更多>>
资源描述
日期类设计报告1. 设计题目设计一个日期类,(学号尾号2、5、8完成)要求:2. 设计要求l 重载带参数构造函数(int year ,int month, int day)和默认构造函数,前者要求不合要求的数据(年月日超出范围)抛出异常l 计算出该日是星期几,(网上找公式)。l 重载“+”操作,一个日期对象和天数相加(符合交换律)。l 重载“-”操作,两天日期对象相减返回相差天数。 l 重载“+=”操作当前日期加天数l 重载输入输出操作。3. 设计分析由题中要求可以知道,首先要设计一个日期类(class Cdate),还要有构造函数,明白函数的带参与不带参的区别;而且在日期类之中需要设计正确的日期格式,若不正确则实现抛出异常,C+中对异常的处理分为抛出异常、捕获异常、处理异常;在此处只要求抛出异常即可,接下来的实现输入日期计算星期几的代码,。由题可以进行网上的搜索,这个应该行对简单!之后就是重载的操作啦!4. 设计主要模块(代码实现)1. 定义一个日期类class CDatepublic:CDate()CDate(int y,int m,int d);void fun();void display();friend CDate operator + (int d,CDate dt);friend CDate operator - (CDate &dt1,CDate &dt2);friend CDate &operator += (CDate &a1,int d);friend std:ostream& operator ( std:istream& is, CDate& dt );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. 实现计算星期几:#include using namespace std;class Dateint year,month,day;bool isleap(int i) constreturn i%400=0|i%4=0&i%100!=0;/闰年的判定public:Date(int y, int m, int d): year(y), month(m), day(d) void print() constchar* s = 星期日,星期一,星期二,星期三,星期四,星期五,星期六;int d13 = 0,31,28,31,30,31,30,31,31,30,31,30;int sum = 0;int i;if(isleap(year)d2 +;for(i=1;iyear;i+)sum += 365 + isleap(i);for(i=1;imonth;i+)sum += di;sum += day;cout ssum%7 year month day & year + month + day)Date d(year,month,day);d.print();3. 重载日期加减的操作:CDate operator - (CDate &dt1,CDate &dt2) /重载-计算两日期对象的天数差;CDate dt3;if(dt1.year%4=0&dt1.year%100!=0|dt1.year%400=0)mon_day1=29;if(dt2.year%4=0&dt2.year%100!=0|dt2.year%400=0)mon_day1=29; dt1.D =(dt1.year-1)*365+(dt1.year-1)/4-(dt1.year-1)/100+(dt1.year-1)/400+dt1.D1 +dt1.day ; for(int i=0;i=dt1.month -1;i+)dt1.D1 +=mon_dayi;dt2.D2 =(dt2.year -1)*365+(dt2.year-1)/4-(dt2.year-1)/100+(dt2.year-1)/400+dt2.D3 +dt2.day ;for(int j=0;j=dt2.month -1;j+)dt2.D3 +=mon_dayj;dt3.d =dt1.D -dt2.D2 ; return dt3;4. 调试运行图示1.判断日期格式是否正确2,输入日期并且计算星期几,返回与系统中初始设定日期的相差天数:5. 源代码附录:#include #include #include using namespace std;class CDate; /声明类;CDate operator + (int d,CDate dt); /必须在此先声明重载 CDate operator -(CDate &dt1,CDate &dt2);CDate &operator += (CDate &a1,int d);CDate &operator (CDate &a1,int d);std:ostream& operator ( std:istream& is, CDate& dt );char *week=星期日,星期一,星期二,星期三,星期四,星期五,星期六; /指针数组,保存星期;int mon_day=31,28,31,30,31,30,31,31,30,31,30,31; /数组,保存每月天数;class CDatepublic:CDate()CDate(int y,int m,int d);void fun();void display();friend CDate operator + (int d,CDate dt);friend CDate operator - (CDate &dt1,CDate &dt2);friend CDate &operator += (CDate &a1,int d);friend std:ostream& operator ( std:istream& is, CDate& dt );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)void CDate:gettian ()cout两天日期对象相减返回相差天数:dendl;bool CDate:isleapyear()return (year % 4) = 0) & (year % 100) != 0) | (year % 400) = 0);bool CDate:check()if (year 0)status = false;return status;if (month 12)status = false;return status;switch (month)case 1:case 3:case 5:case 7:case 8:case 10:case 12:if (day 31)status = false;break;case 2:if (isleapyear()if (day 29)status = false;elseif (day 28)status = false;break;case 4:case 6:case 9:case 11:if (day 30)status = false;break;default:status = false;if (status)coutyear/month/dayendl;cout恭喜日期正确了!endl;return status;void CDate:fun ()int C,W,y;cout请输入日期!endl;coutyear;coutmonth;coutday;if(year=0|month12|day31)cout请输入正确的日期!endl;elseif(month=1|month=2)month+=12;-year;elseC=year/100;y=year%100;W=(C/4)-2*C+y+(y/4)+(13*(month+1)/5)+day-1)+700)%7;cout今天是weekWendl;void CDate:display ()if(year=0|month12|day31)cout请输入正确的日期!endl;else coutyear/month/daymon_daydt.month-1)if(dt.year%4=0&dt.year%100!=0|dt.year%400=0)mon_day1=29;dt.day-=mon_daydt.month-1;if(+dt.month=13)dt.month=1;dt.year+;return dt;CDate operator - (CDate &dt1,CDate &dt2) /重载-计算两日期对象的天数差;CDate dt3;if(dt1.year%4=0&dt1.year%100!=0|dt1.year%400=0)mon_day1=29;if(dt2.year%4=0&dt2.year%100!=0|dt2.year%400=0)mon_day1=29; dt1.D =(dt1.year-1)*365+(dt1.year-1)/4-(dt1.year-1)/100+(dt1.year-1)/400+dt1.D1 +dt1.day ; for(int i=0;i=dt1.month -1;i+)dt1.D1 +=mon_dayi;dt2.D2 =(dt2.year -1)*365+(dt2.year-1)/4-(dt2.year-1)/100+(dt2.year-1)/400+dt2.D3 +dt2.day ;for(int j=0;jmon_daya1.month-1)a1.day-=mon_daya1.month-1;if(+a1.month=13)a1.month=1;a1.year+;return a1;std:ostream& operator ( std:ostream& os, CDate& dt ) os dt.year / dt.month / ( std:istream& is, CDate& dt ) is dt.year dt.month dt.day ; return is;int _tmain(int argc, _TCHAR* argv)CDate b2(2013,2,29);b2.check ();CDate b5(2013,6,9);b5.check ();/b2.display (); / CDate b1(-1231,10,17);/b1.display ();/cout*endl;/b1.fun ();/CDate b3(1992,10,17); / CDate b4;/b4=12+b3;/b4.display (); /CDate dt1(2001,1,1);/CDate dt2(2000,1,1);/CDate dt3;/dt3=dt1-dt2;/dt3.gettian ();/CDate a1(1992,10,17);/a1+=2;/a1.display ();/CDate dt( 1992,10,17); /std:cout dtendl;/coutdt;/coutendl;return 0;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!