c++课程设计重载运算符编程Word格式.docx
《c++课程设计重载运算符编程Word格式.docx》由会员分享,可在线阅读,更多相关《c++课程设计重载运算符编程Word格式.docx(9页珍藏版)》请在冰豆网上搜索。
四、设计小组成员
0806401-09冯雅文、0806401-10李敏、0806401-11孙慧群
五、指导老师
贾丽媛老师
六、设计课题
一个日期类Date,包括年、月、日等私有成员。
要求实现日期的基本运算,如一日期加上天数,一日期减去天数、两日期相差天数
七、基本思路及关键问题的解决方法
(一)基本思路:
1:
在Date类中设计如下重载运算符函数:
Dateoperator+(intdays);
返回一日期加一天数得到的日期
Dateoperator-(intdays);
返回一日期减去天数得到的日期
intoperator-(Date&
b);
返回两日期相差的天数
2:
在实现这些重载运算符函数调用以下私有成员函数:
leap(int);
判断指定的年份是否为闰年
dton(Date&
);
将指定日期转换为从0年0月0日起的天数
ntod(int);
将指定的0年0月0日起的天数转换为对应的日期
3:
在main()中,实现日期的基本运算
(二)关键问题的解决办法:
闰年与非闰年的判断,以及各月的天数的获得问题,解决办法是设置并引用二维数组
日期基本问题的实现问题,解决办法是在Date类中设计重载运算符函数:
Dateoperator+(intdays)、Dateoperator-(intdays)、intoperator-(Date&
b),同时调用以下私有成员函数leap(int)、dton(Date&
)、ntod(int)得以实现
如何使输入的日期有效,如20111334为无效日期,解决办法是在input()中设置if(month>
12||month<
1||day>
day_tab[leap(year)][month-1]||year<
=0),判断日期是否为有效日期。
八、流程图
图1
九、调试过程中出现的问题及相应解决办法
输入无效日期时,也能得到运算结果,如输入01332时,程序没察觉输入错误,细
心检查发现if语句编写错误,改正后得到正确的结果;
重载运算符函数的编写,如求两日期相差天数时,由于编写错误,得到错误的答案,
后通过看书,查相关资料,终于改写成功。
十、课程设计心得体会
通过此次课程设计,不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。
让我发现了许多自己平时学习的不足和薄弱环节,同时也让我明白到c++的学习方法就是“用编程来学会编程”,通过看懂例程,然后修改、完善例程、最后自己独立编程。
在此次课程设计过程中,和同学们相互探讨,相互学习,相互监督,让我学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。
总之,这次课程设计,考验了我综合运用知识的能力,真正做到学以致用,让我体会到了编程的乐趣,以后我会再接再厉,学得更好。
十一、源程序(每句语言要有详细解释)
#include<
iostream.h>
intday_tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}};
//day_tab二维数组存放各月天数,第一行对应非闰年,第二行对应闰年
classDate
{
intyear,month,day;
intleap(int);
intdton(Date&
Datentod(int);
public:
Date(){}
voidinput()
{
cin>
>
year>
month>
day;
while(month>
day_tab[leap(year)][month-1]||day<
=0||year<
=0)
{
cout<
<
"
invaliddate!
endl;
inputadateagain"
}
}
Date(inty,intm,intd)
year=y;
month=m;
day=d;
}
Dateoperator+(intdays)//返回一日期加上天数得到的日期
staticDatedate;
intnumber=dton(*this)+days;
date=ntod(number);
returndate;
Dateoperator-(intdays)//返回一日期减去天数得到的日期
intnumber=dton(*this);
number-=days;
b)//返回两日期相差的天数
intdays=dton(*this)-dton(b);
if(days>
returndays;
else
return-days;
voiddisp()
cout<
year<
."
month<
day<
};
intDate:
:
leap(intyear)//判断指定的年份是否为闰年
if(year%4==0&
&
year%100!
=0||year%400==0)//是闰年
return1;
else//不是闰年
return0;
d)//将指定日期转换为从0年0月0日起的天数
inty,m,days=0;
for(y=1;
y<
=d.year;
y++)
if(leap(y))
days+=366;
else
days+=365;
for(m=0;
m<
d.month-1;
m++)
if(leap(d.year))
days+=day_tab[1][m];
else
days+=day_tab[0][m];
days+=d.day;
DateDate:
ntod(intn)//将指定的0年0月0日起的天数转换为对应的日期
inty=1,m=1,d,rest=n,lp;
while
(1)
{
if(leap(y))
{
if(rest<
=366)
break;
rest-=366;
}
else
=365)
rest-=365;
y++;
}
y--;
lp=leap(y);
while(true)
if(lp)
if(rest>
day_tab[1][m-1])
rest-=day_tab[1][m-1];
else
break;
day_tab[0][m-1])
rest-=day_tab[0][m-1];
m++;
d=rest;
returnDate(y,m,d);
voidmain()
Datenow,then;
intn;
now:
;
now.input();
then:
then.input();
相差天数:
(then-now)<
pleaseinputn:
cin>
n;
Dated1=now+n,d2=now-n;
now+n:
d1.disp();
now-n:
d2.disp();
十二、实验结果:
日期输入正确时:
日期输入错误时:
参考文献
[美]WalterSavitch著,周靖译,C++面向对象程序设计——基础、数据结构与编程思想,清华大学出版社,2004
陈文宇,张松梅编著,C++语言教程,电子科技大学出版社,2004
谭浩强编著,C++程序设计,清华大学出版社,2004