当前位置:文档之家› C语言万年历课程设计报告书

C语言万年历课程设计报告书

C语言课程设计报告书万年历系统设计学院:理学院专业:信息与计算科学姓名:指导教师:序言经过一个学期对《C程序设计》的学习,同学们都认为真正的学到了有用知识,可能有一些人学的不够理想,但无论如何,这些知识都为我们的下一步学习打下了坚实的基础。

做这么一个课程设计,一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。

本程序是一个万年历程序,可以查询1970年1月1日到2100年1月1日中任意一天是星期几,只要在运行程序时按照要求输入年,月,日,程序就会把这一天是星期几显示子啊屏幕上;也可以输入一个年份和一个月份,程序就会把该月份的月历显示在屏幕上,使人一目了然。

该程序能与目前天文学研究中所采用的各种日历程序所能计算的结果相一致。

还有许多功能等着你去探讨。

这个程序花费了很多时间,用了一天的时间去设计程序和调试程序,而在调试程序的过程中,经常会出现一些不如意的地方,所以程序就要修改。

所以这样经过一次又一次的修改之后,程序更显得人性化。

通过这一次程序的设计,让我深深的感受到程序员的辛苦。

2012年6月11日【课程设计题目:万年历系统】【要求】1:程序的功能多样;2:输入日期能够判断该日期是星期几;3:输入一个年份能够显示出该年的全部月历;4:输入一个年月能够显示该月的月历;5:输入一个年份能够判断该年是闰年还是平年;6:能够退出。

【系统功能模块图】主要功能模块1:程序代码:{printf("please input the day you want(2100,1,1>****,**,**>1970,1,1):");scanf("%d,%d,%d",&year,&month,&day);for(b=0,r=0;b<month;b++){r=a[b]+r;}year=year-1972;r=r+(year/4)*1461+(year%4)*365+day;if(r%7==0)printf (" Today is Saturday.\n");else if(r%7==1)printf(" Today is Sunday.\n");else if(r%7==2)printf(" Today is Monday.\n");else if(r%7==3)printf(" Today is Tuesday.\n");else if(r%7==4)printf(" Today is Wednesday.\n");else if(r%7==5)printf(" Today is Thursday.\n");else printf(" Today is Firday.\n");choose=getchar();printf("Continue?(y/n):\n");scanf("%c",&choose);if (choose=='y'||choose=='Y') main();}主要功能模块2:程序代码:{static int t[12]={31,0,31,30,31,30,31,31,30,31,30,31};int i,y,weekday=0;long days=0;if(leap_year(year)) t[1]=29;else t[1]=28;y=t[month-1];if(year>2006){days=(year-2006)*365+count_leap(year)+monthdays(month,year);weekday=days%7;}else if(year<2006){days=(2005-year)*365+count_leap(year)+monthdays(month,year);weekday=7-days%7;}else{days=monthdays(month,year);weekday=days%7;}for (i=1;i<weekday+2;i++)printf ("\t");for (i=1;i<=y;i++){if ((i+weekday-1)%7==0) printf ("\n\t%3d\t",i);else printf ("%3d\t",i);};}主要功能模块3:程序代码:{ int i;if (year%4==0&&year%100!=0||year%400==0) i=1;else i=0;return i;}【用到的语句】1.<stdio.h>,<conio.h> /*头文件*/2.main() /*主函数*/3.printf(),4.scanf()5.a[] /*数组*/6.if 语句7.for 语句8.void /*要调用到的函数*/【源程序代码】#include<stdio.h>#include <conio.h>int main() //主函数{ int leap_year(int y);int count_leap(int year);int monthdays(int month,int year);void monthprint(int year,int month);int year,month,day,b,r,number; //定义变量char choose;int a[]={0,31,28,31,30,31,30,31,31,30,31,30,31};printf("*********************************mainMeun***********************************\n"); printf(" 1:ri qi>>>xing qi ji.\n");printf(" 2:yue li.\n");printf(" 3:ri li.\n");printf(" 4:run nian pan duan. \n");printf(" 5:exit\n");printf("\n");printf("*****************************************************************************\n"); printf (" please input the number:");scanf("%d",&number);if(number==1){printf("please input the day you want(2100,1,1>****,**,**>1970,1,1):");scanf("%d,%d,%d",&year,&month,&day); //输入要查询的日期for(b=0,r=0;b<month;b++) //计算输入月份与但年月份间隔了多少天{r=a[b]+r;}year=year-1972;r=r+(year/4)*1461+(year%4)*365+day; //计算输入日期与1970,1,1间隔了多少天if(r%7==0)printf (" Today is Saturday.\n");else if(r%7==1)printf(" Today is Sunday.\n");else if(r%7==2)printf(" Today is Monday.\n");else if(r%7==3)printf(" Today is Tuesday.\n");else if(r%7==4)printf(" Today is Wednesday.\n");else if(r%7==5)printf(" Today is Thursday.\n");else printf(" Today is Firday.\n");choose=getchar();printf("Continue?(y/n):\n"); //选择是否继续scanf("%c",&choose);if (choose=='y'||choose=='Y') main(); //主函数调用主函数本身}else if(number==2){ printf(" please input the year(5000>****>0):");scanf("%d",&year); //输入要查询的年份for(month=1;month<13;month++) //循环输出12个月份的月历{ printf(" %dyear %dmonth\n",year,month);printf("****************************************************************************\n");printf(" Sun Mon Tue Wen Thu Fri Sat\n");monthprint(year,month);printf("\n");printf("****************************************************************************\n");}choose=getchar();printf("Continue?(y/n):\n\n");scanf("%c",&choose);if (choose=='y'||choose=='Y') main();}else if(number==3){ printf("please input the year and month(2100,1>****,**>1970,1):");scanf("%d,%d",&year,&month); //输入要查询的年,月printf(" %dyear %dmonth\n",year,month);printf("************************************************************************\n");printf(" Sun Mon Tue Wen Thu Fri Sat\n");monthprint(year,month); //printf("\n");printf("************************************************************************\n");choose=getchar();printf("Continue?(y/n):\n\n");scanf("%c",&choose);if (choose=='y'||choose=='Y') main(); }else if(number==4){ printf(" please input a year5000>****>0:");scanf("%d",&year); //输入要查询的年份if(leap_year(year))printf("This is runyear.\n");else printf("This is pingyear.\n");choose=getchar();printf("Continue?(y/n):\n\n");scanf("%c",&choose);if (choose=='y'||choose=='Y') main();}else //选择其他则退出return 0;}int leap_year(int year) //判断是否闰年{ int i;if (year%4==0&&year%100!=0||year%400==0) i=1;else i=0;return i;}int count_leap(int year){ int i=0,j,min,max;if(year>2006) {min=2006;max=year;}else {min=year+1;max=2006;}for(j=min;j<max;j++)if(leap_year(j)) i++;return i;}int monthdays(int month,int year) //该月的天数{ int sum=0,i,j;if(year>=2006){ static int t[12]={31,0,31,30,31,30,31,31,30,31,30,31};j=month-1;if(leap_year(year)) t[1]=29;else t[1]=28;for(i=0;i<j;i++)sum=sum+t[i];}else{ static int t1[12]={31,30,31,30,31,31,30,31,30,31,0,31};j=12-month;if(leap_year(year)) t1[10]=29;else t1[10]=28;for(i=0;i<=j;i++)sum=sum+t1[i];}return sum;}void monthprint(int year,int month) //输出该月的月历{ static int t[12]={31,0,31,30,31,30,31,31,30,31,30,31};int i,y,weekday=0;long days=0;if(leap_year(year)) t[1]=29;else t[1]=28;y=t[month-1];if(year>2006){days=(year-2006)*365+count_leap(year)+monthdays(month,year);weekday=days%7;}else if(year<2006){days=(2005-year)*365+count_leap(year)+monthdays(month,year);weekday=7-days%7;}else{days=monthdays(month,year);weekday=days%7;}for (i=1;i<weekday+2;i++) //输出该月第一天所在位置之前的空格printf ("\t");for (i=1;i<=y;i++) //输出该月的月历{if ((i+weekday-1)%7==0) printf ("\n\t%3d\t",i);else printf ("%3d\t",i);};}【调试及分析过程】1:在代码编辑器上输入以上程序代码后,保存并f9到tc3.0上运行结果输出:分析:运行后出现“菜单”,选项意思是:输入1,则确定一个日期是星期几。

相关主题