还剩7页未读,继续阅读
文本内容:
实验报告电子万年历
1、需求分析电子万年历系统主要实现以下单个查询功能
1、查询某一年的日历要求从键盘输入年份,输出该年12个月份的日历
2、查询某一天某一个月的日历要求从键盘输入年份和月份,输出该月的日历
3、查询某一天是星期几要求从键盘输入年、月、日,输出这一天是星期几
2、总体设计
1、功能模块图计算模块用于计算天数,判断闰年输出模块用于菜单输出和日历输出查询模块实现查询某一年的日历查询某一天某一个月的日历查询某一天是星期几
3、详细设计
1、计算模块计算模块主要包含3个函数LeapYear()、CountYearDays()、CountMonthDays函数CountYearDays()功能是计算从公元元年1月1日到某年12月31日一共有多少天CountYearDays()功能是几双当年1月1日到输入日期的前一个月的天数
2、输出模块包含2个函数Menu()和ListMonth()函数Menu()函数用来输出系统提供的功能选项ListMonth()函数用来按规定格式输出一个月的日历
3、查询模块针对系统要实现三个查询功能定义了3个函数Search1()、Search2()和Search3()函数函数Search1()用来显示一年12个月的日历,输入年份后,计算该年1月1日是星期几,然后从1月份开始一次输出每个月的日历,其中调用了函数LeapYear()、CountYearDays()和CountMonthDays()函数Search2()用来显示某年某月的日历,输入年份和月份后,计算出该年该月1日是星期几,然后输出这个月的日历,其中调用了函数LeapYear()和CountYearDays()、CountMonthDays()和ListMonth()函数Search3()用来显示某天是星期几,通过调用函数LeapYear()、CountYearDays()和CountMonthDays()计算出从公元元年1月1日到这一天总共过去了多少天,用这个总天数除以7得到的余数即为答案
4、调试与测试在调试过程中主要的问题就是结果的显示问题,显示易错位以及函数之间调用问题对于这些问题,主要是翻书籍和网络上找解决方案,以及自己亲自用找到的方法去测试最终解决问题
5、测试结果菜单界面功能一展示功能二展示功能三展示
6、附录程序代码#includestdio.h#includeconio.h#includestdlib.hintg_MonthDays
[13]={0312831303130313130313031};//定义全局数组//函数声明intLeapYearintn;intCountYearDaysintyear;intCountMonthDaysintmonth;voidMenuvoid;voidListMonthintdaysintt;voidSearch1void;voidSearch2void;voidSearch3void;void__in//__in函数定义{intselect;while1{Menu;//调用Menu函数,显示菜单scanf%dselect;//输入想选择的功能switchselect//对select进行多分支选择{case1:Search1;break;//select=1时,调用Search1函数case2:Search2;break;case3:Search3;break;case0:printf\n\t谢谢使用!再见\n;exit0;//结束程序,退出系统default:\n\t按键错误,请重新选择!\n;//输入错误,应重新输入}//switch结束}//while结束}//================================================================//功能判断闰年//参数n为需要判断的年份//返回是闰年返回1,否则返回0//主要思路用if语句判断某一脸是否是闰年//================================================================intLeapYearintn{ifn%4==0n%100==0||n%400==0return1;//是闰年返回1elsereturn0;//不是闰年返回0}//================================================================//功能计算从公元元年到公元(year-1)年的总天数//参数year为年份//返回返回总天数//主要思路用for循环计算天数//================================================================intCountYearDaysintyear{intiflagdays=0;fori=0;iyear;i++{flag=LeapYeari;//判断第i年是否为闰年ifflagdays=days+366;//是闰年加366天elsedays=days+365;//不是闰年应加365天}returndays;//返回总的天数}//================================================================//功能计算当年前(month-1)个月的天数//参数month为月份//返回返回前(month-1)个月的总天数//主要思路用for循环计算天数//================================================================intCountMonthDaysintmonth{intidays=0;fori=1;imonth;i++days=days+g_MonthDays[i];returndays;}//=================================================================//功能显示系统菜单//参数无//返回无//主要思路用printf函数输出菜单//=================================================================voidMenuvoid{printf\n;printf\t------------------------------------------------\n;printf\t**\n;printf\t*欢迎使用万年历系统*\n;printf\t**\n;printf\t------------------------------------------------\n;printf\n;printf\t请选择您要查询的内容\n;printf\t
1.显示某年的日历\n;printf\t
2.显示某年某月的日历\n;printf\t
3.显示某天是星期几\n;printf\t
0.退出系统\n;printf\t请选择按键(0-3)\n;}//=================================================================//功能按规定格式输出一个月的日历//参数days表示要输出月份的天数,t表示要输出月份的1日是星期几//返回无//主要思路主要采用for语句输出日历//=================================================================voidListMonthintdaysintt{intij;printf星期日星期一星期二星期三星期四星期五星期六;fori=1;i=days;i++{ifi==1forj=0;jt;j++printf;//在数字1前输出9*t个空格printf%-7di;ifi+t%7==0printf\n;}}//=================================================================//功能输出指定年份全年12月份的日历//参数无//返回无//主要思路主要采用for语句循环输出每个月的日历//=================================================================voidSearch1void{intyeartkflagdays;printf\n请输入年份;scanf%dyear;flag=LeapYearyear;//调用LeapYear函数,判断Year是否为闰年t=CountYearDaysyear+1%7;//计算该年的第一天是星期几fork=1;k=12;k++//k表示月份,没循环一次输出一个月的日历{days=g_MonthDays[k];//days为第k个月的天数ifflagk==2days=29;//若是闰年,则2月份天数为29printf\n%d月\nk;//输出这是几月ListMonthdayst;//输出k月的日历t=t+days%7%7;//计算第(k+1)个月的第一天是星期今printf\n;ifk%3==0//每输出3个月的日历暂停,等用户按任意键后再继续输出{printf\n按任意键继续!\n;getch;//函数功能是输入一个字符且不回显,函数定义在conio.h中}}//for结束}//=================================================================//功能输出某年某个月的日历//参数无//返回无//主要思路通过调用函数计算天数//=================================================================voidSearch2void{inttyearmonthflagdaysydaysmdaysalldays;printf\n请输入年.月(如
2009.5);scanf%d.%dyearmonth;ydays=CountYearDaysyear;//计算前Year-1年的天数mdays=CountMonthDaysmonth;//计算前month-1个月的天数days=g_MonthDays[month];//days为第month个月的天数flag=LeapYearyear;//判断该年是否为闰年ifflag{ifmonth2mdays++;//是闰年且month大于2时,前(month-1)个月的天数加1elseifmonth==2days==29;//是闰年且month为2月,则2月份天数加1}alldays=ydays+mdays+1;//计算公元元年1月1日到输入日起这个月1日的总天数t=alldays%7;//计算第month个月的第一天是星期几printf\n%d年%d月\n\nyearmonth;ListMonthdayst;//输出该月日历printf\n;}//================================================================//功能输出某一天是星期几//参数无//返回无//主要思路通过调用函数计算天数,在计算并输出这一天是星期几//================================================================voidSearch3void{inttyearmonthdayflagydaysmdaysalldays;printf\n请输入年.月.日如(
2009.
3.25);scanf%d.%d.%dyearmonthday;ydays=CountYearDaysyear;//计算前(year-1)年的天数mdays=CountMonthDaysmonth;//计算前(month-1)个月的天数flag=LeapYearyear;//判断该年是否为闰年ifflagmonth2mdays++;//是闰年且month大于2时,则前(month-1)个月的天数加1alldays=ydays+mdays+day;//计算总天数t=alldays%7;printf\n%d年%d月%d日是yearmonthday;switcht//对t进行多分支选择{case0:printf星期日\n;break;case1:printf星期一\n;break;case2:printf星期二\n;break;case3:printf星期三\n;break;case4:printf星期四\n;break;case5:printf星期五\n;break;case6:printf星期六\n;break;};//switch结束}万年历系统计算模块查询模块输出模块。