




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
13万年历系统题目:万年历系统姓名:黄炼军学号:20070810505学院:计算机与通信学院专业:计算机科学与技术0705班指导老师:何英完成时间:2009年11月10日一、 问题描述 模仿Windwos的日历. 1) 日历显示功能。能根据系统日期进行初始化,如果没有任何输入,则显示系统日期所在月份的月历。2) 日历查询、闰年判断功能。输入日期进行查询,显示查询日期所在月份的月历,还将显示所在年份是否为闰年。3) 参数检查功能。如果输入日期不合法,查询将被拒绝,并显示提示信息。4) 选做:通过键盘操作(如:光标上、下、左、右移动键,pageup、pagedown键)调整年份、月份和日期,并显示调整后的日期及月历。二、 问题分析对于要求1:难点在于判断星期,但根据蔡勒公式,可以很容易地有年月日推断出星期:nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;w=nDay%7;其中year:要查询的年份nday:从该年的一月一日起到该天的天数w:得出的星期数,w=0表示星期天。在打印月历时,只要知道第一天的星期,就可以依次输入后面的日期,通过定长度输出日期,在遇到某天时星期六时,就换行输出,因此可以按照月历的格式输出。对于初始输入当前月历,可以通过中的time 和localtime函数取出系统时间进行初始化。time_t timer;struct tm* gmt;time(&timer);gmt=localtime(&timer);gmt就是一个时间结构体,可以从中取出年月日。对于要求2:闰年的判断,能被4整除但不能被100整除,或者能被400整除的年份为闰年,否则为平年。日期的查询,就是直接打印改天所在月份的月历。对于要求3:判断日期是否合法,可以先判断年月日是否有小于0的值,月和日是否有超出最大值12和31 ,如果通过此判断合法,再判断是否时闰年,如果时闰年,则判断二月份是否满足要求,闰年二月份不能超过29天,平年二月份不能超过28天。在查询过程中,如果发现输入不合法或者不满足输入要求,则要求重新输入。对于选作要求:通过两个getch();捕获键盘的输入,将后一个getch()的返回值付给整型或字符型k,k为相应键的ascii值,判断ascii值,就可以知道时哪个键的输入。若捕获到某键的输入,则设置相应的年或月或日的值,再进行刷性输出,就可以实现日期的调整。三、 总体设计功能模块月历显示日期查询日期判断日期调整闰年判断流程图程序进入显示当前时间1、日期显示2、日期查询3、日期调整4、帮助文件5、退出程序1、日期显示1、日期显示2、日期查询3、日期调整4、帮助文件5、退出程序四、 详细设计主要函数:int runYear(int year);该函数判断某年是否是闰年,参数year表示要判断的年份,返回值1表示该年为闰年,0表示该年为平年。struct tm* getDay();该函数用以取得系统的时间。该函数没有参数,返回值类型为struct tm*,是一个包含时间的结构体。int dayExame(int year,int month,int day);该函数用以判断输入的年份是否合法,参数为要判断的年月日,返回值为1表示该日期合法,为0表示不合法。int getwDay(int year,int month,int day);该函数用以根据一个日期推断星期,参数为要判断的年月日。返回值为整型,123456分别表示星期一到星期六,0表示星期天。void setDay(int &year,int &month,int &day);该函数调整当前日期。参数为引用类型,分别为当前日期的年月日,没有返回值。void checkCalender();该函数用以显示要查询的日期的月历,无参数和返回值,。void inline backMenu();该函数为内联函数,用以实现完成某项功能后按任意字符键返回主菜单,无参数和返回值, void mainMenu(int &year,int &month,int &day);该函数参数为系统日期,无返回值,用户在该函数执行时可以选择功能。五、 调试与测试1、 进入程序后显示2、 按任意字符键返回主菜单3、 进入主菜单后,按1,显示当前时间4、 在主菜单界面按2,进行日历的查询,并经行日期的合法性判断和闰年的判断。例1、 输入 2009 11 6,由于输入合法,会显示月历例2、 输入2009 11 31,由于输入不合法,会进行报错,要求重新输入此情况下,当输入正确的日期后,就可以显示月历,然后可以返回主菜单。5、 在主菜单输入3,进入日期调整界面,可以通过方向键以及PageUp和PageDown进行日期的调整按向上键后出现如下结果6、 在主菜单中输入4,进入帮助界面7、 在主界面中输入5,程序退出六、 程序源代码#include#include#include#include#include #define KEYNUMUp 0x48#define KEYNUMDown 0x50 #define KEYNUMLeft 0x4b #define KEYNUMRight 0x4d#define KEYNUMPageUp 0x49 #define KEYNUMPageDown 0x51 int year,month,day;/全局变量记录时间int daysOfMonth212=31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31, 30,31;int runYear(int year)/判断是否是闰年int flag=0;if(year%400=0|(year%4=0&year%100!=0)flag=1;return flag;struct tm* getDay()/从系统取得当前时间time_t timer;struct tm* gmt;time(&timer);gmt=localtime(&timer);return gmt;int dayExame(int year,int month,int day)/检查日期是否正确if(year0|month12|day31)return 0;switch(month)case 1:case 3:case 5:case 7:case 8:case 10:case 12:if(day31)return 0;break;case 4:case 6:case 9:case 11:if(day30)return 0;break;default:if(runYear(year)&day29)return 0;else if(runYear(year)=0&day28)return 0;return 1;int getwDay(int year,int month,int day)/取得星期int nday=0,nDay,i,w;for(i=0;imonth-1;i+)nday+=daysOfMonthrunYear(year)i;nday+=day;nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;w=nDay%7;return w;void printCalender(int year,int month,int day);void setDay(int &year,int &month,int &day)/调节日期printf(%c:上一年 %c:下一年n,24,25);printf(%c:上个月 %c:下个月n,27,26);printf(PageUp:昨天 PageDown:明天n);printf(其他:返回主菜单n);char k;getch();k=getch();switch(k)/通过方向键和PageUp、PageDown键来调整日期case KEYNUMUp:year-;if(dayExame(year,month,day)=0)year+; printf(%c,7);/检查日期的合法性,/若错误,保持日期不变,并警告system(cls);printCalender(year,month,day);setDay(year,month,day);break;case KEYNUMDown:year+;if(dayExame(year,month,day)=0)year-;printf(%c,7);system(cls);printCalender(year,month,day);setDay(year,month,day);break;case KEYNUMLeft:month-;if(dayExame(year,month,day)=0)month+;printf(%c,7);system(cls);printCalender(year,month,day);setDay(year,month,day);break;case KEYNUMRight:month+;if(dayExame(year,month,day)=0)month-;printf(%c,7);system(cls);printCalender(year,month,day);setDay(year,month,day);break;case KEYNUMPageUp:day-;if(dayExame(year,month,day)=0)day+;printf(%c,7);system(cls);printCalender(year,month,day);setDay(year,month,day);break;case KEYNUMPageDown:day+;if(dayExame(year,month,day)=0)day-;printf(%c,7);system(cls);printCalender(year,month,day);setDay(year,month,day);break;default:;void printCalender(int year,int month,int day)/打印月历int i;char wday74=Sun,Mon,Tue,Wed,Thu,Fri,Sat;printf( %d年%d月%d日n,year,month,day);printf(*n);for(i=0;i7;i+)printf(%5s,wdayi);printf(n);int w;int nowDay=1;w=getwDay(year,month,nowDay);/找到第一天的星期int n;n=daysOfMonthrunYear(year)month-1;switch(w)/放置第一天case 0:printf(%5d,nowDay);break;case 1:printf(%10d,nowDay);break;case 2:printf(%15d,nowDay);break;case 3:printf(%20d,nowDay);break;case 4:printf(%25d,nowDay);break;case 5:printf(%30d,nowDay);break;default:printf(%35dn,nowDay);nowDay+;for(i=1;i2)f=1;while(f=1);switch(*menu)case 1:system(cls);/清屏printCalender(year,month,day);backMenu();/实现任意键返回主菜单mainMenu(year,month,day);break;case 2:system(cls);checkCalender();backMenu();mainMenu(year,month,day);break;case 3:system(cls);printCalender(year,month,day);setDay(year,month,day);printf(请按任意字符键返回主菜单:);getch();system(cls);mainMenu(year,month,day);break;case 4:system(cls);printf(在主菜单中输入相应的数字就可以完成以下功能:nn);printf(* 1、显示今天所在月的月份nn);printf(* 2、输入日期,判断该年是否是闰年,并显示所在月份的月历nn);printf(* 3、用%c %c %c %c PageUp PageDown 进行日期的调整nn,24,25,27,26);printf(* 4、显示功能及操作方法nn);printf(* 5、退出程序nn);backMenu();mainMenu(year,month,day);break;case 5:system(cls);printf(程序已退出!n);exit(0);default:printf(%c输入错误!n,7);flag=1;while(flag);void main()struct tm *gmt=getDay();year=gmt-tm_year+1900;month=gmt-tm_mon+1;day=gmt-tm_mday;printCalender(year,month,day);/用系统时间进行初始化,打印当前
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高校餐饮服务合同模板(3篇)
- 目标练:去括号法则的应用
- qcc知识考试题及答案
- 教育机构劳动合同中教师薪资及补贴发放协议
- 2025公务员温州面试题及答案
- 央美考研专业试题及答案
- 计算机专业线上试题及答案
- 2025至2030中国园林绿化产品行业运营态势与投资前景调查研究报告
- 小班下学期副班工作总结
- 初中现代诗歌教学课件
- 留疆战士考试题库
- FZ/T 13002-2014棉本色帆布
- 视频监控解码器dec6108用户手册
- CA-2100E(新机)可燃气体报警控制器使用说明书
- 2022环保检测作业指导书(HJ1237-2021机动车排放定期检验规范)
- 水泵技术规格书说明资料
- 苏科版三年级上册劳动第四课《橡皮泥塑》课件(定稿)
- 法理学-(第五版)完整版ppt全套教学教程课件(最新)
- 《峨日朵雪峰之侧》教案
- 火灾自动报警系统PPT课件
- 高压氧质控标准
评论
0/150
提交评论