“汽车修理管理系统”的开发描述一个“汽车修理管理系统”的全过程。
10.2.1 需求分析某汽车修理厂根据业务发展的需求,决定建立一个“汽车修理管理系统”,以取代人工操作管理。
开发项目如下:(1)能对汽车修理有关数据进行输入、修改和查询。
(2)编制季度零件定货计划。
(3)打印汽车修理发票和工资月报表。
用户提出开发应用系统要求后,软件开发者应通过调查研究归纳目标系统的数据需求和功能需求。
一、数据需求在调研的过程中,用户提供了该系所需的输出、输入单据(参阅图10.2~10.3)。
输入单据包括修车登记单,汽车修理单,零件入库单和零件出库单等4种;输出单据包括零件定货计划,汽车修理发票和月工资报表等3种。
不少单据都填写过数据,但却正合开发人员的需要,因为这为数据库设计提供了样例。
修车登记单编号:5001 日期:99/01/12修理项目点火线圈汽车牌号A2020203 型号S130 生产厂南方汽车厂车主名李符地址岭分路18号电话8787878图10.3汽车修理单汽车修理单登记单号:5005 汽车牌号;a2312318修理项目大修送修日期99/06/28零件号10001 10004 10005数量2 5 2修理小时98.0完工日期:99/07/27 修理工:李平图10.4 零件入库单零件入库单零件号零件名成本数量价格最低库存量定货量验收人:图10.5 零件出库单零件出库单编号:日期:零件号数量修理工:图10.6 零件定货计划第1季度零件定货计划零件号零件名库存量最低库存定货量10003 离合器3 4 2二、功能需求功能分析的任务,是弄清用户对目标系统数据处理功能所提出的需求。
根据系统目标和数据需求并与用户充分讨论后,本例的功能需求可分为以下几个方面。
1.数据登记登记功能用于把各种单据的数据即时登记到系统奖要定义的表中,还要求能进行修改,这些单据还包括修车登记单、汽车修理单、零件入库单和零件入库单。
图10.7 汽车修理发票顾客姓名施志秋地址东方路1005号汽车牌号A2312318 修理项目大修送修日期99/06/28 备注零件费894.0修理费2352.0总金额3246.0月工资报表工号姓名修理小时小时工资月工资000100052.查询能查询登记单,修理单,汽车,车主,修理工,零件库存的有关数据。
3.编制并显示季度零件定货计划编制零件定货计划需要找出要定货的零件,定货条件为<最低库存量。
定货量可由用户输入和修改。
4.打印发票发票中除包含顾客、汽车及修理项目等数据外,还要计算出修车费,修车费包括修理费和零件费,按下式计算:零件费=∑(零件价格*耗用数量)修理费=小时工资*修理工时*3总计=零件费+修理费不难看出,发票包含的信息来自修车登记单和汽车修理单和零件出库单的各种单据,这是一向涉及面很广的功能。
5.打印修理工工资月报表某修理工的月工资=∑修理小时*小时工资10.2.2数据库设计数据库设计的任务是确定系统所需的数据库。
数据库是表的集合,通常一个系统只需要一个数据库。
前以谈到,数据库设计可分为逻辑设计和物理设计两个步骤。
第一步确定数据库所包含的表极其字段。
第二步确定表的具体结构,及确定字段的名称,类型及宽度;此外还要确定索引,为建立表的关联准备条件。
一、逻辑设计设计从输入数据着手,输入数据中的某类相关数据可以归纳唯一个表。
对需要同时调用的若干表,应使它们符合关联要求。
数据库设计好后,可通过输入数据类印证其可用性,若发现有的输出数据不能从输入数据导出,需继续向用户征集数据。
本例根据季度零件定货计划、汽车修理发票和月工资报表等输出单据的数据需求,从修车登记单,汽车修理单,零件入库单和零件出库单等输入单据中归纳出包含6个表的数据库现将这些表例如下:a 修理单:xld(编号牌号工号修理项目修理小时送修日期完工日期)b 汽车:qc (牌号型号生产家车主名)c 车主:cz(车主名地址电话)d 修理工:xlg(工号姓名地址电话出身日期进厂日期小时工资)f 零件用量:ljyl(编号零件号数量)g 零件库存:ljkc (零件号零件名成本库存量最地库存量定货量)以上括号外的字符是表名,括号内为字段名表,第一个字段为关联关键字。
根据系统数据处理的需求,这些表的关联情况如图10.9所视。
图中用矩行框表示表,需要关联的两个表用线段联接,连线的一端标出关键字,表明必须在一端的表中建立索引。
下面对以上设计说明两点:1为同时调用表中的数据,需将其关联起来,故有时应该在表中添加字段。
例如仅从修理的角度而言,qc.dbf包含牌号,型号和生产厂3个字段以很完整,单打印发票时要用到车主名和地址,为了qc.dbf与cz.dbf能以车主名关联,在qc.dbf中需增加车主名字段。
2.数据库设计必须注意合理性。
如将不同的数据放进同一表中,可能回产生数据冗余。
例如将qc.dbf与cz.dbf 的字段合并为一个表,由于一个车主可以拥有多辆车,在登记这些汽车的牌号、型号和生产厂的同时也要登记车主的车主名,地址和电话,那么这些记录中车主信息将重复记载。
数据冗余会多站存贮容量,更糟的是还会破坏数据的一致性。
如果车主易名,只要一处忘记修改,将来查询或打印是可能会输出不一样的数据。
表的分拆往往能减少数据冗余,单表个数的增多又会增加程序的复杂性,因为须在不同的工作区打开这些表,而且为了实现数据连用还要对表进行关联。
二、物理设计下面列出汽车修理管理系统所有的表结构和索引,为读者理解本例系统,顺便一列出表部分记录。
1.修理单(c:\qcxl\xld.dbf)结构:xld(c(4),c(12),d,d,c(4)n(4,1))记录:记录号编号牌号修理项目送修日期完工日期工号修理小时1 5001 A2020203 点火线圈01/12/99 01/15/99 0003 2.02 5002 R1212123 刹车02/05/99 02/10/99 0005 3.23 5003 H210-100 喷漆02/06/99 02/13/99 0001 6.04 5004 K333-667 换转动轴05/08/99 05/15/99 0003 18.05 5005 A2312318 大修06/28/99 07/27/99 0001 98.02.汽车(C:\QCXL\QC.DBF)结构qc (牌号c(8)普通索引,型号c(6),生产厂c(20),车主名c(8))记录记录号牌号型号生产厂车主名1 A2020203 S130 南方汽车厂李符2 R1212123 760 东环汽车制造厂马一鼎3 H210-210 C12-5 国光轿车厂孔力4 K333-667 FG323 V 福铃货车总厂贾嘉丁5 A2312318 NA122 全球汽车厂施志秋3.车主(C:\QCXL\CZ.DBF)结构cz(车主名c(8)普通索引,地址c (16),电话c(7))记录:记录号车主名地址电话1 李符岭分路18号87878782 马一鼎鸿飞路10号56565553 孔力虎山路15弄15号34567894 贾嘉丁法平路213号33445565 施志秋东方一路1005号66655784.修理工(C:\QCXL\XLG.DBF)结构:xlg(工号c(4)普通索引,姓名c(8),地址c(16),电话c(7),出生日期d,进厂日期d,小时工资n(5.2)) 记录:记录号工号姓名地址电话出生日期进厂日期小时工资1 0002 赵小红虹桥路202号15室1234567 06/05/60 05/02/83 7.502 0003 韩将容光路71弄1号5室2222333 11/08/72 03/02/92 6.503 0004 荣若雪高峰路21号4343434 08/03/56 06/02/80 9.004 0005 凌意扬杨高路12号2401 7070707 04/24/69 03/20/90 7.005 0001 李平南京路1617弄53号8765432 12/12/53 08/01/73 8.005.零件用量(C:\QCXL\LJYL.DBG)结构:ljyl(编号c(4)普通索引,零件号(6),数量n(2))记录:记录号编号零件号数量1 5002 100003 12 5005 100001 23 5005 100004 54 5005 100005 26.零件库存(C:\QCXL\LJKC.DBG)结构:ljkc(零件号c(6)普通索引,零件名c(10),成本n(8.2),价格n(8.2),库存量n(3),量底库存n(3),定货量n(3))记录:记录号零件号零件名成本价格库存量最低库存定货量1 100001 前灯35.00 40.00 42 20 122 100002 方向盘77.70 80.00 15 5 23 100003 离合器598.00 650.00 34 24 100004 活塞环143.00 156.00 60 25 45 100005 反光镜15.00 17.00 100 30 14除了上述6个表外,零件入库、出库时还须有暂存表。
10.2.3应用程序设计一、总体设计按照功能分类时总体设计中常用的方法,系统中总体结构可用层次图来表示(参阅图10.10)。
这种图自上而下进行分层:第一层为系统层,通常对应主程序;第二层围子系统层,一般分来控制作用,但是单该层没有下一层的时候,可以直接表达功能,第三层为功能层,第四层为操作层。
图10.10所视的汽车修理管理系统有3个层次,系统功能分类如下:修车登记单,汽车修理单和修工数据管理等的输入和修改归入登记一项,零件定货计划,零件定货和出货归入零件管理一类,查询和打印各成类图中未画出操作层,该程序的模块将在模块设计时列出。
二、初始用户界面设计从总体结构图很容易列出应用程序的菜单,由总体结构图转化到菜单时,其对应的情况如下:系统层对菜单文件;子系统对应菜单标题;功能层对应子菜单项。
图10.11是汽车修理管理系统下拉菜单的示意图,说明如下;(1)本例使用菜单作为初始界面,并设置一个主文件来调用菜单程序。
(2)若该用表单作为初始界面可以在表单上设置若干按钮来表示各子系统的功能。
对于图中附加的菜单项,下文将进行设计与编码。
三、模块设计与编码本小节将对“汽车修理管理系统”主要模块的设计与编码作简要说明。
1.主文件(qcxl.prg)菜单文件名定为qcxlcd(汽车修理菜单),并设置一个文件来调用它。
主文件代码如下:SET TALK OFF其实物理设计就系统表结构的建立SET DEFA TO c:\qcxl &&设置文件默认路径,本例所有文件都应装在该目录中CLEA ALL &&统一设置数据环境,自动关闭所有的工作区后打开视图文件SET VIEW TO sjhj.vue &&xldh用于存储输入的修理单号;zljf存储总零件费,打印发票时用PUBLIC xldh,zljfxldh=SPACE(4)DO FORM fm &&显示封面(参阅例7—1,并事先将fm表单复制到C:\qcxl)KEYB`{CTRL+F4}` &&关闭command窗口MODI WIND SCREEN TITL`汽车管理系统` &&打开VEP主窗口并设置窗口标题CLEA*以上为初始化环境代码DO qxlcd.mpr &&菜单文件名定为QCXLCD(汽车修理菜单)READ EVENT &&建立事件循环QUIT &&退出VEP*恢复环境代码设置在“退出”菜单项中。