当前位置:首页 » 编程语言 » c语言程序设计制作教学日历
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言程序设计制作教学日历

发布时间: 2022-07-21 02:44:57

A. c语言程序设计~~~万年历

#include<stdio.h>
int leap (int year)
{
if(year%4==0&&year%100!=0||year%400==0)
return 1;
else
return 0;
}
int days_month (int month,int year) {
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
return 31;
if(month==4||month==6||month==9||month==11)
return 30;
if(month==2&&leap(year)==1)
return 29;
else
return 28;
}
int firstday(int month,int year)
{
int w;
w=(1+2*month+3*(month+1)/5+year+year/4+year/400-year/100)%7+1;
return w;
}
void main()
{
int i,j=1,k=1,a,b,month,year;
printf("input month and year:");
scanf("%d%d",&month,&year);
b=days_month(month,year);
a=firstday (month,year);
printf("\n******************************\n");
printf(" 公元%d年%2d月",year,month); printf("\n******************************\n");
printf(" Sun Mon Tue Wed Thu Fri Sat \n");
if(a==7)
{
for(i=1;i<=b;i++)
{
printf("%4d",i);
if(i%7==0)
{
printf("\n");
}
}
}
if(a!=7)
{
while (j<=4*a)
{
printf(" ");
j++;
}
for(i=1;i<=b;i++)
{
printf("%4d",i);
if(i==7*k-a)
{
printf("\n");
k++;
}
}
}
printf("\n");
}

B. 用C++编程设计实现学校校历

给你个日历吧!!
# include <iostream>
using namespace std;
#define YES 1
#define NO 0
int isleap(int year)
{
int leap=NO;
if(year%4==0&&year%100!=0||year%400==0)
leap=YES;
return leap;
}
int week_of_newyears_day(int year)
{
int n=year-1900;
n=n+(n-1)/4+1;
n=n%7;
return n;
}
void main()
{ int year,month,day,weekday,len_of_month,i;
cout<<"Please input year:";
cin>>year;
cout<<endl<<year<<endl;
weekday=week_of_newyears_day(year);
for(month=1;month<=12;month=month+1)
{ cout<<endl<<month<<endl;
cout<<"---------------------------"<<endl;
cout<<"SUN MON TUE WED THU FRI SET"<<endl;
cout<<"---------------------------"<<endl;
for(i=0;i<weekday;i=i+1) /* 找当月1日的打印位置 */
cout<<" ";
if(month==4||month==6||month==9||month==11)
len_of_month=30;
else
if(month==2)
{
if(isleap(year))
len_of_month=29;
else
len_of_month=28;
}
else
len_of_month=31;
for(day=1;day<=len_of_month;day=day+1)
{
if(day>9) /* 打印当月日期 */
cout<<day<<" ";
else
cout<<day<<" ";
weekday=weekday+1;
if(weekday==7)
{
weekday=0;
cout<<endl;
} /* 打满一星期应换行 */
}
cout<<endl; /* 打完一月应换行 */
}
}

C. c语言程序设计 万年历报告书

#include <stdio.h>
void main()
{
int year,month,day,days,sum,i,n=0,a;
char c;
redo: printf("请输入年/月/日(例如:2010/1/1):\n");
scanf("%d/%d/%d",&year,&month,&day);
if(month==1&&(day>=32||day<=0))
{
printf("输入有误!1月只能有31天!\n");
goto redo;
}
if(month==2)
{
if((year%400==0)||(year%4==0&&year%100!=0))
{
if(day>=30||day<=0)
{
printf("输入有误!%d年是闰年,二月只能有29天!\n",year);
goto redo;
}
}
else if(day>=29||day<=0)
{
printf("输入有误!%d年是平年,二月只能有28天!\n",year);
goto redo;
}
}
if(month==3&&(day>=32||day<=0))
{
printf("输入有误!3月只能有31天!\n");
goto redo;
}
if(month==4&&(day>=31||day<=0))
{
printf("输入有误!4月只能有30天!\n");
goto redo;
}
if(month==5&&(day>=32||day<=0))
{
printf("输入有误!5月只能有31天!\n");
goto redo;
}
if(month==6&&(day>=31||day<=0))
{
printf("输入有误!6月只能有30天!\n");
goto redo;
}
if(month==7&&(day>=32||day<=0))
{
printf("输入有误!7月只能有31天!\n");
goto redo;
}
if(month==8&&(day>=32||day<=0))
{
printf("输入有误!8月只能有31天!\n");
goto redo;
}
if(month==9&&(day>=31||day<=0))
{
printf("输入有误!9月只能有30天!\n");
goto redo;
}
if(month==10&&(day>=32||day<=0))
{
printf("输入有误!10月只能有31天!\n");
goto redo;
}
if(month==11&&(day>=31||day<=0))
{
printf("输入有误!11月只能有30天!\n");
goto redo;
}
if(month==12&&(day>=32||day<=0))
{
printf("输入有误!12月只能有31天!\n");
goto redo;
}
if(month>=1&&month<=12)
{
if(year%400==0||(year%4==0&&year%100!=0))
printf("%d年是闰年。\n",year);
else printf("%d年是平年。\n",year);
}
if(year>=1901) goto loop1;
else goto loop2;
loop1: for(i=1901;i<year;i++)
{
if(i%400==0||(i%4==0&&i%100!=0))
n++;
}
days=(year-1901-n)*365+n*366;
switch(month)
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("一年内只能有12个月!请重新输入!\n");goto redo;
}
a=sum+day+days;
if((year%400==0||(year%4==0&&year%100!=0))&&(month>=3))
a++;
if(a%7==1) printf("%d年%d月%d日是星期二。\n",year,month,day);
if(a%7==2) printf("%d年%d月%d日是星期三。\n",year,month,day);
if(a%7==3) printf("%d年%d月%d日是星期四。\n",year,month,day);
if(a%7==4) printf("%d年%d月%d日是星期五。\n",year,month,day);
if(a%7==5) printf("%d年%d月%d日是星期六。\n",year,month,day);
if(a%7==6) printf("%d年%d月%d日是星期天。\n",year,month,day);
if(a%7==0) printf("%d年%d月%d日是星期一。\n",year,month,day);
goto label;
loop2: for(i=1900;i>year;i--)

{
if(i%400==0||(i%4==0&&i%100!=0))
n++;
}
days=(1900-year-n)*365+n*366;
switch(month)
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=58;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("一年内只能有12个月!请重新输入!\n");goto redo;
}
if(year%400==0||(year%4==0&&year%100!=0))
a=366-(day+sum)+days;
else a=365-(day+sum)+days;
if((year%400==0||(year%4==0&&year%100!=0))&&(month>=3))
a--;
if(a%7==0) printf("%d年%d月%d日是星期一。\n",year,month,day);
if(a%7==1) printf("%d年%d月%d日是星期天。\n",year,month,day);
if(a%7==2) printf("%d年%d月%d日是星期六。\n",year,month,day);
if(a%7==3) printf("%d年%d月%d日是星期五。\n",year,month,day);
if(a%7==4) printf("%d年%d月%d日是星期四。\n",year,month,day);
if(a%7==5) printf("%d年%d月%d日是星期三。\n",year,month,day);
if(a%7==6) printf("%d年%d月%d日是星期二。\n",year,month,day);
label: printf("Do you want to continue?Y/N:");
getchar();
c=getchar();
if(c=='Y'||c=='y')
{
n=0;
goto redo;
}
}

D. c语言设计万年历

/*不过除了没有查询某年某月某日是这一年的第几天。。和判断这一年的生肖外,都能满足你的要求。
加点金币帮你完善点!*/
#include<stdio.h>
int
Swiss(int
Years)
//判断是否是闰年
{

if(!(Years%100))

{

Years=Years/100;

}

if(Years%4)

{

return
0;

}

else

{

return
1;

}
}
int
Number(int
Yearsa,int
Yearsb)
//已知两个年份,求出两个年份之间闰年的个数
{

int
i=Yearsa+1;

int
mou=0;

do{

if(Swiss(i))

{

mou++;

}

i++;

}while(i<Yearsb);

return
mou;
}
int
Mvalue(int
Years,int
Month,int
Day)
//已知年月日,求出某年某月某日是星期几
{

int
M[12]={0,3,3,6,1,4,6,2,5,0,3,5};
//月值

int
N=6;
//年值初始化

int
a;

if(Years<2006)
//求年值,年值以2006年为基数

{

N=6-((2006-Years)%7)-Number(Years,2006);

if(Swiss(Years))

{

if(Month<3)

{

N--;

}

}

}

else

if(Years>2006)

{

N=((Years-2006)%7)-1+Number(2006,Years);

if(Swiss(Years))

{

if(Month>2)

{

N++;

}

}

}

a=(Day+M[Month-1]+N)%7;
//某年某月某日是星期几=(日值+月值+年值)%7

return
a;
}
int
Amonth(int
Month)
//已知月,求出这个月是大月还是小月
{

switch(Month)

{
case
1:
case
3:
case
5:
case
7:
case
8:
case
10:
//1,3,5,7,8,10,12是大月,没月31天
case
12:return
1;
case
4:
case
6:
case
9:
case
11:return
0;
//4,6,9,11是小月,每月30天
case
2:return
2;
//二月份

}

return
-1;
}
void
main
()
{

int
Dtable[7][7];

int
i,j;

int
Years=9999;

int
Month=12;

int
Day=1;

int
b;

for(i=0;i<7;i++)
//初始化数组

{

Dtable[0][i]=i;

}

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

{

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

{

Dtable[i][j]=0;

}

}

i=Mvalue(Years,Month,Day);

switch(Amonth(Month))

{
case
0:b=30;break;
case
1:b=31;break;
case
2:if(Swiss(Years))b=29;else
b=28;break;
//闰年2月29天,平年二月28天
default:b=-1;break;

}

for(;i<7;i++)

{

Dtable[1][i]=Day++;

}

for(i=2;i<7;i++)

{

for(j=0;j<7;j++)
//建造日历表

{

if(Day<=b)

{

Dtable[i][j]=Day++;

}

else

{

continue;

}

}

}

printf("%d:%d\n",Years,Month);

for(i=0;i<7;i++)
//输出日历表

{

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

{

printf("%3d",Dtable[i][j]);

}

printf("\n");

}

getch();
//完毕!
}

E. C语言设计年历显示程序

你好!有一个类似的程序,部分满足要求

F. C语言程序设计 万年历查询程序。

实验名称:万年历的查询及打印
【内容】:设计一个查询并打印万年历的程序。
【步骤】:
1.
画出程序流程图;
2.
编写程序;
3.
调试程序,对调试过程中出现的问题进行分析,找出错误的原因并予改正;
4.
写出通过调试并修改正确的原程序。
【要求】:
1.
程序运行后,首先在屏幕上显示主菜单:
1.
查询某年某月某日是星期几
2.
查询某年是否是闰年
3.
打印某年的全年日历
4.
退出
2.
在主菜单中输入1后,显示:

“请输入年月日(XXXX,XX,XX)”

运行后输出:XXXX年XX月XX日是星期X,是否继续查询(Y/N)?

如果输入Y,则重新显示
“请输入年月日(XXXX,XX,XX)”,否则回到主菜单。
3.
在主菜单中输入2后,显示:

“请输入要查哪一年?(XXXX)”


运行后输出:XXXX年是(否)是闰年,是否继续查询(Y/N)?

如果输入Y,则重新显示,“请输入要查哪一年?(XXXX)”,否则回到主菜单。
4.
在主菜单中输入3后,显示:

“请输入要打印的年份(XXXX)”


运行后输出XXXX年的日历,格式为:
XXXX

X(月数)

0
1
2
3
4
5
6

S
M
T
W
T
F
S

x
x
x
x
x
x
x

x
x
x
xx
xx
xx
xx

xx
xx
xx
xx
xx
xx
xx

xx
xx
xx
xx
xx
xx
xx

xx
xx
xx
X(月数)
0
1
2
3
4
5
6

S
M
T
W
T
F
S

x
x
x
x

x
x
x
xx
xx
xx
xx

xx
xx
xx
xx
xx
xx
xx

xx
xx
xx
xx
xx
xx
xx

xx
xx
xx
xx
xx
.
.
.
.
.

运行完后显示:“是否继续打印(Y/N)?”

如果输入Y,则重新显示,“请输入要打印的年份(XXXX)”,否则回到主菜单。
5.
在主菜单中输入4后,显示:“是否要真的退出(Y/N)?”


如果输入Y,结束程序运行,否则重新显示主菜单。
【提示】:
1.
闰年计算:满足下列二者之一,是闰年:
能被4整除,但不能被100整除;
能被4整除,且能被400整除。
2.闰年的二月是29天,平年的二月是28天
3.星期几的计算:

S=X-1+(X-1)/4+(X-1)/100+(X-1)/400+C

X是年份,C是该年从元旦开始到到这一日的天数。

S/7的余数既是星期数
例1:1982年12月26日

由于1982年不是闰年(不能被4整除),所以该年的二月是28天。

C=31+28+31+30+31+30+31+31+30+31+30+26=360
(1月到11月的天数+12月的实际天数)
S=1982-1+(1982-1)/4+(1982-1)/100+(1982-1)/400+360=2821.3925

S/7=2821/7=403
余数为0,所以该日是星期天。
例2:2000年3月8日

由于2000年是闰年(能被4整除,又能被100和400整除),所以该年的二月是29天。

C=31+29+8=68
(1月到2月的天数+3月的实际天数)
S=2000-1+(2000-1)/4+(2000-1)/100+(2000-1)/400+68=2551.757

S/7=2551/7=364
余数为3,所以该日是星期三。

G. C语言年历显示程序设计

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
char* month[]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nev","Dec"};
char* week[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};

int j_leapyear(int year) //定义函数检测输入年份是否为闰年
{
if((/*year%400==0*/year%4==0&&year%100!=0)||(year%400==0))
return (1);
// else if(year%4==0&&year%100!=0)
// return (1);
else return 0;
}

int month_day(int year,int month) //检测该年月份有多少天
{
int mon_day[]={31,28,31,30,31,30,31,31,30,31,30,31};
if(j_leapyear(year)&&month==2)
return 29;
else return (mon_day[month-1]);
}

int j_week(int year,int month,int day) //检测该天是星期几
{
int d=0,i; //d表示该天在该年份的累计天数
int w;
/* int month_day[]={31,28,31,30,31,30,31,31,30,31,30,31};
if(j_leapyear(year)==1)
month_day[1]=29;
for(i=0;i<month;i++)
d+=month_day[i];
d=d+day;*/
for(i=1;i<month;i++)
d+=month_day(year,i);
d+=day;
w=(year-1)+(int)(year-1)/4-(int)(year-1)/100+(int)(year-1)/400+d;//网上公式
return ((int)w%7);
}

int allyear(int year) //输出全年日历
{
int i,j,b;
printf("\n%d 日历",year);
for(i=1;i<=12;i++)
{
printf("\n\n\t%s\n",month[i-1]);
// printf(" 7 1 2 3 4 5 6 \n");
printf(" S M T W T F S \n");
b=j_week(year,i,1);
for(j=1;j<=month_day(year,i)+b;j++)
{
if(j<=b)
printf(" ");
else if(j-b<10)
printf("%2d ",j-b);
else printf("%2d ",j-b);
//else printf("%2d ",j-b);
if(j%7==0)
putchar('\n');
}
putchar('\n');
}
return 0;
}
void month_print(int year,int month) //输入一个年月,输出这个月的日历
{

int i,c,d;
c=month_day(year,month);
printf("\n\n %d年%d月日历\n",year,month);

printf(" S M T W T F S \n");
d=j_week(year,month,1);
for(i=1;i<=c+d;i++)
{
if(i<=d)
printf(" ");
else printf("%2d ",i-d);
if(i%7==0)
putchar('\n');
}
putchar('\n');
}

int jisuan_day(int year,int month,int day,int x,int y,int z) //输入年月日,输出距x年y月z日有多少天,星期几,以及是否是公历节日
{
int i,a,b,c=0,d=0,days=0,m=0,n=0,t;
a=year>=x?year:x;
b=year<x?year:x;
if(a>b)
{
for(i=b+1;i<a;i++)
c+=j_leapyear(i);
}
else c=0;
if(year!=x)
d=a-b-1;
else d=0;
m=365*d+c;
if(year<x)
{
for(i=month;i<=12;i++)
n+=month_day(year,i);
days=m+n+z-day;
}
else if(year>x)
{
for(i=y;i<=12;i++)
n+=month_day(x,i);
for(i=1;i<month;i++)
n+=month_day(year,i);
days=m+n+day-z;
}
else
{
for(i=month>=y?y:month;i<(month>=y?month:y);i++)
n+=month_day(x,i);
days=abs(day-z)+n; //输出距离y月z日有多少天
}
printf("这天离%d年%d月%d号有%d天\n",x,y,z,days);
t=j_week(year,month,day);
if(t==0) //输出星期几
printf("这天星期日");
else if(t==1)
printf("这天星期一");
else if(t==2)
printf("这天星期二");
else if(t==3)
printf("这天星期三");
else if(t==4)
printf("这天星期四");
else if(t==5)
printf("这天星期五");
else if(t==6)
printf("这天星期六");
putchar('\n');
if(month==1&&day==1)
printf("这天是元旦节");
else if(month==2&&day==14)
printf("这天是情人节");
else if(month==3&&day==8)
printf("这天是妇女节");
else if(month==3&&day==12)
printf("这天是植树节");
else if(month==4&&day==1)
printf("这天是愚人节");
else if(month==4&&day==4)
printf("这天是清明节");
else if(month==5&&day==1)
printf("这天是劳动节");
else if(month==6&&day==1)
printf("这天是儿童节");
else if(month==8&&day==1)
printf("这天是建军节");
else if(month==9&&day==10)
printf("这天是教师节");
else if(month==10&&day==1)
printf("这天是国庆节");
else if(month==12&&day==25)
printf("这天是圣诞节");
else printf("这天不是特殊节日");
putchar('\n');
return days;
}

void fish_or_net(int year,int month,int day) //判断是打鱼还是晒网
{
int q;
int i,a,b,c=0,d=0,days=0,m=0,n=0;
a=year>=1990?year:1990;
b=year<1990?year:1990;
if(a>b)
{
for(i=b+1;i<a;i++)
c+=j_leapyear(i);
}
else c=0;
if(year!=1990)
d=a-b-1;
else d=0;
m=365*d+c;
if(year<1990)
{
for(i=month;i<=12;i++)
n+=month_day(year,i);
days=m+n+1-day;
}
else if(year>1990)
{
for(i=1;i<=12;i++)
n+=month_day(1990,i);
for(i=1;i<month;i++)
n+=month_day(year,i);
days=m+n+day-1;
}
else
{
for(i=month>=1?1:month;i<(month>=1?month:1);i++)
n+=month_day(1990,i);
days=abs(day-1)+n; //先确定这天离1990年1月1日有多少天
}

q=days%5+1;
if(q==1||q==2||q==3) //判断打鱼还是晒网
printf("渔人今天打鱼");
else printf("渔人今天晒网");
putchar('\n');
}

/*int main() //这部分内容用来校检
{
int j_leapyear(int year);
int month_day(int year,int month);
int j_week(int year,int month,int day);
int allyear(int year);
void month_print(int year,int month);
int jisuan_day(int year,int month,int day,int x,int y,int z);
void fish_or_net(int year,int month,int day);
int x,y,z,year,month,day;
// allyear(2015);
//month_print(2016,12);
printf("请输入今天的日期(按年,月,日输入,如2016,1,14表示2016年1月14日):");
scanf("%d,%d,%d",&x,&y,&z);
printf("\n请随便输入一个日期,格式同上:");
scanf("%d,%d,%d",&year,&month,&day);
jisuan_day(year,month,day,x,y,z);
// fish_or_net(x,y,z);
return 0;
} // 这部分内容是用来检测上述函数是否出错的
*/

int main()
{
int j_leapyear(int year);
int month_day(int year,int month);
int j_week(int year,int month,int day);
int allyear(int year);
void month_print(int year,int month);
int jisuan_day(int year,int month,int day,int x,int y,int z);
void fish_or_net(int year,int month,int day); //函数声明
int option,year,month,day,x,y,z;
char ny;
system("color 1f");
while (1)
{
printf("\n\n\t 欢迎来到由...编写的程序\n\n");
printf(" 请选择您需要的服务,输入编号回车结束\n");
printf(" 1.输入一个年份,输出该年的日历\n");
printf(" 2.输入年月,输出这个月的日历。\n");
printf(" 3.输入年月日,输出据今天还有多久,星期几,是否是公历节日。\n");
printf(" 4.某人自1990年1月1日开始打鱼,“三天打鱼,两天晒网”,输入一个1990年以后的日期,输出他这一天是打鱼还是晒网。\n");
printf(" 5.退出\n");
scanf("%d",&option);
switch(option) //switch分支结构
{
case 1:
while(1) //while循环,后面的1是常数,表示一直到break才结束循环
{
printf("请输入一个年份:");
scanf("%d",&year);
allyear(year);
printf("你想继续查询日历么?(y表示继续,n表示结束)");
scanf("%c",&ny);
if(ny=='n')
break;
}
break;
case 2:
while (1)
{
printf("输入年月:");
scanf("%d,%d",&year,&month);
month_print(year,month);
printf("你想继续查询日历么?(y表示继续,n表示结束):");
scanf("%c",&ny);
if(ny=='n')
break;
}
break;
case 3:
while (1)
{
printf("输入年月日:");
scanf("%d,%d,%d",&year,&month,&day);
printf("请输入今天的日期:");
scanf("%d,%d,%d",&x,&y,&z);
jisuan_day(year,month,day,x,y,z);
printf("你想继续查询么?(y表示继续,n表示结束):");
scanf("%c",&ny);
if(ny=='n')
break;
}
break;
case 4:
while (1)
{
printf("输入1990年1月1日以后的一个日期:");
scanf("%d,%d,%d",&year,&month,&day);
fish_or_net(year,month,day);
printf("你想继续查询渔人是打鱼还是晒网么?(y表示继续,n表示结束):");
scanf("%c",&ny);
if(ny=='n')
break;
}
break;
case 5:
while (1)
{
printf("确认么?y表示是的,n表示不是");
scanf("%c",&ny);
if(ny=='y')
exit(1); //表示退出程序
else if(ny=='n')
break;
}
break;
default:printf("对不起,暂时没有这个服务");
break;
}
}
return 0;
}

H. c语言 万年历的程序设计

#include <windows.h>
#include <winnt.h>
#include<iostream>
#include<iomanip>
using namespace 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)
{
HANDLE consolehwnd;
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(consolehwnd,12);
cout<<"请选择操作:\n1→显示某年日历\
\n2→查询某天\n0→退出"<<endl;
char tp[20];cin>>tp;
if(tp[1]!='\0'||tp[0]>'2'||tp[0]<'0'){cout<<"输入有误"<<endl;continue;}
switch(tp[0]-48)
{
case 1:{cout<<"请输入年份:";cin>>y;system("cls");display_year(y);break;}
case 2:{cout<<"请输入年、月、日,以空格分开:";cin>>y>>m>>d;system("cls");
demand_day(y,m,d);break;}
case 0:{es=0;break;}
}
}
return 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--;}
week1=(d+2*m+3*(m+1)/5+yy+yy/4-yy/100+yy/400)%7;
int s;
switch (week1)
{
case 0: s=1; break;
case 1: s=2; break;
case 2: s=3; break;
case 3: s=4; break;
case 4: s=5; break;
case 5: s=6; break;
case 6: s=0; break;
}
return s;
}
//----判断闰年-------------------------------------
int leap_year(int y)
{
int i;
if((y%4==0&&y%100!=0)||y%400==0)i=1;
else i=0;
return i;
}
//--------显示某年日历------------------------
void display_year(int y)
{
int n1,n2,i,j,a[13],c,d;
HANDLE consolehwnd;
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(consolehwnd,5);
cout<<setw(38)<<y<<"年"<<endl;
cout<<setw(28)<<"*********";
for(i=1;i<=27;i++)cout<<'*';
cout<<endl;
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;i<=11;i+=2) //六次循环
{
SetConsoleTextAttribute(consolehwnd,1);
cout<<setw(14)<<i<<"月"<<setw(42)<<i+1<<"月"<<endl;
SetConsoleTextAttribute(consolehwnd,2);
cout<<setw(4)<<"日"<<setw(4)<<"一"<<setw(4)<<"二"<<setw(4)<<"三"<<setw(4)\
<<"四"<<setw(4)<<"五"<<setw(4)<<"六";
cout<<setw(16)<<' ';
cout<<setw(4)<<"日"<<setw(4)<<"一"<<setw(4)<<"二"<<setw(4)<<"三"<<setw(4)\
<<"四"<<setw(4)<<"五"<<setw(4)<<"六"<<endl;
SetConsoleTextAttribute(consolehwnd,7);
n1=week(y,i,1);n2=week(y,i+1,1);
if(n1) //-----------
{
for(j=1;j<=n1;j++) //
cout<<setw(4)<<' ';
}
for(j=1;j<=7-n1;j++)
cout<<setw(4)<<j;
cout<<setw(16)<<' ';
if(n2)
{ //-----输出每次循环的第一行---
for(j=1;j<=n2;j++)
cout<<setw(4)<<' ';
}
for(j=1;j<=7-n2;j++)
cout<<setw(4)<<j;
cout<<endl; //--------------
c=8-n1;d=8-n2;
for(int m=1;m<6;m++) //每月日历最多占六行
{
if(c>a[i])cout<<setw(4*7)<<' ';//若c>a[i],则该月的这一行全部输出空格
for(j=c;j<=a[i];j++)
{
cout<<setw(4)<<j;
if((j-c+1)%7==0){c=j+1;break;}
if(j==a[i]){cout<<setw((6-week(y,i,a[i]))*4)<<' ';c=j+1;break;}
//如果j是该月最后一天,该行剩下的全部补空格
}
cout<<setw(16)<<' ';
if(d>a[i+1])cout<<setw(4*7)<<' ';
for(j=d;j<=a[i+1];j++)
{ //
cout<<setw(4)<<j;
if((j-d+1)%7==0){d=j+1;break;}
if(j==a[i+1]){cout<<setw((6-week(y,i+6,a[i+1]))*4)<<' ';d=j+1;break;}
}
cout<<endl;
}
cout<<endl;
}
cout<<endl;
}
//--------查询某天------------
void demand_day(int y,int m,int d)
{
int n;
HANDLE consolehwnd;
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(consolehwnd,5);
n=week(y,m,d);
switch(n)
{
case 1:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期一"<<endl;break;
case 2:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期二"<<endl;break;
case 3:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期三"<<endl;break;
case 4:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期四"<<endl;break;
case 5:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期五"<<endl;break;
case 6:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期六"<<endl;break;
case 0:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期日"<<endl;break;
default:break;
}
cout<<endl;
}

I. C语言程序设计万年历

int GetDays (int year,int month,int day)
{
int sum=0;
if (DateCheck(year,month,day)==0)
{
return -1;//日期有误
}
if(year>=1901)
{
int X=(int)(year/100);//世纪数
int Y=X-(int)(X/4);//如果按4年一闰来算,Y指的是比实际上多算的天数,在下面需要减去
if (month<=2&&month>0)
{
year--;//把1月、2月视为上一年的13月、14月(纯粹为了计算需要)
month+=12;
}
sum=(int)(365.25*(year-1900))+(int)(30.6*(month+1))+day-Y-49;//以365.25(本来实际太阳年是365.2425天)来计算是为了计算按4年一闰的整数年总天数,加上月份天数再加上余下天数,减掉多闰天数,再减掉一个偏差值(多加的)
//月份以30.6天的平均值计算。最后减去的49,是多加的一个月以及其余相差天数的和,可得到1900年1月1日的积日为0
}
return sum;//返回距离1900年1月1日的总天数(积日)
}