万年历面向对象程序设计.doc

上传人:精*** 文档编号:838547 上传时间:2023-09-08 格式:DOC 页数:20 大小:222.50KB
下载 相关 举报
万年历面向对象程序设计.doc_第1页
第1页 / 共20页
万年历面向对象程序设计.doc_第2页
第2页 / 共20页
万年历面向对象程序设计.doc_第3页
第3页 / 共20页
万年历面向对象程序设计.doc_第4页
第4页 / 共20页
万年历面向对象程序设计.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、目录一、需求分析11.1开发背景11.2运行环境1二、概要设计22.1程序设计思想22.2 程序的结构3三、详细设计3四、用户使用说明6五、测试结果10六、课程设计的总结10七、附录和参考资料12一、需求分析1.1 开发背景目前的计算机日历程序,比较典型的是Windows各版本中的日历程序以及基于该程序所开发的各种应用程序中的日历程序。然而,这些程序都是千遍一律的局限于一个很短的时间内。但是,很多情况下,特别是在众多的科学领域中,一个时间跨度较大的程序是有参考价值的。C+程序设计语言充分发挥了其自身无与伦比的优越性,用极短的程序文本就弥补了这一领域的空白。 万年历作为日常中的一种小工具,它具有

2、多方面的小工能,主要在日期的显示上给人以直观的表达效果,在日期的查询上方便简洁,还有就是在某些节日的提醒上都给我们带来极大的方便 ,是一种比较实用的小工具。在现代信息社会里,人们越来越重视时间的有效利用,而万年历也成了工作生活中必不可少的一部分,方便实用的万年历对于提高现代人的时间观念,优化时间使用效率具有重要意义。随着时代的发展,尽管日历的品种增多、花样也不断翻新,但仍旧保持着古老日历的格局。日历在当今社会的影响也是毋庸置疑的!同时,随着个人电脑的普及,简单的桌面万年历成为人们日常作息及重要事件提醒记录的重要工具。简易万年历可以运行在电脑桌面上,使用者可以通过各种不同的标记对重要时间及节假日

3、和备忘事件等方面进行有效的查询和管理。这套系统旨在为用户方便有效地进行重要事件的查询和管理。 本系统采用C+语言编写,接针对简单的有效查询信息化系统。该系统具有完整的信息查询功能,充分满足了广大用户的基本需求。1.2运行环境一台安装windows xp、wndows vista、windows 7并且能够运行.exe可执行文件的计算机。二、概要设计 1.1设计的思想程序运行时,在首先给出的菜单中共有7个选项,分别是:1.距离世界末日还有多少天?2.某年的日历3.某年、某月的日历4.某年某月某日是周几5.判断闰年6.计算指定年份的生肖7.退出用户根据需求选择7个阿拉伯数字,程序根据选择做出不同的

4、响应,用户选择1,4时,系统会提示用户输入年份,月份和日子(年份1900,0月份12,天数会根据某个月的情况判断是否符合实际),然后分别输出距离末日的天数和星期几;用户选择2、5、6时,系统会提示用户输入年份,然后通过算法分别输出该年的日历、是否为闰年的信息和该年的生肖;程序还可以直接按月份索取日历,即用户在主菜单中选择3,系统会提示用户依次输入某年和某月,然后输出对应的日历。每次用户做出选择并且获取对应的信息之后,系统不会直接关闭,系统会自动调用主函数,以满足用户继续使用的目的。当用户需要退出程序时,用户通过选择7,程序会自动关闭。程序的特点在于使用了C+里的类,运用类的借口等知识、枚举法、

5、递归主函数、从1900年(21世纪万年历的起始年)开始算起,大大简化了程序的设计和实现,相对节约了系统的开支,使程序简单明了运行流畅。 1.2程序的结构程序由一个cal类,一个main(),data_order、hourd、t 组成。三、详细设计相关模块详细设计及部分程序:3.1距离世界末日还有多少天部分程序:switch(x)case 1 :/距离世界末日还有多少天.d.get_year();if(d.get_y()1900)/判断年份有否输错 d.print_blanks(t);cout年份输入错误!12)/判断月份有否输错 d.print_blanks(t);cout月份输入错误!d.d

6、ay_kind(d.get_m()d.print_blanks(t);cout日期输入有误!endl;return main(); d.print_blanks(t);cout距离世界末日还有 41262-d.days_total() 天.endlendl;return main();3.2某年的日历部分程序:case 2: /某年的日历d.get_year();if(d.get_y()1900)/判断年份有否输错 d.print_blanks(t);cout年份输入错误!endl;return main() ;for(int i=1;i=12;i+)d.initM(i);/d.print_b

7、lanks(t);d.print_days();coutendlendl; return main();3.3某年、某月的日历部分程序:case 3: /某年、某月的日历.d.get_year();if(d.get_y()1900) /判断年份有否输错 d.print_blanks(t);cout年份输入有误!12) /判断月份有否输错 d.print_blanks(t);cout月份输入有误!endl;return main() ;d.print_days();return main();3.4某年、某月、某日是周几部分程序:case 4:/某年、某月、某日是周几.d.get_year();

8、if(d.get_y()1900)/判断年份有否输错 d.print_blanks(t);cout年份输入错误!12)/判断月份有否输错 d.print_blanks(t);cout月份输入错误!d.day_kind(d.get_m()d.print_blanks(t);cout日期输入有误!endl;return main(); d.print_blanks(t);cout那 天 是 : 星期data_orderd.dayinaweek()endlendl;return main();3.5判断闰年部分程序:case 5: /判断闰年 .d.get_year();if(d.get_y()19

9、00)/判断年份有否输错 d.print_blanks(t);cout年份输入错误!endl;return main() ;if(d.isleap() d.print_blanks(t);cout这是个闰年哎.endlendl;return main();elsed.print_blanks(t);cout这不是闰年呢.endlendl; return main();3.6计算制定年份生肖部分程序:case 6:d.get_year();if(d.get_y()1900)/判断年份有否输错 d.print_blanks(t);cout年份输入有误!endl;return main() ;d.p

10、rint_blanks(t);cout这一年是 :hoursd.animals()年endl;return main();case 7:return 0;default:d.error_();return main();3.2相关模块涉及函数3.1输入日子void cal:get_day();3.2输入月份void cal:get_month();3.3输入年份void cal:get_year();3.4给出错误提示 void cal:error_();3.5判断闰年 inline int cal:isleap();3.6判断每个月有多少天 inline int cal:day_kind(i

11、nt mm);3.7选择1900年 1月 1日星期一为起点 .inline int cal:days_total();3.8判断某天周几int cal:dayinaweek();3.9打印眉头:一二三四五六日 void cal:print_();3.10记录每月一号是周几void cal:print_days();3.11判断生肖 int cal:animals();四、用户使用说明书运行程序得到界面:根据界面目录输入你的选择:输入1 输入当前的年份:2012输入当前的月份:12输入当前的日子:20显示结果如下:继续进行目录的选择;输入3输入当前的年份:2012输入当前的月份:12显示结果如下

12、:输入界面选择:输入 2输入年份:2012/12/24显示结果如下:显示结果是抽取的部分月份!界面选择输入:输入6输入年份:2012继续输入:输入5输入年份:2012显示结果如下:五、测试结果程序一切正常,测试的截图使用说明中已经给出。六、课程设计总结经过一个学期对C+程序设计的学习,我学习到了基本的理论知识,了解到了C+语言程序设计的思想,这些知识都为我的课程实践和进一步的学习打下了坚实的基础。我们学会了如何用C+编写一个简单的应用程序。首先要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。程序实现上,设计了简单的查询界面,将各个功能集中出来按照程序编写原

13、则,便于查询。根据C+课程所学的概念、理论和方法,按照C+程序设计的基本步骤,设计出一个适当规模的程序;进一步加深对C+语言的理解和掌握。理论联系实际,加深和巩固所学的理论知识,提高实践能力和计算机的综合运用能力。我们编写程序的过程是辛苦与快乐的,程序的编写原则很重要,只要我们在编程,就必须不断改进,才能更好提高编程能力。在C+课程设计中,我体会颇多,学到了很多东西。我加强了对C+程序设计这门课程的认识,并且复习了自己以前学习到的知识。这些都使得我对计算机语言的学习有了更深入的认识!总之,通过这次课程设计,我收获颇丰,相信会为自己以后的学习和工作带来很大的好处。像万年历这样的程序设计,经历了平

14、时在课堂和考试中不会出现的问题和考验。而这些问题,这并不是我们平时只靠课本,就可以轻易解决的。所以,锻炼了我们挑战难题,学会用已掌握的知识去解决具体问题的能力,进一步培养了独立思考问题和解决问题的能力。特别是学会了在Visual C+中如何调试程序的方法。当然,老师的指导和同学的帮助也是不可忽视的,他们给了我许多提示和帮助,教会了我编译复杂程序的方法。在老师和同学的帮助下,通过自己的努力,终于完成了这个万年历的简单课程设计。我经过这段时间的编程,对其中的艰辛,我是深有体会。从刚开始的选择程序、理解程序到后来的调试程序以及改进程序这个过程中,我遇到了各种各样的困难和挫折。但是我坚定信念,对自己充

15、满了信心,想尽一切办法克服重重困难。通过课程设计的训练,我进一步学习和掌握了对程序的设计和编写,从中体会到了面向对象程序设计的方便和巧妙。懂得了在进行编写一个程序之前,要有明确的目标和整体的设计思想。另外某些具体的细节内容也是相当的重要。这些宝贵的编程思想和从中摸索到的经验都是在编程的过程中获得的宝贵 财富。这些经验对我以后的编程会有很大的帮助的,我要好好利用。虽然这次课程设计是在参考程序的基础之上进行的,但是我觉得对自己是一个挑战和锻炼。我很欣慰自己能在程序中加入自己的想法和有关程序内容,也就是对它的程序改进了一番改进,并有创新。但是我感觉自己的创新还不够典型,总之还不是很满意。另外由于时间

16、的紧迫和对知识的了解不够广泛,造成了系统中还存在许多不足,功能上还不够完善。以后我会继续努力,大胆创新,争取能编写出透射着自己思想的程序。这次课程设计让我充分认识到了自己的不足,认识到了动手能力的重要性。我会在以后的学习中更加努力锻炼自己,提高自己,让自己写出更好更完善的程序,为以后的编程打好基础!总而言之,这次C+程序设计实践让我收获很大。七、附录和参考资料1.1附录#includeusing namespace std;void main()int d=0,s=0;for(int i=1900;i=2012;i+)if(i%4=0&i%100!=0)|i%400=0)d=d+1;s=113

17、*365+d-11;coutsendl;源代码中关于世界末日中的数字的代码计算。1.2参考资料1谭浩强.C+面向对象程序设计M.北京:清华大学出版社,2006.2. 张海林,杜忠友,姜玉波. Visual C+简明教程M.北京:电子工业出版社,2007.3丁展,四维科技.Visual C+游戏开发技术与实例M北京:人民邮电出版社,20054姚领田精通MFC程序设计M北京:人民邮电出版社.2000.5清宏计算机工作室Visual C+6.0编程技巧(多媒体与系统篇)M.北京:机械工业出版社,2001.6. 王华,叶爱亮,祁立学等.Visual C+6.0编程实例与技巧M.北京:机械工业出版社,1

18、999.7. 钱新贤,杨猛,程兆炜等.Visual C+编程疑难详解M.北京:人民邮电出版社,2000.1.3源代码#include #include #include using namespace std ;class calprivate:int y,m,d;public:void get_year();void get_month();void get_day();int isleap();int day_kind(int mm);int dayinaweek();int days_total();int animals();int get_y()return y;int get_m(

19、)return m;int get_d()return d;void print_();void print_days();void error_();void initM(int mm)m=mm;void print_blanks(int n) for(int i=1;i=n;i+) cout ;/打印空格 ;/-int t=15;char* data_order8=,一,二,三,四,五,六,日 ;char* hours13=,鼠,牛,虎,兔,龙,蛇,马,羊,猴,鸡,狗,猪;/- void cal:get_day()int day;print_blanks(t);coutday;d=day;

20、/-void cal:get_month()int month;print_blanks(t);coutmonth;m=month;/-void cal:get_year()int year;print_blanks(t);coutyear;y=year;/-void cal:error_() /给出错误提示 print_blanks(t);cout输入错误! endl;/-inline int cal:isleap() /判断闰年 if(y%4=0&y%100!=0|y%400=0) return 1;/is a leap yearelsereturn 0;/not a leap year/

21、-inline int cal:day_kind(int mm)/判断每个月有多少天 if(mm=1 | mm=3 | mm=5 | mm=7 | mm=8 | mm=10 | mm=12) return 31;/大月 31else if(mm=2 & isleap()/闰年 return 29;else if(mm=2 & !isleap()/非闰年 return 28;else return 30; /正常年份 30/-inline int cal:days_total()/选择1900年 1月 1日星期一为起点 .int days=0;int i;for( i=1900;iy;i+) /

22、从1900年到 X年 1月 1日的天数 if(i%4=0 & i%100!=0 | i%400=0 )days+=366;elsedays+=365;for( i=1;im;i+)/再加上从 1月 1日到 mm月跨越的天数 days+=day_kind(i);days+=(d-1) ;/再加上 1日到 d日的跨越天 return days;/-int cal:dayinaweek()/判断某天周几 long int k=days_total();/判断一共过了多少天 if(k%7=0)return 1;/因为选择的参考日期是周一,所以返回一 else return (k%7+1);/-void

23、 cal:print_() /打印眉头:一二三四五六日 print_blanks(t);int i; for( i=1;i8;i+) coutsetw(4)data_orderi; coutendl;/-void cal:print_days()d=1;int leap=dayinaweek();/记录每月一号是周几 print_blanks(t);coutsetw(4) m月的月历 endl;print_();/打印眉头:一二三四五六日 print_blanks(t);int i;for( i=2;i=leap;i+)coutsetw(4) ;for( i=1;i=day_kind(m);i

24、+,leap+)coutsetw(4)i;/确定打印日期的位置 if(leap%7=0) /是周日则换行 coutendl; /遇到周日换行 print_blanks(t);/另起一行的位置 coutendl;/-int cal:animals() /判断生肖 int k=y-1900;if(k%12=0) return 1;/以 1900年鼠年为参考 else return (k%12+1);/-int main()/int t=10;char x;cal d;/创建对象 d.print_blanks(t);coutsetw(10)+万年历查询+endl; d.print_blanks(t)

25、;coutsetw(10)+ 请从下面选择操作数: +endl;d.print_blanks(t);coutsetw(10)+ 1.)距离世界末日还有多少天? +endl; d.print_blanks(t);coutsetw(10)+ 2.)某年的日历 +endl; d.print_blanks(t);coutsetw(10)+ 3.)某年、某月的日历 +endl;d.print_blanks(t);coutsetw(10)+ 4.)某年、某月、某日是周几? +endl;d.print_blanks(t);coutsetw(10)+ 5.)判断闰年 +endl;d.print_blanks(

26、t);coutsetw(10)+ 6.) 计算指定年份的生肖 +endl;d.print_blanks(t);coutsetw(10)+ 7.)退出. +endl;d.print_blanks(t);coutsetw(10)+endl;d.print_blanks(t);coutsetw(10)x;switch(x)case 1 :/距离世界末日还有多少天.d.get_year();if(d.get_y()1900)/判断年份有否输错 d.print_blanks(t);cout年份输入错误!12)/判断月份有否输错 d.print_blanks(t);cout月份输入错误!d.day_kin

27、d(d.get_m()d.print_blanks(t);cout日期输入有误!endl;return main(); d.print_blanks(t);cout距离世界末日还有 41262-d.days_total() 天.endlendl;return main();case 2: /某年的日历d.get_year();if(d.get_y()1900)/判断年份有否输错 d.print_blanks(t);cout年份输入错误!endl;return main() ;for(int i=1;i=12;i+)d.initM(i);/d.print_blanks(t);d.print_da

28、ys();coutendlendl; return main();case 3: /某年、某月的日历.d.get_year();if(d.get_y()1900) /判断年份有否输错 d.print_blanks(t);cout年份输入有误!12) /判断月份有否输错 d.print_blanks(t);cout月份输入有误!endl;return main() ;d.print_days();return main();case 4:/某年、某月、某日是周几.d.get_year();if(d.get_y()1900)/判断年份有否输错 d.print_blanks(t);cout年份输入错

29、误!12)/判断月份有否输错 d.print_blanks(t);cout月份输入错误!d.day_kind(d.get_m()d.print_blanks(t);cout日期输入有误!endl;return main(); d.print_blanks(t);cout那 天 是 : 星期data_orderd.dayinaweek()endlendl;return main();case 5: /判断闰年 .d.get_year();if(d.get_y()1900)/判断年份有否输错 d.print_blanks(t);cout年份输入错误!endl;return main() ;if(d

30、.isleap() d.print_blanks(t);cout这是个闰年哎.endlendl;return main();elsed.print_blanks(t);cout这不是闰年呢.endlendl; return main();case 6:d.get_year();if(d.get_y()1900)/判断年份有否输错 d.print_blanks(t);cout年份输入有误!endl;return main() ;d.print_blanks(t);cout这一年是 :hoursd.animals()年endl;return main();case 7:return 0;default:d.error_();return main();

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业设计

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922