万年历程序《面向对象程序设计》课程设计.docx
《万年历程序《面向对象程序设计》课程设计.docx》由会员分享,可在线阅读,更多相关《万年历程序《面向对象程序设计》课程设计.docx(21页珍藏版)》请在冰豆网上搜索。
万年历程序《面向对象程序设计》课程设计
《面向对象程序设计》课程设计
设计说明书
课程名称:
《面向对象程序设计》课程设计
设计题目:
万年历程序
指导教师:
班级:
学号:
学生姓名:
同组人员:
计算机科学与工程系
2011年6月23日
目录
第1章选题2
1.1题目背景2
1.2系统实现的具体分工2
1.2.1选题2
1.2.2团队分工2
1.3开发环境2
第2章设计内容3
2.1实现功能3
2.2概要设计(涉及类的框图)3
2.3界面设计3
第3章系统实现4
3.1涉及知识点4
3.2系统运行(主要运行界面抓图)4
3.3源程序清单(关键代码)5
第4章测试与实验结果13
第5章结束语17
参考文献17
第1章选题
1.1题目背景
C++教学起步的背景1996年,国外计算机产业界正在全面兴起面向对象编程的设计与热潮,其主要工具就是C++。
C++在数据类型的安全上,弥补了C的不足,克服了C的种种安隐患,用C++开发的产品正在稳步上市,并开始超过了C。
C++的开发工具正在稳步推出,在windows环境下的主要C++开发工具MicrosoftVisualC++6.0标志着C++开发工具已经成熟。
随着科技的迅猛发展,在快节奏的工作于生活中,时间与我们每个人都有非常密切的关系,每个人都受时间影响着,我们必须对时间有一个准确而又方便的度量,因此我们设计了万年历。
该万年历能够实现时间日期的运行,显示阳历的年、月、日、星期等信息。
1.2系统实现的具体分工
1.2.1选题
系统分为日历类(calendar)和三大功能模块,功能一(print_y())输出整年的日历;功能二(print_m())输出某年具体的月份;功能三(print_d())输出具体的某年某月某日是星期几
1.2.2团队分工
表1.1项目分工一览表
角色
姓名
承担的具体任务
组长
(1)类的定义与分析
(2)功能1:
输入一个年份能够把这一年的日期打印出来。
组员
(1)功能2:
输入一个月份能够把该月的情况输出出来。
(2)功能3:
输入具体的一天能够输出该天是星期几。
1.3开发环境
编程工具:
VisualC++6.0
机型:
方正电脑
处理器名称:
Intel(R)Core(TM)2DuoCPUE7200@2.53GHz
硬盘驱动器:
WDCWD1600AAJS-22WAAO
系统内存:
金士顿内存2GB
显示卡:
NVIDIAGeFORCE9400GT
显示器:
方正科技FG981-W9
操作系统:
MicrosoftWindowsXPProfessional
第2章设计内容
2.1实现功能
1、输入一个年份能够把这一年的日期打印出来。
2、输入一个月份能够把该月的情况输出出来。
3、输入具体的一天能够输出该天是星期几。
2.2概要设计(涉及类的框图)
2.3界面设计
界面设计在工作流程上分为结构设计、交互设计、视觉设计三个部分。
结构设计也称概念设计(ConceptualDesign),是界面设计的骨架。
该万年历系统运行时界面上的目录体系和词语定义易于用户理解和操作,例如主界面的目录体系包括1.年份查询;2.月历查询;
3.退出。
月份查询里下设:
1.查询月历;2.查询日期。
第3章系统实现
3.1涉及知识点
类封装、面向对象程序设计、数组的应用、循环语句的使用、过程化设计的思想等。
3.2系统运行(主要运行界面抓图)
系统主界面
查询月历界面
查询日期界面
3.3源程序清单(关键代码)
#include
#include
#include
#include
classCDateTime
{
private:
intyear;
intmonth;
intdays;
intwday;//星期
private:
intYearToDays(inty);
intDatesToDays();
intMonthToWeek();
intYearMonthToDay(inty,intm);
public:
CDateTime(inty=0,intm=0,intd=0)
{
year=y;
month=m;
days=d;
wday=DatesToWeek();
}
~CDateTime()
{}
voidNow();
intDatesToWeek();
voidLastTime();
voidInputYearMonth();
voidPrintMonth();
voidInputDates();
intWeek()
{
returnwday;
}
friendostream&operator<<(ostream&out,constCDateTime&c);
};
intCDateTime:
:
YearToDays(inty)
{
intd=0;
inti=(y-1900)*365;
while(y>1900)
{
if((y-1)%4==0&&(y-1)%100!
=0||(y-1)%400==0)
++d;
--y;
}
return(d+i);
}
intCDateTime:
:
YearMonthToDay(inty,intm)
{
intmday=0;
switch(m)
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:
mday=31;
break;
case2:
if(y%4==0&&y%100!
=0||y%400==0)
mday=29;
else
mday=28;
break;
case4:
case6:
case9:
case11:
mday=30;
break;
default:
mday=0;
}
returnmday;
}
intCDateTime:
:
DatesToDays()
{
inttotal=0;
while(month>1)
{
total+=YearMonthToDay(year,month-1);
--month;
}
intnum=YearToDays(year);
return(total+num+days);
}
intCDateTime:
:
DatesToWeek()//判断该日为星期几
{
intw=DatesToDays();
return(w%7);
}
voidCDateTime:
:
LastTime()
{
}
voidCDateTime:
:
InputDates()
{
cout<<"输入年:
"<cin>>year;
cout<<"输入月:
"<cin>>month;
while(month<=0||month>12)
{
cout<<"重新输入月:
"<cin>>month;
}
cout<<"输入天"<cin>>days;
}
voidCDateTime:
:
InputYearMonth()
{
cout<<"输入年:
"<cin>>year;
cout<<"输入月:
"<cin>>month;
while(month<=0||month>12)
{
cout<<"重新输入月:
"<cin>>month;
}
}
intCDateTime:
:
MonthToWeek()
{
intt=DatesToDays();
return(t-days)%7;
}
voidCDateTime:
:
PrintMonth()
{
inty=year;
intm=month;
cout<<"------------------------------"<cout<<"******************************"<cout<<""<<"日"<<""<<"一"<<""<<"二"<<""<<"三"<<""<<"四"<<""<<"五"<<""<<"六"<intw=MonthToWeek();
if(w!
=6)
for(inti=0;i<=w;i++)//判断每个月的第一天为星期几
cout<<"";
intk=YearMonthToDay(y,m);
for(intj=1;j<=k;++j)//输出每个月的天数
{
cout<(2)<<""<(2)<if((j+w+1)%7==0)
cout<}
cout<cout<<"------------------------------"<cout<<"******************************"<}
ostream&operator<<(ostream&out,constCDateTime&c)
{
out<returnout;
}
intfn1(void)
{
inti,j,k;
CDateTimed1,d2,d3,d4,d5;
cout<<"*******请选择:
*******"<cout<<"******1.查询月历******"<cout<<"*****2.查询日期*****"<cout<<"****0.退出****"<cin>>i;
while(i!
=0)
{
switch(i)
{
case0:
break;
case1:
d1.InputYearMonth();
d1.PrintMonth();
cout<<"0.返回:
"<cin>>j;
while(j!
=0)
{
switch(j)
{
case0:
break;
default:
{
cout<<"请重新选择"<cin>>j;
}
}
cout<<"0返回"<cin>>j;
}
break;
case2:
d4.InputDates();
k=d4.DatesToWeek();
cout<<"星期"<break;
case3:
d5.InputDates();
//d5.LastTime();
break;
default:
while(i<0||i>3)
{
cout<<"请重新输入"<cin>>i;
}
}
cout<<"1.查询月历"<cout<<"2.查询日期"<cout<<"0退出"<cin>>i;
}
return0;
}
classData
{
private:
intyear;
//intmonthdays[N];
public:
voidgetyear();//提示用户输入想要查询的年份
intioleapyear();//判断该年是不是闰年
intweekday();//判断该年的元旦是星期几
//voidsetweek();
intmonthday(inti);//该年每个月的天数
voiddisp();//显示结果。
};
char*weekd[7]={"一","二","三","四","五","六","日"};//记录星期一到星期天
voidData:
:
getyear()
{
cout<<"请输入你想要查询的年份:
";
cin>>year;
}
intData:
:
ioleapyear()
{
if(year%4==0&&year%100!
=0||year%400==0)
return1;
else
return0;
}
intData:
:
weekday()
{
intn=year-1900;//已知1900年的元旦刚好是星期一
//if(year%400==0)
//n=n+(n-1)/4+2;
//else
n=n+(n-1)/4+1;//判断,以每年个整星期计算year年比n年多出来的天数
n=n%7;
if(n==0)
return7;//返回输入的年份的元旦是星期几
else
returnn;
}
intData:
:
monthday(inti)
{
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
return31;
elseif(i==2)
if(ioleapyear())
return29;
elsereturn28;
else
return30;
}
voidData:
:
disp()
{
inti;
intn=weekday();
for(i=1;i<=12;i++)//总共的月份
{intlemp=1;
cout<cout<<"-------------------------------------------"<for(intj=0;j<7;j++)
cout<cout<for(intk=1;kcout<for(intd=1;d<=monthday(i);d++,lemp++)
{
cout<if(lemp==7)//控制一行输出到星期天,如果到星期天则重新计数
{
cout<lemp=0;
}
}
n=lemp%7;//当输出完一个月后,记录这个月的最后一天在哪,寻找下个月的
if(n==0)//第一天的起始位置
n=7;
cout<}
}
intfn2(void)
{
Dataa;
cout<cout<<"-------------------------------------------------------------------------------"
<a.getyear();
a.disp();
return0;
}
voidmain()
{
intx;
cout<<"************欢迎使用万年历************"<cout<<"**********1年份查询**********"<cout<<"********2.月历查询********"<cout<<"******3.退出******"<cout<<"pleasechoice";
cin>>x;
switch(x)
{
case1:
fn2();main();break;
case2:
fn1();main();break;
case3:
exit;break;
}
}
第4章测试与实验结果
1年份查询
2.月份查询
3.日期查询
第5章结束语
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程。
随着科学技术发展的日新月异,当今计算机应用在生活中可以说是无处不在。
因为作为二十一实际的大学生来说掌握程序开发技术是十分重要的,而语言又是最常见的,功能最强大的一种高级语言,因此做好C++课程设计是十分必要的。
经过一个学期对《C++程序设计》的学习,我学习到了基本的理论知识,了解到了C++语言程序设计的思想,这些知识都为我的课程实践和进一步的学习打下了坚实的基础。
通过C++课程设计,一方面是为了检查这一个学期来计算机语言的学习成果,另一方面也是为了让我们进一步掌握和熟练地运用它,与此同时,也能够让我们认清自己在C++学习方面的不足之处和薄弱环节,并加以弥补和巩固。
通过对教学管理系统的程序设计,进一步的巩固了用C++语言编写程序的能力,并且利于更好的掌握C++语言!
在为期近一周的C++课程设计中,我体会颇多,学到了很多东西。
我懂得了用MicrosoftVisualC++6.0对程序进行调试,我加强了对C++程序设计这门课程的认识,并且复习了自己以前学习到的知识,自己的逻辑思考能力也提高不少。
这些都使得我对计算机语言的学习有了更深入的认识!
收获颇丰,相信会为自己以后的学习和工作带来很大的好处。
最重要的还是激发了我编程的兴趣和热情,让我从一个只懂理论变成了能做一些小型程序。
整体地评价这次课程设计,我认为收获很大,这并不是我们平时只靠课本,就可以轻易解决的。
所以,锻炼了我们面对难题,学会用已掌握的知识去解决具体问题的能力,进一步培养了独立思考问题和解决问题的能力。
特别是学会了在VisualC++中如何调试程序的方法。
当然,老师的指导和同学的帮助也是不可忽视的,他们给了我许多提示和帮助,教会了我编译复杂程序的方法。
总而言之,这次C++程序设计实践让我收获很大。
参考文献
[1]钱能.C++程序设计教程(第一版).清华大学出版社
[2]钱能.C++程序设计教程(第二版).清华大学出版社
[3]C++入门经典(清华大学出版)
[4]邓华.VisualC++案例教程。
北京中科多媒体电子出版社,2001
[5]龚志翔.VisualC++编程实例与技巧集粹。
北京期望电子出版社,2004
忽略此处..