预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共14页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

程序设计课程设计 第页 《程序设计基础(C/C++)》课程设计报告 万年历系统 学生姓名学号班级指导教师日期 XXXX大学XXXX学院 评分目录 TOC\o"1-3"\h\z\u HYPERLINK\l"_Toc327981599"一、设计目的 PAGEREF_Toc327981599\h2 HYPERLINK\l"_Toc327981600"二、设计要求 PAGEREF_Toc327981600\h2 HYPERLINK\l"_Toc327981601"三、问题分析 PAGEREF_Toc327981601\h2 HYPERLINK\l"_Toc327981602"四、总体设计 PAGEREF_Toc327981602\h3 HYPERLINK\l"_Toc327981603"五、详细设计 PAGEREF_Toc327981603\h4 HYPERLINK\l"_Toc327981604"六、调试与测试 PAGEREF_Toc327981604\h4 HYPERLINK\l"_Toc327981605"七、程序源代码 PAGEREF_Toc327981605\h7 HYPERLINK\l"_Toc327981606"八、心得体会 PAGEREF_Toc327981606\h13 HYPERLINK\l"_Toc327981607"九、参考文献 PAGEREF_Toc327981607\h13 RDXE一、设计目的 1、复习、巩固C语言的基础知识,进一步加深对C语言的理解和掌握; 2、课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。 二、设计要求 编写万年历系统 要求模仿现实生活中的挂历。 当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几)。 当系统日期变到下一月时,系统自动翻页到下一月。 三、问题分析 难点1:难点在于判断星期,但根据蔡勒公式,可以很容易地有年月日推断出星期: nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday; w=nDay%7; 其中year:要查询的年份 nday:从该年的一月一日起到该天的天数 w:得出的星期数,w==0表示星期天。 在打印月历时,只要知道第一天的星期,就可以依次输入后面的日期,通过定长度输出日期,在遇到某天时星期六时,就换行输出,因此可以按照月历的格式输出。对于初始输入当前月历,可以通过<time.h>中的time和localtime函数取出系统时间进行初始化。 time_ttimer; structtm*gmt; time(&timer); gmt=localtime(&timer); gmt就是一个时间结构体,可以从中取出年月日。 难点2:闰年的判断,能被4整除但不能被100整除,或者能被400整除的年份为闰年,否则为平年。日期的查询,就是直接打印改天所在月份的月历。 难点3:判断日期是否合法,可以先判断年月日是否有小于0的值,月和日是否有超出最大值12和31,如果通过此判断合法,再判断是否时闰年,如果时闰年,则判断二月份是否满足要求,闰年二月份不能超过29天,平年二月份不能超过28天。在查询过程中,如果发现输入不合法或者不满足输入要求,则要求重新输入。 难点4:通过两个getch();捕获键盘的输入,将后一个getch()的返回值付给整型或字符型k,k为相应键的ascii值,判断ascii值,就可以知道时哪个键的输入。若捕获到某键的输入,则设置相应的年或月或日的值,再进行刷性输出,就可以实现日期的调整。 四、总体设计 功能模块 月历显示 日期查询 日期判断 日期调整 闰年判断 流程图 程序进入 显示当前时间 1、日期显示 2、日期查询 3、日期调整 4、帮助文件 5、退出程序 1、日期显示 1、日期显示 2、日期查询 3、日期调整 4、帮助文件 5、退出程序 五、详细设计 主要函数: intrunYear(intyear); 该函数判断某年是否是闰年,参数year表示要判断的年份,返回值1表示该年为闰年,0表示该年为平年。 structtm*getDay(); 该函数用以取得系统的时间。该函数没有参数,返回值类型为structtm*,是一个包含时间的结构体。 intdayExame(intyear,intmonth,intday);