您好,欢迎访问三七文档
软件类设计实训———电子日历软件设计作者:学号:学院:自动化工程学院班级:院系:自动化工程学院专业:自动化指导者:年月吉林1摘要本次课设是设计一个桌面日历,要求能实现以数字形式显示日期和时间并能对时间进行修改和调整功能。因此首先需要显示日历,从系统中获取时间进行初始化;然后按要求进行显示,再通过软件进行时间修改,将修改过的时间进行保存,使时间能够在修改过后自主进行计时。在修改时间时,不能同时对时分秒中的任意两个或三个进行修改,当输入值不在正常范围值时,软件会自主进行报错。同时,本软件也能实现日期的查询与调整。同样地,不能同时对年月日中的任意两个或三个进行修改,当输入值不在正常范围值之内时,软件会弹出对话框进行报错。由于本设计是由C++builder软件设计的,程序部分看起来会比较简单;但由于C++builder中组件属性值要求的类型是固定的,所以在调试过程中曾出现大量错误和漏洞。因此一些看似不必要的程序势必不可少的。关键字:C++builder,万年历,C语言2目录第1章绪论.................................................31.1设计目的....................................................31.2设计内容和要求..............................................31.3设计工作任务及工作量的要求..................................3第2章设计思路及程序流程.......................................42.1总设计思路与总流程图........................................42.1.1总设计思路..............................................42.1.2总流程图................................................42.2模块流程图及程序介绍........................................62.2.1时间的获取..............................................62.2.2检查时间正确性..........................................72.2.3日期及时间的更新.......................................102.2.4时间及日期的修改.......................................12第3章部分补丁程序简介........................................133.1多个输入框不能同时为空.....................................133.2不同时间段时间获取.........................................14第4章软件操作说明............................................164.1按键简介...................................................174.1.1今天按键...............................................174.1.2修改按键...............................................174.1.3上取消按键.............................................174.1.4下取消按键.............................................174.2输入框简介.................................................17第4章心得体会.................................................18参考文献.......................................................18附录...........................................................193第1章绪论1.1设计目的本次实训是自动化(卓越班)专业重要的实践性环节之一,是在学生学习完程序设计类课程后进行的一次全面的综合实践。具体的实训目的和任务如下:(1)巩固和加深学生对程序设计语言类课程基本知识的理解和掌握;(2)掌握程序设计和调试的基本技能;(3)掌握书写程序设计说明文档的能力;(4)提高运用程序设计语言解决实际问题的能力。1.2设计内容和要求利用相关的程序设计语言设计电子日历软件设计程序,要求能够显示日历和实现信息,具体实现以下要求:(1)能够以数字形式显示年月日;(2)能够以数字形式显示时分秒;(3)具有时间修改和调整功能。1.3设计工作任务及工作量的要求(1)画出系统工作的软件流程图;(2)撰写软件实训的设计说明书;(3)给出相应子程序的入口参数和出口参数;(4)说明软件工作的基本原理和实现方法;(5)程序的可靠性设计和相关说明;(6)必须能够编译链接生成可执行文件。4第2章设计思路及程序流程2.1总设计思路与总流程图2.1.1总设计思路首先,程序要有初始时间,进行输出。由于,我们做的是一款用C++builder设计的日历软件,所以可以从系统中获取时间进行初始化,初始化后直接输出当前的日期与时间。其次,我们需要通过此软件实现时间的查询或修改功能。由于本软件具有直接输入功能,所以有可能输入的时间并不存在,因此在获取时间后要对时间进行正确性检查。然后,当我们输入的时间合法时,但时间依然在不停的流逝,所以此软件必须能够自主更新时间,即自主刷新,实现计时功能。最后,当一切正常进行时,日期和时间要在规定区域内进行输出。2.1.2总流程图如图1,此流程图只是对本次设计的一个大概描述,是一个总体框架结构。在此流程图中,我们可以看到我的设计思路和软件的大致流程。5开始获取日期及时间检查正确性输出日期及时间结束自主刷新时间6图1:总流程图2.2模块流程图及程序介绍2.2.1时间的获取获取时间有两种方法,一是初始化时从系统中获取日期和时间;二是当我们要查询日期或进行时间的调整时,获取我们输入的日期和时间。由于我们要能实现对年月日时分秒每一个独立的调整,所以这里我添加了六个CSpinEdit组件,每个组件程序基本相同。流程图如图2。图2:获取时间开始从系统获取日期及时间修改年月日时分秒结束72.2.2检查时间正确性检查时间的正确性分两部分,一是要检查年月日的正确性;二是要时分秒的正确性。(一)检查年月日正确性在检查年月日正确性时要先判断当年是否为闰年,这是因为如果当年是闰年,则二月有二十九天;如果当年是平年,则二月有二十八天。这会影响后面程序的判断,而且影响日期的更变。判断闰年在后续程序中也要用到,所以在这里我们要将其单独拿出。图3是判断闰年的程序流程图。8开始结束获取年份yy%4==0y%100==0y%400==0闰年平年YNNNYY9图3:判断闰年判断完闰年后,要对日期进行检查。在每年的1,3,5,7,8,10,12月份是31天,在每年的4,6,9,11月份是30天,闰年2月是29天,平年2月是28天。当日期超出合法日期范围时,本软件会进行报错。程序框图如图4。开始输入日期y,m,dm==1||3||5||7||8||10||12,d31m==4||6||9||11,d30y为闰年d29NNNYYYY10图4:检查日期(二)检查时分秒正确性检查时分秒的正确性较为简单,只需保证小时保证在0——23范围内,分钟在0——59范围内,秒在0——59范围内。当出现不在此区间内的时间是系统进行报错。2.2.3日期及时间的更新本软件是一款日历软件,因此要有计时功能,并能够实现日期及时间的更新。此更新方法比较简单。即:每60秒增加一分钟,每60分钟增加1个小时,每24个小时,增加一天,当上一天是月末时,日期变为下个月的第一天,在这里我们需要月份判断天数,再由当前日期确定是否变更为下个月的第一天;在判断当前月份的天数时,我们可能需要判断当年是否为闰年。当月份增加时,要看上个月是不是十二月,若为十二月是我们要使年份加一。这部分程序是需要每秒钟执行一次的,在这里我使用了Time组件,将其Interval属性设为1000。具体程序如下:void__fastcallTForm1::Timer5Timer(TObject*Sender){if(CSpinEdit4-Text==||CSpinEdit5-Text==||CSpinEdit6-Text==)结束d28YNY合法,返回真输出错误标志11{Timer5-Enabled=false;return;}elseTimer5-Enabled=true;intj=CSpinEdit3-Value;if(CSpinEdit4-Value==0&&CSpinEdit5-Value==0&&CSpinEdit6-Value==0)++j;inty=CSpinEdit1-Value;intm=CSpinEdit2-Value;switch(m){case1:case3:case5:case7:case8:case10:if(j==32){CSpinEdit3-Value=1;CSpinEdit2-Value=++m;}elseCSpinEdit3-Value=j;break;case12:if(j==32){CSpinEdit3-Value=1;CSpinEdit2-Value=1;CSpinEdit1-Value=++y;}elseCSpinEdit3-Value=j;break;case4:case6:case9:case11:if(j==31){CSpinEdit3-Value=1;CSpinEdit2-Value=++m;}else12CSpinEdit3-Value=j;break;default:if((y%400==0||(y%4==0&&y%100!=0))&&(j==30)){CSpinEdit3-Value=1;CSpinEdit2-Value=++m;}elseif((y%400==0||(y%4==0&&y%100!=0))==0&&(j==29)){CSpinEdit3-Value=1;CSpinEdit2-Value=++m;}elseCSpinEdit3-Value=j;}}2.2.4时间及日期的修改时间的修改是比较简单的,只要在输入框中进行改变即可;但日期的修改则略麻烦点。当修改完日期后,我们还能通过此软件进行日期查询;查询完后还能返回到刚才修改过的日期,不能再从系统中获取时间,这便需要软件保存修改过的时间。在这里我定义了三个全局整型变量来实现,日期的修改。13第3章部分补丁程序简介3.1多个输入框不能同时为空输入框不能同时为空。在这里我使用的是C++builder中的CSpinEdit组件,它的输入要求是正型变量。所以在输入不是数字是软件将会出现故障,这是我所未能完成的。当输入框为空时,也是不符合CSpinEdit属性要求的,所以要在每个CSpinEdit组件命令输入:if(CSpinEdit1-Text==)return;这只实现了在我们用键盘输入时,能够清空输入框,使程序正常运行。但我们有时会清空了一个输入框,再去输入另一个,这时软件会再次出错。这里我使用了一个计时器Time组件,当修改一个输入框,其他输入框是不能被修改的。在这个Time组件中的程序如下:v
本文标题:桌面电子日历制作
链接地址:https://www.777doc.com/doc-3353939 .html