分享
 
 
 

第四讲 数据库应用程序实例设计(下)

王朝other·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

在上一讲中我们已经将程序方案设计出来,包括程序要具备的功能及数据库结构,本讲将进行其余的几步工作,让我们接着来吧。

一、编写初步程序流程

关于编写程序流程这个问题,可能对高手来说不屑一顾,直接上机写程序就行了,无需先写个什么程序流程之类的。不过心铃认为,对于功能比较简单的软件可以直接写程序,而对于复杂一些的软件,最好还是先写一个流程,写流程的目的主要是把要实现的功能细化一下,在写程序之前仔细考虑一个大纲,这样以后写起程序来会有系统、有条理。那么接下来我们根据本软件要实现的功能来写程序流程。由于篇幅所限,心铃不采用流程图的形式来写,也不能写的很详细。程序流程应该按功能单独写。

员工录入功能。采用DbEdit或Edit输入数据,心铃喜欢用EDIT及COMBOBOX组件。部门名称采用让用户选择的方式,自动显示部门编号。用户输入姓名后要自动显示姓名的拼音首字母,并允许用户修改,因为对多音字电脑无法知道在姓名中该读哪个音。性别让用户选择,有规格的劳保用品让用户选择规格,考虑男式女式,在保存记录时检测用户是否将一些关键信息如部门、姓名、员工代码、工种等录入了,若为空则给出警告信息并拒绝保存等。保存后根据员工工种自动给出一个初始劳保用品发放记录,让用户根据实际情况进行适当修改等。

劳保发放。让用户选择部门,输入本次发放日期,然后在发放记录中逐个查找此部门的员工发放记录,根据上次发放日期和本次发放日期时间差和发放周期计算是否应该发及该发数量,对于有规格的劳保用品则到员工信息表中查询规格,并将这些信息保存了一个临时表中,然后汇总计算。从这里看出,我们还需要一个临时表。以后我们再讲这个临时表应该有什么的结构。计算所有单位劳保用品的一个总汇总数据;考虑是否会重复发放;发放记录输出到文件,打印等。

员工工种改变。让用户输入新、老工种的代码,先查询原工种的劳保用品发放情况,并让用户做必要记录,然后删除原工种发放记录,到工种劳保用品库中查询新工种对应的劳保用品及发放周期,生成一个新的初始发放记录并允许用户根据实际情况调整。

发放记录查询。让用户选择部门,从发放记录中查询到所有本部门员工的发放记录。对单个员工的发放记录查询,让用户输入姓名拼音,由于存在姓名重复问题,如果没有重复直接查询发放记录,如果有重复则列出所有相同名字的员工,用户可逐个查看,这里就需要同时显示员工基本信息和发放记录,通过单位、性别等其他信息判断重名的几名员工中哪个是所要查询的。

员工信息修改及删除。输入姓名或员工编号,如果有相同名字的员工要按上面的办法处理,查询出员工基本信息后供用户修改,同时考虑到一些特殊之处,提示用户工种不可在此修改,因为这些信息在发放记录中也存在,在上面的功能中实现。部门名称修改同时也要将发放记录中的部门编号进行修改。删除员工要把此员工的所有发放记录也全部删除,以防留下垃圾数据。

劳保用品发放周期修改。让用户输入工种、劳保用品名称、新的发放周期,修改工种劳保用品库中的发放周期,同时将发放记录中所有属于此工种、此种劳保用品的员工的发放记录全部修改。

增加和删除劳保用品。增加:要先在工种劳保对应表中增加一条记录,让用户输入工种、新增劳保名称和发放初始时间,为所有此工种的员工的增加此劳保用品的发放记录,由于是新增劳保用品,故初始发放时间应该都是一样的。删除:和上面类似,删除工种劳保用品数据表中的对应记录和发放记录中所有符合条件的员工记录即可。

删除工种。要删除工种劳保用品对应数据表中所有此工种的对应记录,并删除发放记录中所有符合条件的记录。一般说来这种情况较少发生,原此工种的员工都转为别的工种。

增加工种。根据公司规定,在工种劳保用品对应数据表中添加新工种及对应的劳保名称及发放周期,应该在录入员工或有员工工种更换为此工种前进行。

工种改名。这里的工种改名并不改变工种编号,让用户输入原工种名和新工种名,修改工种数据表。

劳保用品改名。让用户输入原劳保名称和新劳保名称,修改工种劳保用品对应数据表中的记录,同时将所有发放记录中的原劳保名称改为新劳保名称。

部门名称修改。这里不改变部门编号,所以无需修改发放记录。让用户输入原部门名称和新部门名称,修改部门名称数据表。

部门合并。将被合并部门的所有员工基本信息中的部门名称和代码修改为要合并到的部门名称和代码,同时修改所有发放记录中的部门代码,这里没有名称。

数据库管理。对ACCESS库利用DAO引擎提供修复、压缩功能,让用户输入备份路径进行数据库备份;让用户输入备份路径后还原数据库;考虑缺省备份路径。

帮助信息。写成CHM文件最好,现在比较流行,在软件完成后编写。

二、准备资料

首先我们要准备的是用户提供的资料,就本程序而言,大家应该知道用户必须提供的就是不同工种对应的劳保用品名称和发放周期的资料,拿到此资料后如果已经建立了数据库可以将此资料直接录入。

其次,准备编程资料,下面从程序流程来分析一下吧。在录入功能中,要实现汉字拼音首字母的提取,需要一个模块,心铃在原来编程时已写了一个单元文件专门处理此事,现在把它找出来。数据库管理中的修复、压缩功能,自己写起来麻烦一些,心铃找到一个有源码的组件单元来实现。关于打印,心铃不喜欢用QuickReport,于是到网上找了一圈,找到了一个免费组件,用于打印DBGrid等内容,可满足需要。数据库备份中会用到文件拷贝功能,心铃找到了一个组件用来完成此功能,虽然自己写也可以,但要处理各种异常比较麻烦,还是重分利用现有资源效率高。充分使用现有组件可以提高程序编写效率,但也有一定缺点,那就是人可能变懒惰了,所以适可而止吧。使用别人的组件可能会有一定风险,如存在的BUG等,为了便于调试和发现问题,心铃写程序用组件的原则是只用有源码的组件,这样即使出现问题也可跟踪找原因。

另外,准备一些收集的数据库编程方面的电子版资料和手头能找到的、估计程序中能用到的报刊杂志等资料,备在案头,方便及时查阅、参考。

三、设计初步界面。

在上面的工作做完之后,可以在纸上勾画一下大致程序界面了。心铃不太喜欢MDI介面,又不想每个功能都打开一个窗口,所以采用的是PageControl组件,在每个页面上实现一组功能,用户使用中切换很方便。在每个页面上,根据所要实现的功能、空间和要显示的数据,将大概用到的标签、文本框、按钮、数据表格等组件排列一下,尽量做到整齐、使用方便等,这类应用程序界面最好不要象一些小工具软件那样使用奇形怪状的界面。

界面在实际的编写过程还会有许多变动,所以这里只能勾画一个大致轮廓,高手可以直接在编写程序时设计界面。由于界面的设计也是一个比较化时间的工作,所以事先有个轮廓应该能为以后的设计节约一些时间。

四、分析难点和解决方案。

分析难点和解决方案是为了能提高程序的编写效率,高手也许不需要了。就本程序而言,虽然从前面功能及流程来看,比较复杂,但难度不是太大。事实上,一般来说,除了功能很复杂的程序外,难点不会很多,之所以有时侯写的很费劲,只能说明自己的编程水平还需提高。就本程序,心铃分析了难点和解决方案,下面简单说明一下。

由于员工编号和部门编号心铃采用的是由数字组成的字符串,所以需要对此给予检测,虽然不是很困难,但心铃并不能马上写出代码,所以还是找点资料,在空白窗体上放置一个EDIT组件写代码验证,在OnChange事件中对输入的字符过滤,通过后,将代码保存备用。对用户在文本框中输入的发放日期,由于在EDIT组件中是当做字符串来处理的,所以要考虑如何检测输入的字符串是合法的日期。为了避免千年虫问题,应该要求输入的日期中年份为四位,也就存在对输入的即使合法的日期也要如何检测年份是否是4位的问题;还有将两个日期的差值换算为多少个月的问题,这些有关日期方面问题的心铃都认为是难点,化了些时间都解决了,当然有些问题读者可能有更高明的解决办法如用MASKEDIT组件解决输入格式问题等,心铃在这里没有使用,却可以多学一点东西。另外,从流程分析,对数据库操作了解的悉读者可能都会感到SQL语句一定会用到许多,其中有查询、删除、更新等操作,心铃便将有关SQL语法找来熟悉一下并找个数据库验证,做到心中有数。对于在上面提到的第三方组件,由于以前没用过,所以也视为难点,要研究怎么安装,安装后要进行使用验证,看看有没有什么问题等等。总之,找出难点并都找到了解决方案。

到此为止,心铃用了接近两讲的篇幅,为大家讲解如何来进行程序编写前的工作,有的读者可能感到有点烦琐了吧。不过心铃认为,对于初学数据库编程者来说应该是很有益处的,心铃喜欢讲思路,告诉大家怎么去考虑问题,比单单给大家写出结果或代码要好吧。心铃在后续的讲座中也将本着这个思想,希望大家能喜欢这种风格。接下来我们就开始进入关键的一步,写程序!不过大家可要耐着性子呀,心铃在第一讲中已经说了,由于在程序中要穿插讲解数据库组件及其他有关内容,所以写程序的战线要拉得比较长。

要写程序了,先应该做点什么呢?当然应该先设计界面了。心铃对设计界面不内行,设计的界面有点土,还好本讲座不是讲界面设计的,对界面有研究的读者可自己精心设计,心铃建议大家多看看流行软件的界面风格,多学习,取长补短,吸取别人精华,设计出自己的风格。心铃首先设计了三个窗体,一个为主窗体,其中有一个菜单栏,只有三个菜单项,但菜单项并没有子菜单,其实就相当于两个按钮,一个是“进入系统”,第二个是“数据维护”,第三个是“关于”。从流行的方式来看,“帮助”应该做到菜单中,但心铃为本程序只写了简单的帮助,没有写成单独的文件,就用了一个PageCtrol的页面,直接写在上面了,优点是查看帮助非常方便。第二个窗体是用来完成各种功能的,从功能上来说应该是主窗体,但在delphi中主窗体不是这个意思哟。另外两个分别是“数据维护”和“关于”窗体,以后再详细介绍。

既然作为主窗体,除了三个菜单项外,总得还有点什么吧。心铃在上放置了两个图片组件,制做了一幅软件名称图片,下面还有那么多空间呢,另一副图片就大一点充满剩余空间,选择了一幅蓝天、白云、雪山、绿草的风景画放上,给我的同事领领略一下大自然风光!下面是主界面图,见图4-1,不满意也别说呀,给留个面子!心铃将主窗体设计成了不可改变大小,右上角只有一个关闭按钮的窗体,你应该会做吧。

我们来简单研究一下主窗体。除了两个图片组件外,重要的就是菜单组件了。在窗体中放置一个MainMenu,双击后就可以设计菜单项和子菜单了,这个就不用详细说了吧。在设计菜单时,可能有的初学者读者会碰到一点小问题,就是在设计后发现Delphi自动为菜单项和子菜单增加快捷键,带下划线的X、Y、Z之类。心铃告诉大家这个小技巧:在设计菜单界面中,有AutoHotKeys属性,将其设定为maManual会不管用,因为这里操作的对象是Menuitem,只在这里设定了AutoHotKeys属性还不行,退出菜单设计界面,会发现MainMenu1自身还有一个AutoHotKeys属性,将此属性也设定为maManual就可以了。

设计好我们的菜单后,双击菜单项“关于”,写本程序的第一行代码:form2.showModal;

此行代码用于打开“关于”窗体。心铃解释一下“showModal”这个窗体的方法,此方法一般用在显示一些系统信息和关于软件的信息等窗口中,用此方法打开的窗口不允许用户转移焦点,即不允许激活本系统的其他窗体,直到本窗口关闭为止!双击菜单项“进入系统”,写本程序的第二行代码:form3.show;就是打开我们最重要的窗口了,以后再讲此最重要的窗口。双击菜单项“数据维护”,写代码如下:form4.show,这里打开的是用户数据库整理、备份等的窗口。

对于主窗体,我们还有什么工作要做吗?可以不做了,但有些影响程序以后操作的一些全局代码还是写在这里比较好,我们先写两句。前面我们提到,为防止千年虫问题,应该使用四位年份,这里我们用代码来实现,将下面的两行代码写在窗体的ONSHOW事件中或ONCREATE事件中都可以:

DateSeparator := '-';

ShortDateFormat:='yyyy-mm-dd';

第一句强制使用“—“作为分隔符,第二行强制使用四位年份并且采用年—月—日这种符合国人习惯的日期显示格式。

下一讲再讲主窗体中放置的另一个组件。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有