文档介绍:数学与计算机学院
课程设计说明书
课程名称: 计算机科学与技术程序设计语言-课程设计
课程代码: 8404091
题目: 万年历系统
年级/专业/班: 09级软件工程1班
学生姓名:
学号:
开始时间: 2010 年 12 月 24 日
完成时间: 2011 年 01 月 06 日
课程设计成绩:
学与实际能力(20)
创新(5)
说明书撰写质量(45)
总分(100)
指导教师签名: 年月日
目录
1 引言 1
问题的提出 1
1
1
2 程序的主要功能 3
3
自动翻页功能 3
3
3
3
3 程序运行平台 4
4 5
5 程序代码明细 6
6 模块分析 11
系统日期模块 11
打印模块 11
12
查询模块 12
菜单模块 void mainMenu(int year,int month,int day)//主菜单 12
关键代码 13
7 系统测试首先进入VC++,,然后进入源程序,接着选择BUILD下的EXECUTE ,也可以不打开工程,。 进入程序 14
8 结论 17
1 引言
问题的提出
万年历是我国古代传说中最古老的一部太阳历。为纪念历法编撰者万年功绩,便将这部历法命名为“万年历”。而现在所使用的万年历,实际上就是记录一定时间范围内(比如100年或更多)的具体的日期的年历,方便有需要的人查询使用。怎样在电脑上显示万年历以便查询,是一个很普遍的需求。
附: 万年历算星期几:只要随便说出公元几几年几月几日就可以马上算出是星期几。
只要计算出日的代码,月份代码,年份代码。三个加起来除以七的余数就是星期几,(如余数是三,则就是星期三)。
日的代码计算:日的代码最简单,就是它本身,是几号就是几。
月份代码计算:月份代码也很简单,下面有十二个数:144725736146,分别代表一至十二月份每个月的代码。比如,九月份的代码为6。(据来宾介绍,他是用逆推的方法,计算出这12个月份代码的,即知道某年某月某日是星期几,反过来推算月份代码。
年份代码计算:年份代码相对比较复杂,先记住2000年对应的年份代码是4,这是基础代码,牢记即可。假如大于2000年,比如2010年,则对应的年份代码是(2010-2000)÷4=2……2,再用基数代码4减去2倍的商加上余数再加1。即4-2×2+2+1=3,则2010年对应的年份代码为3。如果没有余数,即润年,则余数后面的1也不用加。比如2008年,对应的年份代码为0。
万年历已经在我们生活中随处可见,基本功能的万年历很早就出现了,现在已经进入到多元化的设计时代了。现在的万年历不单单可以查询日历还带有许多的拓展功能,如黄历,星座,节日等等。
要求:模仿现实生活中的挂历。
当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几)。
当系统日期变到下一月时,系统自动翻页到下一月
分析:
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 ,如果通过此判断合法,