gongzuolong 发表于 2012-3-30 21:27:54

第11节课的作业 万年历 vc++6.0编译的

#include <stdio.h>
int isN(int a)
{
if(a%4==0&&a%100!=0||a%400==0)
return 1;
else
return 0;
}
void date(int a,int b,int z)
{
int i=1,j;
for(j=1;j<=b;j++)
{
printf("      ");
}
for(;i<=a;i++)
{
if(i==z)
{
   printf("   [%d]",i);
}
else
{
   printf(" %5d",i);
}
if((i+b)%7==0)
   printf("\n");
}
printf("\n");
}
int howdays(int x,int y,int z)
{
int m=0,i;
if(x>=1979)
{
for(i=1979;i<x;i++)
{
   if(isN(i))
    m+=366;
   else
    m+=365;
}
}
switch(y)
{
case 1:m+=0;break;
case 2:m+=31;break;
case 3:m+=59;break;
case 4:m+=90;break;
case 5:m+=120;break;
case 6:m+=151;break;
case 7:m+=181;break;
case 8:m+=212;break;
case 9:m+=243;break;
case 10:m+=273;break;
case 11:m+=304;break;
case 12:m+=334;break;
default:printf("enter data error!\n");
}
if(isN(x)&&y>2)
   return m+(z-1)+1;
else
   return m+(z-1);
}
int month(int a,int x)
{
if(a==1)
return 31;
if(a==2)
{
if(isN(x))
   return 29;
else
   return 28;
}
if(a==3)
return 31;
if(a==4)
return 30;
if(a==5)
return 31;
if(a==6)
return 30;
if(a==7)
return 31;
if(a==8)
return 31;
if(a==9)
return 30;
if(a==10)
return 31;
if(a==11)
return 30;
if(a==12)
return 31;
}
int main()
{
int i,b,a,x,y,z;
char c=0;
printf("输入日期 如2012-1-1:");
scanf("%d-%d-%d",&x,&y,&z);
while(c!='q')
{
system("cls");
printf("%d-%d-%d:\n",x,y,z);
if(x>=1979&&y>0&&y<=12&&z>0&&z<=month(y,x))
{
printf("    MonTuesWed   ThursFri   Sat   Sun\n");
i=howdays(x,y,1);
b=i%7;
a=month(y,x);
date(a,b,z);
printf("q键退出...\n\n方向键上年份+1方向键下年份-1方向键右月份+1方向键左月份-1\n");
printf("a键天数-1s键天数+1");
c=getch();
if(c==0x48)
{
x++;z=1;
}
if(c==0x50&&x>1979)
{
x--;z=1;
}
if(c==0x4b&&y>1)
{
y--;
z=1;
}
if(c==0x4d&&y<12)
{
y++;
z=1;
}
if(c=='a'&&z>1)
z--;
if(c=='s'&&z<month(y,x))
z++;
}
else
{
printf("输入日期有误,请重新输入:");
scanf("%d-%d-%d",&x,&y,&z);
}
}
return 0;
}

gongzuolong 发表于 2012-3-30 21:34:57

刚学C   看了Nisy老师的教程后,也是按照视频中所提的思路写了个,望各位老师指点一二。。
页: [1]
查看完整版本: 第11节课的作业 万年历 vc++6.0编译的