(2)日期重载+模块:
主要功能:
输入一个日期,如:
2011年6月20日,在输入要加的天数3,输出日期2011年6月23日。
如图:
主要使用技术:
由于闰年的2月是29天,与平年的是不同,所以用了两个函数来解决,也就要先判断闰年还是平年。
cout<<"输入要重载的年份:
";
cin>>year;
if(year%4==0&&year%100!
=0||year%400==0)
{LeapYearOperator();}//闰年日期重载+;
else{Operator1();}//平年日期重载+;
如果是平年则调用Operator1()函数,如果是闰年则调用LeapYearOperator()函数。
intmon_day[]={};//数组保存每月天数,平年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就是月份的天数,
intmon_day[]={};
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;即:
intmon_day[]={};
if(year%4==0&&year%100!
=0||year%400==0)retuenmon_day[1]==29;
但让人纠结的是,当函数用到mon_day[]时,在函数中不能运用,最后没办法,为了做完只能想出用两个函数解决的本方法。
重载--模块:
这个模块是我花的时间最长的模块,在一开始真的不知道如何解决,只是想着两个日期对象相减是如何得到一个int型的数。
当我直接重载--使两个日期对象相减返回一个int型的数,编译不能通过,两对象想减不能返回非对象值。
最后只能走一弯路,先算出天数,再将两天数重载相减返回int型整数。
最后才能将就的将问题解决。
2宾馆客房管理系统
◆总体设计:
1.设计图
主函数
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
#include
usingnamespacestd;
voidcalculate();//由日期计算出星期几;
voidOperator1();//平年日期重载+;
voidOperator2();//两日期对象相减的相差的天数;
voidOperator3();//重载==,判断两天是否相等;
voidLeapYearOperator();//闰年日期重载+;
//////////////////////////////////////////////////////////////////主函数
//MYDAY.cpp:
Definestheentrypointfortheconsoleapplication.
//
#include"stdafx.h"
voidOperator1();
voidOperator2();
voidOperator3();
intmain()
{
cout<<"
(1)由日期计算星期"<<""<<"
(2)日期重载+"<<""<<"(3)日期重载-"<<""<<"(4)日期重载=="
<<""<<"(5)退出"<intyear,a;
cin>>a;
if(a==1)
{
while(a==1)
{
one:
cout<<"由日期计算星期!
"<calculate();//由日期计算出星期几;
cin>>a;
if(a==1)gotoone;
elseif(a==2)gototwo;
elseif(a==3)gotothree;
elseif(a==4)gotofour;
elsegotofive;
}
}
elseif(a==2)
{
while(a==2)
{
two:
cout<<"日期重载+!
"<cout<<"输入要重载的年份:
";
cin>>year;
if(year%4==0&&year%100!
=0||year%400==0)
{
LeapYearOperator();//闰年日期重载+;
}
else
{
Operator1();//平年日期重载+;
}
cin>>a;
if(a==1)gotoone;
elseif(a==2)gototwo;
elseif(a==3)gotothree;
elseif(a==4)gotofour;
elsegotofive;
}
}
elseif(a==3)
{
three:
cout<<"日期重载-!
"<Operator2();//两日期对象相减的相差的天数;
cin>>a;
if(a==1)gotoone;
elseif(a==2)gototwo;
elseif(a==3)gotothree;
elseif(a==4)gotofour;
elsegotofive;
}
elseif(a==4)
{
four:
cout<<"日期重载==!
"<Operator3();//重载==,判断两天是否相等;
cin>>a;
if(a==1)gotoone;
elseif(a==2)gototwo;
elseif(a==3)gotothree;
elseif(a==4)gotofour;
elsegotofive;
}
five:
return0;
}
//////////////////////////////////////////////////////////由日期计算星期几函数
#include"stdafx.h"//头文件,iostream在头文件中以声明;
char*week[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};//指针数组,保存星期;
voidcalculate()
{
intC,W,y;
intyear,month,day;
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<<"Thisdayis"<}
}
}
}
////////////////////////////////////////////////////////平年日期重载+、重载--、重载==函数
#include"stdafx.h"//头文件,iostream在头文件中以声明;
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&dt1)const;
private:
intyear,month,day;
};
CDate:
:
CDate(inty,intm,intd):
year(y),month(m),day(d)
{
}
voidCDate:
:
output()
{
cout<}
voidCDate:
:
input()
{
cout<<"请输入日期!
\n";
cout<<"年份:
";
cin>>year;
cout<<"月份:
";
cin>>month;
cout<<"日期:
";
cin>>day;
}
intmon_day[]={};//数组,保存每月天数;平年月为天;
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;
}
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;i<=dt1.month-1;i++)
{
D1+=mon_day[i];
}
for(intj=0;j<=dt2.month-1;j++)
{
D2+=mon_day[i];
}
returnD;
}
boolCDate:
:
operator==(constCDate&dt1)const//重载==判断两日期对象是否相等;
{
if(year==dt1.year&&
month==dt1.month&&
day==dt1.day)
returntrue;
else
returnfalse;
}
voidOperator1()
{
intW;
CDateolddate;
olddate.input();
CDatenewdate;
cout<<"请输入加的天数:
";
cin>>W;
newdate=W+olddate;
newdate.output();
}
//////////////////////////////////重载减计算日期天差;
voidOperator2()//计算两日期对象的天差;
{
intyear,month,day;
intD,D1,D2,D3,d;
cout<<"请输入日期!
\n";
cout<<"年份:
";
cin>>year;
cout<<"月份:
";
cin>>month;
cout<<"日期:
";
cin>>day;
D=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+D1+day;
for(inti=0;i<=month-1;i++)
{
D1+=mon_day[i];
}
cout<<"请输入日期!
\n";
cout<<"年份:
";
cin>>year;
cout<<"月份:
";
cin>>month;
cout<<"日期:
";
cin>>day;
D2=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+D3+day;
for(intj=0;j<=month-1;j++)
{
D3+=mon_day[i];
}
d=D-D2;
cout<}
voidOperator3()//判断两日期对象是否相等;
{
CDatedt1,dt2;
dt1.input();
dt2.input();
if(dt1==dt2)
cout<<"dt1anddt2areequal."<