当前位置:文档之家› 【面向对象程序课程设计】万年历系统

【面向对象程序课程设计】万年历系统

课程设计说明书

课程名称:面向对象程序课程设计

题目: 万年历系统

院系:理学院

专业班级:数学与应用数学09-2班

学号: 2009303583

学生姓名:刘伟棠

指导教师:李声

2011年12 月23日

理学院院系信计教研室

学号2009303583 学生姓名刘伟棠专业(班级)应数09-2班设计题目万年历系统

设计技术参数系统平台:Windows7 开发工具:C++

设计要求(1)设计万年历系统,有查询日期,修改日期查询等功能。

(2)为需要查询某固定日期性质等信息。

(3)有良好的操作界面,便于查询,操作简单。

工作量课程设计报告要求不少于12页。源程序要求不少于300行。

工作计划12月19日网上查找有关编写万年历系统的资料和相关设计思想,。12月20日开始编写程序,往程序中添加算法并进行排除遇到的错误,询问相关人员并得到老师的检查。

12月21日上午,对程序进行完善处理。

12月21日下午,开始撰写课程设计任务书。

参考资料[1]谭浩强著.《C++面向程序程序设计》[M].北京:清华大学出版社,2006.7

[2]吴乃陵,况迎辉,李海文著.《VC++程序设计》[M].北京:高等教育出版社,2003.8

[3]邓宗明,张睿哲,张晓竞,等编著.《Visual C++ 6.0 编程实用技术与案例》[M].北京:清华大学出版社,2001.5

[4]李海文,吴乃陵等编《C++程序设计及实践教程》[M].北京:高等教育出版社,2003.9

[5]邓国俊,编《日历推算天才》[M].香港:浸会大学

指导教师签字教研室主任签字

年月日

学生姓名:刘伟棠学号:2009303583 专业班级:应数09-2

课程设计题目:万年历系统

指导教师评语:

成绩:

指导教师:

年月日

目录

CH1.绪论 (5)

CH2.程序设计的目的和思想 (6)

2.1设计程序的目的 (6)

2.2 设计程序的思想 (6)

2.3 设计目的 (6)

CH3.程序设计 (7)

3.1万年历特点 (7)

3.2问题描述 (7)

3.3问题分析 (7)

CH4.总体设计及框图 (9)

4.1功能模块 (9)

4.2流程图 (9)

4.3.详细设计 (10)

CH5.效果图 (11)

总结 (13)

致谢 (14)

参考文献 (155)

Ch1.绪论

C++是美国AT&T贝尔实验室的本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)博士在20世纪80年代初期发明并实现了C++(最初这种语言被称作“C with Classes”)。一开始C++是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。虚函数(virtual function)、运算符重载(operator overloading)、多重继承(multiple inheritance)、模板(template)、异常(exception)、RTTI、名字空间(name space)逐渐被加入标准。

日历在古代是为皇历。日历在日常生活中有着非常重要的作用。有了它,我们的生活更有节奏,有规律。认这个高级动物与低级动物的最大差别在于,认识会思考,会计划的。他们有着有规律的计划。而日历无疑是他们规律计划的媒介。现全世界都在用日历。而在中国,又分为国历和农历。

我国始有历法大约在四千多年以前。根据甲骨文中的一页甲骨历,证明殷代的历法已具有相当的水平,这一页甲骨。历是全人类最古老的历书实物,这页甲骨历也就叫日历。

但真正的日历产生,大约在一千一百多年前的唐顺宗永贞元年,皇宫中就已经使用皇历。最初一天一页,记载国家、宫廷大事和皇帝的言行。皇历分为十二册,每册的页数和每月的天数一样,每一页都注明了天数和日期。发展到后来,就把月日、于支、节令等内容事先写在上面,下部空白处留待记事,和现在的“台历”相似。那时,服侍皇帝的太监在日历空白处记下皇帝的言行,到了月终,皇帝审查证明无误后,送交史官存档,这在当时叫日历,这些日.历以后就作为史官编写《国史》的依据。后来,朝廷大臣们纷纷仿效,编制自家使用的日历。至于月历以后又发展成挂历、台历等各种形式,只是近一个世纪的事。随着时代的发展,尽管日历的品种增多、花样也不断翻新,但仍旧保持着古老日历的格局。日历在当今社会的影响也是毋庸置疑的!

Ch2.程序设计的目的和思想

2.1设计程序的目的

(1)加深对讲授内容的理解,尤其是一些语法规定。通过课程设计,自然地、熟练地掌握。

(2)熟悉所用的计算机系统的操作方法,也就是熟悉语言程序开发的环境。

(3)学会上机调试程序。

2.2 设计程序的思想

程序设计语言类课程的指导思想是:既能使学生通过学习高级编程语言的知识、编程技术和基本算法,又能掌握程序设计的思想和方法,更具备利用计算机求解实际问题的能力,能灵活运用高级语言进行程序设计。

其实认真学习一门语言并不困难,关键要所追求的学习的方法和途径。一条好的途径便于快速掌握,熟悉运用语言。学习的目的在于应用,理论来源于实践,如果在学习中能够通过有效的途径如自己动手设计一个功能比较前大的开发系统,借鉴于各种工具书,善于总结。定可以很好的效果。正是如此,使我们在这几年中对语言学习有了很大提高。通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C++,还是其它的语言,以及其它的计算机方面的知识都要重在实践,

2.3 设计目的

掌握一种编程工具和面向对象程序设计的基本思想和方法,培养我们学生综合利用某种语言进行程序设计的能力,培养我们学生利用系统提供的功能进行创新设计的能力,培养我们学生充分利用计算机的功能和特点分析实际问题及解决实际问题的能力。

为我们提供一个综合运用所学知识解决实际问题的机会,增强我们学生的实践动手能力和工程实践能力,并培养和锻炼我们学生的自学创新能力。

为了能更好地了解C++语言,因此开设了此次课程设计,程序设计教学课程的目的不是为了单独的课堂学习,而是要让我们学生掌握程序设计的基本思想及方法。一方面,在课程设计过程中,可以明确的指导为什么而学,还能对所学知识得到应用,更重要的是可以让我们学生掌握一些基本函数的用法,从而不在对编程序感到茫然,经过设计,可以让我们熟悉简单程序的设计方法和编写,对程序设计及该门课程设计语言的应用得到理解。

Ch3.程序设计

3.1万年历特点

1).平年365天(52周+1天),闰年366天(52周+2天)。平年2月28天,闰年2月29天,由于公元1月1日设为星期六,故3月1日为星期三。——注意这个“三”为使算法达到最简,故本算法以“星期”为计算单位。且选3月1日为基月。

2).每400年整一闰,或每4年且不为百年的一闰。(原因:地球绕太阳一周的时间是365天5小时46秒,为了使一年的天数为整数,将一年的天数定为365天,余下的时间积累起来,四年就是23小时15分4秒,将近一天,把这一天加在某年的二月而成29天,该年称为闰年,其它年称为平年。但四年加一天又多用了44分56秒,这个数积满400年为三天。因此400年中只能有97个闰年,所以凡能被400整除,或不能被100整除但能被4整除的年份为闰年。)

所以百年%4=0闰或(年%4=0并且年<>0)闰。

3).每 4年(3个平年+1个闰年)共208周+5天——注意这个“5天”

每百年共100*(208周+5天)-1天=5217周+5天——注意这个“5天”(整百年暂设为平年)

每400年共4*(5217周+5天)+1天(整400年闰)=20871周+0天——注意这个“0天”和

“1天”(4个整百年只有一个闰年)

即400年一轮回!(原来万年历400年前是一家)

3.2问题描述

模仿Windwos的日历.

1)日历显示功能。能根据系统日期进行初始化,如果没有任何输入,则显示系统日期所在月份的月历。

2)日历查询、闰年判断功能。输入日期进行查询,显示查询日期所在月份的月历,还将显示所在年份是否为闰年。

3)参数检查功能。如果输入日期不合法,查询将被拒绝,并显示提示信息。

4)选做:通过键盘操作(如:光标上、下、左、右移动键,pageup、pagedown 键)调整年份、月份和日期,并显示调整后的日期及月历。

3.3问题分析

对于要求1:难点在于判断星期,但根据蔡勒公式,可以很容易地有年月日推断出星期:

nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;

w=nDay%7;

其中year:要查询的年份

nday:从该年的一月一日起到该天的天数

w:得出的星期数,w==0表示星期天。

在打印月历时,只要知道第一天的星期,就可以依次输入后面的日期,通过定长度输出日期,在遇到某天时星期六时,就换行输出,因此可以按照月历的格式输出。对于初始输入当前月历,可以通过中的time 和localtime函数取出系统时间进行初始化。

time_t timer;

struct tm* gmt;

time(&timer);

gmt=localtime(&timer);

gmt就是一个时间结构体,可以从中取出年月日。

对于要求2:闰年的判断,能被4整除但不能被100整除,或者能被400整除的年份为闰年,否则为平年。日期的查询,就是直接打印改天所在月份的月历。对于要求3:判断日期是否合法,可以先判断年月日是否有小于0的值,月和日是否有超出最大值12和31 ,如果通过此判断合法,再判断是否时闰年,如果时闰年,则判断二月份是否满足要求,闰年二月份不能超过29天,平年二月份不能超过28天。在查询过程中,如果发现输入不合法或者不满足输入要求,则要求重新输入。

对于选作要求:通过两个getch();捕获键盘的输入,将后一个getch()的返回值付给整型或字符型k,k为相应键的ascii值,判断ascii值,就可以知道时哪个键的输入。若捕获到某键的输入,则设置相应的年或月或日的值,再进行刷性输出,就可以实现日期的调整。

Ch4.总体设计及框图

4.1功能模块

图4.1功能模块

4.2流程图

图4.2流程图

程序进入

显示当前时间

2、日期查询

3、日期调整

4、帮助文件

5、退出程序

1、日期显示

2、日期查询

3、日期调整

4、帮助文件

5、退出程序

1、日期显示

日期调整

日期查询

闰年判断

月历显示

日期判断

4.3.详细设计

主要函数:

int runYear(int year);

该函数判断某年是否是闰年,参数year表示要判断的年份,返回值1表示该年为闰年,0表示该年为平年。

struct tm* getDay();

该函数用以取得系统的时间。该函数没有参数,返回值类型为struct tm*,是一个包含时间的结构体。

int dayExame(int year,int month,int day);

该函数用以判断输入的年份是否合法,参数为要判断的年月日,返回值为1表示该日期合法,为0表示不合法。

int getwDay(int year,int month,int day);

该函数用以根据一个日期推断星期,参数为要判断的年月日。返回值为整型,123456分别表示星期一到星期六,0表示星期天。

void setDay(int &year,int &month,int &day);

该函数调整当前日期。参数为引用类型,分别为当前日期的年月日,没有返回值。void checkCalender();

该函数用以显示要查询的日期的月历,无参数和返回值,。

void inline backMenu();

该函数为内联函数,用以实现完成某项功能后按任意字符键返回主菜单,无参数和返回值,

void mainMenu(int &year,int &month,int &day);

该函数参数为系统日期,无返回值,用户在该函数执行时可以选择功能

Ch5.效果图

1.进入程序后显示当天时间

图5.1 2.主菜单

图5.2

3.在主菜单界面按2,进行日历的查询,并经行日期的合法性判断和闰年的判断。例如.输入2011 12 22,由于输入合法,会显示月历

图5.3

4.主页面按3可以修改日期进行查询

图5.4

5.在主页面按4显示帮助页面

图5.5

总结

目前流行的计算机日历程序,比较典型的是Windows各版本中的日历程序以及基础于该程序所开发的各种应用程序中的日历程序。然而,这些程序都千篇一律的局限在一个很短的时间范围内。(Windows各个版本一般都局限在1980年至2099年这一范围内),但是,在很多情况下,特别是在众多的科学研究领域中,一个时间跨度较大的日历程序是很有参考价值的。C程序设计语言充分发挥了其自身无与伦比的优越性,用极短的程序文本填补了这一领域的空白,同时用铁的事实强有力的告诉世人:C程序设计语言作为计算机语言家族的新生事物,其发展前景是极为广阔的。

致谢

经过两周的不懈努力,很高兴能完成一个C++编程,紧张的心终于可以平静了。从中体会到以及学习到很多关于C++的很大方面的只是,是我更加了解了C++,并更加熟练了C++。

在此次设计中我也遇到了很多的问题,都是经过查看老师所给的关于课程设计书和图书馆借的书才明白所用函数的用法,更重要的是上课时老师的细心教学,使我们学会了许多关于C++的基础知识,为本次的课程设计打好了很好的基础。从而使我能够顺利完成这次课程设计。

在本次做课程设计过程中,要感谢老师的悉心关照,一直陪伴我们,并为大家讲解不懂的地方,很是辛苦,也很是忙碌。还要感谢学院为我们此次课程设计提供机房,让我们有了良好的学习环境可以利用所学做课程设计,从很大的程度上增强了我们对于C++学习的兴趣。和小组成员一块讨论,多听听别人的想法,想办法改进自己,这是我受益匪浅。只有比较才知道自己的不足。我们一定要好好的改正自己的不足之处,完善自己。不做最好,只做更好!努力在老师规定的时间内完成老师所规定的任务。

结束课设的时侯,心里就有一种很渴望但又很害怕的感觉,明白了自己与实际所需的距离,因为现在毕业求职难,特别是对于像自己一般的人,更多的时侯是社会,职业选择自己,而不是更多的自己去选择职业,所以更应该把所学的知识灵活地用于实践,这次课设就是对自己一个很好的锻炼机会,无论任何的偿试,都是自己以后很宝贵的经验,更是对自己的一种充实。

参考文献

[1]谭浩强著.C++面向程序程序设计[M].北京:清华大学出版社,2006.7

[2]吴乃陵,况迎辉,李海文著.VC++程序设计[M].北京:高等教育出版社,2003.8

[3]邓宗明,张睿哲,张晓竞,等编著.Visual C++ 6.0 编程实用技术与案例[M].北京:清华大学出版社,2001.5

[4]李海文,吴乃陵等编C++程序设计及实践教程[M].北京:高等教育出版社,2003.9

[5]邓国俊,编日历推算天才[M].香港:浸会大学

相关主题
文本预览
相关文档 最新文档