C语言万年历程序设计-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN目录第1章需求分析 ....................................... 错误!未定义书签。
第2章概要设计 ...................................... 错误!未定义书签。
第3章详细设计 ....................................... 错误!未定义书签。
第四章运行结果及分析 .......................... 错误!未定义书签。
1.登陆界面.............................................. 错误!未定义书签。
2.显示某年全年日历 .............................. 错误!未定义书签。
3.显示某月日历 ...................................... 错误!未定义书签。
第5章课程设计心得............................ 错误!未定义书签。
参考文献................................................... 错误!未定义书签。
第1章需求分析(1)程序运行时,首先给出四个菜单选项和输入提示:图1-1(2)用户可以通过主菜单选择不同选项。
输入1,通过输入年份可显示一年每个月份的日历;输入2,通过输入年份和月份(中间以空格分开)可显示该月的日历;若输入3,通过输入年份月份和日期(中间以空格分开)可显示该日的星期;输入0,则退出查询系统。
第2章概要设计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(" 欢迎进入万年历查询系统 \n");printf(" * * \n\n");printf("**********************************************************\n\n\n"); printf(" 1 年历 2 月历 3 日历 4 退出\n");printf(" 请输入您的选择<1~4>,按回车键确定: ");scanf("%d",&b);switch(b){case 1:printf("\n请输入您要查的年份: ");scanf("%d",&year);a=x3(year,1,1);if(a==0){printf("错误!请您重新输入。
\n");break;}nianli(year);break;case 2:printf("\n请输入您要查的年和月,年月之间用空格隔开: ");scanf("%d%d",&year,&month);a=x3(year,month,1);if(a==0){printf("错误!请您重新输入。
\n");break;}yueli(year,month);break;case 3:printf("\n请输入您要查的年月日,年月日之间用空格隔开: ");scanf("%d%d%d",&year,&month,&day);a=x3(year,month,day);if(a==0){printf("错误!请您重新输入。
\n");break;}rili(year,month,day);break;case 4:exit(0);default:printf("错误!请您重新输入。
\n\n");}}2.显示一年的日历,可通过函数void x1()实现,思路如下:●先判断输入年份是否为闰年,若为闰年,则定义二月为29天,通过调用函数判断是否为闰年及每个月的天数●依次打印12个月的月份●打印每个月的日历,显示个每个月的日历:printf("%2s%2s%2s%2s%2s%2s%2s\n"," 星期日 "," 星期一 "," 星期二"," 星期三 "," 星期四 ","星期五 "," 星期六 ");3.闰年的判断:计算所输入的年份是否可被4整除,若不能被整除,为平年。
若可被4整除,计算此年份能否被100整除,不能被100整除则为闰年。
既能被4整除,也能被100整除的年份,若也能被400整除,则为闰年,否则为平年。
闰年366天,平年365天图2-1代码:int runnian(int year){if(year%4==0&&year%100!=0||year%400==0)return 1;elsereturn 0;}4.判断某月的天数;通过函数:int day1(int year,int month){int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};若为闰,则二月为29天。
图2-2代码:if(runnian(year))a[1]=29;第3章详细设计#include<>#include<> /*定义头文件*/int runnian(int year)/*定义变量*/{if(year%4==0&&year%100!=0||year%400==0) /*利用函数判断输入年份是闰年还是平年*/return 1;elsereturn 0;}int day1(int year,int month){inta[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){int number=(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 "星期日";case 1:return "星期一";case 2:return "星期二";case 3:return "星期三";case 4:return "星期四";case 5: return "星期五";case 6:return "星期六";default:return "错误!请您重新输入。
";/*不符和上面七种情况的报错提示*/}}void x1(int year,int month,int day){int number=week1(year,month,day);if(runnian(year))printf("闰年");/*年份为闰年则输出“闰年“*/else printf("平年");printf(" %d 年 %d 月 %d日%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"," 星期日"," 星期一 "," 星期二"," 星期三 "," 星期四 "," 星期五 "," 星期六 ");/*按照间隔打印日历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>d ay1(year,month))/*当输入植出现这些情况时*/return 0;/*返回0*/elsereturn 1;/*返回1*/}void nianli(int year){int i;printf("\n");for(i=1;i<=12;i++){if(runnian(year))printf("闰年");else printf("平年");printf(" %d 年 %d 月\n\n",year,i);}}void yueli(int year,int month){if(runnian(year))printf("闰年");else printf("平年");printf(" %d 年 %d 月\n\n",year,month);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(" 欢迎进入万年历查询系统 \n");printf(" * * \n\n");printf("**********************************************************\n\n\n");printf(" 1 年历 2 月历 3 日历 4退出\n");printf(" 请输入您的选择<1~4>,按回车键确定: ");scanf("%d",&b);switch(b){case 1:/*选择1时*/printf("\n请输入您要查的年份: ");/*给出输入提示*/scanf("%d",&year);/*输入查询的年份*/a=x3(year,1,1);if(a==0){printf("错误!请您重新输入。