C-课程设计说明书-万年历(共24页).doc
《C-课程设计说明书-万年历(共24页).doc》由会员分享,可在线阅读,更多相关《C-课程设计说明书-万年历(共24页).doc(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上数学与计算机学院课程设计说明书课 程 名 称: 计算机科学与技术程序设计语言-课程设计 课 程 代 码: 题 目: 万年历系统 年级/专业/班: 09级软件工程1班 学 生 姓 名: 易晓 学 号: 117 开 始 时 间: 2010 年 12 月 24 日完 成 时 间: 2011 年 01 月 06 日课程设计成绩:学习态度及平时成绩(30)技术水平与实际能力(20)创新(5)说明书撰写质量(45)总 分(100)指导教师签名: 年 月 日目 录 专心-专注-专业1 引 言 1.1 问题的提出万年历是我国古代传说中最古老的一部太阳历。为纪念历法编撰者万年功绩,便将
2、这部历法命名为“万年历”。而现在所使用的万年历,实际上就是记录一定时间范围内(比如100年或更多)的具体的日期的年历,方便有需要的人查询使用。怎样在电脑上显示万年历以便查询,是一个很普遍的需求。附: 万年历算星期几:只要随便说出公元几几年几月几日就可以马上算出是星期几。 只要计算出日的代码,月份代码,年份代码。三个加起来除以七的余数就是星期几,(如余数是三,则就是星期三)。 日的代码计算:日的代码最简单,就是它本身,是几号就是几。 月份代码计算:月份代码也很简单,下面有十二个数:6,分别代表一至十二月份每个月的代码。比如,九月份的代码为6。(据来宾介绍,他是用逆推的方法,计算出这12个月份代码
3、的,即知道是星期几,反过来推算月份代码。 年份代码计算:年份代码相对比较复杂,先记住2000年对应的年份代码是4,这是基础代码,牢记即可。假如大于2000年,比如2010年,则对应的年份代码是(20102000)4=22,再用基数代码4减去2倍的商加上余数再加1。即422+2+1=3,则2010年对应的年份代码为3。如果没有余数,即润年,则余数后面的1也不用加。比如2008年,对应的年份代码为0。1.2国内外研究的现状 万年历已经在我们生活中随处可见,基本功能的万年历很早就出现了,现在已经进入到多元化的设计时代了。现在的万年历不单单可以查询日历还带有许多的拓展功能,如黄历,星座,节日等等。1.
4、3任务与分析 要求:模仿现实生活中的挂历。当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几)。当系统日期变到下一月时,系统自动翻页到下一月分析:1:难点在于判断星期,但根据蔡勒公式,可以很容易地有年月日推断出星期:nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;w=nDay%7;其中year:要查询的年份nday:从该年的一月一日起到该天的天数w:得出的星期数,w=0表示星期天。在打印月历时,只要知道第一天的星期,就可以依次输入后面的日期,通过定长度输出日期,在遇到某天时星期六时,就换行输出,因此可以按照月历的
5、格式输出。对于初始输入当前月历,可以通过中的time 和localtime函数取出系统时间进行初始化。time_t timer;struct tm* gmt;time(&timer);gmt=localtime(&timer);gmt就是一个时间结构体,可以从中取出年月日。2:闰年的判断,能被4整除但不能被100整除,或者能被400整除的年份为闰年,否则为平年。日期的查询,就是直接打印改天所在月份的月历。3:判断日期是否合法,可以先判断年月日是否有小于0的值,月和日是否有超出最大值12和31 ,如果通过此判断合法,再判断是否时闰年,如果时闰年,则判断二月份是否满足要求,闰年二月份不能超过29天
6、,平年二月份不能超过28天。在查询过程中,如果发现输入不合法或者不满足输入要求,则要求重新输入。2 程序的主要功能查询万年历2.1显示功能能够显示以系统当前时间为准的日历。2.2 自动翻页功能能够随系统时间改变而自动翻页到下一页。2.3查询功能能够查询任意年份和月份的万年历。2.4帮助功能提供程序使用的说明。2.5退出功能随时退出程序。3 程序运行平台VC+6.0。具体操作如下:新建行编辑器工程,然后按照要求编写代码,再编译,链接,执行等。要是出现报错,就依次查找错误行,分析报错原因并修改。月历显示日期查询日期判断日期打印闰年判断2、日期查询4、程序结束3、帮助文件1、日期显示1、日期显示2、
7、日期查询3、帮助文件4、退出程序进入程序显示日历4 总体设计图4.1流程图图4.2 功能模块 5 程序代码明细#include#include#include#include 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 fl
8、ag;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
9、 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=nD
10、ay%7;return w;void printCalender(int year,int month,int day)/打印月历int i; int w; int n;int nowDay=1;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); w=getwDay(year,month,nowDay);/找到第一天的星期n=daysOfMonthrunYear(year)month-1;s
11、witch(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);prswitch(*menu)case 1:syst
12、em(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);printf(在主菜单中输入相应的数字就可以完成以下功能:nn);printf(* 1、显示今天所在月的月份nn);printf(* 2、输入日期,判断该年是否是闰年,并显示所在月份的月历nn);printf(* 3、显
13、示功能及操作方法nn);printf(* 4、退出程序nn);backMenu();mainMenu(year,month,day);break;case 4: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);/用系统时间进行初始化,打印当前
14、月历backMenu();mainMenu(year,month,day);6 模块分析 6.1 系统日期模块struct tm* getDay()/从系统取得当前时间time_t timer;struct tm* gmt;time(&timer);gmt=localtime(&timer);return gmt;6.2 打印模块void printCalender(int year,int month,int day)/打印月历int i; int w; int n;int nowDay=1;char wday74=Sun,Mon,Tue,Wed,Thu,Fri,Sat;printf( %d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 说明书 万年历 24
限制150内