万年历程序设计说明书Word文档下载推荐.docx
- 文档编号:21209564
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:16
- 大小:145.79KB
万年历程序设计说明书Word文档下载推荐.docx
《万年历程序设计说明书Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《万年历程序设计说明书Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
课程设计名称:
数据结构课程设计
设计题目:
万年历的实现
完成期限:
自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).输入年月日计算该日为当年的哪一天;
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).intjudge(intb){
//判断是否闰年
if(b%4==0&
&
b%100!
=0||b%400==0)return1;
elsereturn-1;
}
该函数是用来判断输入年份是否为闰年。
函数利用b%4==0&
=0||b%400==0这个式子作为判断条件,若满足则为闰年,不满足则为平年。
2).intsumdays(intyear,intmonth,intday){
//计算天数
inti,j,a;
intsum=0;
a=judge(year);
//判断是否为闰年
if(a==1){//当该年为闰年时,计算天数
for(i=1;
i<
month;
i++){
sum=sum+ryear[i-1];
}
sum=sum+day;
}
if(a==-1){//当该年为平年时,计算天数
for(j=1;
j<
j++){
sum=sum+nryear[j-1];
returnsum;
该函数是输入任一年月日,计算该日为当年的哪一天。
函数首先判断闰年,再将闰年和平年分开计算天数,最后输出要求的天数。
3).voiddisplay()
该函数的作用是输出年历。
该函数调用了判断闰年的函数,计算天数的函数及计算星期的函数,用蔡勒公式first=(n+(n-1)/4-(n-1)/100+(n-1)/400)%7计算出某年的第一天是星期几,并推算出该年年历,最后调整格式输出年历。
4).voidmain()
该函数是程序的主函数,用以调用各个子函数。
5.程序编码
#include<
stdio.h>
stdlib.h>
intryear[12]={31,29,31,30,31,30,31,31,30,31,30,31};
//存储闰年每月天数
intnryear[12]={31,28,31,30,31,30,31,31,30,31,30,31};
//存储非闰年每月天数
intjudge(intb){
intsumdays(intyear,intmonth,intday){
intweek(intdays,intn){
//用总天数计算星期
intb;
intfirst;
first=(n+(n-1)/4-(n-1)/100+(n-1)/400)%7;
//蔡勒公式(计算某年的第一天是星期几)
b=(first+days-1)%7;
returnb;
voiddisplay(){
//打印年历
intn,days;
inti,j,c;
inta,m,w;
while(n<
=0){//判断数据合法性
printf("
\n----请输入需要打印的日历年份:
"
);
scanf("
%d"
&
n);
printf("
\n"
a=judge(n);
for(i=0;
12;
days=sumdays(n,i+1,1);
//计算总天数并将值赋给days
w=week(days,n);
//计算星期并将值赋给w
if(a==1)m=ryear[i];
if(a==-1)m=nryear[i];
\t\t\t%d年%d月\n\n"
n,i+1);
printf("
\t周日\t周一\t周二\t周三\t周四\t周五\t周六\n"
for(j=1;
=m;
j++){//当j值小于每月最大值
if(j==1){//当每月1号小于当前星期值时,跳格
for(c=0;
c<
w;
c++)
printf("
\t"
\t%d"
j);
//否则打出与星期所对应的日期
if(w%7==6)//当星期值除以7的余数为六时,换行
printf("
w=week(days+j,n);
//计算下一个星期值
\n\n"
voidmain(){
//主函数
intyear,month,day;
intn,a;
intsum,w;
\t\t===============万年历===============\n\n"
\t1===查询年份是否为闰年\n\n"
\t2===计算您输入的日期为该年中的第几天\n\n"
\t3===输出该年年历\n\n"
\t4===退出\n"
while
(1){
\n----请输入您要进行的操作(序号1--4):
0||n>
4){//判断数据合法性
\n----输入有误请重新输入(序号1--4):
scanf("
if(n==1){//当n等于1时,调用judge函数
while(year<
=0){
\n----请输入您要查询的年份:
year);
a=judge(year);
if(a==1)printf("
\n\t--%d年是闰年\n"
year);
if(a==-1)printf("
\n\t--%d年是平年\n"
if(n==2){//当n等于2时,调用sumdays函数
=0||month<
=0||month>
12||day>
31||day<
=0){//判断数据的合法性
\n----请输入您要查询的年月日(如****/**/**):
scanf("
%d/%d/%d"
year,&
month,&
day);
sum=sumdays(year,month,day);
w=week(sum,year);
if(w==0)w=7;
\n\t--%d/%d/%d是星期%d,为本年中的第%d天\n"
year,month,day,w,sum);
if(n==3)display();
//当n等于3时,调用display函数
if(n==4){//当n等于4时,程序结束
\n\t--谢谢使用O(∩_∩)O~\n\n"
break;
}
6.程序调试与运行结果
1).首先是程序主界面,先进行数据合法性验证,输入正确选项1,进入判断闰年功能,输入-1,判断数据合法性,数入2012,进行判断,为闰年。
如图6.1
图6.1程序主界面及进行操作1时的界面
2).输入正确选项2时,先进行数据合法性判断,再输入2012/03/01,进行计算,输出结果为该天是星期四,是2012年中的第61天。
如图6.2
图6.2进行操作2时的界面
3).输入正确选项3时,先输入0,进行数据合法性判断,再输入2012,然后输出年历。
如图6.3
图6.3进行操作3时的界面
4).输入正确选项4时,程序结束。
如图6.4
图6.4进行操作6.4时的界面
7.结果分析及总结
该程序是一个可以实现日历查询的程序,可以进行星期及闰年的查询。
在编写该程序时,经常会犯一些细节性的错误,比如传参数时有问题,函数调用也有一些小错误,从而导致程序运行有错误。
该程序要求须作出万年历的阴历,阳历及节气,但由于在完成的途中,对该程序的阴历及节气的算法掌握有很大欠缺,所以最终只是将万年历的阳历输出,此外完成了该程序所要求的其他项目,及对闰年的判断和对某日的查询。
在程序的设计中,最大的困难是万年历的输出模块,首先是对阳历计算的核心算法的设计,其次是对数据合法性的验证,最后是将输出格式调整好,保证程序的美观性。
该程序中部分函数不利于模块化,主函数过于累赘,不利于程序的健壮性。
在以后程序设计的过程中,希望尽可能将各个子函数增强其可调用性,尽可能减少程序多余的部分。
参考文献
[1]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:
清华大学出版社,2002
[2]李春葆.数据结构(C语言版)习题与解析[M].北京:
[3]钱能.C++程序设计教程[M].北京:
清华大学出版社,2003
[4]谭浩强.C程序设计(第三版).北京:
清华大学出版社,2005
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 万年历 程序 设计 说明书