C语言万年历程序设计

# include & ltwindows.h & gt

# include & ltwinnt.h & gt

# include & ltiostream & gt

# include & ltiomanip & gt

使用命名空间std

int week(int,int,int);//根据年月日判断星期几。

int leap _ year(int);//判断闰年

void display _ year(int);//显示一年的日历。

void demand_day(int,int,int);//查询某一天

int main()

{

int y,m,d,es = 1;

while(es)

{

手柄控制台手柄;

console hwnd = GetStdHandle(STD _ OUTPUT _ HANDLE);

SetConsoleTextAttribute(console hwnd,12);

cout & lt& lt"请选择一项操作:\n1→显示日历\

\n2→查询某一天\n0→退出" < & ltendl

char TP[20];CIN & gt;& gtTP;

if(tp[1]!= ' \ 0 ' | | TP[0]& gt;2 ' | | TP[0]& lt;0 '){ cout & lt;& lt"输入错误"

开关(tp[0]-48)

{

案例1:{ cout & lt;& lt"请输入年份:";CIN & gt;& gty;系统(“cls”);display _ year(y);打破;}

案例二:{ cout & lt& lt请输入用空格分隔的年、月和日。CIN & gt;& gty & gt& gtm & gt& gtd;系统(“cls”);

需求_日(y,m,d);打破;}

案例0:{ es = 0;打破;}

}

}

返回0;

}

// -根据年、月、日判断星期几。

int week(int y,int m,int d)

{

int week1,YY = y;

if(m = = 1){ m = 13;YY-;}

if(m = = 2){ m = 14;YY-;}

week 1 =(d+2 * m+3 *(m+1)/5+YY/4-YY/100+YY/400)% 7;

int s;

开关(week1)

{

案例0:s = 1;打破;

案例1:s = 2;打破;

情况二:s = 3;打破;

情况三:s = 4;打破;

情况4:s = 5;打破;

情况5:s = 6;打破;

情况6:s = 0;打破;

}

返回s;

}

// -判断闰年。

int闰年(int y)

{

int I;

if((y % 4 = = 0 & amp;& ampy%100!= 0)| | y % 400 = = 0)I = 1;

else I = 0;

返回I;

}

// -显示某一年的日历。

空显示_年(整数y)

{

int n1,n2,I,j,a[13],c,d;

手柄控制台手柄;

console hwnd = GetStdHandle(STD _ OUTPUT _ HANDLE);

SetConsoleTextAttribute(console hwnd,5);

cout & lt& ltsetw(38)lt;& lty & lt& lt"年份"

cout & lt& ltsetw(28)& lt;& lt"*********";

for(I = 1;我& lt=27;i++)cout & lt;& lt'*';

cout & lt& ltendl

a[1]= a[3]= a[5]= a[7]= a[8]= a[10]= a[12]= 31;//

a[4]= a[6]= a[9]= a[11]= 30;//确定每月的天数

if(leap _ year(y))a[2]= 29;

else a[2]= 28;//

for(I = 1;我& lt=11;I+=2) //六个周期

{

SetConsoleTextAttribute(console hwnd,1);

cout & lt& ltsetw(14)& lt;& lt我& lt& lt"月份"

SetConsoleTextAttribute(console hwnd,2);

cout & lt& ltsetw(4)& lt;& lt“天”< & ltsetw(4)& lt;& lt“一”

& lt& lt“四”

cout & lt& ltsetw(16)& lt;& lt' ';

cout & lt& ltsetw(4)& lt;& lt“天”< & ltsetw(4)& lt;& lt“一”

& lt& lt“四”

SetConsoleTextAttribute(console hwnd,7);

n 1 =周(y,I,1);n2 =周(y,i+1,1);

if(n1) // -

{

for(j = 1;j & lt= n 1;j++) //

cout & lt& ltsetw(4)& lt;& lt' ';

}

for(j = 1;j & lt= 7-n 1;j++)

cout & lt& ltsetw(4)& lt;& ltj;

cout & lt& ltsetw(16)& lt;& lt' ';

中频(n2)

{//-输出每个周期的第一行-

for(j = 1;j & lt= n2j++)

cout & lt& ltsetw(4)& lt;& lt' ';

}

for(j = 1;j & lt= 7-N2;j++)

cout & lt& ltsetw(4)& lt;& ltj;

cout & lt& ltendl// -

c = 8-n 1;d = 8-N2;

for(int m = 1;m & lt6;M++) //月历最多六行。

{

if(c & gt;a[I])cout & lt;& ltsetw(4 * 7)& lt;& lt' ';//如果c & gtA[i],则该月的这一行输出所有空格。

for(j = c;j & lt= a[I];j++)

{

cout & lt& ltsetw(4)& lt;& ltj;

if((j-c+1)% 7 = = 0){ c = j+1;打破;}

if(j = = a[I]){ cout & lt;& ltsetw((6-week(y,I,a[I])* 4)& lt;& lt' ';c = j+1;打破;}

//如果J是一个月的最后一天,则这一行剩余的空格将全部填充。

}

cout & lt& ltsetw(16)& lt;& lt' ';

if(d & gt;a[I+1])cout & lt;& ltsetw(4 * 7)& lt;& lt' ';

for(j = d;j & lt= a[I+1];j++)

{ //

cout & lt& ltsetw(4)& lt;& ltj;

if((j-d+1)% 7 = = 0){ d = j+1;打破;}

if(j = = a[I+1]){ cout & lt;& ltsetw((6-week(y,i+6,a[I+1])* 4)& lt;& lt' ';d = j+1;打破;}

}

cout & lt& ltendl

}

cout & lt& ltendl

}

cout & lt& ltendl

}

// -查询某一天。

无效需求日(整数y,整数m,整数d)

{

int n;

手柄控制台手柄;

console hwnd = GetStdHandle(STD _ OUTPUT _ HANDLE);

SetConsoleTextAttribute(console hwnd,5);

n =周(y,m,d);

开关(n)

{

案例1:cout & lt;& lty & lt& lt"年份"

案例2:cout & lt;& lty & lt& lt"年份"

案例三:cout & lt& lty & lt& lt"年份"

案例4:cout & lt;& lty & lt& lt"年份"

案例5:cout & lt;& lty & lt& lt"年份"

案例6:cout & lt;& lty & lt& lt"年份"

案例0:cout & lt;& lty & lt& lt"年份"

默认:break

}

cout & lt& ltendl

}