万年历程序设计说明书样本.doc

上传人:可****阿 文档编号:49642233 上传时间:2022-10-09 格式:DOC 页数:26 大小:207.50KB
返回 下载 相关 举报
万年历程序设计说明书样本.doc_第1页
第1页 / 共26页
万年历程序设计说明书样本.doc_第2页
第2页 / 共26页
点击查看更多>>
资源描述

《万年历程序设计说明书样本.doc》由会员分享,可在线阅读,更多相关《万年历程序设计说明书样本.doc(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。数据结构课程设计设计说明书万年历的实现学生姓名学号班级成绩指导教师数学与计算机科学学院 年 9 月 8 日数据结构课程设计评阅书题 目万年历的实现学生姓名学号成绩: 教师签名: 年 月 日成绩: 教师签名: 年 月 日总成绩: 室主任签名: 年 月 日注: 指导教师成绩60%, 答辩成绩40%, 总成绩合成后按五级制记入。课程设计任务书 第1学期专业: 计算机科学与技术 学号: 姓名: 课程设计名称: 数据结构课程设计 设计题目: 万年历的实现 完成期限: 自 年 8 月 27 日至 年 9 月 8 日共 2 周设计依据、 要求及主

2、要内容( 可另加附页) : 运用C/ C+结构体、 函数、 数据结构等基知识, 按以下要求编程实现万年历的功能:1) 阐述设计思想,画出流程图;2) 输入任一年, 判断该年是否为闰年; 输入年月日计算该日为当年的那一天; 3) 输入任一年, 显示该年的日历, 日历包括阳历、 农历、 节气; 4) . 说明测试方法,写出完整的运行结果,较好的界面设计.设计要求:1) 问题分析和任务定义: 根据设计题目的要求, 充分地分析和理解问题, 明确问题要求做什么? ( 而不是怎么做? ) 限制条件是什么? 确定问题的输入数据集合。2) 逻辑设计: 对问题描述中涉及的操作对象定义相应的数据类型, 并按照以数

3、据结构为中心的原则划分模块, 定义主程序模块和各抽象数据类型。逻辑设计的结果应写出每个抽象数据类型的定义( 包括数据结构的描述和每个基本操作的功能说明) , 各个主要模块的算法, 并画出模块之间的调用关系图; 3) 详细设计: 定义相应的存储结构并写出各函数的伪码算法。在这个过程中, 要综合考虑系统功能, 使得系统结构清晰、 合理、 简单和易于调试, 抽象数据类型的实现尽可能做到数据封装, 基本操作的规格说明尽可能明确具体。详细设计的结果是对数据结构和基本操作做出进一步的求精, 写出数据存储结构的类型定义, 写出函数形式的算法框架; 4) 程序编码: 把详细设计的结果进一步求精为程序设计语言程

4、序。同时加入一些注解和断言, 使程序中逻辑概念清楚; 5) 程序调试与测试: 采用自底向上, 分模块进行, 即先调试低层函数。能够熟练掌握调试工具的各种功能, 设计测试数据确定疑点, 经过修改程序来证实它或绕过它。调试正确后, 认真整理源程序及其注释, 形成格式和风格良好的源程序清单和结果; 6) 结果分析: 程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。算法的时间、 空间复杂性分析; 7) 编写课程设计报告; 以上要求中前三个阶段的任务完成后, 先将设计说明书的草稿交指导老师面审, 审查合格后方可进入后续阶段的工作。设计工作结束后, 经指导老师验收合格后将设计说明书打印

5、装订, 并进行答辩。指导教师( 签字) : 教研室主任( 签字) : 批准日期: 8 月 27 日摘要设计了一个万年历软件, 该万年历具有闰年判断, 输入某年月日查询该日期所对应的星期, 计算该日期是本年中的第几天及输出年历的功能。本计算器采用VC+作为软件开发环境, 采用年历推算的方法输出年历。操作简单易懂, 界面清晰明了, 易于被用户接受。关键词: 万年历; 闰年; 查询目 录1 课题描述12 需求分析23 流程设计34 详细设计65 程序编码76 程序调试与运行结果107 结果分析及总结12参考文献131. 课题描述运用C/ C+结构体、 函数、 数据结构等基知识, 按以下要求编程实现万

6、年历的功能:1).输入任一年, 判断该年是否为闰年; 2).输入年月日计算该日为当年的哪一天; 3).输入任一年, 显示该年的日历, 日历包括阳历、 农历、 节气。在程序设计的过程中, 要注意以下要求: 1).阐述设计思想,画出流程图; 2).说明测试方法,写出完整的运行结果,较好的界面设计。2. 需求分析1).闰年的判断该函数主要对年份进行判断, 当年份满足一定的条件, 则该年为闰年, 若不满足, 则该年为平年。2).输入年月日计算该日为本年的哪一天该函数首先要明确需要计算的是输入日期是星期几, 其次是计算输入日期是该年中的第几天。该函数是先进行闰年的判断, 以便其后对数组的调用, 依次将月

7、份相加, 最后所得总和加上日期即可得到所要计算的天数; 然后利用这个天数和公式first=(n+(n-1)/4-(n-1)/100+(n-1)/400)%7, 计算出星期几。3).年历的输出该函数主要是输入某年年份, 对其进行计算, 而后输出该年年历。3. 流程设计 该函数包括三个主要的子函数, 闰年的判断, 输入任一年月日, 计算该日为当年的哪一天及输出年历函数。 1).闰年的判断,如图3.1开 始输入年份判断条件平 年闰 年结 束不满足满足图3.1 判断闰年的流程图 2).输入任一年月日, 计算该日为当年的哪一天, 如图3.2不满足满足开始输入年月日判断闰年2月为28天2月为29天For循

8、环计算天数For循环计算天数计算星期几结 束3.2 判断输入日期为哪一天的流程图 3) .输出年历, 如图3.3开 始输入年份计算星期输出年历结 束3.3 输出年历的流程图 4).主函数, 如图3.4开 始While循环判断闰年查询输入年月日为该年的哪一天输出年历结束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这个式子作为判断条件, 若满足则为闰年,

9、不满足则为平年。 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;imonth;i+) sum=sum+ryeari-1; sum=sum+day; if(a=-1) /当该年为平年时, 计算天数 for(j=1;jmonth;j+) sum=sum+nryearj-1; sum=sum+day; return sum; 该函数是输入任一年月日, 计算该日为当年的哪一天。函数首先判断闰年, 再

10、将闰年和平年分开计算天数, 最后输出要求的天数。 3).void display()该函数的作用是输出年历。该函数调用了判断闰年的函数, 计算天数的函数及计算星期的函数, 用蔡勒公式first=(n+(n-1)/4-(n-1)/100+(n-1)/400)%7计算出某年的第一天是星期几, 并推算出该年年历, 最后调整格式输出年历。 4).void main()该函数是程序的主函数, 用以调用各个子函数。5. 程序编码 #include #include int ryear12=31,29,31,30,31,30,31,31,30,31,30,31; /存储闰年每月天数 int nryear12

11、=31,28,31,30,31,30,31,31,30,31,30,31; /存储非闰年每月天数 int judge(int b) / 判断是否闰年 if(b%4=0&b%100!=0|b%400=0) return 1; else return -1; int sumdays(int year,int month,int day) /计算天数 int i,j,a; int sum=0; a=judge(year); /判断是否为闰年 if(a=1) /当该年为闰年时, 计算天数 for(i=1;imonth;i+) sum=sum+ryeari-1; sum=sum+day; if(a=-1

12、) /当该年为平年时, 计算天数 for(j=1;jmonth;j+) sum=sum+nryearj-1; sum=sum+day; return sum; int week(int days,int n) /用总天数计算星期 int b; int first; first=(n+(n-1)/4-(n-1)/100+(n-1)/400)%7; /蔡勒公式(计算某年的第一天是星期几) b=(first+days-1)%7; return b; void display() /打印年历 int n,days; int i,j,c; int a,m,w; while(n=0) /判断数据合法性 p

13、rintf(n-请输入需要打印的日历年份:); scanf(%d,&n); printf(n); a=judge(n); for(i=0;i12;i+) days=sumdays(n,i+1,1);/计算总天数并将值赋给days w=week(days,n); /计算星期并将值赋给w if(a=1) m=ryeari; if(a=-1) m=nryeari;printf(ttt %d年 %d月nn,n,i+1); printf(t周日t周一t周二t周三t周四t周五t周六n); for(j=1;j=m;j+) /当j值小于每月最大值if(j=1) /当每月1号小于当前星期值时, 跳格for(c=

14、0;cw;c+)printf(t);printf(t %d,j); /否则打出与星期所对应的日期if(w%7=6) /当星期值除以7的余数为六时, 换行printf(n);w=week(days+j,n) ; /计算下一个星期值printf(nn); void main()/主函数int year,month,day;int n,a;int sum,w;printf(tt=万年历=nn);printf(t1=查询年份是否为闰年!nn);printf(t2=计算您输入的日期为该年中的第几天!nn);printf(t3=输出该年年历!nn);printf(t4=退出!n);while(1)prin

15、tf(n-请输入您要进行的操作(序号1-4):);scanf(%d,&n);while(n4) /判断数据合法性printf(n-输入有误! 请重新输入(序号1-4):);scanf(%d,&n);if(n=1) /当n等于1时, 调用judge函数while(year=0)printf(n-请输入您要查询的年份:); scanf(%d,&year);a=judge(year);if(a=1) printf(nt-%d年是闰年!n,year);if(a=-1) printf(nt-%d年是平年!n,year);if(n=2) /当n等于2时, 调用sumdays函数while(year=0|m

16、onth12|day31|day=0) /判断数据的合法性printf(n-请输入您要查询的年月日(如*/*/*):);scanf(%d/%d/%d,&year,&month,&day);a=judge(year);sum=sumdays(year,month,day);w=week(sum,year);if(w=0) w=7;if(a=1) printf(nt-%d/%d/%d是星期%d,为本年中的第%d天!n,year,month,day,w,sum);if(a=-1) printf(nt-%d/%d/%d是星期%d,为本年中的第%d天!n,year,month,day,w,sum);if

17、(n=3) display(); /当n等于3时, 调用display函数if(n=4) /当n等于4时, 程序结束printf(nt-谢谢使用! O(_)Onn);break;6. 程序调试与运行结果 1).首先是程序主界面, 先进行数据合法性验证, 输入正确选项1, 进入判断闰年功能, 输入-1, 判断数据合法性, 数入 , 进行判断, 为闰年。如图6.1 图6.1程序主界面及进行操作1时的界面 2).输入正确选项2时, 先进行数据合法性判断, 再输入 /03/01, 进行计算, 输出结果为该天是星期四, 是 中的第61天。如图6.2 图6.2 进行操作2时的界面 3).输入正确选项3时,

18、 先输入0, 进行数据合法性判断, 再输入 , 然后输出年历。如图6.3图6.3 进行操作3时的界面 4).输入正确选项4时, 程序结束。如图6.4图6.4 进行操作6.4时的界面 7. 结果分析及总结该程序是一个能够实现日历查询的程序, 能够进行星期及闰年的查询。在编写该程序时, 经常会犯一些细节性的错误, 比如传参数时有问题, 函数调用也有一些小错误, 从而导致程序运行有错误。该程序要求须作出万年历的阴历, 阳历及节气, 但由于在完成的途中, 对该程序的阴历及节气的算法掌握有很大欠缺, 因此最终只是将万年历的阳历输出, 另外完成了该程序所要求的其它项目, 及对闰年的判断和对某日的查询。在程序的设计中, 最大的困难是万年历的输出模块, 首先是对阳历计算的核心算法的设计, 其次是对数据合法性的验证, 最后是将输出格式调整好, 保证程序的美观性。该程序中部分函数不利于模块化, 主函数过于累赘, 不利于程序的健壮性。 在以后程序设计的过程中, 希望尽可能将各个子函数增强其可调用性, 尽可能减少程序多余的部分。参考文献1 严蔚敏, 吴伟民.数据结构(C语言版)M.北京: 清华大学出版社, 2 李春葆.数据结构(C语言版)习题与解析M. 北京: 清华大学出版社, 3 钱能.C+程序设计教程M. 北京: 清华大学出版社, 4 谭浩强.C程序设计(第三版).北京: 清华大学出版社,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 初中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁