《C语言万年历程序设计(38页).doc》由会员分享,可在线阅读,更多相关《C语言万年历程序设计(38页).doc(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-目录第1章需求分析6第2章 概要设计6第3章详细设计11第四章 运行结果及分析171.登陆界面172.显示某年全年日历173.显示某月日历18第5章课程设计心得20参考文献21第1章需求分析(1)程序运行时,首先给出四个菜单选项和输入提示:图1-1(2)用户可以通过主菜单选择不同选项。输入1,通过输入年份可显示一年每个月份的日历;输入2,通过输入年份和月份(中间以空格分开)可显示该月的日历;若输入3,通过输入年份月份和日期(中间以空格分开)可显示该日的星期;输入0,则退出查询系统。第2章 概要设计1 菜单选择界面可通过下面所示函数时现; 主要思路:通过while语句与swichcase以及i
2、f条件语句实现菜单的循环功能和不同选项的功能实现。闰年与平年的判断:代码如下: 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(n请输入您要查的年份: ); scanf(%d,
3、&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,&d
4、ay); 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%2sn, 星期日 , 星期一 , 星期二, 星期
5、三 , 星期四 , 星期五 , 星期六 );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) int a12=31,28,31,30,3
6、1,30,31,31,30,31,30,31;若为闰,则二月为29天。 图2-2代码:if(runnian(year)a1=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)int a12=31,28,31,30,31,30,31,31,30,31,30,31;/*定义数组确定12个月每个月的天数*/i
7、f(runnian(year) /*如果输入年份是闰年*/a1=29;/*二月29天*/return amonth-1;int day2(int year,int month,int day)int i,sum=0;for(i=1;imonth;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 numb
8、er;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(y
9、ear)printf(闰年);/*年份为闰年则输出“闰年“*/else printf(平年);printf( %d 年 %d 月 %d 日%10snn,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%2sn, 星期日 , 星期一 , 星期二, 星期三 , 星期四 , 星期五 , 星期六 );/*按照间隔打印日历for
10、(i=0;inumber;i+)printf( );while(j=max)printf(%8d,j);if(i%7=6)printf(n);i+;j+;printf(nn);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)printf(闰年);else printf
11、(平年);printf( %d 年 %d 月nn,year,i);void yueli(int year,int month)if(runnian(year)printf(闰年);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( * * n
12、);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:/*选择二时*/
13、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(错误!请您重新
14、输入。n);/*输入植异常时报错*/break;rili(year,month,day);break;case 4:exit(0);default:printf(错误!请您重新输入。nn); 第四章 运行结果及分析1.登陆界面 图4-1登陆界面提供了四个选项进行选择,并提示输入后的操作方法;2.显示某年全年日历 图4-2输入指令后,依次打印出每个月份的日历。并显示平年或者闰年; 3.显示某月日历 图4-3第5章课程设计心得 通过本次课程设计我第一次通过自己的实践对书本上的知识进行了与生活相关的运用。在这个程序中,主要应用了这学期所学习的循环,条件语句,数组以及调用函数。这些知识的应用使我对课本
15、内容的认识得到了加深。 在编写程序的过程中,也出现了很多错误。比如程序语句错误导致检测时连续报错;函数语句编写错误导致输出结果与实际不符等。出现这些情况后,通过对一些新知识的学习和对网上相关资料的阅览,我发现了自己的程序的问题所在并进行了改正。最后得到了正确的结果。 在程序的编写完成后,我按照要求对程序进行了拓展。在输出年历的基础上增加了月历及确定日期的输出。本来设想增加农历生肖功能,但是由于程序过于复杂,最终没能在规定时间内调试成功。参考文献1 杨文君,杨柳.C语言程序设计教程M.清华大学出版社. 2010.32 谭浩强. C语言程序设计教程M. 清华大学出版社. 2007.63 C语言程序设计精品课程4谭浩强.C程序设计教程.北京:清华大学出版社.2007.075魏海新 李燕主编. C语言程序设计实用教程.机械工业出版社.2007.096李泽中孙红艳主编. C语言程序设计.北京:清华大学出版社.2008.067路俊维 马雪松主编.C语言程序设计.中国铁道工业出版社.2009.06第 39 页-