C语言课程设计报告万年历.doc
《C语言课程设计报告万年历.doc》由会员分享,可在线阅读,更多相关《C语言课程设计报告万年历.doc(46页珍藏版)》请在咨信网上搜索。
1、 . C语言课程设计报告题 目: 万年历46 / 46一 功能描述万年历能实现一些功能,主要包括以下的几点.(1) 日历显示功能.该日历能根据系统日期进行初始化,如果没有任何的输入,则会显示系统日期所在月份的日历,并能突出显示当前日期.(2) 日期查询闰年判断功能。输入日期进行查询,查询后将显示查询日期所在月份的月日,并突出显示查询日期。此外,还将显示查询日期所在年份是否是闰年。(3) 支持键盘操作。支持键盘操作,可以通过键盘操作调整年份月份和日期,并显示调整后的日期。还可以通过键盘操作复位到系统所在日期等。(4) 参数检查功能。程序还设置有参数检查功能,即对输出的日期进行合法性检查。如果年份
2、月份或者田鼠不合法,查询将被拒绝,并显示提示信息。二 总体设计1.功能模块图本系统包括4个模块,分别是功能控制模块打印输出模块日历显示模块和键值获取模块,如图12.1所示。 功能控制模块打印输出模块日历显示模块键值获取模块万年历系统图12.1 系统模块图1. 功能控制模块。该模块用于实现日期有效性检查判断是否是闰年和返回指定日期对应的日期。2. 打印输出模块。该模块主要是进行输出显示,包括打印指定个数的空格打印分隔线打印用户使用手册打印当前日期对应的星期以与打印指定的星期。3. 日历显示模块。该模块是系统的核心模块,是用来显示指定日期所在月份的月历。4. 键值获取模块。该模块接受键盘操作,获取
3、键值,来进行日期调整,并调用日历显示模块中的函数来显示调整后的日历。2 日历显示流程图历显示是系统的核心模块,它控制着日历的生成和显示。其实现流程如图12.2所示。程序输入的是包含年月日的日期,输出month所在月份的月历,并突出显示day所在的日期和year是否是闰年的标识。程序首先根据判断year其是否是闰年,如果是则需要将该年2月份的天数设置为29天,接着判断day是否超过month所在的月份的最大天数,如果超过则显示系统日期所在的月历。然后进行星期输出的判断,如果输出的是该月的第一个星期,则判断该星期中还有几天在本月(如,该月1号是星期五,则表示该月第一个星期中只有两天在本月,星期一到
4、星期四在上月,则星期一到星期四在本月就不输出,仅有空格表示),输出完第一周后,接着输出第二到第五(或者六)周,每周7天。在输出过程中,如果遇到了day所在的日期,则突出显示。3键值获取流程图键值获取实现的是从键盘调整日期并显示调整后的日历。系统首先 判断从键盘输入的 值,如果是右移键,表示增加月份。如果 左移键,表示减少月份。如果上移键,表示增加年份。如果下移键表示减少年份。如果上翻页键表示减少日期。如果是下翻页键表示增加日期。如果Q/q键表示查询日期,此时将输出提示信息,提示用户输入查询日期。在用户输入查询日期后,系统将调用日期检查函数对输入日期的 合法性进行检测,如果输入日期不合格,则提示
5、错误信息并显示当前系统日期所在月的 月历;如果是 空格键表示重置,显示当前系统日期所在月的 月历;如果是Esc键表示退出系统,按此键后,系统将询问用户是否确定退出,在得到确定回答(用户输入Y/y)后将退出系统。三 数据结构设计本程序没有自定义结构体,在此仅讲述定义的全局变量。Struct data sysTime:系统结构体,用于存储系统日期。该结构体有3个成员,分别是da_year、da_mon和da_day,表示年、月和日。Int currentYear:表示当前年份。Int currentMonth:表示当前月份。Int currentDay:表示当前日期。Int n_currentMo
6、n:表示当前月的天数。Int n_lastMon:表示上一个月的 天数。12.3.3函数功能描述1)checkDate()函数原型:void checkDate()checkDate()函数用于检查输入日期的合法性,包括检查输入日期中的年、月、日部分。对于年,检查其是否是负数或者是0;对于月,检查其是否是围112中的值;对于日,检查其是否是围131中的值。如果有一个部分不合法,则程序提示用户。2)isLeapyear()函数原型:isLeapyear()isLeapyear()函数用于判断指定年份是否是闰年。参数year为待判断的年份。3)getWeek()函数原型:int getWeek(i
7、nt year,int month,int day)getWeek()函数用于计算并返回给定日期对应的星期。其中参数year、month和day都为整型,分别表示输入的年、月、日。4)printSpace()函数原型:void printSpace(int n)printSpace()函数用于输出指定个数的空格。其中整型参数n表示需要输出的空格的个数。5)printSeparator()函数原型:void printSpace()printSpace()函数用于输出分隔线。将输出的界面美化,使得界面结构分明。分隔线用若干个“=”表示。6)printUsage()函数原型:void printS
8、pace()printSpace()函数用于在指定位置输出用户使用手册。输出位置在函数中已经设定。7)printWeek()函数原型:void printWeek()printWeek()函数用于输出当前日期对应的星期,即由currentYear、currentMonth和currentDay确定的日期对应的星期。该函数首先调用printWeek()函数返回当前日期对应的星期。8)printWeek2()函数原型:void printWeek2(int week)printWeek2()函数用于根据指定值输出星期。参数week是一个整型变量,其值可取0到6,分别表示星期一到星期日。9)show
9、Calendar()函数原型:void showCalendar(int year,int month,int day)showCalendar()函数用于显示日历。参数year、month和day分别表示年、月和日。该函数显示year所在年是否是闰年,显示month所在的月历,突出显示day所在日的日期。10)getKeyValue()函数原型:void getKeyValue()getKeyValue()函数用于获取键盘的输入。根据键盘的输入(上下移键、左右移键、上下翻页键Q/q键)调整当前日期,并显示当前所在月的月历等。四 程序实现 源码分析 1. 程序预处理 程序预处理包括头文件的加载
10、、常量的定义和全局变量的定义./*加载头文件*/#include#include#include#include/*定义常量*/*左移键*/#define LEFT 04b00/*右移键*/#define RIGHT 04d00/*下移键*/#define DOWN 05000/*Esc键*/#define ESC 0011b/*定义全局变量*/Struct data systime;int currentyear;/*自定义函数*/Void checkDate();int isLeapyear(int year);Void getKeyValue();2.功能控制模块功能控制模块包括日期合法
11、性的检查功能、闰年判断功能和星期计能,分别由函数checkDate()、isLeapyear()和etWeek()实现。(1) void checkDate(),检查日期合法性。Void checkDate()/*如果给定的日期中年份部分为负数或者0*/If( rrentYearamonth)Printf(“The number of this months day is %d atmost!n”,amonth);Getchar();Gerchar();/*以当前系统时间重新赋植*/year=systime.da_year;month=systime.da_mon;day=systime.da
12、.day;currentyear= systime.da_year;currentmonth= systime.da_mon;currentday= systime.da.day;/*当前月的天数*/n_currentmon=amonth;/*上一月的天数*/n_lastmon=amonth-1;/*根据给定的日期,获取给定月份1号的星期*/week=daylastmon=getweek(year,month,1);/*输出月份提示,1-12分别表示1月到12月*/Switch (month)case1:cprintf(“January 1”);Break;Case2:cprintf(“Feb
13、ruary 2”);Break;Case3:cprintf(“march 3”);Break;Case4:cprintf(“April 4”);Break;Case5:cprintf(“May 5”);Break;Case6:cprintf(“June 6”);Break;Case7:cprintf(“July 7);Break;Case8:cprintf(“August 8”);Break;Case9:cprintf(“September 9”);Break;Case10:cprintf(“October 10”);Break;case11:cprintf(“November 11”);Br
14、eak;case12:cprintf(“December 12”);Break;Textcolor(7);printf(“nn”);textcolor(13)Printf(“Sun,Mon,nn”);Textcolor(7)Printf(“nn”);/*因为一 个月中最多跨度6个星期,所以循环从0到5*/For(i=0;i6;i+)/*如果是该月的第一个星期*/if(i=0)/*第一个星期中还要7天本月,有7天在上个月,所以输出dayleatMon*4个空格,每个空格在日历中占用4 个空格*/printSpace(dayLastMon*4);/*剩余在本月的第一个星期中的天数为*/for(j=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 报告 万年历
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。