您的当前位置:首页电子万年历实验报告

电子万年历实验报告

2020-09-11 来源:乌哈旅游


实验报告

电子万年历:

一、需求分析:

电子万年历系统主要实现以下单个查询功能:

1、 查询某一年的日历。要求从键盘输入年份,输出该年12个月份的日历

2、 查询某一天某一个月的日历。要求从键盘输入年份和月份,输出该月的日历。 3、 查询某一天是星期几。要求从键盘输入年、月、日,输出这一天是星期几。 二、总体设计:

1、功能模块图

万年历系统 计算模块 输出模块 查询模块 计算模块:用于计算天数,判断闰年 输出模块:用于菜单输出和日历输出

查询模块:实现查询某一年的日历。查询某一天某一个月的日历。查询某一天是星期几。 三、详细设计:

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、 附录:

程序代码:

#include #include #include

int g_MonthDays [13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //定义全局数组

//函数声明

int LeapYear(int n);

int CountYearDays(int year); int CountMonthDays(int month); void Menu(void);

void ListMonth(int days,int t); void Search1(void); void Search2(void); void Search3(void);

void main() //main函数定义 { int select; while(1) { Menu(); //调用Menu函数,显示菜单 scanf(\"%d\输入想选择的功能 switch(select) //对select进行多分支选择 { case 1:Search1();break; //select=1时,调用Search1函数 case 2:Search2();break; case 3:Search3();break; case 0:printf(\"\\n\谢谢使用!再见\\n\");exit(0); //结束程序,退出系统 default:(\"\\n\按键错误,请重新选择!\\n\"); //输入错误,应重新输入 } //switch结束 } //while结束 }

//================================================================ //功能:判断闰年

//参数:n为需要判断的年份

//返回:是闰年返回1,否则返回0

//主要思路:用if语句判断某一脸是否是闰年

//================================================================

int LeapYear(int n) { if((n%4==0&&n%100==0)||n%400==0) return (1); //是闰年返回1 else return (0); //不是闰年返回0 }

//================================================================ //功能:计算从公元元年到公元(year-1)年的总天数 //参数:year为年份 //返回:返回总天数

//主要思路:用for循环计算天数

//================================================================

int CountYearDays(int year) { int i,flag,days=0; for(i=0;i//================================================================ //功能:计算当年前(month-1)个月的天数 //参数:month为月份

//返回:返回前(month-1)个月的总天数 //主要思路:用for循环计算天数

//================================================================

int CountMonthDays(int month) { int i,days=0; for(i=1;i//================================================================= //功能:显示系统菜单

//参数:无 //返回:无

//主要思路:用printf函数输出菜单

//=================================================================

void Menu(void) { printf(\"\\n\"); printf(\"\------------------------------------------------\\n\"); printf(\"\* *\\n\"); printf(\"\* 欢迎使用万年历系统 *\\n\"); printf(\"\* *\\n\"); printf(\"\------------------------------------------------\\n\"); printf(\"\\n\"); printf(\"\请选择您要查询的内容\\n\"); printf(\"\1.显示某年的日历\\n\"); printf(\"\2.显示某年某月的日历\\n\"); printf(\"\3.显示某天是星期几\\n\"); printf(\"\0.退出系统\\n\"); printf(\"\请选择按键(0-3)\\n\"); }

//================================================================= //功能:按规定格式输出一个月的日历

//参数:days表示要输出月份的天数,t表示要输出月份的1日是星期几 //返回:无

//主要思路:主要采用for语句输出日历

//=================================================================

void ListMonth(int days,int t) { int i,j; printf(\"星期日 星期一 星期二 星期三 星期四 星期五 星期六\"); for(i=1;i<=days;i++) { if(i==1) for(j=0;j//================================================================= //功能:输出指定年份全年12月份的日历 //参数:无 //返回:无

//主要思路:主要采用for语句循环输出每个月的日历

//=================================================================

void Search1(void) { int year,t,k,flag,days; printf(\"\\n请输入年份:\"); scanf(\"%d\ flag=LeapYear(year); //调用LeapYear函数,判断Year是否为闰年 t=(CountYearDays(year)+1)%7; //计算该年的第一天是星期几 for(k=1;k<=12;k++) //k表示月份,没循环一次输出一个月的日历 { days=g_MonthDays[k]; //days为第k个月的天数 if(flag&&k==2) days=29; //若是闰年,则2月份天数为29 printf(\"\\n %d月:\\n\输出这是几月 ListMonth(days,t); //输出k月的日历 t=(t+days%7)%7; //计算第(k+1)个月的第一天是星期今 printf(\"\\n\"); if(k%3==0) //每输出3个月的日历暂停,等用户按任意键后再继续输出 { printf(\"\\n按任意键继续!\\n\"); getch(); //函数功能是输入一个字符且不回显,函数定义在conio.h中 } }//for结束 }

//================================================================= //功能:输出某年某个月的日历 //参数:无 //返回:无

//主要思路:通过调用函数计算天数

//=================================================================

void Search2(void) { int t,year,month,flag,days,ydays,mdays,alldays; printf(\"\\n请输入年.月(如:2009.5):\"); scanf(\"%d.%d\ ydays=CountYearDays(year); //计算前Year-1年的天数 mdays=CountMonthDays(month); //计算前month-1个月的天数 days=g_MonthDays[month]; //days为第month个月的天数

flag=LeapYear(year); //判断该年是否为闰年 if(flag) { if(month>2) mdays++; //是闰年且month大于2时,前(month-1)个月的天数加1 else if(month==2) days==29; //是闰年且month为2月,则2月份天数加1 } alldays=ydays+mdays+1;//计算公元元年1月1日到输入日起这个月1日的总天数 t=alldays%7; //计算第month个月的第一天是星期几 printf(\"\\n%d年%d月:\\n\\n\ ListMonth(days,t); //输出该月日历 printf(\"\\n\"); }

//================================================================ //功能:输出某一天是星期几 //参数:无 //返回:无

//主要思路:通过调用函数计算天数,在计算并输出这一天是星期几

//================================================================

void Search3(void) { int t,year,month,day,flag,ydays,mdays,alldays; printf(\"\\n请输入年.月.日如(2009.3.25):\"); scanf(\"%d.%d.%d\ ydays=CountYearDays(year); //计算前(year-1)年的天数 mdays=CountMonthDays(month); //计算前(month-1)个月的天数 flag=LeapYear(year); //判断该年是否为闰年 if(flag&&month>2) mdays++; //是闰年且month大于2时,则前(month-1)个月的天数加1 alldays=ydays+mdays+day; //计算总天数 t=alldays%7; printf(\"\\n%d年%d月%d日是\ switch(t) //对t进行多分支选择 { case 0:printf(\"星期日\\n\");break; case 1:printf(\"星期一\\n\");break; case 2:printf(\"星期二\\n\");break; case 3:printf(\"星期三\\n\");break; case 4:printf(\"星期四\\n\");break; case 5:printf(\"星期五\\n\");break; case 6:printf(\"星期六\\n\");break;

}; //switch结束 }

因篇幅问题不能全部显示,请点此查看更多更全内容