沈阳航空航天大学课程设计报告课程设计名称:C语言课程设计课程设计题目:万年历软件设计学院:计算机学院专业:计算机科学与技术班级:学号:姓名:指导教师:从丽晖起止时间:2010年3月4日-2010年3月19日沈阳航空航天大学课程设计报告1目录第1章需求分析..........................................................................................................21.1课程设计的题目及要求......................................................................................21.2题目分析..............................................................................................................2第2章概要设计..........................................................................................................32.1主要函数和函数功能描述..................................................................................32.1.1主要函数.......................................................................................................32.1.2函数的功能描述...........................................................................................32.2功能模板..............................................................................................................4第3章详细设计...........................................................................错误!未定义书签。3.1程序说明..............................................................................................................43.2程序流程..............................................................................................................6第4章调试分析..........................................................................................................74.1调试过程中遇到的问题及解决方法..................................................................74.2经验总结..............................................................................................................7参考文献..........................................................................................................................8附录............................................................................................................................9总结.................................................................................................................................11沈阳航空航天大学课程设计报告2第1章需求分析1.1课程设计的题目及要求题目:万年历软件设计内容:设计一个简单的万年历软件,可实现对任意年份日历的输出。1、输入年、月、日:输出时星期几;2、打印任意年份的日历;3、界面要优化,直观,大方,美观;基本要求:1、独立完成系统的设计、编码和调试。2、系统利用C语言实现。3、按照课程设计规范书写课程设计报告。4、熟练掌握基本的调试方法,并将程序调试通过。1.2题目分析界面优化,直观,大方,美观需要做一个菜单,可实现直接输入所需要的信息,不用显示源代码。对于显示任意一天的星期数可以利用网络找到公式。打印日历先要判断这个月的天数,1,3,5,7,8,10,12月为31天。4,6,9,11月为30天,2月要判断是否为闰年,是为29天,不是为28天;判断出天数后计算本月第一天是星期几,然后打印出日历。沈阳航空航天大学课程设计报告3第2章概要设计2.1主要函数和函数功能描述2.1.1主要函数1关于设计菜单的函数menu_select().;2leap()函数;3days_month()4firstday()2.1.2函数的功能描述1.菜单函数mune_select();直接显示菜单;2判断是否为闰年的leap()函数;3判断这个月天数的days_month()4判断这个月第一天是星期几的函数firstday()2.2功能模板图显示沈阳航空航天大学课程设计报告4第三章详细设计3.1程序说明先做一个菜单窗口,可以重复这个窗口,万年历软件1显示菜单.2输入年月日显示星期几3.打印日历沈阳航空航天大学课程设计报告5输入1可以查询任意某一天的星期数例如输入2010年3月20日得到。输入2可以打印任意月份的日历例如输入2010年3月得到1对于第一个功能输出任意天的星期先要算出输入的是这一年的第几天,(要注意对闰年的判断)。然后利用公式S=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+sum)%7;X表示年份,C是该年份元旦开始到这一日的天数S/7的系数就是星期数.2,对日历的打印,用函数day_month()判断要输出的月份是多少天,再用公式w=(1+2*month+3*(month+1)/5+year+year/4+year/400-year/100)%7+1;算出输入月份第一天的星期数。沈阳航空航天大学课程设计报告63.2程序流程主函数图沈阳航空航天大学课程设计报告7沈阳航空航天大学课程设计报告8沈阳航空航天大学课程设计报告9计算星期图沈阳航空工业学院课程设计报告5打印日历图沈阳航空工业学院课程设计报告第4章调试分析7第4章调试分析4.1调试过程中遇到的问题及解决方法问题:(1)问题:没有毅力调程序,遇见困难总是逃避。解决办法,在助导的把课设的重要程度说明后,坚持了下来。(2)问题。很多程序都是不通过,总是无定义。解决办法:没有认真的看借来的书籍,没有分清楚t.c与V。C的区别。(3)问题:打印的日历总是提前一天,对控制格式还不是很了解。解决方法:细心调试发现问题的原因,然后解决;(4)问题:对计算输入年月日输出星期几的公式没有具体查清,导致自己修改还没有结果,浪费了时间。4.2经验总结多看书籍尤其是教科书,把书上的知识点弄清楚然后看课外书来增加专业知识,要好好利用学校图书馆的资源和网络资源,但是不能盲目的抄袭。做事要向前赶,不能拖。沈阳航空工业学院课程设计报告参考文献88参考文献[1]刘振安C语言程序设计课程设计机械工业出版社2004[2]张长海.C语言程序设计[M].北京:高等教育出版社,2006[3]于帆.赵妮.王中生等程序设计基础.(C语言版).清华大学出版社[4]谭明金俞海英C语言程序设计实例精粹电子工业出版社沈阳航空工业学院课程设计报告9附录源程序代码:#includestdio.h#includestdlib.h#includectype.hintleap(intyear);//判断是否为闰年intdays_month(intmonth,intyear);//判断这个月的天数intfirstday(intmonth,intyear);//显示本月第一天是星期几intmenu_select();voidf(){intday,month,year,sum,leap,S;printf(\n请输入年月日\n);scanf(%d%d%d,&year,&month,&day);switch(month){case1:sum=0;break;case2:sum=31;break;case3:sum=59;break;case4:sum=90;break;case5:sum=120;break;case6:sum=151;break;case7:sum=181;break;case8:sum=212;break;case9:sum=243;break;case10:sum=273;break;case11:sum=304;break;case12:sum=334;break;default:printf(dataerror);break;}sum=sum+day;if(year%400==0||(year%4==0&&year%100!=0))leap=1;elseleap=0;if(leap==1&&month2)sum++;S=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+sum)%7;//X表示年份,C是该年份元旦开始到这一日的天数//S/7的系数就是星期数//01printf(%d,S);switch(S){case1:printf(星期一\n);break;case2:printf(星期二\n);break;case3:printf(星期三\n);break;case4:printf(星期四\n);break;case5:printf(星期五\n);break;沈阳航空工业学院课程设计报告10case6:printf(星期六\n);break;case0:printf(星期日\n);break;}}voidg(){inti,j=1,k=1,a,b,month,year;printf(\n输入年月:\n);scanf(%d%d,&year,&month);b=days_month(month,year);a=firstday(month,year);printf(*************************************\n);printf(SunMonTueWedThuFriSat\n);if(a==7){for(i=1;i=b;i++){printf(%4d,i);if(i%7==0){printf(\n);}}}if(a!=7){while(j=4*a){printf();j++;}for(i=1;i=b;i++){printf(%4d,i);if(i==7*k-a){printf(\n);k++;}}}printf(\n***************************