一. 課程設計内容:
運用所學的c語言知識,編制和調試程式,具有如下功能:
能夠顯示年曆、月曆、月曆,使用者輸入任一年份能夠顯示出當年的年曆,能夠顯示任意年份任意月份的月曆,使用者輸入任意年份的日期能夠顯示出該天的資訊(星期幾),距離今天有多少天。
二. 課程設計要求:
(1) 采用子產品化程式設計方法;在程式界面,以菜單的形式調用各功能函數;程式可讀性強,界面友好;輸出形式盡量美觀。
(2)課設結束後,上交課程設計說明書,其内容如下:
程式設計題目、需求分析(分析題目的要求)、程式框圖(總體框圖和各功能子產品框圖)、核心技術的實作及其程式段、總結
需求分析
通過對題目的分析,以及個人對程式的了解,解讀的過程,這個課程設計可分為5個子產品。
(1)主菜單子產品:進入該程式,使用者可以在主菜單界面選擇自己想要進行的操作。例如:年曆、月曆、月曆的查詢以及退出的操作。
(2)年曆查詢子產品:在這個子產品使用者輸入任意年份程式會進行分析是否是閏年然後輸出本年的年曆。
(3)月曆查詢子產品:在使用者輸入年份月份後,程式會進行判斷該月的第一天是星期幾然後依次輸出該月的日期。
(4)月曆查詢子產品:使用者輸入想要查詢的日期後程式會計算出距離今天的天數并算出是星期幾。
退出子產品:結束查詢工作。
源程式:
#include<stdio.h>
void main()
{
void year(void);
voidyear_mouth(void);
void cheak();
void menu();
menu();
}
void menu()
{
void year(void);
voidyear_mouth(void);
void cheak();
printf("---------------------------------------------------\n");
printf(" * 1:年曆查詢\n");
printf(" * 2:月曆查詢\n");
printf(" * 3:月曆查詢\n");
printf(" * 0:退出\n");
printf("---------------------------------------------------\n");
int i;
scanf("%d",&i);
switch(i)
{
case 1:year();break;
case2:year_mouth();break;
case3:cheak();break;
case 0:return;
}}
void year(void)
{printf("請輸入您要查詢的年份(2014--)按回車結束\n");
int y,i,n=0,m=0,s,z,j,q,a,i1;
scanf("%d",&y);
for(i=2014;i<y;i++)
{if(i%4==0&&i%100!=0||i%400==0)
n++;
else m++;
}
s=n*366+m*365; z=(s-4)%7;
printf(" 1月 \n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
i=0;i1=0;
for(j=1;j<7*z;j++) printf(" ");
for(j=1;j<=31;j++)
{printf("%-7d",j);
i1++;
if(i1==7-z) printf("\n");
if(i1>7-z) i++;
if(i==7)
{printf("\n"); i=0;
}}
printf("\n");
printf("**********************************************************************\n");
q=(s-4+31)%7;
printf(" 2月 \n");
printf("Snu Mon Tue Wed Thu Fri Sat\n");
i=0;i1=0; for(j=1;j<7*q;j++)
printf("");
if(y%4==0&&y%100!=0||y%400==0)
{a=0;
for(j=1;j<=29;j++)
{printf("%-7d",j);
i1++; if(i1==7-q)
printf("\n");if(i1>7-q) i++;
if(i==7)
{
printf("\n"); i=0;
}}}
else
{a=1; for(j=1;j<=28;j++)
{printf("%-7d",j); i1++;
if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{printf("\n"); i=0;
}}}
printf("\n");
printf("*****************************************************************\n");
printf(" 3月\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
if(a==0)
{q=(s+56)%7;i=0;i1=0;
for(j=1;j<7*q;j++)printf(" ");
for(j=1;j<=31;j++)
{printf("%-7d",j); i1++;
if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{printf("\n"); i=0;
}}
printf("\n");
printf("*****************************************************************\n");
printf(" 4月\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
q=(s+87)%7; i=0;i1=0; for(j=1;j<7*q;j++)
printf("");for(j=1;j<=30;j++)
{printf("%-7d",j); i1++; if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{ printf("\n"); i=0;
}}
printf("\n");
printf("***************************************************************\n");
printf(" 5月\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
q=(s+117)%7; i=0;i1=0; for(j=1;j<7*q;j++)
printf(“ “); for(j=1;j<=31;j++)
{printf("%-7d",j); i1++; if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{ printf("\n"); i=0;
}}
printf("\n");
printf("**************************************************************\n");
printf(" 6月\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
q=(s+148)%7; i=0;i1=0; for(j=1;j<7*q;j++)
printf(""); for(j=1;j<=30;j++)
{printf("%-7d",j); i1++; if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{printf("\n"); i=0;
}}
printf("\n");
printf("**********************************************************\n");
printf(" 7月\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
q=(s+178)%7; i=0;i1=0;for(j=1;j<7*q;j++) printf("");
for(j=1;j<=31;j++)
{printf("%-7d",j);i1++; if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{printf("\n"); i=0;
}}
printf("\n");
printf("**************************************************************\n");
printf(" 8月\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
q=(s+209)%7; i=0;i1=0; for(j=1;j<7*q;j++)
printf(""); for(j=1;j<=31;j++)
{printf("%-7d",j); i1++; if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{printf("\n"); i=0;
}}
printf("\n");
printf("***************************************************************\n");
printf(" 9月\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
q=(s+240)%7; i=0;i1=0; for(j=1;j<7*q;j++) printf(" ");
for(j=1;j<=30;j++)
{printf("%-7d",j); i1++; if(i1==7-q)
printf("\n"); if(i1>7-q) i++; if(i==7)
{printf("\n"); i=0;
}}
printf("\n");
printf("************************************************************\n");
printf(" 10月\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
q=(s+270)%7; i=0;i1=0; for(j=1;j<7*q;j++) printf(" ");
for(j=1;j<=31;j++)
{printf("%-7d",j); i1++; if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{printf("\n"); i=0;
}}
printf("\n");
printf("**************************************************************\n");
printf(" 11月\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
q=(s+301)%7; i=0;i1=0; for(j=1;j<7*q;j++)
printf(""); for(j=1;j<=31;j++)
{printf("%-7d",j); i1++; if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{printf("\n"); i=0;
} }
printf("\n");
printf("*****************************************************************\n");
printf(" 12月\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
q=(s+331)%7; i=0;i1=0; for(j=1;j<7*q;j++)
printf(""); for(j=1;j<=31;j++)
{printf("%-7d",j); i1++; if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{printf("\n"); i=0;
}}
printf("\n");
}
else
{q=(s+55)%7; i=0;i1=0; for(j=1;j<7*q;j++)
printf(""); for(j=1;j<=31;j++)
{printf("%-7d",j); i1++; if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{printf("\n"); i=0;
}}
printf("\n");
printf("*************************************************************\n");
printf(" 4月\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
q=(s+86)%7; i=0;i1=0; for(j=1;j<7*q;j++)
printf(""); for(j=1;j<=30;j++)
{printf("%-7d",j);i1++; if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{printf("\n"); i=0;
}}
printf("\n");
printf("***********************************************************\n");
printf(" 5月\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
q=(s+116)%7; i=0;i1=0; for(j=1;j<7*q;j++)
printf(""); for(j=1;j<=31;j++)
{printf("%-7d",j); i1++; if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{printf("\n"); i=0;
}}
printf("\n");
printf("**************************************************************\n");
printf(" 6月\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
q=(s+147)%7; i=0;i1=0; for(j=1;j<7*q;j++)
printf(""); for(j=1;j<=30;j++)
{printf("%-7d",j); i1++; if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{printf("\n"); i=0;
}}
printf("\n");
printf("************************************************************\n");
printf(" 7月\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
q=(s+177)%7; i=0;i1=0; for(j=1;j<7*q;j++)
printf("");for(j=1;j<=31;j++)
{printf("%-7d",j); i1++; if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{printf("\n"); i=0;
}}
printf("\n");
printf("******************************************************************\n");
printf(" 8月\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
q=(s+208)%7; i=0;i1=0; for(j=1;j<7*q;j++)
printf(""); for(j=1;j<=31;j++)
{printf("%-7d",j); i1++; if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{printf("\n");i=0;
}}
printf("\n");
printf("********************************************************************\n");
printf(" 9月\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
q=(s+239)%7; i=0;i1=0; for(j=1;j<7*q;j++)
printf("");for(j=1;j<=30;j++)
{printf("%-7d",j); i1++; if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{printf("\n");i=0;
}}
printf("\n");
printf("*******************************************************************\n");
printf(" 10月\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
q=(s+269)%7; i=0;i1=0; for(j=1;j<7*q;j++)
printf(""); for(j=1;j<=31;j++)
{printf("%-7d",j); i1++; if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{printf("\n"); i=0;
}}
printf("\n");
printf("******************************************************************\n");
printf(" 11月\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
q=(s+300)%7; i=0;i1=0; for(j=1;j<7*q;j++)
printf(""); for(j=1;j<=31;j++)
{printf("%-7d",j); i1++; if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{printf("\n"); i=0;
}}
printf("\n");
printf("******************************************************************\n");
printf(" 12月\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
q=(s+330)%7; i=0;i1=0; for(j=1;j<7*q;j++)
printf(""); for(j=1;j<=31;j++)
{printf("%-7d",j); i1++; if(i1==7-q) printf("\n");
if(i1>7-q) i++;if(i==7)
{printf("\n"); i=0;
}}
printf("\n");
}
menu();
}
voidyear_mouth(void)
{
printf("請輸入想要查詢的年份以及月份,例如:2014-1按Enter鍵結束。\n");
intc[12]={31,29,31,30,31,30,31,31,30,31,30,31},e[12]={31,28,31,30,31,30,31,31,30,31,30,31};
inta,b,n=0,m=0,i,s,q,j,i1;
scanf("%d-%d",&a,&b);
for(i=2014;i<a;i++)
{if(i%4==0&&i%100!=0||i%400==0)
n++;else m++;
}
s=366*n+365*m;
if(b>2)
{if(a%4==0&&a%100!=0||a%400==0)
s=s+60; else s=s+59;
switch(b)
{
case 3:printf("%d 3月\n",a);s=s;break;
case 4:printf("%d 4月\n",a); s=s+31;break;
case 5:printf("%d 5月\n",a); s=s+31+30;break;
case 6:printf("%d 6月\n",a);s=s+31+30+31;break;
case 7:printf("%d 7月\n",a);s=s+31+30+31+30;break;
case 8:printf("%d 8月\n",a);s=s+31+30+31+30+31;break;
case 9:printf("%d 9月\n",a);s=s+31+30+31+30+31+31;break;
case 10:printf("%d 10月\n",a);s=s+31+30+31+30+31+31+30;break;
case 11:printf("%d 11月\n",a);s=s+31+30+31+30+31+31+30+31;break;
case12:printf("%d 12月\n",a);s=s+31+30+31+30+31+31+30+31+30;break;
}q=(s-4)%7;//計算本月第一天星期幾
printf("Sun Mon Tue Wed Thu Fri Sat\n");
i=0;i1=0; for(j=1;j<7*q;j++) printf("");
for(j=1;j<=c[b-1];j++)
{printf("%-7d",j); i1++; if(i1==7-q)
printf("\n"); if(i1>7-q) i++;
if(i==7)
{printf("\n"); i=0;
}}}
else if(b<2)
{q=(s-4)%7; printf("%d 1月\n");
printf("************************************\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
i=0;i1=0; for(j=1;j<7*q;j++) printf(" ");
for(j=1;j<=31;j++)
{printf("%-7d",j); i1++; if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{printf("\n"); i=0;
}}}
else
{printf("%d 2月\n");
printf("*********************************\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
s=s+31; q=(s-4)%7; i=0;i1=0; for(j=1;j<7*q;j++) printf(" ");
if(a%4==0&&a%100!=0||a%400==0)
for(j=1;j<=29;j++)
{printf("%-7d",j); i1++; if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{printf("\n"); i=0;
}}
else
for(j=1;j<=28;j++)
{printf("%-7d",j);i1++; if(i1==7-q) printf("\n");
if(i1>7-q) i++; if(i==7)
{printf("\n"); i=0;
}}}
menu();
}
void cheak()
{
inta,b,c,d,e,f,s,n=0,m=0,i,S,j,l;
intq[12]={31,29,31,30,31,30,31,31,30,31,30,31},p[12]={31,28,31,30,31,30,31,31,30,31,30,31};
printf("\n請輸入今天的年月日,例如:2014-1-1按Enter鍵結束。\n");
scanf("%d-%d-%d",&a,&b,&c);
printf("請輸入想要查詢的年月日,例如:2014-1-1按Enter鍵結束。\n");
scanf("%d-%d-%d",&d,&e,&f);
for(i=2014;i<a;i++)
{if(i%4==0&&i%100!=0||i%400==0)
n++; else m++;
}
s=366*n+365*m; if(b<2) s=s+c;
else if(b==2) s=s+31+c; else if(b>2)
if(a%4==0&&a%100!=0||a%400==0)
for(i=1;i<b;i++)
s=s+q[i-1];
else
for(i=1;i<b;i++) s=s+p[i-1]; s=s+c;//計算今天距2014年1月1日多少天
j=(s-5)%7;//計算今天是星期幾
if(j==0) printf("今天是星期日\n");
else printf("今天是星期%d\n",j);
n=0;m=0;for(i=2014;i<d;i++)
if(i%4==0&&i%100!=0||i%400==0)
n++; else m++;
S=366*n+365*m;
if(e<2) S=S+f;
else if(e==2) S=S+31+f;
elseif(d%4==0&&d%100!=0||d%400==0)
{for(i=1;i<e;i++)
S=S+q[i-1]; S=S+f;
}
else
{for(i=1;i<e;i++) S=S+p[i-1];
S=S+f;//計算要查詢的年月日距離2014年1月1日的天數
}
l=S-s;
printf("%d--%d--%d距離今天有%d天\n",d,e,f,l);
j=(S-5)%7; if(j==0)
printf("%d--%d--%d是星期日\n",d,e,f);
else
printf("%d--%d--%d是星期%d\n",d,e,f,j);
menu();
printf("******************************************************\n");
printf("******************************************************\n");
printf("** 謝 謝 使 用 **\n");
printf("** 祝 : **\n");
printf("** 馬 馬 馬 **\n");
printf("** 上 上 到 **\n");
printf("** 有 幸 成 **\n");
printf("** 錢 福 功 **\n");
printf("** !! !! !! **\n");
printf("******************************************************\n");
printf("******************************************************\n");
}