万年历系统
题目:万年历系统
姓名:黄炼军
学号: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.h>中的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();
c++课程设计报告该函数为内联函数,用以实现完成某项功能后按任意字符键返回主菜单,无参数和返回值,
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<stdio.h>
#include<time.h>
#include<math.h>
#include<windows.h>
#include<conio.h>
#define KEYNUMUp 0x48
#define KEYNUMDown 0x50
#define KEYNUMLeft 0x4b
#define KEYNUMRight 0x4d
#define KEYNUMPageUp 0x49
#define KEYNUMPageDown 0x51
int year,month,day; //全局变量记录时间
int daysOfMonth[2][12]={{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))
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论