课设万年历Word文档下载推荐.doc
《课设万年历Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《课设万年历Word文档下载推荐.doc(30页珍藏版)》请在冰豆网上搜索。
课程设计名称:
课程设计Ⅰ
设计题目:
万年历的实现
完成期限:
自2014年2月24日至2014年3月7日共2周
设计依据、要求及主要内容(可另加附页):
1.任务说明
运用C/C++结构体、函数、数据结构等基础知识,按以下要求编程实现万年历的功能:
1)阐述设计思想,画出流程图;
2)输入任一年,判断该年是否为闰年;
输入年月日计算该日为当年的那一天;
3)输入任一年,显示该年的日历,日历包括阳历、星期;
4)说明测试方法,写出完整的运行结果,较好的界面设计。
2.要求
1)问题分析和任务定义:
根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么;
2)逻辑设计:
写出抽象数据类型的定义,各个主要模块的算法,并画出模块之间的调用关系图;
3)详细设计:
定义相应的存储结构并写出各函数的伪码算法;
4)程序编码:
把详细设计的结果进一步求精为程序设计语言程序;
5)程序调试与测试:
采用自底向上,分模块进行,即先调试低层函数;
6)结果分析:
程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。
算法的时间、空间复杂性分析;
7)编写课程设计报告。
3.参考资料。
以上要求中前三个阶段的任务完成后,先将算法流程图交指导老师面审,审查合格后方可进入后续阶段的工作。
设计工作结束后,经指导老师验收合格后将设计说明书打印装订,并进行答辩。
指导教师(签字):
教研室主任(签字):
课程设计评阅
评语:
指导教师签名:
年月日
摘要
设计了一个万年历,该万年历具有日历显示功能,年历、月历、日历查询,闰年判断功能和星期查询功能。
本万年历采用VC++6.0作为软件开发环境,利用C语言和数据结构的相关知识,采用函数之间的调用关系实现了万年历的功能。
该万年历的除了简单的日期查询之外,还可以显示公历的节日。
操作简单,界面清晰,易于为用于所接受。
关键词:
万年历;
函数;
查询;
参数检查
目录
1课题描述 1
2需求分析 2
3逻辑设计 3
4详细设计 4
5程序源代码 7
6程序调试与测试 18
7总结 24
参考文献 25
1课题描述
1.1任务
1)阐述设计思想,画出流程图;
2)输入任一年,判断该年是否为闰年;
3)输入任一年,显示该年的日历,日历包括阳历、节日、星期;
4)说明测试方法,写出完整的运行结果,较好的界面设计.
1.2要求
程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果,算法的时间、空间复杂性分析;
24
2需求分析
设计一个万年历程序。
主要功能是能够输出任意年份或月份的日历,程序的输出的月历格式与日常生活中使用的月历格式相同,最好能够支持通过命令行参数指定要输出的年份或月份。
为了更便捷地使用万年历,要注意以下几点:
1)日历显示功能。
能根据系统日期进行初始化,如果没有任何输入,则显示系统日期所在月份的月历。
2)日历查询、闰年判断功能。
输入日期进行查询,显示查询日期所在月份的月历,还将显示所在年份是否为闰年。
3)参数检查功能。
如果输入日期不合法,查询将被拒绝,并显示提示信息。
3逻辑设计
1)在该万年历的设计过程中,主要功能有年历查询,月历查询和日期查询,其功能模块如图3.1所示:
月历显示
日期查询
年历查询
月历查询
图3.1万年历功能模块
2)在该万年历中,采用函数之间的调用来完成结果的显示。
先进入菜单选择,选择之后,进入相应的模块(年历查询模块,月历查询模块,日期查询模块和退出模块)中,并进行相关查询。
如图3.2所示:
程序进入
记录当时的日期
离日期还有几天
1、年历查询
3、日期查询
2、月历查询
4、退出程序
图3.2万年历调用模块
4详细设计
4.1变量说明
1)year表示年份的变量;
2)month表示月份的变量;
3)day表示日期的变量;
4)select表示菜单选择的变量;
5)i表示月份的变量;
6)j表示一个月中的某一天的变量;
7)sum判断某天是一年中的第几天的变量;
8)number判断某天离公元1年1月1日还有几天的变量;
9)a[]表示每月天数的数组变量;
10)year1系统时间年份的变量;
11)month1系统时间月份的变量;
12)day1系统时间日期的变量;
以上均为整形变量。
4.2各个算法的流程图
4.2.1闰年的判断
闰年的判断,能被4整除但不能100整除,或者能被400整除的年份为闰年,否则为平年。
日期的查询,就是直接打印该月份的月历。
1)算法程序
intisleap(intyear)/*判断是否为闰年*/
{
if(year%4==0&
&
year%100!
=0||year%400==0)
return1;
else
return0;
}
intmaxDay(intyear,intmonth)/*每月的天数*/
inta[]={31,28,31,30,31,30,31,31,30,31,30,31};
/*每个月中的天数*/
if(isleap(year))
a[1]=29;
/*闰年2月份有29天*/
returna[month-1];
2)流程图
4.2.2对天数的判断
对天数进行判断确定是星期几:
难点在于判断星期,但根据蔡勒公式,可以很容易地有年月日推断出星期:
nday=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+nday;
w=nDay%7。
其中:
year:
要查询的年份;
nday:
从该年的一月一日起到改天的天数;
w:
得出的星期数,w==0表示星期天。
在打印月历时,只要知道第一天的星期,就可以依次输入后面的日期,通过定长度输出日期,在遇到某天是星期六时,就换行输出,因此可以按照月历的格式输出。
inteachyeartotal(intyear,intmonth,intday)/*判断某天是一年中的第几天*/
inti,sum=0;
for(i=1;
i<
month;
i++)
sum+=maxDay(year,i);
sum+=day;
returnsum;
}
intweek(intyear,intmonth,intday)/*对天数进行判断确定是星期几*/
intnumber=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400
+eachyeartotal(y