《C语言万年历课程设计(15页).doc》由会员分享,可在线阅读,更多相关《C语言万年历课程设计(15页).doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-C语言万年历课程设计-第 11 页万年历课程设计目录第1章需求分析6第2章 概要设计6第3章详细设计11第四章 运行结果及分析171.登陆界面172.显示某年全年日历173.显示某月日历18第5章课程设计心得20参考文献21第1章需求分析(1)程序运行时,首先给出四个菜单选项和输入提示:图1-1(2)用户可以通过主菜单选择不同选项。输入1,通过输入年份可显示一年每个月份的日历;输入2,通过输入年份和月份(中间以空格分开)可显示该月的日历;若输入3,通过输入年份月份和日期(中间以空格分开)可显示该日的星期;输入0,则退出查询系统。第2章 概要设计1 菜单选择界面可通过下面所示函数时现; 主要思
2、路:通过while语句与swichcase以及if条件语句实现菜单的循环功能和不同选项的功能实现。闰年与平年的判断:代码如下: void main() int year,month,day,a,b; while(1) printf(nnnn);printf( *nn);printf( * * n);printf( 欢迎进入万年历查询系统 n); printf( * * nn); printf( *nnn);printf( 1 年历 2 月历 3 日历 4 退出n);printf( 请输入您的选择,按回车键确定: );scanf(%d,&b); switch(b) case 1: printf(
3、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
4、(%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(错误!请您重新输入。nn); 2 显示一年的日历,可通过函数void x1()实现,思路如下:先判断输入年份是否为闰年,若为闰年,则定义二月为29天,通过调用函数判断是否为闰年及每个月的天数依次打印12个月的月份打印每个月的日历,显示个每个月的日历:printf(%2s%2s%2s%2s%2s%2s%2
5、sn, 星期日 , 星期一 , 星期二, 星期三 , 星期四 , 星期五 , 星期六 );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; else return 0; 4 判断某月的天数;通过函数:int day1(int year,int month
6、) int a12=31,28,31,30,31,30,31,31,30,31,30,31;若为闰,则二月为29天。 图2-2代码:if(runnian(year)a1=29;第3章详细设计#include#include#includeusing namespace std;int runnian(int year)/函数:判断是否闰年if(year%4=0&year%100!=0|year%400=0) /*利用函数判断输入年份是闰年还是平年*/return 1;/是则返回1值elsereturn 0;/否则返回0值int day1(int year,int month)/函数:计算输入该
7、月份的天数int a13=0,31,28,31,30,31,30,31,31,30,31,30,31;/*定义数组确定12个月每个月的天数*/if(runnian(year) /调用闰年判断函数a2=29;/如果为闰年,则二月份天数为29,否则默认为28return amonth;/返回该月份的天数值int day2(int year,int month,int day)/函数:计算从该年第一天到该天的天数 int i,sum=0; for(i=1;imonth;i+) sum+=day1(year,i);/计算今年这个月前的总天数 sum+=day;/计算今年今天距一月一号的天数 retur
8、n 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 星
9、期一;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)cout闰年;/*年份为闰年则输出闰年*/else cout平年;coutyear年month月day日Wee
10、k2(number);/*按年 月 日输出结果*/void x2(int year,int month)/函数:图表(body)显示int max,number,i,j=1;max=day1(year,month);/该月的天数的赋值number=week1(year,month,1);/该月第一天的星期数的赋值coutsetw(8)SUNsetw(8)MONsetw(8)TUEsetw(8)WEDsetw(8)THUsetw(8)FRIsetw(8)SATendl;for(i=0;inumber;i+)cout ;/找出该月一号所在的位置while(j=max)coutsetw(8)j;if
11、(i%7=6)printf(n);/判断输出是否要换行i+;j+;coutendlendl;int x3(int year,int month,int day)/函数:判断输入值的正误if(year0|month12|dayday1(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)coutsetw(10)闰年;else printf(平年);printf( %d 年 %d
12、 月nn,year,i);x2(year,i);void yueli(int year,int month)/函数:月历if(runnian(year)coutsetw(10)闰年;else printf(平年);printf( %d 年 %d 月nn,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(nnnn);printf( *nn);printf
13、( * * n);printf( 欢迎进入万年历查询系统 n);printf( * * nn);printf( *nnn);printf( 1 年历 2 月历 3 日历 4 退出n);printf( 请输入您的选择,按回车键确定: );scanf(%d,&b);switch(b)case 1:/*选择1时*/printf(n请输入您要查的年份: );/*给出输入提示*/scanf(%d,&year);/*输入查询的年份*/a=x3(year,1,1);if(a=0)printf(错误!请您重新输入。n);/*输入植异常时报错*/break;nianli(year);break;case 2:/
14、*选择二时*/printf(n请输入您要查的年和月,年月之间用空格隔开: );/*给出输入提示*/scanf(%d%d,&year,&month);/*输入需要查询的年 月*/a=x3(year,month,1);if(a=0)printf(错误!请您重新输入。n);break;yueli(year,month);break;case 3:/*选择3时*/printf(n请输入您要查的年月日,年月日之间用空格隔开: );/*给出输入提示*/scanf(%d%d%d,&year,&month,&day);/*输入年 月 日*/a=x3(year,month,day);if(a=0)printf(
15、错误!请您重新输入。n);/*输入植异常时报错*/break;rili(year,month,day);break;case 4:exit(0);default:printf(错误!请您重新输入。nn);第四章 运行结果及分析 图4-1登陆界面提供了四个选项进行选择,并提示输入后的操作方法; 图4-2输入指令后,依次打印出每个月份的日历。并显示平年或者闰年; 3.显示某月日历 图4-3第5章课程设计心得 通过本次课程设计我第一次通过自己的实践对书本上的知识进行了与生活相关的运用。在这个程序中,主要应用了这学期所学习的循环,条件语句,数组以及调用函数。这些知识的应用使我对课本内容的认识得到了加深。 在编写程序的过程中,也出现了很多错误。比如程序语句错误导致检测时连续报错;函数语句编写错误导致输出结果与实际不符等。出现这些情况后,通过对一些新知识的学习和对网上相关资料的阅览,我发现了自己的程序的问题所在并进行了改正。最后得到了正确的结果。 在程序的编写完成后,我按照要求对程序进行了拓展。在输出年历的基础上增加了月历及确定日期的输出。本来设想增加农历生肖功能,但是由于程序过于复杂,最终没能在规定时间内调试成功。参考文献1 谭浩强. C语言程序设计教程M2 C语言程序设计精品课程4567