万年历的设计.docx

上传人:b****1 文档编号:2707213 上传时间:2023-05-04 格式:DOCX 页数:29 大小:132.56KB
下载 相关 举报
万年历的设计.docx_第1页
第1页 / 共29页
万年历的设计.docx_第2页
第2页 / 共29页
万年历的设计.docx_第3页
第3页 / 共29页
万年历的设计.docx_第4页
第4页 / 共29页
万年历的设计.docx_第5页
第5页 / 共29页
万年历的设计.docx_第6页
第6页 / 共29页
万年历的设计.docx_第7页
第7页 / 共29页
万年历的设计.docx_第8页
第8页 / 共29页
万年历的设计.docx_第9页
第9页 / 共29页
万年历的设计.docx_第10页
第10页 / 共29页
万年历的设计.docx_第11页
第11页 / 共29页
万年历的设计.docx_第12页
第12页 / 共29页
万年历的设计.docx_第13页
第13页 / 共29页
万年历的设计.docx_第14页
第14页 / 共29页
万年历的设计.docx_第15页
第15页 / 共29页
万年历的设计.docx_第16页
第16页 / 共29页
万年历的设计.docx_第17页
第17页 / 共29页
万年历的设计.docx_第18页
第18页 / 共29页
万年历的设计.docx_第19页
第19页 / 共29页
万年历的设计.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

万年历的设计.docx

《万年历的设计.docx》由会员分享,可在线阅读,更多相关《万年历的设计.docx(29页珍藏版)》请在冰点文库上搜索。

万年历的设计.docx

万年历的设计

万年历的设计

一.系统概要

 定义了包含实现系统功能的函数的类——Calendar,用来说明系统结构,对函数进行封装。

在类系统体外使用域运算符定义函数,程序具较强的可读性。

系统包含了大量的文字提醒,便于用户进行人机交互;同时采用了系统主菜单,提高了程序的可操作性。

系统可实现显示一年的日历,计算任意两天间隔天数,查询当前时间和日期具体信息的功能。

二界面参考

  

           

            图1.主界面

       图2.选择年历的三种输出方式

图三.逐行输出的2012年日历

 用 行两月输出

图5.计算天数

 

显示某天是星期几

三设计思路与算法

 

 

1.定义日历的类

将系统函数作为类的公有成员,构成可访问的函数结构。

类的说明部分对数据成员和函数成员进行说明。

私有部分对无需访问部分进行封装和隐藏。

类的定义如下:

classCalendar

{

public:

Calendar(){b[0]=31,b[1]=28,b[2]=31,b[3]=30,b[4]=31,b[5]=30,b[6]=

31,b[7]=31,b[8]=30,b[9]=31,b[10]=30,b[11]=31;}//初始化每月天数

voiddisplay();//主页面显示

voidshiyong_cal();//实用日历主页

voidthr_mon_print(intyear);//三个月输出

voidtwe_mon_print(intyear);//两个月输出

voidone_mon_ptint(intyear);//一个月输出

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.调用头文件中与日期和时间相关的数据结构

使用中的localtime函数获得当前时间,并利用指针实现当前时间的正确输出。

time_tnowtime;

nowtime=time(NULL);

structtm*t;

t=localtime(&nowtime);

三.源程序代码

#include

#include

#include

#include

#include

#include

#include

#include

usingnamespacestd;

classCalendar

{

public:

Calendar(){b[0]=31,b[1]=28,b[2]=31,b[3]=30,b[4]=31,b[5]=30,b[6]=

31,b[7]=31,b[8]=30,b[9]=31,b[10]=30,b[11]=31;}//初始化每月天数

voiddisplay();//主页面显示

voidshiyong_cal();//实用日历主页

voidthr_mon_print(intyear);//三个月输出

voidtwe_mon_print(intyear);//两个月输出

voidone_mon_ptint(intyear);//一个月输出

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];//月分天数

};//----------------------------------

boolCalendar:

:

judge(intyear)//判断闰年

{

return(year%100!

=0&&year%4==0)||year%400==0;

}//----------------------------------

voidCalendar:

:

display()//主页面显示

{cout<<"═─═─═─═─═─═"<

cout<<"☆☆"<

cout<<"欢迎进入万年历查询系统"<

cout<<"☆☆"<

cout<<"═─═─═─═─═─═"<

cout<

cout<

cout<

cout<<"\t\t**\t\t1、实用日历\t\t**"<

cout<<"\t\t**\t\t2、计算日期\t\t**"<

cout<<"\t\t**\t\t3、当前时间\t\t**"<

cout<<"\t\t**\t\t4、具体日期信息\t\t**"<

cout<<"\t\t**\t\t0、退出系统\t\t**"<

cout<<"\t\t*********************************************"<

}//----------------------------------

voidCalendar:

:

shiyong_cal_show()//实用日历主页

{

cout<

cout<<"\t\t**\t\t1、逐行输出\t\t**"<

cout<<"\t\t**\t\t2、每行两个月输出\t**"<

cout<<"\t\t**\t\t3、每行三个月输出\t**"<

cout<<"\t\t*********************************************"<

}//----------------------------------

 

voidCalendar:

:

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<2012)

{

j1=2012-year;

j1=j1-i1;

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;

}//----------------------------------

voidCalendar:

:

shiyong_cal()//实用日历

{

do

{

shiyong_cal_show();

cout<<"\t请选择操作:

";

inti;

while(cin>>i)

{

if(!

(i==1||i==2||i==3))

cout<<"输入有误,请重新输入:

";

else

break;

}

cout<<"\t请输入年分:

";

intyear;

while(cin>>year)

{

if(year<1||year>10000)

cout<<"输入年分有误,请重新输入:

";

else

break;

}

switch(i)

{

case1:

one_mon_ptint(year);break;

case2:

twe_mon_print(year);break;

case3:

thr_mon_print(year);

}

}while(if_continue());

}//----------------------------------

voidCalendar:

:

thr_mon_print(intyear)//三个月输出

{

initalize(year);

for(inti=0;i<12;i+=3)

{

cout<

cout<<"一二三四五六日一二三四五六日一二三四五六日"<

fmprint3(a[i],a[i+1],a[i+2],b[i],b[i+1],b[i+2]);

}

cout<

}//----------------------------------

voidCalendar:

:

twe_mon_print(intyear)//两个月输出

{

initalize(year);

for(inti=0;i<12;i+=2)

{

cout<

cout<<"一二三四五六日一二三四五六日"<

fmprint2(a[i],a[i+1],b[i],b[i+1]);

}

cout<

}//----------------------------------

voidCalendar:

:

one_mon_ptint(intyear)//一个月输出

{

initalize(year);

for(inti=0;i<12;i++)

{

cout<

cout<<"一二三四五六日"<

if(a[i]!

=0)

cout<<""<

else

cout<<"";

intj;

for(j=1;j<=7-a[i];j++)

cout<

for(intk=1;k<=5;k++)

{

cout<

for(intl=1;l<=7;l++)

{

if(j>b[i])

cout<

else

cout<

}

}

}

}//----------------------------------

voidCalendar:

:

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]!

=0)

cout<<""<

else

cout<<"";

for(i[j]=1;i[j]<=7-g[j];i[j]++)

{

cout<

}

}

for(intl=1;l<=5;l++)

{

cout<

for(intj=0;j<3;j++)

{

cout<<"";

for(k=1;k<=7;k++)

{

if(j==0&&i[0]>d)

cout<

elseif(j==1&&i[1]>e)

cout<

elseif(j==2&&i[2]>f)

cout<

else

cout<

}

}

}

}//----------------------------------

voidCalendar:

:

fmprint2(inta,intb,intc,intd)//两个月输出调用函数

{

intk,i[2],j;

intg[2]={a,b};

for(j=0;j<2;j++)

{

if(g[j]!

=0)

cout<<""<

else

cout<<"";

for(i[j]=1;i[j]<=7-g[j];i[j]++)

{

cout<

}

}

for(intl=1;l<=5;l++)

{

cout<

for(intj=0;j<2;j++)

{

cout<<"";

for(k=1;k<=7;k++)

{

if(j==0&&i[0]>c)

cout<

elseif(j==1&&i[1]>d)

cout<

else

cout<

}

}

}

}//----------------------------------

intCalendar:

:

leapyear(intyear)//判断与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);

}

}//----------------------------------

voidCalendar:

:

count_data()//计算日期

{

do

{

inty1,y2,m1,m2,d1,d2;

cout<

201268):

";

do

{

cin>>y1>>m1>>d1;

initalize(y1);

if(y1<1||y1>10000||m1<1||m1>12||d1<1||d1>b[m1-1])

cout<<"输入日期不在计算范围之内,请重新输入:

";

else

break;

}while

(1);

cout<

201268):

";

do

{

cin>>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))

cout<<"输入错误,终止日期应在开始日期之后,请重新输入:

";

else

break;

}while

(1);

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;i

mon1+=b[i];

for(i=0;i

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)&&m1>2)

x=1;

cout<

}while(if_continue());

}//----------------------------------

voidCalendar:

:

now_time_show()//显示当前时间

{

time_tnowtime;

nowtime=time(NULL);

structtm*t;

t=localtime(&nowtime);

cout<

"<tm_year+1900<<"年"<tm_mon+1<<"月"<tm_mday<<"日"

<

(2)<tm_hour<<":

"<

(2)<tm_min<

}//----------------------------------

voidCalendar:

:

day_info()//具体日期信息

{

do

{

inty,m,d;

cout<

201268):

";

do

{

cin>>y>>m>>d;

initalize(y);

if(y<1||y>10000||m<1||m>12||d<1||d>b[m-1])

cout<<"输入日期有误,请重新输入:

";

else

break;

}while

(1);

cout<<"这一年:

"<

if(judge(y))

cout<<"\t闰年"<<"";

else

cout<<"\t非闰年"<<"";

intk,j;

if(y>=2012)

{

k=(y-2012)%10;

j=(y-2012)%12;

}

else

{

k=10-(2012-y)%10;

if(k==10)

k=0;

j=12-(2012-y)%12;

if(j==12)

j

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2