跪求C语言万年历程序设计

(1) 程序运行时,首先给出3个菜单选项的内容和输入提示:
1 显示一年的日历
2 显示某一天是星期几
0 退出

第1个回答  2011-12-27
#include<stdio.h>
#include<stdlib.h> 。
#include<time.h>

char* month_str[]={"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
char* week[]={"星期一","星期二","星期三","星期四","星期五","星期六","星期天"};

int IsLeapYear(int year)
{
if((year%4==0&&year%100!=0)||(year%400==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(IsLeapYear(year)&&month==2)
return 29;
else
return(mon_day[month-1]);

}
int DaySearch(int year,int month,int day)
{
int c=0;
float s;
int m;
for(m=1;m<month;m++)
c=c+month_day(year,m);
c=c+day;
s=year-1+(float)(year-1)/4+(float)(year-1)/100+(float)(year-1)/400-40+c;
return ((int)s%7);
}

int PrintAllYear(int year)
{
int temp;
int i,j;
printf("\n\n%d 全年历\n",year);
for(i=1;i<=12;i++)
{
printf("\n\n%s(%d)\n",month_str[i-1],i);
printf("S M T W T F S \n\n");
temp=DaySearch(year,i,1);
for(j=1;j<=month_day(year,i)+temp;j++)
{
if(j-temp<=0)
printf(" ");
else if(j-temp<10)
printf("%d ",j-temp);
else
printf("%d ",j-temp);

if(j%7==0)
printf("\n");
}
}
return 0;
}

int main()
{
int option,da;
char ch;
int year,month,day;
long int timer;
struct tm *timenow;
int i,j;
int month_day[]={31,28,31,30,31,30,31,31,30,31,30,31};

printf("您好!!!\n\n欢迎使用万年历系统!\n");

timer=time(0);
timenow=localtime(&timer);

printf("\n现在的时间是:%d年 %d月 %d日 %d时 %d分",(*timenow).tm_year+1900,(*timenow).tm_mon+1,(*timenow).tm_mday,(*timenow).tm_hour,(*timenow).tm_min);
printf("\n\n本月月历\n");
printf("\nS M T W T F S \n\n");
da=DaySearch(year,month,day);
for(i=1;i<=month_day[(*timenow).tm_mon];i++)
{
j=(*timenow).tm_wday;
if(((*timenow).tm_mday%7-(*timenow).tm_wday)!=0)
printf(" ");
else
printf("%d ",i);

if(i%7==0)
//printf("\n");
putchar('\n');
}

while(1)
{
printf("\n请选择服务的种类:\n");
printf("\n1周次查询");
printf("\n2闰年查询");
printf("\n3全年年历");
printf("\n4退出\n");
scanf("%d",&option);

switch(option)
{
case 1:
while(1)
{
printf("\n请按该格式输入年月日(XXXX,XX,XX):");
scanf("%d,%d,%d,%c",&year,&month,&day);
da=DaySearch(year,month,day);
printf("\n%d-%d-%d 是 %s,是否继续使用该项服务?(Y/N)",year,month,day,week[da]);
fflush(stdin);
scanf("%c",&ch);
if(ch=='N'||ch=='n')
break;
}
break;
case 2:
while(2)
{
printf("\n请按格式输入查询年份(XXXX)");
scanf("%d",&year);
if(IsLeapYear(year))
printf("\n%d 是闰年,是否继续使用该项服务?(Y/N)",year);
else
printf("\n%d 不是闰年,是否继续使用该项服务?(Y/N)?",year);
fflush(stdin);
scanf("%c",&ch);
if(ch=='N'||ch=='n')
break;
}
break;
case 3:
while(3)
{
printf("\n请按格式输入查询年份(XXXX)");
scanf("%d",&year);
PrintAllYear(year);
printf("\n是否继续使用该项服务(Y/N)?");
fflush(stdin);
scanf("%c",&ch);
if(ch=='N'||ch=='n')
break;
}
break;
case 4:
fflush(stdin);
printf("确定退出?(Y/N)");
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
exit(0);
break;
default:
printf("\n错误提醒:输入出错,请从新确定输入!\n");
break;
}

}

return 0;
}
第2个回答  2011-12-21
平台没说清楚啊。本回答被提问者采纳
第3个回答  2011-12-21
#include <stdio.h>
#include <stdlib.h>

int f(int year,int month)
{/*f(年,月)=年-1,如月<3;否则,f(年,月)=年*/
if(month<3) return year-1;
else return year;
}

int g(int month)
{/*g(月)=月+13,如月<3;否则,g(月)=月+1*/
if(month<3) return month+13;
else return month+1;
}

int n(int year,int month,int day)
{
/*N=1461*f(年、月)/4+153*g(月)/5+日*/
return 1461L*f(year,month)/4+153L*g(month)/5+day;
}

int w(int year,int month,int day)
{
/*w=(N-621049)%7(0<=w<7)*/
return(int)((n(year,month,day)%7-621049L%7+7)%7);
}

int date[12][6][7];
int day_tbl[ ][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};

void printyear()
{
int sw,leap,i,j,k,wd,day;
int year;/*年*/
char title[]="SUN MON TUE WED THU FRI SAT";
printf("Please input the year whose calendar you want to know: ");/*输入年*/
scanf("%d%*c",&year);/*输入年份值和掠过值后的回车*/
sw=w(year,1,1);
leap=year%4==0&&year%100||year%400==0;/*判闰年*/
for(i=0;i<12;i++)
for(j=0;j<6;j++)
for(k=0;k<7;k++)
date[i][j][k]=0;/*日期表置0*/
for(i=0;i<12;i++)/*一年十二个月*/
for(wd=0,day=1;day<=day_tbl[leap][i];day++)
{/*将第i+1月的日期填入日期表*/
date[i][wd][sw]=day;
sw=++sw%7;/*每星期七天,以0至6计数*/
if(sw==0) wd++;/*日期表每七天一行,星期天开始新的一行*/
}
printf("\n|==================The Calendar of Year %d =====================|\n|",year);
for(i=0;i<6;i++)
{
/*先测算第i+1月和第i+7月的最大星期数*/
for(wd=0,k=0;k<7;k++)/*日期表的第六行有日期,则wd!=0*/
wd+=date[i][5][k]+date[i+6][5][k];
wd=wd?6:5;
printf("%2d %s %2d %s |\n|",i+1,title,i+7,title);
for(j=0;j<wd;j++)
{
printf(" ");/*输出四个空白符*/
/*左栏为第i+1月,右栏为第i+7月*/
for(k=0;k<7;k++)
{
if(date[i][j][k])
printf("%4d",date[i][j][k]);
else
printf(" ");
}
printf(" ");/*输出十个空白符*/
for(k=0;k<7;k++)
{
if(date[i+6][j][k])
printf("%4d",date[i+6][j][k]);
else
printf(" ");
}
printf(" |\n|");
}
}
system("pause");
}
void showweekday()
{
int i,j,leap,year,month,day,days=0,sum;
char week[][10] = {"SUN","MON","TUE","WED","THU","FRI","SAT"};
printf("Please input the year month day: ");
scanf("%d%d%d",&year,&month,&day);
leap=(year%4==0&&year%100||year%400==0);
for(i=0;i<month-1;i++)
days += day_tbl[leap][i];
days += day;
sum = year-1+(year-1)/4-(year-1)/100+(year-1)/400+days;
j = sum % 7; //j是星期几,j=0星期日
printf("%d年%d月%d日是%s\n",year,month,day,week[j]);
system("pause");
}
void menu()
{
printf("\n|==================The Menu =====================|\n");
printf("1 显示一年的日历\n");
printf("2 显示某一天是星期几\n");
printf("0 退出\n");
printf("\nplease input the choice:\n");
}

void main()
{
int choice;
while (1)
{
menu();
scanf("%d",&choice);
switch (choice)
{
case 1:
system("cls");
printyear();
break;
case 2:
system("cls");
showweekday();
break;
case 0:
exit(0);
break;
}
}
}
第4个回答  2011-12-21
学习
第5个回答  2011-12-21
study hard ,everything will go well
that's all.

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网