C语言课程设计报告题目:编写万年历系统年级:专业:班级:姓名:学号:目录第1章设计目的第2章需求分析第3章概要设计第4章源程序清单第5章执行结果1)登陆界面2)显示当前日月历3)显示具体日期信息第6章程序问题调试与课程设计心得第1章设计目的设计目的(实验要求):1.模仿现实生活中的挂历.2.当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几).3.当系统日期变到下一月时,系统自动翻页到下一月.第2章需求分析(1)程序运行时,首先给出菜单选项和输入提示:(2)用户可以通过主菜单选择不同选项。
输入1,通过输入当前日期可显示当前月的日历;输入2,通过输入具体日期(中间以空格分开)可显示该日具体信息;输入3,则退出查询系统。
第3章概要设计1.菜单选择界面可通过下面所示函数时现;主要思路:通过while语句与swich…case以及if条件语句实现菜单的循环功能和不同选项的功能实现。
闰年与平年的判断:代码如下:void main(){int year,month,day,a,b;while(1){printf("\n\n\n\n");printf("**********************************************************\n\n");printf(" * * \n");printf(" Welcome to enter calendar system \n");printf(" * * \n\n");printf("**********************************************************\n\n\n");printf(" 1 The month of current date 2 Date 3 Exit\n");printf(" please import your choose<1~3>,press Enter to define: ");scanf("%d",&b);switch(b){case 1:printf("\n Please import the year,month and day which you want tocheck,the year,month and day separation by blank space: ");scanf("%d%d%d",&year,&month,&day);a=x3(year,month,1);if(a==0){printf("Error!Please import again.\n");break;}yueli(year,month,day);break;case 2:printf("\n Please import the year,month and day which you want to check,the year,month and day separation by blank space: ");scanf("%d%d%d",&year,&month,&day);a=x3(year,month,day);if(a==0){printf("Error!Please import again.\n");break;}rili(year,month,day);break;case 3:exit(0);default:printf("Error!Please import again.\n\n");}}2.闰年的判断:计算所输入的年份是否可被4整除,若不能被整除,为平年。
若可被4整除,计算此年份能否被100整除,不能被100整除则为闰年。
既能被4整除,也能被100整除的年份,若也能被400整除,则为闰年,否则为平年。
闰年366天,平年365天代码:int runnian(int year){if(year%4==0&&year%100!=0||year%400==0)return 1;elsereturn 0;}3.判断某月的天数;通过函数:int day1(int year,int month){int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};若为闰,则二月为29天。
第4章源程序清单#include<stdio.h>#include<stdlib.h>/*定义头文件*/int runnian(int year){if(year%4==0&&year%100!=0||year%400==0) /*利用函数判断输入年份是闰年还是平年*/return 1;elsereturn 0;}int day1(int year,int month){int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};/*定义数组确定12个月每个月的天数*/if(runnian(year)) /*如果输入年份是闰年*/a[1]=29; /*二月29天*/return a[month-1];}int day2(int year,int month,int day){int i,sum=0;for(i=1;i<month;i++){sum+=day1(year,i);}sum+=day;return sum;}int week1(int year,int month,int day){intnumber=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+day2(year,month,day);number%=7;return number;}char *Week2(int number){switch(number) /*分类一周七天*/{case 0:return "Sunday";case 1:return "Monday";case 2:return "Tueaday";case 3:return "Wednesday";case 4:return "Thurday";case 5:return "Friday";case 6:return "Saturday";default:return "Error!please import again.\n";/*不符和上面七种情况的报错提示*/}}void x1(int year,int month,int day){int number=week1(year,month,day);if(runnian(year))printf("common year");/*年份为闰年则输出"闰年"*/else printf("common year");printf(" %d year %d month %dday%10s\n\n",year,month,day,Week2(number));/*按年月日输出结果*/}void x2(int year,int month){int max,number,i,j=1;max=day1(year,month);number=week1(year,month,1);printf("%2s%2s%2s%2s%2s%2s%2s\n"," Sunday "," Monday "," Tueaday"," Wednesday "," Thurday "," Friday ","Saturday ");/*按照间隔打印日历*/ for(i=0;i<number;i++){printf(" ");}while(j<=max){printf("%8d",j);if(i%7==6){printf("\n");}i++;j++;}printf("\n\n");}int x3(int year,int month,int day){if(year<0||month<1||month>12||day<1||day>day1(year,month)) /*当输入值出现这些情况时*/return 0; /*返回0*/elsereturn 1; /*返回1*/}void yueli(int year,int month,int day){if(runnian(year))printf("leap year");else printf("common year");printf(" %d year %d month %d day\n\n",year,month,day);x2(year,month);}void rili(int year,int month,int day){printf("\n");x1(year,month,day);}void main(){int year,month,day,a,b;while(1){printf("\n\n\n\n");printf("**********************************************************\n\n");printf(" * * \n");printf(" Welcome to enter calendar system \n");printf(" * * \n\n");printf("**********************************************************\n\n\n");printf(" 1 The month of current date 2 Date 3 Exit\n");printf(" please import your choose<1~3>,press Enter to define: ");scanf("%d",&b);switch(b){case 1: /*选择1时*/printf("\nPlease import the year,month and day which you want to check,the year,month and day separation by blank space: "); /*给出输入提示*/scanf("%d%d%d",&year,&month,&day); /*输入需要查询的年月日*/a=x3(year,month,1);if(a==0){printf("Error!Please import again.n");/*输入值异常时报错*/break;}yueli(year,month,day);break;case 2: /*选择2时*/printf("\nPlease import the year,month and day whichyou want to check,the year,month and day separation by blank space: "); /*给出输入提示*/scanf("%d%d%d",&year,&month,&day);/*输入年月日*/a=x3(year,month,day);if(a==0){printf("Error!Please import again.n");/*输入值异常时报错*/break;}rili(year,month,day);break;case 3:exit(0);default:printf("Error!Please import again.\n\n");}}}第5章执行结果1)登陆界面2)显示当前日历月3)显示具体日期信息第6章程序问题调试与课程设计心得1)程序问题调试(1) 调用的week2函数中,忘记在万年历中一周的第一天是sunday。