/*************************************************************************
用C语言设计一个年历系统
显示格式如下要求:
1)显示年月,中英文都可以
2)下一行显示星期,从周日到周六,中英文都可以
3)下一行开始显示日期从1号开始,并按其实周几实际情况与上面的星期数垂直对齐
4)所有的变量,都要在堆上声明(使用New操作符)
5)要求要使用到结构体
*************************************************************************/
#include<stdio.h>
#include<stdlib.h>
typedef struct date //声明结构体
{
int year,month;
}DATE;
int main()
{
system("title 年历系统");
system("color 70");
DATE *date=new DATE;
printf("请输入一个年份和月份以空格隔开,输入0退出:");
int num=0;
while(num=scanf_s("%d%d",&date->year,&date->month),date->year!=0)
{
getchar();
int errorNum=0;
if(num!=2)
{
errorNum=1;
printf("输入的月份错误,请从新输入\n请输入一个年份和月份以空格隔开,输入0退出1:");
continue;
}
int *subYear=new int;
*subYear=date->year-2004;
if(subYear<0) //判断输入的年份是否大于2004年
{
printf("请输入一个2004年之后的日期\n");
break;
}
switch(date->month)
{
case 1:printf(" %d / January\n",date->year);break;
case 2:printf(" %d / February\n",date->year);break;
case 3:printf(" %d / March\n",date->year);break;
case 4:printf(" %d / April\n",date->year);break;
case 5:printf(" %d / May\n",date->year);break;
case 6:printf(" %d / June\n",date->year);break;
case 7:printf(" %d / July\n",date->year);break;
case 8:printf(" %d / Aguest\n",date->year);break;
case 9:printf(" %d / September\n",date->year);break;
case 10:printf(" %d / October\n",date->year);break;
case 11:printf(" %d / November\n",date->year);break;
case 12:printf(" %d / December\n",date->year);break;
default :printf("输入的月份错误,请从新输入\n请输入一个年份和月份以空格隔开,输入0退出:");errorNum=1;
}
//printf("%d\n",errorNum);
if(errorNum==0)
{
int *sumDay=new int(0);
if(subYear>0) //输入的年份不为2004年的情况
{
for(int i=2004;i<date->year;i++)
{
if((i%4==0&&i%100!=0)||i%400==0)
*sumDay+=366;
else
*sumDay+=365;
}
for(int j=1;j<date->month;j++)
{
switch(j)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:*sumDay+=31;break;
case 4:case 6:case 9:case 11:*sumDay+=30;break;
case 2:
if((j%4==0&&j%100!=0)||j%400==0)
*sumDay+=29;
else
*sumDay+=28;
}
}
}
else if(subYear==0) //输入的年份大于2004年时候的情况
{
for(int j=1;j<date->month;j++)
{
switch(j)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:*sumDay+=31;break;
case 4:case 6:case 9:case 11:*sumDay+=30;break;
case 2:
if((j%4==0&&j%100!=0)||j%400==0)
*sumDay+=29;
else
*sumDay+=28;
}
}
}
int *modDay=new int;
*modDay=*sumDay%7;
*modDay+=4;
if(*modDay>7)
*modDay%=7;
int day=0;
int *monthDay=new int;
switch(date->month)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:*monthDay=31;break;
case 4:case 6:case 9:case 11:*monthDay=30;break;
case 2:
if((date->month%4==0&&date->month%100!=0)||date->month%400==0)
*monthDay+=29;
else
*monthDay=28;
}
printf(" Sun Mon Tue Web Thu Fri Sat\n");
for(int i=0;i<*modDay;i++)
{
day++;
printf(" ");
}
for(int i=1;i<=*monthDay;i++)
{
if(day>=7)
{
day%=7;
printf("\n");
}
printf("%4d ",i);
day++;
}
printf("\n================================================\n");
printf("请输入一个年份和月份以空格隔开,输入0退出:");
delete subYear;
delete sumDay;
delete modDay;
delete monthDay;
}
else
{
continue;
}
}
system("pause");
delete date;
return 0;
}

浙公网安备 33010602011771号