C++课程设计日期类设计报告.docx
- 文档编号:5805513
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:12
- 大小:51.31KB
C++课程设计日期类设计报告.docx
《C++课程设计日期类设计报告.docx》由会员分享,可在线阅读,更多相关《C++课程设计日期类设计报告.docx(12页珍藏版)》请在冰豆网上搜索。
C++课程设计日期类设计报告
日期类设计报告
1.设计题目
设计一个日期类,(学号尾号2、5、8完成)要求:
2.设计要求
●重载带参数构造函数(intyear,intmonth,intday)和默认构造函数,前者要求不合要求的数据(年月日超出范围)抛出异常
●计算出该日是星期几,(网上找公式)。
●重载“+”操作,一个日期对象和天数相加(符合交换律)。
●重载“-”操作,两天日期对象相减返回相差天数。
●重载“+=”操作当前日期加天数
●重载输入输出操作。
3.设计分析
由题中要求可以知道,首先要设计一个日期类(classCdate),还要有构造函数,明白函数的带参与不带参的区别;而且在日期类之中需要设计正确的日期格式,若不正确则实现抛出异常,C++中对异常的处理分为抛出异常、捕获异常、处理异常;在此处只要求抛出异常即可,接下来的实现输入日期计算星期几的代码,。
由题可以进行网上的搜索,这个应该行对简单!
之后就是重载的操作啦!
!
4.设计主要模块(代码实现)
1.定义一个日期类
classCDate
{
public:
CDate(){}
CDate(inty,intm,intd);
voidfun();
voiddisplay();
friendCDateoperator+(intd,CDatedt);
friendCDateoperator-(CDate&dt1,CDate&dt2);
friendCDate&operator+=(CDate&a1,intd);
friendstd:
:
ostream&operator<<(std:
:
ostream&os,CDate&dt);
friendstd:
:
istream&operator>>(std:
:
istream&is,CDate&dt);
boolisleapyear();//润年的判定
boolstatus;
boolcheck();
voidgettian();
private:
intyear,month,day,day1;
intd,D,D1,D2,D3;
};
CDate:
:
CDate(inty,intm,intd):
year(y),month(m),day(d){}
2.实现计算星期几:
#include
usingnamespacestd;
classDate
{
intyear,month,day;
boolisleap(inti)const
{
returni%400==0||i%4==0&&i%100!
=0;//闰年的判定
}
public:
Date(inty,intm,intd)
:
year(y),month(m),day(d){}
voidprint()const
{
char*s[]={"星期日,"星期一","星期二","星期三","星期四","星期五","星期六"};
intd[13]={0,31,28,31,30,31,30,31,31,30,31,30};
intsum=0;
inti;
if(isleap(year))
d[2]++;
for(i=1;i sum+=365+isleap(i); for(i=1;i sum+=d[i]; sum+=day; cout< } }; intmain() { intyear,month,day; while(cin>>year>>month>>day&&year+month+day) { Dated(year,month,day); d.print(); } } 3.重载日期加减的操作: CDateoperator-(CDate&dt1,CDate&dt2)//重载-计算两日期对象的天数差; { CDatedt3; if(dt1.year%4==0&&dt1.year%100! =0||dt1.year%400==0){mon_day[1]=29;} if(dt2.year%4==0&&dt2.year%100! =0||dt2.year%400==0){mon_day[1]=29;} dt1.D=(dt1.year-1)*365+(dt1.year-1)/4-(dt1.year-1)/100+(dt1.year-1)/400+dt1.D1+dt1.day; for(inti=0;i<=dt1.month-1;i++) { dt1.D1+=mon_day[i]; } dt2.D2=(dt2.year-1)*365+(dt2.year-1)/4-(dt2.year-1)/100+(dt2.year-1)/400+dt2.D3+dt2.day; for(intj=0;j<=dt2.month-1;j++) { dt2.D3+=mon_day[j]; } dt3.d=dt1.D-dt2.D2; returndt3; } 4.调试运行图示 1.判断日期格式是否正确 2,输入日期并且计算星期几,返回与系统中初始设定日期的相差天数: 5.源代码附录: #include #include #include usingnamespacestd; classCDate;//声明类; CDateoperator+(intd,CDatedt);//必须在此先声明重载 CDateoperator-(CDate&dt1,CDate&dt2); CDate&operator+=(CDate&a1,intd); CDate&operator<<(CDate&a1,intd); std: : ostream&operator<<(std: : ostream&os,CDate&dt); std: : istream&operator>>(std: : istream&is,CDate&dt); char*week[]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};//指针数组,保存星期; intmon_day[]={31,28,31,30,31,30,31,31,30,31,30,31};//数组,保存每月天数; classCDate { public: CDate(){} CDate(inty,intm,intd); voidfun(); voiddisplay(); friendCDateoperator+(intd,CDatedt); friendCDateoperator-(CDate&dt1,CDate&dt2); friendCDate&operator+=(CDate&a1,intd); friendstd: : ostream&operator<<(std: : ostream&os,CDate&dt); friendstd: : istream&operator>>(std: : istream&is,CDate&dt); boolisleapyear();//润年的判定 boolstatus; boolcheck(); voidgettian(); private: intyear,month,day,day1; intd,D,D1,D2,D3; }; CDate: : CDate(inty,intm,intd): year(y),month(m),day(d){} voidCDate: : gettian() { cout<<"两天日期对象相减返回相差天数: "< } boolCDate: : isleapyear() { return(((year%4)==0)&&((year%100)! =0)||((year%400)==0)); } boolCDate: : check() { if(year<0) { status=false; returnstatus; } if((month<1)||(month>12)) { status=false; returnstatus; } switch(month) { case1: case3: case5: case7: case8: case10: case12: if((day<1)||(day>31)) status=false; break; case2: if(isleapyear()) { if((day<1)||(day>29)) status=false; } else { if((day<1)||(day>28)) status=false; } break; case4: case6: case9: case11: if((day<1)||(day>30)) status=false; break; default: status=false; } if(status) {cout< cout<<"恭喜日期正确了! "< returnstatus; } voidCDate: : fun() { intC,W,y; cout<<"请输入日期! "< { cout<<"年份: "; cin>>year; cout<<"月份: "; cin>>month; cout<<"日期: "; cin>>day; { if(year<=0||month<=0||month>12||day<=0||day>31) { cout<<"请输入正确的日期! "< } else { if(month==1||month==2) { month+=12; --year; } else { } C=year/100; y=year%100; W=(((C/4)-2*C+y+(y/4)+(13*(month+1)/5)+day-1)+700)%7; cout<<"今天是"< } } } } voidCDate: : display() { if(year<=0||month<=0||month>12||day<=0||day>31) { cout<<"请输入正确的日期! "< } elsecout< } CDateoperator+(intd,CDatedt) { dt.day=dt.day+d; while(dt.day>mon_day[dt.month-1]) { if(dt.year%4==0&&dt.year%100! =0||dt.year%400==0){mon_day[1]=29;} dt.day-=mon_day[dt.month-1]; if(++dt.month==13) { dt.month=1; dt.year++; } } returndt; } CDateoperator-(CDate&dt1,CDate&dt2)//重载-计算两日期对象的天数差; { CDatedt3; if(dt1.year%4==0&&dt1.year%100! =0||dt1.year%400==0){mon_day[1]=29;} if(dt2.year%4==0&&dt2.year%100! =0||dt2.year%400==0){mon_day[1]=29;} dt1.D=(dt1.year-1)*365+(dt1.year-1)/4-(dt1.year-1)/100+(dt1.year-1)/400+dt1.D1+dt1.day; for(inti=0;i<=dt1.month-1;i++) { dt1.D1+=mon_day[i]; } dt2.D2=(dt2.year-1)*365+(dt2.year-1)/4-(dt2.year-1)/100+(dt2.year-1)/400+dt2.D3+dt2.day; for(intj=0;j<=dt2.month-1;j++) { dt2.D3+=mon_day[j]; } dt3.d=dt1.D-dt2.D2; returndt3; } CDate&operator+=(CDate&a1,intd) { if(a1.year%4==0&&a1.year%100! =0||a1.year%400==0){mon_day[1]=29;} a1.day+=d; while(a1.day>mon_day[a1.month-1]) { a1.day-=mon_day[a1.month-1]; if(++a1.month==13) { a1.month=1; a1.year++; } } returna1; } std: : ostream&operator<<(std: : ostream&os,CDate&dt){os< std: : istream&operator>>(std: : istream&is,CDate&dt){is>>dt.year>>dt.month>>dt.day;returnis;} int_tmain(intargc,_TCHAR*argv[]) { CDateb2(2013,2,29); b2.check(); CDateb5(2013,6,9); b5.check(); //b2.display(); //CDateb1(-1231,10,17); //b1.display(); //cout<<"****************"< //b1.fun(); //CDateb3(1992,10,17); //CDateb4; //b4=12+b3; //b4.display(); //CDatedt1(2001,1,1); //CDatedt2(2000,1,1); //CDatedt3; //dt3=dt1-dt2; //dt3.gettian(); //CDatea1(1992,10,17); //a1+=2; //a1.display(); //CDatedt(1992,10,17); //std: : cout< //cout<<"请输入日期: "; //std: : cin>>dt; //cout< return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 日期 设计 报告