C语言万年历程序设计
# 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
}