万年历的设计Word格式.docx
- 文档编号:22815249
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:29
- 大小:132.56KB
万年历的设计Word格式.docx
《万年历的设计Word格式.docx》由会员分享,可在线阅读,更多相关《万年历的设计Word格式.docx(29页珍藏版)》请在冰豆网上搜索。
//一个月输出
voidcount_data();
//计算日期
voidnow_time_show();
//显示当前时间
voidday_info();
//具体日期信息
private:
intleapyear(intyear);
//判断与2012之间的闰年数
booljudge(intyear);
//判断闰年
voidfmprint3(inta,intb,intc,intd,inte,intf);
//三个月输出调用函数
voidfmprint2(inta,intb,intc,intd);
//两个月输出调用函数
voidinitalize(intyear);
//初始化a,b数组
voidshiyong_cal_show();
boolif_continue();
//是否继续
inta[12];
//每个月1号前空格数
intb[12];
//月分天数
};
2.定义类的函数,包含程序中的所有重要算法。
运用域运算符“:
:
”定义,将程序中的重要算法作为函数体,使布局合理,易于维护。
a.判断某天是星期几:
t=((year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+1)%7;
b.判断该年是否为闰年:
(year%100!
=0&
&
year%4==0)||year%400==0;
c.通过计算该年与2012年间闰年天数计算由于闰年引起的相差天数:
if(year>
=2012)
{
year=year-2012;
return(year/4-(year+12)/100+(year+12)/400+1);
}
else
year=2012-year;
return(year/4-(year-12)/100+(year-12)/400);
4年的个数减去100年的个数在加上400年的个数就是其中闰年的个数。
3.主函数中用case语句调用类的函数
定义switch(i),从主菜单中输入i,进行函数调用,实现功能的选择。
4.调用头文件<
ctime>
中与日期和时间相关的数据结构
使用<
中的localtime函数获得当前时间,并利用指针实现当前时间的正确输出。
time_tnowtime;
nowtime=time(NULL);
structtm*t;
t=localtime(&
nowtime);
三.源程序代码
#include<
iostream>
iomanip>
string>
io.h>
direct.h>
fstream>
sstream>
usingnamespacestd;
//----------------------------------
boolCalendar:
:
judge(intyear)//判断闰年
return(year%100!
}//----------------------------------
voidCalendar:
display()//主页面显示
{cout<
<
"
═─═─═─═─═─═"
endl;
cout<
☆☆"
欢迎进入万年历查询系统"
endl<
\t\t*********************************************"
\t\t**\t\t1、实用日历\t\t**"
\t\t**\t\t2、计算日期\t\t**"
\t\t**\t\t3、当前时间\t\t**"
\t\t**\t\t4、具体日期信息\t\t**"
\t\t**\t\t0、退出系统\t\t**"
shiyong_cal_show()//实用日历主页
\t\t**\t\t1、逐行输出\t\t**"
\t\t**\t\t2、每行两个月输出\t**"
\t\t**\t\t3、每行三个月输出\t**"
initalize(intyear)//初始化a,b数组
if(judge(year))
b[1]=29;
if(!
judge(year))
b[1]=28;
inti1,j1;
i1=leapyear(year);
if(year>
2012)
j1=year-2012;
j1=j1-i1;
a[0]=(6+366*i1+j1*365)%7;
if(year==2012)
a[0]=6;
if(year<
j1=2012-year;
a[0]=6-(365*j1+366*i1)%7;
a[1]=(b[0]+a[0])%7;
a[2]=(b[1]+a[1])%7;
a[3]=(b[2]+a[2])%7;
a[4]=(b[3]+a[3])%7;
a[5]=(b[4]+a[4])%7;
a[6]=(b[5]+a[5])%7;
a[7]=(b[6]+a[6])%7;
a[8]=(b[7]+a[7])%7;
a[9]=(b[8]+a[8])%7;
a[10]=(b[9]+a[9])%7;
a[11]=(b[10]+a[10])%7;
shiyong_cal()//实用日历
do
shiyong_cal_show();
cout<
\t请选择操作:
;
inti;
while(cin>
>
i)
{
if(!
(i==1||i==2||i==3))
cout<
输入有误,请重新输入:
else
break;
}
\t请输入年分:
intyear;
year)
if(year<
1||year>
10000)
输入年分有误,请重新输入:
switch(i)
case1:
one_mon_ptint(year);
break;
case2:
twe_mon_print(year);
case3:
thr_mon_print(year);
}while(if_continue());
thr_mon_print(intyear)//三个月输出
initalize(year);
for(inti=0;
i<
12;
i+=3)
"
i+1<
月份\t\t\t"
i+2<
月份\t\t\t"
i+3<
月份"
一二三四五六日一二三四五六日一二三四五六日"
fmprint3(a[i],a[i+1],a[i+2],b[i],b[i+1],b[i+2]);
twe_mon_print(intyear)//两个月输出
i+=2)
一二三四五六日一二三四五六日"
fmprint2(a[i],a[i+1],b[i],b[i+1]);
one_mon_ptint(intyear)//一个月输出
12;
i++)
一二三四五六日"
if(a[i]!
=0)
cout<
setfill('
'
)<
setw(a[i]*3)<
else
intj;
for(j=1;
j<
=7-a[i];
j++)
setw(3)<
j;
for(intk=1;
k<
=5;
k++)
for(intl=1;
l<
=7;
l++)
{
if(j>
b[i])
cout<
else
j++;
}
fmprint3(inta,intb,intc,intd,inte,intf)//三个月输出调用函数a,b,c为每个月空格数,d,e,f为月份天数
intk,i[3],j;
intg[3]={a,b,c};
for(j=0;
j<
3;
j++)
if(g[j]!
setw(g[j]*3)<
for(i[j]=1;
i[j]<
=7-g[j];
i[j]++)
i[j];
for(intl=1;
l<
l++)
for(intj=0;
for(k=1;
k<
k++)
if(j==0&
i[0]>
d)
elseif(j==1&
i[1]>
e)
elseif(j==2&
i[2]>
f)
i[j]++;
fmprint2(inta,intb,intc,intd)//两个月输出调用函数
intk,i[2],j;
intg[2]={a,b};
2;
c)
intCalendar:
leapyear(intyear)//判断与2012之间的闰年数
count_data()//计算日期
inty1,y2,m1,m2,d1,d2;
请输入开始日期,按空格空开(如:
201268):
do
cin>
y1>
m1>
d1;
initalize(y1);
if(y1<
1||y1>
10000||m1<
1||m1>
12||d1<
1||d1>
b[m1-1])
输入日期不在计算范围之内,请重新输入:
}while
(1);
请输入终止日期,按空格空开(如:
y2>
m2>
d2;
initalize(y2);
if(y2<
1||y2>
10000||m2<
1||m2>
12||d2<
1||d2>
b[m2-1])
{cout<
continue;
}
elseif(y1>
y2||(y1==y2&
m1>
m2)||(y1==y2&
m1==m2&
d1>
d2))
输入错误,终止日期应在开始日期之后,请重新输入:
else
inti1,i2,leap1,leap2,mon1=0,mon2=0;
y1--;
y2--;
leap1=y1/4-y1/100+y1+12/400;
leap2=y2/4-y2/100+y2+12/400;
for(inti=0;
m1-1;
mon1+=b[i];
for(i=0;
m2-1;
mon2+=b[i];
i1=(y1-leap1)*365+leap1*366+mon1+d1;
i2=(y2-leap2)*365+leap2*366+mon2+d2;
intx=0;
if(judge(y1+1)&
2)
x=1;
开始日期到终止日期之间有"
i2-i1-y2+y1-x<
天"
now_time_show()//显示当前时间
time_tnowtime;
\t当前时间为:
t->
tm_year+1900<
年"
tm_mon+1<
月"
tm_mday<
日"
<
0'
setw
(2)<
tm_hour<
tm_min<
day_info()//具体日期信息
inty,m,d;
请输入要查询的日期,按空格空开(如:
y>
m>
d;
initalize(y);
if(y<
1||y>
10000||m<
1||m>
12||d<
1||d>
b[m-1])
输入日期有误,请重新输入:
这一年:
if(judge(y))
\t闰年"
\t非闰年"
intk,j;
if(y>
k=(y-2012)%10;
j=(y-2012)%12;
k=10-(2012-y)%10;
if(k==10)
k=0;
j=12-(2012-y)%12;
if(j==12)
j
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 万年历 设计