飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3706|回复: 1

[C/C++] C培训第11课作业-万年历

[复制链接]
  • TA的每日心情
    开心
    2015-12-28 01:47
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2011-1-10 03:19:47 | 显示全部楼层 |阅读模式
    本来以为12点之前可以完事的,
    不过不知不觉的就到了凌晨3点...
    又熬夜了!!! 杯具
    用了将近20个小时.终于把这个作业完成了.
    虽然可能还不够完善,不过beta1版的万年历也算成型了.
    以后会进行必要的修正的.
    源码:
    1. void error()
    2. {
    3.         char a = 0;
    4.         clrscr();
    5.         printf("Input Error!!!\n");
    6.         printf("Sorry,\n");
    7.         printf("inorder to ensure the normal operation of the program.\n");
    8.         printf("Please enter a character.\n");
    9.         scanf(" %c",&a);
    10.         return;
    11. }
    12. int leap(int y)
    13. {
    14.         int a = 0;
    15.         if( ( !(y%4) && (y%100) ) || !(y%400) )
    16.         {
    17.                 a = 1;
    18.         }
    19.         return a;
    20. }
    21. int month(int y,int m)
    22. {
    23.         int a = 0;
    24.         if( !(m-4) || !(m-6) || !(m-9) || !(m-11) )
    25.         {
    26.                 a = 30;
    27.         }else if( (m-2) )
    28.         {
    29.                 a = 31;
    30.         }else
    31.         {
    32.                 if(leap(y))
    33.                 {
    34.                         a = 29;
    35.                 }
    36.                 else
    37.                 {
    38.                         a = 28;
    39.                 }
    40.         }
    41.         return a;
    42. }
    43. int ymd(int y,int m,int d)
    44. {
    45.         int a = 0;
    46.         if(y<1901 || y>2099 || m<1 || m>12 || d<1 || d>month(y,m))
    47.         {
    48.                 error();
    49.         }else
    50.         {
    51.                 a = 1;
    52.         }
    53.         return a;
    54. }
    55. int year( int y )
    56. {
    57.         int i = 1901;
    58.         int b = 0;
    59.         unsigned int c = 0;
    60.         char d = 0;
    61.         for ( ; i<y ; i++)
    62.         {
    63.                 if( leap(i) )
    64.                 {
    65.                         b = 366;
    66.                 }
    67.                 else
    68.                 {
    69.                         b = 365;
    70.                 }
    71.                 c += b;
    72.         }
    73.         d = (c+2) % 7;
    74.         return d;
    75. }
    76. int moon(int y,int m)
    77. {
    78.         int i = 0;
    79.         int a = 0;
    80.         int b = 0;
    81.         int c = 0;
    82.         for ( i=1 ; i<m ; i++ )
    83.         {
    84.                 a = month(y,i);
    85.                 b += a;
    86.         }      
    87.         c = year( y );
    88.         c = (c+b) % 7;
    89.         return c;
    90. }
    91. int algorithm(int y,int m,int d)
    92. {
    93.         int a;
    94.         if( !ymd(y,m,d) )
    95.         {
    96.                 main();
    97.         }else
    98.         {
    99.                
    100.                 a = moon(y,m);
    101.         }
    102.         return a;

    103. }
    104. void output(int a,int y,int m,int d)
    105. {
    106.         int b = 0;
    107.         int c = 0;
    108.         int e = 0;
    109.         int f = 0;
    110.         int g = 0;
    111.         clrscr();
    112.         printf("A Perpetual Calendar Beta1. By:LShang\n\n");
    113.         printf("   The current date is:%d-%d-%d\n",y,m,d,a);
    114.         gotoxy(1,6);
    115.         printf("   Sun   Mon   Tue   Wed   Thu   Fri   Sat\n\n");
    116.         while( c < a )
    117.         {
    118.                 printf("      ");
    119.                 c++;
    120.         }
    121.         for( b = 1 ; b <= month(y,m) ; b++)
    122.         {
    123.                 if( !(c % 7) && c )
    124.                 {
    125.                         printf("\n\n");
    126.                         f++;
    127.                 }
    128.                 printf("    %02d",b);
    129.                 if(!(b-d))
    130.                 {                              
    131.                         e = c;
    132.                         g = f;
    133.                 }
    134.                 c++;
    135.         }
    136.         gotoxy(1,22);
    137.         printf("You can use the '%c' or '%c' to adjust the year.",0x1e,0x1f);
    138.         printf("\nYou can use the '%c' or '%c' to adjuse the month.",0x11,0x10);
    139.         printf("\nIf you want to re-define the date ,press the space bar.");
    140.         printf("\nIf you want to exit,press the number key '0'");
    141.         gotoxy( ( 6*(e%7)+4 ),( 6+2*(g+1) ) );
    142.         return;
    143. }
    144. void smile(int x,int u,int v)
    145. {
    146.         int a = 0;
    147.         int b = 0;
    148.         a = 1;
    149.         gotoxy(u,v);
    150.         for(b=1 ; b<=10;b++)
    151.         {
    152.                 if(a == (5+x-1) || a == (5-x+1))
    153.                 {
    154.                         printf("*");
    155.                 }else
    156.                 {
    157.                         printf(" ");
    158.                 }
    159.                 a++;
    160.         }
    161.         return;
    162. }
    163. main()
    164. {
    165.         int y = 0;
    166.         int m = 0;
    167.         int d = 0;
    168.         int b[1] = {0};
    169.         int x = 0;
    170.         int u = 0;
    171.         int v = 0;
    172.         clrscr();
    173.         printf("A Perpetual Calendar Beta1. By:LShang\n\n");
    174.         printf("Press 'ctrl' + 'c' to exit.\n\n");
    175.         printf("Please enter a date,For example(2011-1-9):");
    176.         scanf("%d-%d-%d",&y,&m,&d);
    177. go:     output(algorithm(y,m,d),y,m,d);
    178.         while(*b != 0x30)
    179.         {
    180.                 *b = getch();
    181.                 if(*b == 0x48)
    182.                 {
    183.                         if(!(y-1901))
    184.                         {
    185.                                 y = 2099;
    186.                         }else
    187.                         {
    188.                                 y--;
    189.                         }
    190.                 }else if(*b == 0x50)
    191.                 {
    192.                         if(!(y-2099))
    193.                         {
    194.                                 y = 1901;
    195.                         }else
    196.                         {
    197.                                 y++;
    198.                         }
    199.                 }else if(*b == 0x4b)
    200.                 {
    201.                         if(!(m-1))
    202.                         {
    203.                                 y--;
    204.                                 m = 12;
    205.                         }else
    206.                         {
    207.                                 m--;
    208.                         }
    209.                 }else if(*b == 0x4d)
    210.                 {
    211.                         if(!(m-12))
    212.                         {
    213.                                 y++;
    214.                                 m = 1;
    215.                         }else
    216.                         {
    217.                                 m++;
    218.                         }
    219.                 }else if(*b == 0x20)
    220.                 {
    221.                         main();
    222.                 }
    223.                 goto go;
    224.         }
    225.         clrscr();
    226.         gotoxy(20,1);
    227.         printf("Thank you for you use,Bye.%c",0x01);
    228.         v = 5;
    229.         for(x=1 ; x<=5 ; x++)
    230.         {
    231.                 u = 19;
    232.                 smile(x,u,v);
    233.                 u = 39;
    234.                 smile(x,u,v);
    235.                 v++;
    236.         }
    237.         v = 13;
    238.         for(x=5 ; x>=1 ; x--)
    239.         {
    240.                 u = 29;
    241.                 smile(x,u,v);
    242.                 v++;
    243.         }

    244. }
    复制代码
    截图:
    开始界面:

    1

    1

    运行界面:

    2

    2

    退出界面:

    3

    3

    源码附件:
    test.c.rar (5.99 KB, 下载次数: 20)
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2011-3-24 09:53:02 | 显示全部楼层
    学习学习
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表