万年历设计方案报告Word文档格式.docx
- 文档编号:22834741
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:34
- 大小:243.17KB
万年历设计方案报告Word文档格式.docx
《万年历设计方案报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《万年历设计方案报告Word文档格式.docx(34页珍藏版)》请在冰豆网上搜索。
5)数据结构设计描述,各模块(函数)功效介绍,参数说明等。
6)调试分析(包含各模块测试用例,及测试结果。
)
7)总结(实训完成了哪些功效,还有哪些地方需要改善,及经过实训有何收获,调试程序体会等)
8)参考文件、致谢等。
五、关键参考资料
1.王连相.《C/C++程序设计》武汉大学出版社
2.谭浩强《C语言程序设计(第2版)学习指导》清华大学出版社
3.杨莉,龚义建《C语言程序设计实训指导教程》华中科技大学出版社
4.张小东,郑宏珍《C语言程序设计和应用》人民邮电出版社
5.郭翠英《C语言C语言课程实训案例精编》中国水利水电出版社
6.郭有强《C语言程序设计》清华大学出版社
7.李丹程,刘莹,那俊《C语言程序设计案例实践》清华大学出版社
8.李丽娟《C语言程序设计教程》人民邮电出版社
9.武雅丽,王永玲,解亚利《C语言程序设计》清华大学出版社
六、各阶段时间安排(共1周)
日期
内容
地点
星期一
老师讲解设计要求,准备参考资料
1B203
星期二
分析系统,方案设计
星期三
方案设计,编程
星期四
调试程序,书写实训说明书
星期五
完成实训说明书,答辩
摘要
C语言在多年来中国外得到了很广泛推广,而电子万年历也是大家在日常生活需求中必不缺乏一部分。
我们经过这学期对C语言学习,做出了一个万年历程序。
该程序实现了简易万年历功效,实现了万年历四个基础功效。
当进入此程序,经过界面提醒能够很轻易进入万年历功效选择所实现功效。
此万年历有以下四个常能用功效:
按年查询、按月查询、按日查询、打印整年日历。
这四个常见功效基础满足了大家在生活中对万年需求,本万年历跨度较其它万年历稍大部分,能够查询到更广年历。
关键词:
C语言;
电子万年历;
数组
1绪论
本课题关键是针对简易电子万年历功效,和子模块设计展开探究。
课题关键包含了使用C语言来调用各个模块函数,使这些函数相互之间联络起来,处理用户需要简易问题,同时考察组员对C语言中函数、次序、循环、if语句嵌套、for语句嵌套操作能力。
而且在探究过程中培养组员分析问题和处理问题能力,提升组员之间团结合作能力。
1.1设计目标
1.经过实训能够综合利用所学相关对应知识能力,能愈加好巩固《C语言程序设计》课程学习内容,掌握工程软件设计基础方法,强化上机动手编程能力,闯过理论和实践相结合难关。
愈加了解了C语言好处和其可用性。
同时增加了同学之间团体合作精神,愈加也体会到以后在工作中团体合作关键性和必需性。
2.经过实训,使学生了解高级程序设计语言结构,掌握基础程序设计过程和技巧,掌握基础分析问题和利用计算机求解问题能力,含有初步高级语言程设计能力。
为后续各门计算机课程学习和毕业设计打下坚实基础。
1.2设计背景
C语言是多年在中国外得到快速推广应用一个机器语言。
C语言功效丰富,表示能力强,应用灵活方便,应用范围广,目标成序效率高,可移植,极有高级语言优点,又含有低级语言很多特点。
所以,C语言尤其适合于编写多种软件。
在这次实训中我将把日常生活中最常常接触——日历查询,利用C语言程序编成一个简单万年历查询系统。
经过这个小小系统能够实现部分功效。
在程序中你能看到很多熟悉C语言关键字,同时也加入了很多自己课外了解到部分关键字。
1.3需求背景
现在比较流行电子万年历程序,比较经典是windows中各版本日历程序。
不过这些程序总是有一定限制,需要一个跨度很大日一向方便大家生活,而C语言程序和设计充足发挥了这个优点,用很短文本填补了这一个空白。
同时也用强有力证据告诉大家C语言这个新生事物应用范围是极其宽广。
1.4小组分工
组内组员是一个整体,小组是一个团体,强调集体行动,不搞个
人主义,组内对于多种任务要有明确分工,而且要明确落实到人。
组长:
白博康在以身作则基础上,对组员学习、行为、思想等进行监督、督促和指导。
包含随时和指导老师联络,分配组员任务。
同时负责实训内容收尾、排版、制图、检验错误、部分程序调试等工作。
组员:
蔡家豪在汇报书中做了很大贡献,在我们汇报书中担任了步骤图制作,资料搜集工作,为我们工作顺利进行起到了很大作用。
同时为组内同学做好了后勤保障工作。
程虞华在我们组中寻求源代码和对源代码进行改善,为我们提供了程序设计基础,并和其它组员一起查询错误。
在汇报书中为我们编辑了具体程序这一部分。
同时帮助其它组员进行实训中表格制作,步骤图制作。
2总体设计
2.1总模块设计
用户经过不一样数字进入不一样菜单,万年历显示公元后任何年份日历,类似于通常挂历上格式,输入年份,判定是否为闰年;
输入年月日,判定为星期几;
输入年份,打印出查询月历;
输入年份,打出该月日历。
图2.1功效模块图
2.2使用头文件说明
本程序应用到头文件:
#include
"
stdio.h"
在使用标准函数库中输入输出函数时,编译系统要求程序提供相关信息(比如对这些输入输出函数申明),#include<
stdio.h>
作用就是用来提供这些信息,stdio.h是C编译系统提供一个文件名,stdio是“standardinput&
output”缩写,即相关标准输入输出信息。
在程序中用到系统提供标准函数库中输入输出函数时,应在程序开头写上一行:
#include"
或是#include<
这么才能调用库函数。
二者关键在于查找效率上有差异,#include<
通常见包含系统文件,它是查找先从系统目录查找开始查找;
#include"
通常见包含项目文件,它是查找先从项目目录查找开始查找。
在编写C语言中,常见到printf()和scanf()函数,她们就是stdio.h中两个标准输入输出函数,所以编程语句中假如要用到此两个函数就一定要在头文件中加入#include<
。
windows.h"
头文件封装了库函数和部分类,将部分复杂工作由库函数处理,而用户无须把精力放在这些地方。
比如说cout<
<
,为标准输出流,其实说到底还是函数调用,不过这个函数有些特殊,用是运算符重载,确切地说是重载了“<
”运算符,作用是将键盘输入在屏幕上打印出来,这个功效要是由我们去写,估量也得学个两三年才有可能。
所以就简化了操作。
而这一系列函数全部在头文件中包含(是一个函数库)。
在调用时包含后便可直接用。
2.3使用变量申明
表2.2变量申明
变量
变量说明
表示月份变量
表示年份变量
NameOfMonth
WeekDay
表示日期变量
Choise>
表示菜单选择变量
x
y
表示30天中某一天变量
sum
判定某天是十二个月中第几天变量
number
判定某天离公元1年1月1日还有几天变量
a[]
表示每个月天数数组变量
2.4利用到C语言函数
在程序中应用了大量自定义函数,全部为了使程序更简练明了。
其中:
int
IsLeapYear()
/*判定是否为闰年*/
char*NameOfMonth()
/*判定某天是十二个月中几月*/
char*WeekDay()
/*对天数进行判定确定是星期几*/
intjiri()/*判定这一月总天数*/
intX=(int)(year/100);
/*世纪数*/
intY=X-(int)(X/4);
/*假如按4年一闰来算,Y指是比实际上多算天数,在下面需要减去*/
intGetDayOfMonth()/*输出某十二个月中月历*/
inttmp_days=GetDays(year,month,1);
/*本月积日*/
intShowCalendar()/*输出某十二个月某一月具体日历*/
intDateCheck/*判定正当性*/
jiri=GetDays(year,month,1);
/*获取特定日期总天数*/
ShowCalendar(year,month,1);
}/*输出年历*/
counterdays()
/*判定今天距特定日期天数*/
intdayofweek()
/*判定是星期几*/
intGetDays
/*判定今天日期*/
2.5函数调用关系
上述函数调用关系以下图所表示:
图2.5函数调用关系
3具体设计
3.1函数运行步骤图
经过外部菜单功效和对应提醒进行输入即进入所要运行功效。
定义了一个主函数intmain()这个函数就是我们整个程序运行关键框架。
经过while这个主循环让用户输入对应功效前代码来实现想要功效。
经过在Choise>
以后输入所需运行程序代码进行实施对应程序。
图3.1函数运行步骤图
3.2闰年判定模块
用户经过输入1进入闰年判定程序,进入闰年判定后,经过对函数int
循环进行判定,最终输出结果,输出结果后返回主菜单。
图3.2闰年判定模块
进入菜单选择闰年判定功效,输入进行查询,查询后将显示查询年份是否为闰年。
若是,则显示此年为闰年,若不是闰年则显示此年不是闰年。
首先第一步定义了IsLeapyear这个函数,这个函数关键是为实现闰年判定这个功效。
经过year%4==0&
&
year%100!
=0||year%400==0判定输入该年是否为闰年,从而经过接下步骤return返回对应数据。
相关代码以下:
intIsLeapYear(intyear)
{
if(year%4==0&
=0||year%400==0)
{
return1;
/*闰年返回1*/
}else
{return0;
/*平年返回0*/}}
3.3年历打印模块
经过输入4,选择打印整年日历功效,输入正确即可实施,输入不正确返回主界面。
调用闰年判定函数
图3.3年历打印模块
进入主界面后,用户经过选择打印整年日历功效。
进入打印整年日历程序中后,用户只需输入想要打印当年年份,接下来就是对月份判定,此时年份判定已经经过了,这时先对大月小月进行判定,if中列出全部是小月,经过判定大小月和之前石否为闰年判定接下来深入对二月天数进行确定。
当return0以后,这些月份全部为小月,每全部有30天,之前判定闰年此时调用判定闰年函数,用是否闰年对二月天数进行判定,系统即可进行打印,该程序在循环中截止于break,打印部分程序以下:
if(uMonth==4||uMonth==6||uMonth==9||uMonth==11)
{if(uDay>
30)
{return0;
}
}elseif(uMonth==2)
{if(IsLeapYear(uYear))
29)
{return0;
28)
}
printf("
请输入要判定年份:
Year>
);
scanf("
%d"
&
year);
for(month=1;
month<
=12;
month++)
{ShowCalendar(year,month,1);
break;
3.4星期计算模块
进入主界面菜单以后,经过用户选择星期计算即可查询某一天是星期几,需要用户输入按“年月日”格式进行输入,输入后,系统将判定输入该年该月这一天为星期几并显示出来。
这个程序运行要基于之前日历计算。
图3.4星期计算模块
开始星期计算。
星期计算需要调用两次函数,需要调用判定年历函数,经过定位到所需函数十二个月,接下来继续判定函数所在月,经过调用按月历查询函
数,将这一天具体日期定位到那一月月历中,在查询到那一月对该日星期数进行判定,最终输出该日星期数。
case2:
请输入要判定日期(空格隔开):
YearMonthDay>
%d%d%d"
year,&
month,&
day);
totaldays=GetDays(year,month,day);
%d年%d月%d日是%s\r\n\r\n"
year,month,day,WeekDay[(totaldays+1)%7]);
3.5打印月历模块
经过之前对年判定,现在可经过输入某十二个月某30天来打印该月日历。
在打印月历时候,需要调用之前年历函数。
图3.5年历打印模块
代码以下:
if(month<
=2&
month>
year--;
/*把1月、2月视为上十二个月13月、14月(纯粹为了计算需要)*/
month+=12;
sum=(int)(365.25*(year-1900))+(int)(30.6*(month+1))+day-Y-49;
/*以365.25(原来实际太阳年是365.2425天)来计算是为了计算按4年一闰整数年总天数,加上月份天数再加上余下天数,减掉多闰天数,再减掉一个偏差值(多加)*/
/*月份以30.6天平均值计算。
最终减去49,是多加30天和其它相差天数和,可得到191月1日积日为0*/
returnsum;
/*返回距离191月1日总天数(积日)*/
intGetDayOfMonth(intmonth,intyear)
inttmp_days=GetDays(year,month,1);
/*本月积日*/
intDayOfMonth=0;
month++;
/*下个月*/
if(month>
12)
month=1;
/*碰到月份为12月情况,月份为1,年份加1*/
year++;
DayOfMonth=GetDays(year,month,1);
/*下个月积日*/
DayOfMonth-=tmp_days;
/*下月1日总天数(距离191月1日积日)减去目前月1日总天数*/
returnDayOfMonth;
/*返回目前月总天数*/
进入主界面菜单以后,经过用户选择月历查询功效即可进入阅历查询功效。
进入月历查询功效以后,用户需输入具体年月进行查询。
输入格式为:
“年月”,输入后,系统将进入年和月循环结构中进行计算,计算完成以后,此循环中止于break。
case3:
请输入要显示月份(空格隔开):
YearMonth>
%d%d"
month);
ShowCalendar(year,month,1);
3.6日期正当性检验模块
在使用输入时,总会有输入错误情况,依据不一样情况下输入错误情况,程序也做出了对应判定。
具体情况以下:
在闰年判定过程中,经过之前判定,在最终进行正当性判定,判定输入年份是否正当。
return0;
/*平年返回0*/
intDateCheck(intuYear,intuMonth,intuDay)/*正当返回true,非法或超出范围返回false*/
在年份判定中if(uYear<
1901||uYear>
9999||uMonth<
1||uMonth>
12||uDay<
1||uDay>
31)是对年份正当性判定,年份判定成功以后即可实施if以后语句,进行下一步月份判定。
if(uYear<
31)
在之前天数判定后,此时就有对输入有误日期判定语句,经过这几句调用了之前intyear和intday进行求和,以后若有错误,即返回输出日期有误。
intGetDays(intyear,intmonth,intday)
intsum=0;
if(DateCheck(year,month,day)==0)
return-1;
/*日期有误*/
4调试分析
4.1错误分析
在我们调试程序过程中,同时出现了很多问题。
我们将程序输入C-Free中提醒了以下错误:
1、系统提醒了:
error:
‘main’mustreturn‘int’.经过我们对问题分析,我们发觉在C-Free编译器中main函数前缀不能够是void,必需是int才能够运行,这是编译器不一样造成错误
2、系统提醒了:
error:
‘printru’dosenotnameatype.经过我们分析和资料查询,我们发觉是头文件名字和自定义函数名字有了冲突,此时,经过我们对自定义函数名称改变,程序此处错误被处理
3、系统提醒了:
waring:
nonewlineatendoffile.经过我们查询相关资料发觉,这句话英文意思是说文末没有换行符。
在代码中我们添加了\n,此时此处错误被处理
4、系统提醒了:
expectedunqualified-idbefore“int”error:
expected’)’before“int”error:
’leap’wasnotdeclaredinthisscope经过我们又一次对程序检验,发觉是在申明时候少定义了一个变量,int后缺乏了底下所要变量,我们依据下方程序,添加了对应变量,程序能够运行出来了。
4.2错误修改
1、在程序运行后,我们发觉在主循环程序中主界面里出现了很多问号,我们又一次打开程序源代码,发觉程序中printf中不小心误打了很多问号,此时显示出了很多问号。
我们删除了这些问号,程序运行以后变为正常
2、程序运行以后,我们在调试过程中发觉,显示出想要结果以后,不过无法返回到主页面中。
我们认为是少定义了这么一个功效,经过返回源代码查看以后,在if循环以后添加了return,和对应返回值,问题得以处理。
4.3运行程序
进入主界面菜单,输入数字进行选择
图4.主界面菜单
4.4闰年判定功效
按1,进入闰年判定步骤,以后输入年份,进行闰年判定,测试运行结果以下
图4.3闰年判定运行结果
4.5星期计算功效
星期计算功效以下图所表示:
图4.4-1进入星期计算功效
在这一步继续输入年月日,程序进行判定
图4.4-2星期判定运行结果
4.6月历查询功效
月历查询功效图所表示:
图4.5-1进入月历查询功效
在进入月历查询程序后,输入年月查询该月具体日历
图4.5-2月历查询具体运行结果
4.7打印整年年历功效
选择打印整年日历
图4.6-1选择打印整年日历功效
进入打印整年日历功效
图4.6-2整年年历运行结果
5源程序清单
#include<
windows.h>
char*NameOfMonth[12]={"
January"
"
February"
March"
April"
May"
June"
July"
August"
September"
October"
November"
December"
};
char*WeekDay[7]={"
星期日"
星期一"
星期二"
星期三"
星期四"
星期五"
星期六"
intDateCheck(intuYear,intuMonth,intuDay)/*正当返回true,非法或超出范围返回false*/
if(uMonth==4||uMonth==6||uMonth==9||uMonth==11)
if(uDay>
if(IsLeapYear(uYear))
if(year>
=1901)
intX=(int)(year/100);
/*世纪数*/
intY=X-(int)(X/4);
/*假如按4年一闰来算,Y指是比实际上多算天数,在下面需要减去*/
if(month<
0)
ye
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 万年历 设计方案 报告