万年历程序设计说明书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计
设计说明书
万年历的实现
学生姓名
学号
班级
成绩
指导教师
数学与计算机科学学院
2012 年 9 月 8 日
数据结构课程设计评阅书
课程设计任务书
2012—2013学年第1学期
专业:计算机科学与技术学号:姓名:
课程设计名称:数据结构课程设计
设计题目:万年历的实现
完成期限:自 2012 年 8 月 27 日至 2012 年 9 月 8 日共 2 周
设计依据、要求及主要内容(可另加附页):
运用C/ C++结构体、函数、数据结构等基知识,按以下要求编程实现万年历的功能:1)阐述设计思想,画出流程图;2)输入任一年,判断该年是否为闰年;输入年月日计算该日为当年的那一天;3).输入任一年,显示该年的日历,日历包括阳历、农历、节气;4). 说明测试方法,写出完整的运行结果,较好的界面设计.
设计要求:
1)问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?(而不是怎么做?)限制条件是什么?确定问题的输入数据集合。
2)逻辑设计:对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型。逻辑设计的结果应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的功能说明),各个主要模块的算法,并画出模块之间的调用关系图;
3)详细设计:定义相应的存储结构并写出各函数的伪码算法。在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。详细设计的结果是对数据结构和基本操作做出进一步的求精,写出数据存储结构的类型定义,写出函数形式的算法框架;
4)程序编码:把详细设计的结果进一步求精为程序设计语言程序。同时加入一些注解和断言,使程序中逻辑概念清楚;
5)程序调试与测试:采用自底向上,分模块进行,即先调试低层函数。能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果;
6)结果分析:程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。算法的时间、空间复杂性分析;
7)编写课程设计报告;
以上要求中前三个阶段的任务完成后,先将设计说明书的草稿交指导老师面审,审查合格后方可进入后续阶段的工作。设计工作结束后,经指导老师验收合格后将设计说明书打印装订,并进行答辩。指导教师(签字):教研室主任(签字):
批准日期: 2012年 8 月 27 日
摘要
设计了一个万年历软件,该万年历具有闰年判断,输入某年月日查询该日期所对应的星期,计算该日期是本年中的第几天及输出年历的功能。本计算器采用VC++作为软件开发环境,采用年历推算的方法输出年历。操作简单易懂,界面清晰明了,易于被用户接受。
关键词:万年历;闰年;查询
目录
1 课题描述 (1)
2 需求分析 (2)
3 流程设计 (3)
4 详细设计 (6)
5 程序编码 (7)
6 程序调试与运行结果 (10)
7 结果分析及总结 (12)
参考文献 (13)
1. 课题描述
运用C/ C++结构体、函数、数据结构等基知识,按以下要求编程实现万年历的功能:
1).输入任一年,判断该年是否为闰年;
2).输入年月日计算该日为当年的哪一天;
3).输入任一年,显示该年的日历,日历包括阳历、农历、节气。
在程序设计的过程中,要注意以下要求:1).阐述设计思想,画出流程图;2).说明测试方法,写出完整的运行结果,较好的界面设计。
2. 需求分析
1).闰年的判断
该函数主要对年份进行判断,当年份满足一定的条件,则该年为闰年,若不满足,则该年为平年。
2).输入年月日计算该日为本年的哪一天
该函数首先要明确需要计算的是输入日期是星期几,其次是计算输入日期是该年中的第几天。该函数是先进行闰年的判断,以便其后对数组的调用,依次将月份相加,最后所得总和加上日期即可得到所要计算的天数;然后利用这个天数和公式first=(n+(n-1)/4-(n-1)/100+(n-1)/400)%7,计算出星期几。
3).年历的输出
该函数主要是输入某年年份,对其进行计算,而后输出该年年历。
3.流程设计
该函数包括三个主要的子函数,闰年的判断,输入任一年月日,计算该日为当年的哪一天及输出年历函数。
1).闰年的判断,如图3.1
图3.1 判断闰年的流程图
2).输入任一年月日,计算该日为当年的哪一天,如图3.2
3.2 判断输入日期为哪一天的流程图 3).输出年历,如图3.3
3.3 输出年历的流程图
4).主函数,如图3.4
3.4 主函数的流程图
4. 详细设计
1).int judge(int b){
// 判断是否闰年
if(b%4==0&&b%100!=0||b%400==0) return 1;
else return -1;
}
该函数是用来判断输入年份是否为闰年。函数利用b%4==0&&b%100!=0||b%400==0这个式子作为判断条件,若满足则为闰年,不满足则为平年。
2).int sumdays(int year,int month,int day){
//计算天数
int i,j,a;
int sum=0;
a=judge(year); //判断是否为闰年
if(a==1){ //当该年为闰年时,计算天数
for(i=1;i sum=sum+ryear[i-1]; } sum=sum+day; } if(a==-1){ //当该年为平年时,计算天数 for(j=1;j sum=sum+nryear[j-1]; } sum=sum+day; } return sum; } 该函数是输入任一年月日,计算该日为当年的哪一天。函数首先判断闰年,再将闰年和平年分开计算天数,最后输出要求的天数。 3).void display() 该函数的作用是输出年历。该函数调用了判断闰年的函数,计算天数的函数及计算星期的函数,用蔡勒公式first=(n+(n-1)/4-(n-1)/100+(n-1)/400)%7计算出某年的第一天是星期几,并推算出该年年历,最后调整格式输出年历。 4).void main() 该函数是程序的主函数,用以调用各个子函数。