万年历实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

河南城建学院《C++语言程序设计》课程设计说明书设计题目:万年历专业:计算机科学与技术班级:0814132设计人员:张宁博、杨文利、郭秀丽指导教师:张星魏新红张芳芳计算机科学与工程学院2015年1月5日一、课程设计目的及要求1、设计目的掌握一种编程工具和面向程序设计的基本思想和方法,培养我们的综合利用某种语言进行程序设计的能力、利用系统提供的功能进行创新设计的能力以及充分利用计算机的功能和特点分析实际问题及解决实际问题的能力。我认为,这个课程设计的目的不是为了单独的课堂学习,而是要让我们掌握程序的基本思想及方法。一方面,在课程设计过程中,可以进行一对一的辅导,还能对所学的知识得到运用,更重要的是可以让我们对“面向对象”有一个更为清楚地认识、了解和掌握。2、设计具体内容及要求设计一个日期类“Date”,包括年、月、日等私有数据成员。要求实现日期的基本运算,如一日期加上天数、减去天数、两日期相差的天数等(假定输入日期数据是合法的,考虑闰年的情况)。在Date类中设计如下重载运算符函数:Dateoperator-(intdays);返回一日起减去天数得到的日期。intoperator-(Date&b);返回两日期相差的天数。voiddisplayMonth(Date&b);显示指定日期所在的月历,美观。voiddisplayYear(Date&b);显示指定日期所在的年历,美观。在实现这些重载运算符函数调用一下私有成员函数:leap(int);判断指定的年份是否是闰年。dton(Date&);转换指定日期为从0年0月0日起的天数数据成员为:intyear,month,day;按照如上的设计要求,做一个面向对象的设计完成所要求的操作。二、类的声明和涉及的函数1、类的声明classDate{public:Date(){};Date(intnewyear,intnewmonth,intnewday):year(newyear),month(newmonth),day(newday){}Dateoperator+(intdays);Dateoperator-(intdays);intoperator-(Date&c);voiddisplayMonth();voiddisplayYear();voiddisplay(){coutyear年month月day日endl;}private:intyear,month,day;intleap(intyear0);intdton();};2、涉及的函数1)、函数voidmenu();voidgoback();voidadddays();voidresucedays();voidapartdate();voiddisplay1();voiddisplay2();intmain();三、主要流程图进入菜单项1.计算日期减天数2.计算日期加天数3.计算两日期相差的天数4.显示月历5.显示年历0.退出程序万年历系统四、运行及调试结果1、各步运行结果截图与说明计算日期减天数输入当前日期,输入要减去的天数,即可显示得到的新的日期。计算日期加天数输入当前日期,输入要加上的天数,即可显示得到的新的日期。计算两日期相差的天数分别输入两个日期,按回车键,即可显示两日期相差的天数。显示月历输入要显示的月历的年份和月份,按回车键,即可显示该年该月的月历。显示年历输入要显示的年历的年份,按回车键,即可显示该年的年历。2、调试及解决问题五、小结及感悟六、源程序#includeiostream#includecmath#includeiomanip#includestdlib.husingnamespacestd;namespace{constintDAYS_BEFORE_MONTH[]={0,31,59,90,120,151,181,212,243,273,304,334};//存储平年中的某个月1日之前有多少天。}voidmenu(){cout欢迎进入万年历系统endl;cout**********************************************endl;cout万年历endl;cout**********************************************endl;cout1.计算日期减天数2.计算日期加天数endl;cout3.计算两日期相差的天数4.显示月历endl;cout5.显示年历0.退出程序endl;cout**********************************************endl;cout请输入您的选择:;}voidgoback(){getchar();coutendlendl;cout按回车键返回主菜单endl;getchar();system(cls);menu();}classDate{public:Date(){};//无参的构造函数Date(intnewyear,intnewmonth,intnewday):year(newyear),month(newmonth),day(newday){}Dateoperator+(intdays);Dateoperator-(intdays);intoperator-(Date&c);voiddisplayMonth();voiddisplayYear();voiddisplay(){coutyear年month月day日endl;}private:intyear,month,day;intleap(intyear0);intdton();};intDate::leap(intyear0){if((year0%4==0&&year0%100!=0)||year0%400==0)return1;elsereturn0;}intDate::dton(){intdays;intyears=year-1;days=years*365+years/4-years/100+years/400+DAYS_BEFORE_MONTH[month-1]+day;if(leap(year)==1&&month2)days++;//考虑闰年时,若月份大于2,都加一天。returndays;}DateDate::operator+(intdays){while(days!=0){day++;if((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&days31){month+=1;day=1;}elseif(month==2&&leap(year)==1&&day29){month+=1;day=1;}elseif(month==2&&leap(year)==0&&day28){month+=1;day=1;}elseif(day30){month+=1;day=1;}if(month12){year+=1;month=1;}days--;}Dater;r.year=year;r.month=month;r.day=day;returnr;}DateDate::operator-(intdays){while(days!=0){day--;if(day==0){month-=1;if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){day=31;}elseif(month==2&&leap(year)==1){day=29;}elseif(month==2&&leap(year)==0){day=28;}elseday=30;}if(month==0){year-=1;month=12;day=31;}days--;}Datea;a.year=year;a.month=month;a.day=day;returna;}intDate::operator-(Date&c){returnabs(dton()-c.dton());}voidadddays(){cout*********************endl;cout欢迎进入时光机endl;cout*********************endl;intyear,month,day,days;cout请输入当前日期:;cinyearmonthday;cout请输入天数:;cindays;Datedate(year,month,day);date=date+days;cout时光机穿梭到:;date.display();}voidreducedays(){intyear,month,day,days;cout请输入日期:;cinyearmonthday;cout请输入天数:;cindays;Datedate(year,month,day);date=date-days;coutyear年month月day日-days天--;date.display();}voidapartdate(){intyear1,year2,month1,month2,day1,day2,days;cout请输入第一个日期:;cinyear1month1day1;cout请输入第二个日期:;cinyear2month2day2;Datedate1(year1,month1,day1);Datedate2(year2,month2,day2);days=date2-date1;cout两日期相减的天数是:daysendl;}voidDate::displayMonth(){inti,j,monthdays;intw=0;w=dton()%7;if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)monthdays=31;elseif(leap(year)==1&&month==2)monthdays=29;elseif(leap(year)==0&&month==2)monthdays=28;elsemonthdays=30;coutyear年month月endl;cout--------------------------------endl;coutsetw(4)日setw(4)一setw(4)二setw(4)三setw(4)四setw(4)五setw(4)六endl;for(i=0;iw;i++)cout;for(i=1;i8-w;i++)coutsetw(4)i;coutendl;for(i=8-w,j=1;i=monthdays;i++,j++){coutsetw(4)i;if(j%7==0)coutendl;}coutendl----------------------------------endl;}voidDate::displayYear(){inti;for(i=1;i=12;i++){Datec(year,i,1);c.displayMonth();coutendl;}}voiddisplay1(){intyear5,month5;cout请输入要显示的月历:;cinyear5month5;coutendl-----------------------------endl;Datedat

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功