万年历及日期查询工具Word下载.docx
- 文档编号:22151949
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:39
- 大小:254.50KB
万年历及日期查询工具Word下载.docx
《万年历及日期查询工具Word下载.docx》由会员分享,可在线阅读,更多相关《万年历及日期查询工具Word下载.docx(39页珍藏版)》请在冰豆网上搜索。
2.具体功能及要求:
1).显示公元后任何年份的日历,日历以月份顺序排列,每月以星期顺序排列,类似于一般挂历上的格式。
2).显示公元后任何年份任何月份的日历,以星期顺序排列,类似于一般挂历上的格式。
3).可以查询某天的对应星期,查询当前时间。
4).可以计算指定的两日期间的时间(天数)差。
5).可以计算指定日期后,前后某天数对应的日期。
6).可以对年日历和月日历进行保存。
3.最终程序样式
4.运行环境
(1)WindowsXP/7/8系统
(2)MicrosoftVisualC++6.0编译环境
5.开发工具
C语言
6.实现方法
(1)定义一个Date类,使包含所有数据成员及函数,如数据成员年、月、日、星期,成员函数年份平润年的判断函数JudgeYear(inty),某日期到公元1年1月1日实有天数的计算函数GetYearDays(inty)等12个主要函数及主要函数中需要用到的12个辅助函数;
(2)在主函数中通过选择不同的功能,执行不同的模块,完成相应功能;
(3)画出所有模块的流程图;
(4)编写代码;
(5)程序分析与调试。
2设计思想与程序构架
㈠.程序类中主要成员函数的定义方式及解释(原代码详见附录>
1)
1.先分析一个实验所要完成的功能,发现中间需要有平润年的判断;
任意年份的实有天数判断;
任意月的实有天数判断;
任意年到1年1月1日的实有天数;
由到1年1月1日的实有天数计算对应日期;
判断任意日期对应的星期;
显示年日历,保存年日历;
显示月日历,保存月日历等。
2.根据分析定义一Date类,拥有Year,Month,Day,Week四个私有整形数据成员,然后根据分析分别声明相应类型的成员函数,又因为数据成员为私有成员,若要调用或修改只能调用函数,所以另直接定义八个成员函数以实现这部分获取、修改功能。
最后还要定义构造函数以实现对数据成员的快速赋值,包括没有参数,年月日皆为1,只一个参数对年赋值,月日为1,两个参数对年月赋值,日为1,三个参数对年月日赋值,星期直接通过函数计算可得。
成员函数累计24个,基本如下:
classDate//定义日期类
{
private:
intYear;
intMonth;
intDay;
intWeek;
public:
Date(){Year=1;
Month=1;
Day=1;
}//构造函数,经初始化数据成员
Date(inty){Year=y;
}
Date(inty,intm){Year=y;
Month=m;
Date(inty,intm,intd){Year=y;
Day=d;
voidSetYear(inty){Year=y;
}//设置年份
voidSetMonth(intm){Month=m;
}//设置月份
voidSetDay(intd){Day=d;
}//设置日份
voidSetWeek(intw){Week=w;
}//设置星期
intGetYear()const{returnYear;
}//获取年份
intGetMonth()const{returnMonth;
}//获取月份
intGetDay()const{returnDay;
}//获取日份
intGetWeek()const{returnWeek;
staticboolJudgeYear(inty)//判断某年是否为润年(平年)
{
if(y%4==0&
&
y%100!
=0||y%400==0)
returntrue;
else
returnfalse;
}
intGetMonthDays(intm);
//判断某年某月实有天数
intGetYearDays(inty);
//判断某年实有天数
intDateToNum();
//判断某年到1年1月1日实有天数
DateNumToDate(int);
//由1年1月1日至指定日期实有天数返回日期
voidOutMonth(intr);
//月份输出
voidOutWeek(intr);
//星期输出
voidAllShow();
//输出某年全年日历
voidWAllShow();
//文件输出某年全年日历
voidMonthShow();
//输出某年某月日历
voidWMonthShow();
voidWeekShow();
//输出某年某月某日星期日历
};
3.定义平润年的判断,只需要获取指定的年份,能过“能被4整除不能被100整除是润年和能被400整除是润年”判断即可,是润年返回True,否则返回False,直接在类内定义。
staticboolJudgeYear(inty)//判断某年是否为润年(平年)
4.定义任意年份的实有天数判断,只需要判断指定年份是否为润年,是则返回366,否则365。
intDate:
:
GetYearDays(inty)//判断某年实有天数
if(JudgeYear(y))//调用JudgeYear(inty)判断平润年
return366;
else
return365;
5.定义任意月的实有天数判断,需要获取指定的年份与月份,能过判断月份,大月返回31天,小月返回30天,2月还需要通过判断年份是否为润年返回相应值,润年返回29天,平年返回28天。
GetMonthDays(intm)//判断某年某月实有天数
intn;
switch(m)//判断月份
case1:
case3:
case5:
case7:
case8:
case10:
case12:
n=31;
break;
case4:
case6:
case9:
case11:
n=30;
case2:
if(JudgeYear(GetYear()))//调用JudgeYear(inty)判断平润年
n=29;
//是润年返回29年
n=28;
//不是润年返回28年
break;
returnn;
6.定义任意年到1年1月1日的实有天数,定义一个用于存放总天数的n,赋初值为0,通过循环先与指定年份前1年到公元1年所有年份的总天数相加,每次循环都需要调用任意年份的实有天数判断函数获取某年的总天数;
指定年份前x年所有年份总天数相加完成后,再通过循环与指定月份前1月到1月所有月份总天数相加,期间也要计算个个月的总天数;
最后与指定日期的天数相加,返回n的值即可。
DateToNum()//判断某年到1年1月1日实有天数
inty,n=0;
for(y=1;
y<
GetYear();
y++)
n+=GetYearDays(y);
for(intm=1;
m<
GetMonth();
m++)
n+=GetMonthDays(m);
n+=Day;
7.定义由到1年1月1日的实有天数计算对应日期,此过程与定义任意年到1年1月1日的实有天数类似,只不过是一个反向过程。
也需要能过年份天数判断,月份天数判断,判断总天数中最多含有多少年,多少月,最后还剩多少日,以Date类型返回。
DateDate:
NumToDate(intda)//由实有天数返回日期
inty,m,d,rest=da;
for(y=1,rest;
rest>
GetYearDays(y);
rest-=GetYearDays(y);
for(m=1,rest;
GetMonthDays(m);
rest-=GetMonthDays(m);
d=rest;
returnDate(y,m,d);
8.定义判断任意日期对应的星期,此过程只需要计算出指定日期到公元1年1月1日的实有天数,然后除7取余即可,其余数就是对应的星期。
9.定义显示年日历,此函数目的在于输入全年日历。
具体实现如下:
定义4个变量,分别存放指定年份的1月1日到公元1年1月1日的实有天数,可调用函数实现,此年份中某月1号对应的星期,可调用函数计算此年某月1号到公元1年1月1日的实有天数除7取余实现,另两个用于循环。
共有两层循环,第一层循环共计12次,一年只有12个月,第二层循环次数由当前要输出的月份的总天数判断。
第二层循环内又嵌套二个循环,第一个条件为某月1号是星期几则输出几个tab空格,第二层循环用于输出日历,能过输出的日期加上之前的空格数除7余0作为换行条件,以实现以星期布局。
主要部分也就如此,另外日历前后的横线、星期、年月份直接输出,或调用函数输出即可。
此次编写,也把月份的输出重定义了一个函数,由获取一个月份,输出大写月份,由switch语句实现。
voidDate:
AllShow()//输出某年全年日历
intn,morday,wek,j;
morday=DateToNum();
cout<
<
"
"
Year<
年"
endl;
for(n=1;
n<
=12;
n++)
cout<
-------------------------------------------------------------------"
'
\n'
;
OutMonth(n);
星期日星期一星期二星期三星期四星期五星期六"
wek=morday%7;
for(j=1;
j<
=wek;
j++)
cout<
\t'
=GetMonthDays(n);
{
j;
if((wek+j)%7==0)
cout<
morday++;
if(j==GetMonthDays(n))
}
10.定义保存年日历,前面定义了在屏幕上显示的函数,这里和上面差不多,只需要打开或新建一文件,判断文件打开与否,打开了,则把所有输出到屏幕的内容,改为输入到文件即可。
最后关闭文件,提示用户保存成功。
WAllShow()//文件输出某年全年日历
ofstreamoutfile("
年日历.txt"
ios:
trunc);
if(!
outfile){cerr<
Openerror!
exit
(1);
outfile<
outfile<
switch(n)
case1:
outfile<
一月份"
case2:
二月份"
case3:
三月份"
case4:
四月份"
case5:
五月份"
case6:
六月份"
case7:
七月份"
case8:
八月份"
case9:
九月份"
case10:
十月份"
case11:
十一月份"
default:
十二月份"
星期日星期一星期二星期三星期四星期五星期六"
outfile<
outfile<
outfile.close();
保存成功"
11.定义显示月日历,此函数与定义显示年日历函数相似,只是不需要外循环而以,比起定义显示年日历函数相对简单。
能过显示年日历函数略微修改即可。
MonthShow()//输出某年某月日历
intmorday,wek,j;
GetYear()<
GetMonth()<
月"
wek=morday%7;
for(j=1;
=GetMonthDays(GetMonth());
if((wek+j)%7==0)
morday++;
if(j==GetMonthDays(GetMonth()))
12.定义保存月日历,与定义保存年日历相似,通过显示月日历函数修改即可。
WMonthShow()//输出某年某月日历
月日历.txt"
13.考虑到用户输入日期时输入错误日期,再定义一个判断函数,此函数并不是Date类的成员函数,其引用Date类型变量,通过do…while语句判断里面的年月日是否合格,不合格要求用户重新输入,条件为不满足月份不大于12,不小于1,天数不小于1,不大于当年当月的实有天数,合格则不做任何处理。
voidDatejudge(Date&
d)//输入日期判断
intm=d.GetMonth();
intda=d.GetDay();
inty=d.GetYear();
for(;
m>
12||m<
1||da>
d.GetMonthDays(m)||da<
1;
)
对应日期有误,请重新输入:
cin>
>
y>
da;
d.SetYear(y);
d.SetMonth(m);
d.SetDay(da);
y=d.GetYear();
m=d.GetMonth();
da=d.GetDay();
㈡.程序主函数中主要功能的实现方式及解释(代码详见附录>
1.为实现循环,调用do…while语句。
2.提示部分直接在do…while语句内最前面输出即可,如选择几,是什么功能。
-------------------------------------------------------------------\n"
选择1:
查看X年日历\n"
选择2:
查看X年X月日历\n"
选择3:
查看X年X月X日对应星期\n"
选择4:
计算两日期间的天数差\n"
选择5:
计算指定日期后X天的日期\n"
选择6:
查看系统时间\n"
选择7:
清屏并继续\n"
选择8:
退出\n"
3.定义一整形变量jud,并赋初值为可满足do…while语句循环的值,这里为7.
do
……
}while(jud==7);
4.通过if判断jud的值,执行不同的功能,前5个功能都是依靠Date类及里面的函数实现的,这里就不多说了,主要说一下第6个,显示当前系统时间,需要用到<
time.h>
函数库,定义time_t变量now,使用time(&
now)实现给now赋当前系统时间,定义tm型指针*tim=localtime(&
now),然后按指定格式依次输出tim中对应的年月日时分秒。
if(jud==6)
time_tnow;
time(&
now);
tm*tim=localtime(&
当前时间:
tim->
tm_year+1900<
-"
tm_mon+1<
tm_mday<
tm_hour<
tm_min<
<
tm_sec<
jud=7;
continue;
5.当jud=7时,运行continue调出此次循环;
jud=8时,运行exit(0)退出。
if(jud==7)
system("
cls"
);
continue;
if(jud==8)
exit(0);
㈢.各模块实现流程图
㈣.程序主流程图
3软件使用说明书
运行程序后,会出现主菜单,如下图,根据菜单选择相应的功能,每部分功能如下:
1.第一项,用于查询任意指定年份的全年日历。
选择第1项后,输入想要查询的年份,回车确认后,屏幕上会以一星期为周期显示全年日历,在第十二月份显示完毕后,会提示用户是否保存当前所查询的年份日历到文本文档,用户输入y或Y,即可保存,输入其他任意字符则不保存,不输入则不做任何反应。
判断结束,若保存,程序自动将本年份日历保存到程序所在位置,并命名为《年日历.txt》,然后回到主菜单,若不保存,直接返回主菜单。
2.第二项,用于查询任意指定年份与月份的全月日历。
选择第2项后,输入想要查询的年份,月份,年月中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 万年历 日期 查询 工具
![提示](https://static.bdocx.com/images/bang_tan.gif)