电子万年历实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
电子万年历:
一、需求分析:
电子万年历系统主要实现以下单个查询功能:
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",&select); //输入想选择的功能
switch(select) //对select进行多分支选择
{
case 1:Search1();break; //select=1时,调用Search1函数
case 2:Search2();break;
case 3:Search3();break;
case 0:printf("\n\t谢谢使用!再见\n");exit(0); //结束程序,退出系统
default:("\n\t按键错误,请重新选择!\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 { flag=LeapYear(i); //判断第i年是否为闰年if(flag) days=days+366; //是闰年加366天 else days=days+365; //不是闰年应加365天 } return (days); //返回总的天数 } //================================================================ //功能:计算当年前(month-1)个月的天数 //参数:month为月份 //返回:返回前(month-1)个月的总天数 //主要思路:用for循环计算天数 //================================================================ int CountMonthDays(int month) { int i,days=0; for(i=1;i days=days+g_MonthDays[i]; return (days); } //================================================================= //功能:显示系统菜单