万年历c语言课程设计报告

上传人:j****9 文档编号:46217251 上传时间:2018-06-24 格式:DOC 页数:21 大小:95.50KB
返回 下载 相关 举报
万年历c语言课程设计报告_第1页
第1页 / 共21页
万年历c语言课程设计报告_第2页
第2页 / 共21页
万年历c语言课程设计报告_第3页
第3页 / 共21页
万年历c语言课程设计报告_第4页
第4页 / 共21页
万年历c语言课程设计报告_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《万年历c语言课程设计报告》由会员分享,可在线阅读,更多相关《万年历c语言课程设计报告(21页珍藏版)》请在金锄头文库上搜索。

1、程序实践报告程序实践报告任务分配:任务分配:1、头文件,定义常量,全局变量,自定义函数和打印输出模块。即、头文件,定义常量,全局变量,自定义函数和打印输出模块。即 150 和和 1402902、功能控制模块和一部分日历显示模块,即、功能控制模块和一部分日历显示模块,即 50140 和和 2904003、一部分日历显示模块和键值获取模块,即、一部分日历显示模块和键值获取模块,即 400 1、基本思路、基本思路功能模块图功能模块图本系统包括 4 个模块,分别是功能控制模块、打印输出模块、日历显示模块和键值获取模 块。 (1)功能控制模块。该模块用于实现日期有效性检查、判断是否是闰年和返回指定日期

2、对应的星期。 (2)打印输出模块。该模块主要是进行输出显示,包括打印指定个数的空格、打印分隔 线、打印用户使用手册、打印当前日期对应的星期以及打印给定的星期。 (3)日历显示模块。该模块是系统的核心模块,是用来显示指定日期所在月份的月历。 (4)键值获取模块。该模块接受键盘操作,获取键值,来进行日期调整,并调用日历显 示模块中的函数来显示调整后的日历。日历显示模块日历显示模块日历显示是系统的核心模块,它控制着日历的生成和显示。其实现流程如图所示。程序输 入的是包含年月日(year,month 和 day)的日期,输出 month 所在月份的月历,并突出显 示 day 所在的日期和 year 是

3、否是闰年的标识。程序首先根据 year 判断其是否是闰年,如果 是则需要将该年 2 月份的天数设置为 29 天,接着判断 day 是否超过 month 所在月份的最 大天数,如果超过则显示系统日期所在的月历。然后进行星期输出的判断,如果输出的是 该月的第一个星期,则判断该星期中还有几天在本月(如,该月 1 号是星期五,则表示该 月第一个星期中只有两天在本月,星期一到星期四在上月,则星期一到星期四在本月就不 输出,仅有空格表示) ,输出空格。输出完第一周后,接着输出第二到第五(或者六)周, 每周 7 天。在输出过程中,如果遇到了 day 所在的日期,则突出显示。键值获取流程图键值获取流程图键值获

4、取实现的是从键盘调整日期并显示调整后的月历。其实现流程如图所示。系统首先 判断从键盘输入的值,如果是右移键,表示增加月份。此时,如果当前月份是 12 月,则增 加月份后就进入下一年的一月;如果是左移键,表示减少月份。此时,如果当前月份是 1 月,则减少月份后就进入上一年的 12 月;如果是上移键表示增加年份,直接年份加 1 即可; 如果是下移键表示减少奶奶分,直接年份减 1 即可;如果是向上翻页键表示减小日期。如果 是 1 月 1 号,则减少日期后进入上一年的 12 月 31 号,如果是某一个月的 1 号,则减小日 期后进入上一月的最后一天;如果是向下翻页键表示增加日期。如果是 12 月 31

5、 号,则增 加日期后进入到下一年的 1 月 1 号,如果是某一个月的最后一天,则增加日期后进入到下 一个月的第一天;如果是 Q/q 键表示查询日期,此时将输出提示信息,提示用户输入查询 日期。在用户输入查询日期后,系统就爱那个调用日期检查函数对输入日期的合法性进行 检测,如果输入日期不合格,则提示错误信息并显示当前系统日期所在月的月历;如果是 空格键表示重置,显示当前系统日期所在月的月历;如果是 Esc 键表示退出系统,按此键后, 系统将询问用户是否确定退出,在得到确定回答(用户输入 Y/y)后将退出系统。2、函数功能描述、函数功能描述1) checkDate()函数原型:void check

6、Date() checkDate()函数用于检查输入日期的合法性,包括检查输入日期中的年、月、日部分。对 于年,检查其是否是负数或者是 0;对于月,检查其是否是范围在 112 中的值;对于日, 检查其是否是范围在 131 中的值。如果有一个部分不合法,则程序提示用户。 2)isLeapyear() 函数原型:int isLeapyear(int year) isLeapyear()函数用于判断制定月份是否是闰年。参数 year 为待判断的年份。 3)getWeek() 函数原型:int getWeek(int year,int month,int day) getWeek()函数用于计算并返回

7、给定日期对应的星期。其中参数 year、month 和 day 都为整 型,分别表示输入的年、月和日。 4)printSpace() 函数原型:void printSpace(int n) printSpace()函数用于输出制定个数的空格。其中整型参数 n 表示需要输出的空格的个数。 5)printSepatator() 函数原型:void printSeparator() printSeparator()函数用于在制定位置输出用户使用手册。输出位置在函数中已经设定。 7)printWeek() 函数原型:void printWeek() printWeek()函数用于输出当前日期对应的星期

8、,即由 currentYear,currentMonth 和 currentDay 确定的日期对应的星期。该函数首先调用 getWeek()函数返回当前日期对应的星 期。 8)printWeek2() 函数原型:void printWeek2(int week) printWeek2()函数用于根据制定值输出星期。参数 week 是一个整型变量,其值可取 0 到 6,分别表示星期一到星期日。 8)showCalendar() 函数原型:void showCalendar(int year,int month,int day) showCalendar()函数用于显示日历。参数 year,mon

9、th 和 day 分别表示年、月和日。该 函数显示 year 所在年是否是闰年,显示 month 所在月的月历,突出显示 day 所在日的 日期。 10)getKeyValue() 函数原型:void getKeyValue() getKeyValue()函数用于获取键盘的输入。根据键盘的输入(上下移键、左右移键、上下翻 页键、Q/q 键)调整当前日期,并显示当前日期所在月的月历等。 4、遇到的问题和相应的解决措施、遇到的问题和相应的解决措施1.dos.h 头文件不能在常用的 Visual C+里使用。若使用 Turbo C,则键入的汉字无法显示, 且无法复制粘贴。 解决措施:经过上网查询和询

10、问同学,知道了导致问题的原因,但若把 dos.h 在 visual c+中换成 time.h,过程太复杂,很难实现。最后,我们跟同学借了一个 win-TC,是 C 语言 程序,且可以使用中文和进行复制粘贴; 2.键入程序代码的时候显示“非法字符?(0xa3)在 showCalender 函数中”解决措施:把 showCalender 函数全部检查一遍也没有找出问题所在,然后咨询老师,经验丰富的老师一眼看出函数中的一个左括号是用拼音输出的,不是英文; 3.程序可以运行,但应该只显示一个向下箭头的地方显示了三行,且覆盖了其他的字符。解决措施:认真的又检查了一遍,发现“指定输出字符为向下的箭头”的函

11、数中, _CX=01,写成了_CH=01; 4.万年历需要获取系统时间,不知从何下手。解决措施:经查阅资料,得知应用:currentYear=sysTime.da_year;currentMnth=sysTime.da_mon;currentDay=sysTime.da_day; 5、心得体会、心得体会经历了这次课程设计的设计和制作的整个过程,我们才发现我们知识的贫乏和知识面 的狭窄,原本以为不就是一个小小的课程设计,小 case,很容易就可以搞定,可是到了后 来实际的操作的时候可是花费了我们九牛二虎之力,不说其他的,只说时间上面,我们就 花费了大把的时间,当然我们也从中体会了很多平时不能收获

12、的东西。经过一个多月的自 主上机和三个多星期的大作业编写,我们一队三人的齐心努力,查阅书籍,上网查询等各 种途径,完成了这次的大作业编写。其中遇到了很多问题,一一解决的过程让我们学会了 很多,当然有很多最初的构想没有实现,这也是我们的遗憾之处。 这次作课程设计我们也是收获很大,我们更深入的体会到团队的重要性,通过自学学 到了更多 C 语言的编译,如插入颜色,读取系统时间等,这会是我们终身的财富。 首先,我们对 C 语言有了更深的了解,使用起来也更加的熟练,原来有一些不知道和 不熟悉的函数,我们学会用了。其次,我们这一次找了不少的资料,找专业的书籍、上网 找各方面的资料,也使我们学到了一些书本中

13、学不到的知识,让我们长了见识。同时我们 同学之间也互相的探讨,也增进了我们同学之间的感情。 这次的万年历设计,虽然我们自己觉的很有的成就感,但是这必竟是我们第一次 C 语言的 课程设计,必然会有很多的不足之处有待改进,相信以后我们一定会做的更好。同时也感谢老师们的耐心讲解与指导,我们期待下一次可以做的更好!【程序代码】 /*加载头文件*/ #include #include #include #include #include #include #include/*定义常量*/ /*左移键*/ #define LEFT 0x4b00/*右移键*/ #define RIGHT 0x4d00/*下

14、移键*/ #define DOWN 0x5000/*上移键*/ #define UP 0x4800/*向上翻页键*/ #define PAGEUP 0x4900/*向下翻页键*/ #define PAGEDOWN 0x5100/*小写字母 q*/ #define QLOWER 0x1071/*大写字母 Q*/ #define QUPPER 0x1051/*空格键*/ #define SPACE 0x3920/*Esc 键*/ #define ESC 0x011b/*定义全局变量*/ struct date sysTime; int currentYear; int currentMonth;

15、int currentDay; int n_currentMon; int n_lastMon;/*-自定义函数-*/ void checkDate(); int isLeapyear(int year); int getWeek(int year,int month,int day); void printSpace(int n); void printSaparator(); void printUsage(); void printWeek(); void printWeek2(int week); void showCalendar(int year,int month,int day

16、); void getKeyValue();welcome() int i, graphdriver,graphmode,size,page; char s30; graphdriver=DETECT; initgraph(cleardevice(); setbkcolor(BLUE);setviewport(40,40,600,440,1); setfillstyle(1,2); setcolor(YELLOW); rectangle(1,1,560,400); floodfill(50,50,14); rectangle(20,20,540,380); setfillstyle(1,13);/* 开图视口 */ /* 用绿色填画出的矩形框 */floodfill(2l,300,14); setcolor(BLACK); settextstyle(1,0,6);/* 用淡洋红色填画出的矩形框 */ /* 设要显示字符

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

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号