C++课程设计报告文档格式.docx

上传人:b****5 文档编号:20951564 上传时间:2023-01-26 格式:DOCX 页数:33 大小:129.92KB
下载 相关 举报
C++课程设计报告文档格式.docx_第1页
第1页 / 共33页
C++课程设计报告文档格式.docx_第2页
第2页 / 共33页
C++课程设计报告文档格式.docx_第3页
第3页 / 共33页
C++课程设计报告文档格式.docx_第4页
第4页 / 共33页
C++课程设计报告文档格式.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

C++课程设计报告文档格式.docx

《C++课程设计报告文档格式.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告文档格式.docx(33页珍藏版)》请在冰豆网上搜索。

C++课程设计报告文档格式.docx

日期重载=

2.设计方案

(1)计算星期函数:

要知道计算星期的公式,这可以在网上找到公式W=(((C/4)-2*C+y+(y/4)+(13*(month+1)/5)+day-1)+700)%7;

其中:

C=year/100即为年时的前两位数,y=year%100即为年数的后两位数,month为输入日期的月份,day为输入日期的天数。

W为除以7后的余数,以为一个星期有7天。

当余数为0是是星期天,为1时是星期一......为6是则为星期六。

计算星期函数不需考虑闰年和平年的问题所以十分容易处理。

(2)日期重载+函数:

日期重载+函数就相对比较麻烦,首先就是闰年平年的问题,其次就是各个月份天数的不同问题。

对于天数的处理,我选择了有数组来保存各月天数。

对于闰年和平年则选择再在日期重载+函数中在分两函数,分别处理闰年和平年。

(3)日期重载==函数:

日期重载==函数就更好处理了,只要判断年月日相等就可以了。

所以只要用bool类型重载就行(booloperator==(constCDate&

dt1)const;

),返回值为ture则说明相等,为false时则说明两日期不相等。

(4)日期重载-函数:

日期重载-函数是最难处理的,要使两个日期相减得到相差的天数,还得用到重载-,而且重载-时两个类CDatedt相减返回的是一个int整形数值,所以是比较困难的。

我在调试中将详细说明我所遇到的困难。

现在我就简单的说明一下我的思路。

输入两个日期,分别计算出它们到公元元年元月1日的天数,再将两天数相减,就得到两日期的天数差。

计算输入日期到公元元年元月1日的天数得公式:

D=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+D1+day;

其中D即为天数,year为年份,D1为输入月份以前的几个月的天数和,day为输入的日期。

◆详细设计

共有五个模块:

(1)计算星期模块;

(2)日期重载+模块;

(3)日期重载==模块;

(4)日期重载-模块;

(5)退出模块;

(1)计算星期模块:

主要功能:

当输入一个日期是,计算出输入的日期是星期几。

如图:

计算出2011年6月23日为星期四。

主要使用技术:

由于公式的要求,if(month==1||month==2){month+=12;

--year;

}

当月份为1月或2月份时,月份要加12,即1月为13月,2月为14月,而年数则要减1,如2001年1月12日,1月要用13月来计算,年份2001年则用2000来计算。

char*week[]={"

Sunday"

"

Monday"

Tuesday"

Wednesday"

Thursday"

Friday"

Saturday"

};

用一个指针数组char*week[],来储存星期。

W=(((C/4)-2*C+y+(y/4)+(13*(month+1)/5)+day-1)+700)%7;

cout<

<

"

Thisdayis"

week[W]<

endl;

输出的就是星期。

(2)日期重载+模块:

输入一个日期,如:

2011年6月20日,在输入要加的天数3,输出日期2011年6月23日。

由于闰年的2月是29天,与平年的是不同,所以用了两个函数来解决,也就要先判断闰年还是平年。

输入要重载的年份:

;

cin>

>

year;

if(year%4==0&

&

year%100!

=0||year%400==0)

{LeapYearOperator();

}//闰年日期重载+;

else{Operator1();

}//平年日期重载+;

如果是平年则调用Operator1()函数,如果是闰年则调用LeapYearOperator()函数。

intmon_day[]={31,28,31,30,31,30,31,31,30,31,30,31};

//数组保存每月天数,平年2月为28天;

CDateoperator+(intd,CDatedt)

{dt.day=dt.day+d;

while(dt.day>

mon_day[dt.month-1])

{dt.day-=mon_day[dt.month-1];

if(++dt.month==13){dt.month=1;

dt.year++;

}

returndt;

当加入的天数>

输入的日期的月份天数,则输入日期的天数dt.day=dt.day-mon_day[dt.month-1];

而月份则要加1;

如果月份为13了则月份等于1,而年数要加1;

返回日期。

闰年的同平年也一样,只是二月的天数不同。

(3)日期重载==模块:

输入两个日期,判断两日期是否相等。

如输入2011年6月23日与2011年6月23日则两日期相等;

如输入2011年6月23日与2011年6月21日则两日期不相等;

重载==就是判断输入的两日期的年、月、日相等或不相等就行,主要代码如下:

boolCDate:

:

operator==(constCDate&

dt1)const

{if(year==dt1.year&

month==dt1.month&

day==dt1.day)

returntrue;

else

returnfalse;

如果相等则返回true如果不相等则返回false;

(4)日期重载-模块:

输入两个日期,计算出两个日期间的相差天数。

如输入2011年6月23日与2011年6月21日则两日期相减得2;

两日期间的天数相差2.

重载--是使两个类对象dt1,dt2相减得到一个整型数d;

就让两个日期类对象相减是不可能得到整型数的,即使让它得到一个日期类对象也不能算出其准确的日期,以为其中有些年份闰年,而且各个月的天数不尽相同,得到减的日期,也不能用哪个月来算。

如:

输入日期2011年12月1日与日期2010年2月1日,假设两日期相减,得到日起对象1年10月0日,这个日子是不能算日期天数的。

所以我想到的方法是,先分别算出两日期到公元元年元月1日的天数,再将两天数相减,就得到两日期的天数差。

主要代码:

D=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+D1+day;

先不管平年还是闰年,当每一年多是365天来计算,d1=(year-1)*365;

然后算出其中有多少个闰年,每个闰年再多加一天,d2=(year-1)/4-(year-1)/100+(year-1)/400;

这样就计算出年份的天数。

再来计算月份的天数,D1就是月份的天数,

for(inti=0;

i<

=month-1;

i++){D1+=mon_day[i];

}

通过for循环就得到月份的天数D1;

最后就加上天数day,得到输入日期到公元元年元月1日的天数;

最后重载--,得到两日期相差的天数。

(5)退出模块:

是程序退出;

◆调试及问题解决

在以上五个模块中,有两个模块对我来说是比较纠结的,第一个就是重载+模块,另一个就是重载--模块。

重载+模块:

重载+模块首先就是闰年2月为29天,而平年为28天,这个问题让我思考实验了一整天,最终才想出了分两个函数来解决的本方法。

一开始我用了一个if语句,说年份为闰年且当month==2时返回值mon_day[1]==29;

即:

if(year%4==0&

=0||year%400==0)retuenmon_day[1]==29;

但让人纠结的是,当函数用到mon_day[]时,在函数中不能运用,最后没办法,为了做完只能想出用两个函数解决的本方法。

重载--模块:

这个模块是我花的时间最长的模块,在一开始真的不知道如何解决,只是想着两个日期对象相减是如何得到一个int型的数。

当我直接重载--使两个日期对象相减返回一个int型的数,编译不能通过,两对象想减不能返回非对象值。

最后只能走一弯路,先算出天数,再将两天数重载相减返回int型整数。

最后才能将就的将问题解决。

2宾馆客房管理系统

主函数

退房结账

房间信息录入

退出

客房信息浏览

房间信息查询

客人入住登记

按房间号查询

按客人姓名查询

按空房间查询

2.总设计方案

要实现以上的功能,共分为7个模块:

(1)录入房间信息;

(2)客人入住登记;

(3)客房信息浏览;

(4)客房信息查询;

(5)客房信息修改;

(6)退房结账;

(7)退出。

模块(4)客房信息查询又分为三个小的模块,1)按空房间查询;

2)按客人姓名查询;

3)按房号查询。

(1)录入房间信息:

(2)客人入住登记:

(3)客房信息浏览:

(4)客房信息查询:

(5)客房信息修改:

(6)退房结账:

(7)退出:

3.结束语:

通过这次C++课程设计,使我在编程能力和抗打击能力上步入了一个新的阶层。

通过编程,使我以前不懂的知识点逐渐弄清楚了,也使我的上机编程能力得到大步的提高。

也让我感到编程不是一件简单的事情,若不在加倍的努力学习C++编程,今后的能否找到工作,也是一项重大的问题。

当然现在还不是向那远的时候,但的确C++编程不好学习,所以现在还是给自己一些压力的好,如此才有动力努力地学好编程。

说实在的在C++课设的三个星期里,感想有很多,我发现自己只有在一心一意的时候才能做好一件事,只有专心致志才能完成好一件事。

所以今后我要锻炼自己做事将全身的精力都投入到一件事情中,用所有的精力集中去完成一件事。

十分感谢王老师和董老师在课设期间对我的指导,没有老师们的指正,我的程序是不可能完成的,老师在课设期间的辛苦大家都有目共睹,几天全天都在机房指导我们,再次谢谢老师!

感谢老师对我们的指导,感谢老师对我在编程过程的指正!

4.源代码:

万年历源代码:

///////////////////////////////////////////////////////在头文件中声明;

#include<

iostream>

fstream>

usingnamespacestd;

voidcalculate();

//由日期计算出星期几;

voidOperator1();

//平年日期重载+;

voidOperator2();

//两日期对象相减的相差的天数;

voidOperator3();

//重载==,判断两天是否相等;

voidLeapYearOperator();

//闰年日期重载+;

//////////////////////////////////////////////////////////////////主函数

//MYDAY.cpp:

Definestheentrypointfortheconsoleapplication.

//

#include"

stdafx.h"

intmain()

{

cout<

(1)由日期计算星期"

"

(2)日期重载+"

(3)日期重载-"

(4)日期重载=="

<

(5)退出"

intyear,a;

a;

if(a==1)

{

while(a==1)

{

one:

由日期计算星期!

calculate();

//由日期计算出星期几;

if(a==1)gotoone;

elseif(a==2)gototwo;

elseif(a==3)gotothree;

elseif(a==4)gotofour;

elsegotofive;

}

elseif(a==2)

while(a==2)

two:

日期重载+!

LeapYearOperator();

//闰年日期重载+;

Operator1();

//平年日期重载+;

}

elseif(a==3)

three:

日期重载-!

Operator2();

//两日期对象相减的相差的天数;

elseif(a==4)

four:

日期重载==!

Operator3();

//重载==,判断两天是否相等;

cin>

if(a==1)gotoone;

elseif(a==2)gototwo;

elseif(a==3)gotothree;

elseif(a==4)gotofour;

five:

return0;

//////////////////////////////////////////////////////////由日期计算星期几函数

//头文件,iostream在头文件中以声明;

//指针数组,保存星期;

voidcalculate()

intC,W,y;

intyear,month,day;

请输入日期!

{

cout<

年份:

月份:

month;

日期:

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;

////////////////////////////////////////////////////////平年日期重载+、重载--、重载==函数

classCDate;

//声明类;

CDateoperator+(intd,CDatedt);

//必须在此先声明重载

CDateoperator-(intd,CDatedt1);

//否则后面的不能识别重载;

////////////////////////////////////////////////声明类

classCDate

public:

CDate(inty=0,intm=0,intd=0);

voidoutput();

voidinput();

friendCDateoperator+(intd,CDatedt);

friendCDateoperator-(intd,CDatedt1);

booloperator==(constCDate&

private:

CDate:

CDate(inty,intm,intd):

year(y),month(m),day(d)

voidCDate:

output()

year<

-"

month<

day<

input()

\n"

//数组,保存每月天数;

平年月为天;

dt.day=dt.day+d;

dt.day-=mon_day[dt.month-1];

if(++dt.month==13)

dt.month=1;

dt.year++;

CDateoperator-(intd,CDatedt1)//重载-计算两日期对象的天数差;

intD,D1=0,D2=0;

CDatedt2;

D=(dt1.year-1)*356+(dt1.year-1)/4-(dt1.year-1)/100+(dt1.year-1)/400+D1+dt1.day

-(dt2.year-1)*356+(dt2.year-1)/4-(dt2.year-1)/100+(dt2.year-1)/400+D2+dt2.day;

for(inti=0;

=dt1.month-1;

i++)

D1+=mon_day[i];

for(intj=0;

j<

=dt2.month-1;

j++)

D2+=mon_day[i];

returnD;

dt1)const//重载==判断两日期对象是否相等;

if(year==dt1.year&

voidOperator1()

intW;

CDateolddate;

olddate.input();

CDatenewdate;

请输入加的天数:

W;

newdate=W+olddate;

newdate.output();

//////////////////////////////////重载减计算日期天差;

voidOperator2()//计算两日期对象的天差;

intD,D1,D2,D3,d;

D2=(year-1)*365+(year

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 视频讲堂

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1