《万年历程序设计-----石玉英.docx》由会员分享,可在线阅读,更多相关《万年历程序设计-----石玉英.docx(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、万年历程序设计-石玉英当前位置:文档视界万年历程序设计-石玉英万年历程序设计-石玉英目录第一章课程设计的目的和要求(1)1.1课程设计的目的(1)1.2课程设计的要求(2)第二章课程设计任务内容(3)2.1功能需求(3)2.2功能模块(6)2.2.1功能模块图(6)2.2.2主要模块讲明(7)第三章具体设计讲明(9)3.1程序设计思路(9)3.2函数功能讲明(9)3.2.1总函数流程图(10)3.2.2参数讲明(10)第四章软件使用讲明(13)第五章课程设计心得与体会(17)附录1参考文献(18)附录2源程序(19)万年历系统第一章课程设计的目的和要求1.1课程设计的目的通过本项课程设计,能够
2、培养独立考虑、综合运用所学有关相应知识的能力,能更好的稳固(C语言程序设计)课程学习的内容,把握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!愈加了解了c语言的好处和其可用性!同时增加了同学之间的团队合作精神!愈加也体会到以后在工作中团队合作的重要性和必要性!根据课堂讲授内容,学生做相应的自主练习,消化课堂所讲解的内容;通过调试典型例题或习题积累调试C程序的经历;通过完成辅导教材中的编程题,逐步培养学生的编程能力、用计算机解决实际问题的能力。在学习程序设计之前,我们首先要了解程序设计的基础是什么,在学习的时候应该重点把握什么。其实这一问题很好回答,重点是程序设计的基
3、本概念、方法和思维方式,其次才是程序设计语言在本课程中就是C语言。我们开发程序的目的是为了解决问题,而解决问题首先需要找出适宜的解决方案,然后用适宜的语言把方案描绘出来。显然,该经过的关键是分析问题并找出解决方案,而不是描绘方案。因而,程序设计课程的首要目的,是培养解决问题的基本思维方式,其次才是语言知识。因而,同学们在学习C程序设计的时候必须树立下面观念:1学习考虑的方法比学习语言更重要,2琢磨程序设计的思维形式比琢磨C语言的知识更重要,3培养本人的考虑能力比记忆语言知识更重要。另外,C语言本身的复杂性也是其比拟难学的原因之一。C不仅能够用来开发应用程序,更可用来设计系统程序。比起其他语言,
4、C增加的很多特点就是为了设计高质量的系统软件。显然,这些特点也增加了学习C的难度。通过C语言课程设计,使学生了解高级程序设计语言的构造,把握基本的程序设计经过和技巧,把握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础1.2课程设计的要求本课程设计是(C语言程序设计)课程实践环节的深化和延续。此次课程设计的目的是以C程序设计语言为基础,通过完成具有一定难度的课程设计题目的功能描绘、总体设计、程序编写及调试工作,加深对C语言相关知识的理解与VisualC+集成开发环境的使用,重点把握文件操作函数的熟练运用,并养成良好的程序
5、设计习惯,提高自我分析问题、解决问题的能力,为进一步学习(高级编程技术)及其相关课程打下良好基础把握面向对象程序设计的基本方法,熟练把握C+编程工具,根据问题进行学习,拓广、深化,独立完成一个小型应用程序的设计、编码和测试,为以后学习软件工程打下实践基础系统讲明书要求提交打印版或手写版这是检查作业的根据。内容包括:系统需求描绘(问题描绘),系统构造设计(类体系设计),类的具体设计(各类定义的基本功能,即主要数据和函数功能描绘,以及类和类之间的交互),拟采用开发平台VisualC+作业报告:根据原有的系统设计,编码阶段的工作,整理书写作业报告,内容包括:问题描绘,系统设计,使用讲明,讨论,最后提
6、交电子版:实验报告,基本要求:1、要求利用C语言面向经过的编程思想来完成系统的设计;2、突出C语言的函数特征,以多个函数实现每一个子功能;3、画出功能模块图;4、进行简单界面设计,能够实现友好的交互;5、具有明晰的程序流程图和数据构造的具体定义;6、熟练把握C语言对文件的各种操作。7、分析程序的功能要求,划分程序功能模块。8、代码的编写。定义数据构造和各个功能子函数。9、程序的功能调试;10、完成系统总结报告以及使用讲明书(4)指导老师应做到教书育人。设计开场时要进行发动布置,对学生提出明确的设计任务要求及注意事项,在设计期间要天天进行辅导和检查,及时予以指导和帮助,使设计顺利进行。基层教学单
7、位的指导老师应创造条件让学生使用计算机进行设计,培养学生的计算机应用能力。第二章课程设计任务内容本程序通过C语言编程实现了一个万年历,能实现基本的万年历功能。万年历的实现核心是要判定闰年和根据给定的日期计算其对应的星期,并根据适宜的方式输出日历.2.1功能需求万年历能实现一些功能,主要包括下面几点:(1)日历显示功能。能根据系统日期进行初始化,假如没有任何输入,则显示系统日期所在月份的月历。判定星期,但根据蔡勒公式,能够很容易地有年月日推断出星期:nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;w=nDay%7;其中year:要查询的
8、年份nday:从该年的一月一日起到该天的天数w:得出的星期数,w=0表示星期天。在打印月历时,只要知道第一天的星期,就能够依次输入后面的日期,通过定长度输出日期,在碰到某天时星期六时,就换行输出,因而能够根据月历的格式输出。对于初始输入当前月历,能够通过中的time和localtime函数取出系统时间进行初始化。time_ttimer;structtm*gmt;time(gmt=localtime(gmt就是一个时间构造体,能够从中取出年月日2日历查询、闰年判定功能。输入日期进行查询,显示查询日期所在月份的月历,还将显示所在年份能否为闰年能被4整除但不能被100整除,或者能被400整除的年份为
9、闰年,否则为平年。日期的查询,就是直接打印改天所在月份的月历3参数检查功能。假如输入日期不合法,查询将被拒绝,并显示提示信息。判定日期能否合法,能够先判定年月日能否有小于0的值,月和日能否有超出最大值12和31,假如通过此判定合法,再判定能否时闰年,假如时闰年,则判定二月份能否知足要求,闰年二月份不能超过29天,平年二月份不能超过28天。在查询经过中,假如发现输入不合法或者不知足输入要求,则要求重新输入。4通过键盘操作如:光标上、下、左、右移动键,pageup、pagedown键调整年份、月份和日期,并显示调整后的日期及月历。捕获键盘的输入,通过两个getch();将后一个getch()的返回
10、值付给整型或字符型k,k为相应键的ascii值,判定ascii值,就能够知道时哪个键的输入。若捕获到某键的输入,则设置相应的年或月或日的值,再进行刷性输出,就能够实现日期的调整。2.2功能模块2.2.1功能模块图本系统包括4个模块,分别是功能控制模块打印输出模块日历显示模块和键值获取模块。1、功能控制模块。该模块用于实现日期有效性检查判定能否是闰年和返回指定日期对应的日期。2、打印输出模块。该模块主要是进行输出显示,包括打印指定个数的空格打印分隔线打印用户使用手册打印当前日期对应的星期以及打印指定的星期。3、日历显示模块。该模块是系统的核心模块,是用来显示指定日期所在月份的月历。4、键值获取模
11、块。该模块接受键盘操作,获取键值,来进行日期调整,并调用日历显示模块中的函数来显示调整后的日历。图2-1功能模块图2.2.2主要模块讲明1日历显示模块日历显示是系统的核心模块,它控制着日历的生成和显示。其实现流程如下图。程序输入的是包含年月日的日期,输出month所在月份的月历,并突出显示day所在的日期和year能否是闰年的标识。程序首先根据判定year其能否是闰年,假如是则需要将该年2月份的天数设置为29天,接着判定day能否超过month所在的月份的最大天数,假如超过则显示系统日期所在的月历。然后进行星期输出的判定,假如输出的是该月的第一个星期,则判定该星期中还有几天在本月如,该月1号是
12、星期五,则表示该月第一个星期中只要两天在本月,星期一到星期四在上月,则星期一到星期四在本月就不输出,仅有空格表示,输出完第一周后,接着输出第二到第五或者六周,每周7天。在输出经过中,假如碰到了day所在的日期,则突出显示2键值获取模块键值获取实现的是从键盘调整日期并显示调整后的日历。系统首先判定从键盘输入的值,假如是右移键,表示增加月份。假如左移键,表示减少月份。假如上移键,表示增加年份。假如下移键表示减少年份。假如上翻页键表示减少日期。假如是下翻页键表示增加日期。假如Q/q键表示查询日期,此时将输出提示信息,提示用户输入查询日期。在用户输入查询日期后,系统将调用日期检查函数对输入日期的合法性
13、进行检测,假如输入日期不合格,则提示错误信息并显示当前系统日期所在月的月历;假如是空格键表示重置,显示当前系统日期所在月的月历;假如是Esc键表示退出系统,按此键后,系统将询问用户能否确定退出,在得到确定回答用户输入Y/y后将退出系统。第三章具体设计讲明3.1程序设计思路1由于万年历具有下面特点:平年365天52周+1天,闰年366天52周+2天。平年2月28天,闰年2月29天。2根据万年历以上特点进行编写1首先对万年历年、月、日进行编写,编写程序先定义每月的天数为28天,如月份为1、3、5、7、8、10、12就定义天数为31天反之假如月份为4、6、9、11就输出天数为30天,由上可见2月份为
14、28天但是假如为闰年就有29天就要定义一个数组存放天数,用while循环控制。2再对其中的星期进行编写:由于公元1月1日设为星期六,故3月1日为星期三,能够用万年3月1日星期算法(十分是那个三)由于其公式为:某年3月1日星期几=(百年%4*5天+年/4*5天+年%4+月星期表+日+2天)%7闰4百年3月1日星期算法百年%4=0其公式为:某年3月1日星期几=(年+年/4+月星期表+日+2天)%7例:2000年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三平4百年3月1日星期算法百年%40其公式为:某年3月1日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7例:210
15、0年3月1日星期几=21%4*5+0/4*5+0%4+3%7=(5+0+0+3)%7=8%7=星期一(注意:2100年是平年)其中万年某日星期算法其公式为:某日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%73.2函数功能讲明当前位置:文档视界万年历程序设计-石玉英万年历程序设计-石玉英if(year%4=0)&(year%100!=0)|(year%400=0)return1;elsereturn0;图3-2闰年判定2structtm*getDay();该函数用以获得系统的时间。该函数没有参数,返回值类型为structtm*,是一个包含时间的构造体structtm*getDay()/从系统获得当前时间time_ttimer;structtm*gmt;time(gmt=localtime(returngmt;3intgetwDay(intyear,intmonth,intday);该函数用以根据一个日期推断星期,参数为要判定的年月日。返回值为整型,123456分别表示星期一到星期六,0表示星期天。intgetwDay(intyear,intmonth,intday)/获得星期
限制150内