《信息系统设计》 软件工程课程设计 课题名称:员工信息经管系统
姓 名:兰朝仁 学 号:080153035 学 院:继续教育学院 专 业:计算机科学与技术 年 级:2008
级(夜大专升本)
指导教师:陈郞钦
完成日期:2010年10月11日
目录
引言1 1.系统规划2
1.1系统设计目标2 1.2系统总体规划2
1.3设计技术方案(步骤)2 2.系统分析2
2.1业务需求与分析2 2.2系统业务流程图3 2.3系统数据流程图4 3.系统设计5
3.1系统软件功能结构5 3.2系统主要技术5 3.3系统数据库设计6 3.3.1数据库设计要点6
3.3.2数据库系统设计要点及难点6 3.3.3数据库及其表的建立和使用6 3.3.4系统组成及数据环境6 3.3.5数据库概念设计7 3.3.6数据库逻辑设计8 3.3.7数据库物理设计9 3.4输出设计11 3.5输入设计11 4.系统实现11
4.1系统主程序流程13 4.2系统主界面设计14 4.3系统主程序设计14 4.4子程序设计19 4.4.1系统登录19 4.4.2员工经管21 4.4.3部门经管24 4.4.4职务经管26 4.4.5工资经管28
4.4.6工资类别经管29 4.5系统测试34 5.结束语35
【摘 要】本文从员工信息经管系统规划、需求分析、系统设计、系统实现及系统
测试等多个方面,分别叙述系统研发的整个实现过程,简述采用Delphi 7编程工具及Access数据库实现系统应用的设计要点,重点阐述系统实现过程中的重点和难点问题的分析及其解决技术方案,解决企业对员工的计算机经管。
【关键词】员工、人事、工资、经管、数据库
引言
随着我国国民经济建设的蓬勃发展和社会主义市场经济体制的迅速完善,各个行业都在积极使用现代化的手段,不断改善服务质量,提高工作效率,这些都在很大程度上给企业提出越来越严峻的挑战,对企业体系无论是在行政职能、企业经管水平以及优质服务上都提出更高的要求。建设一个科学高效的信息经管系统是解决这一问题的必由之路。员工信息经管作为企业内部的一种员工基本档案经管也是如此,由于企业的人数较多,每一位员工的具体实际情况也不尽相同,如果没有一个完整的员工信息经管系统去完成,将使工作变得复杂,并且对于工作的效率也将使一个致命的打击,使无论如何也无法适应现代社的需要。另外,目前部分企业使用的员工信息经管系统只有信息的录入,修改和删除的功能,而不具有信息查询的功能,这对于企业的信息经管工作来说是一个很遗憾的事情。因此,开发一套功能完整,设计合理,使用方便的企业员工信息经管系统成为很有必要的事情。
企业员工信息经管系统的内容功能对于企业的决策者和经管者来说都至关重要,所以企业员工信息经管系统应该能够为经管者提供充足的信息和快捷的查询与经管手段。作为计算机应用的一部分,使用计算机对企业员工信息进行经管,具有手工经管所无法比拟的优点.例如:查询迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够降低员工经管工作的成本,减轻企业经管人员的负担,方便员工信息的更新、维护和查询,增加数据的可靠性。从而提高企业员工信息经管的效率,开拓企业员工经管工作的新局面,提高经管水平,是企业经管的科学化、正规化、信息化经管,与世界接轨的重要条件。
当前主流的程序开发环境有MicrosoftVisual Studio.NET,SunJava,BorlandDelphi等。Visual Studio.NET对Windows系统兼容性好;Java可以支持多种环境及操作系统平台;而Delphi则可在Windows系统下快速开发C/S结构程序,具有多方成熟的控件完善系统开发。
主流的数据系统则有Oracle,Microsoft SQL Server和Access。Oracle功能强大,稳定性好;SQL Server稳定,功能齐全;而Access简单快速、小巧便捷。
下面采用Borland Delphi 7开发环境,结合Microsoft Access数据库,对员工信息经管系统的开发过程和系统规划、系统需求及分析、系统设计、系统实现及系统测试等各个阶段,论述其数据库应用系统的设计要点,实现过程中存在的难点、问题的分析及其解决技术方案。
1. 系统规划
系统规划的主要内容是信息系统设计的目标及信息系统的总体技术方案。 1.1 系统设计目标
本系统的设计目标是建立企业对员工档案及工资的计算机经管系统。 1.2 系统总体规划
系统本着合理性、可靠性和先进性的原则,实现:
(1)完整的数据分析系统,能对数据流实施控制与动态分析; (2)有功能强大、资料齐全的查询系统;
(3)方便用户使用及操作的界面,操作简便、运行稳定。 1.3 设计技术方案(步骤)
在员工信息需求的基础上,提出整个信息系统的总体结构技术方案,确定系统开发设计的次序及时间的安排。具体分为五个步骤:
(4)分析员工档案及工资等信息经管的业务活动,搞清业务流程及数据流程; (5)根据业务流程及数据流程,确定属于系统业务处理的范围; (6)分析业务流程及数据流程所涉及的数据,确定数据库及其数据表; (7)确定系统概要设计(总体结构、数据结构)、详细设计(模块、算法)框架; (8)进行系统实施过程的程序设计及其软件测试。
2. 系统分析
系统分析的最主要内容有员工信息经管系统的业务需求分析、业务流程图、数据流程图、数据库设计等四个部分。 2.1 业务需求与分析
(1) 系统数据需求
通过对企业员工的信息经管业务流程的调查,归纳总结系统对其数据的需求,主要有:①员工档案信息,②员工工资信息,③部门、职务、工资类型等基础信息
(2) 系统功能需求
系统的主要需求,即所设计的系统在功能上应做什么。本系统主要的功能有: ①员工经管:完成员工档案的新增、修改、删除、查询及打印等功能;主要实现对所有员工的姓名、编号、部门、职务、入职时间、性别、身份证号、出生日期、学历、私人电话及工作电话等信息的经管。
②工资经管:完成员工工资的录入、查询、分析及相关打印等功能;主要实现对员工的姓名、工资类别及工资金额等信息的经管。
③基本信息经管:完成部门设置、职务设置、工资类别设置、用户口令设置,系统数据初始化等功能。部门设置主要实现部门编号和部门名称的设置;职务设置主要实现职务编号和职务名称的设置;工资类别设置主要实现工资类别编号和工资类别名称的设置;口令更改实现用户口令的修改;系统初始化清除系统所有历史数据,使数据库进入初始状态。
④系统帮助:帮助用户解决问题,沟通与软件开发者的联系。 (3) 系统性能需求
系统的性能指标包括存储容量限制、运行时间限制、传输速度要求、安全保密性等几个方面。
(4) 系统运行环境需求
①硬件方面:采用的设备机型以及外部设备等;
②软件方面:支持系统运行的系统软件,如操作系统、数据库系统等。 (5) 系统可靠性及安全保密需求
对系统、重要子系统在运行中的安全、可靠、保密方面提出要求。 2.2 系统业务流程图
从实际业务功能的角度将系统规划中有关的业务做进一步的分析,用一个完整的图型来反映业务处理过程。
系统业务流程图(TFD)如下:
员工部门经理人事经理入职登记表日常表现、工作业绩、奖惩等信息工资表人事处审核总经理审核员工档案员工工资人事处员工档案数据综合处理员工档案报表员工工资报表 2.3 系统数据流程图
以数据流程图表示数据流向和对数据进行的加工;分析系统数据,对数据流图中的数据流给出具体定义。
系统的顶层数据流程图(DFD)如下:
登记表员工不合格登记表审核合格登记表记录处理员工记录员工档案报表部门经理其它信息审核工资表业绩、奖惩等员工数据员工信息综合数据员工工资数据综合处理人事经理工资工资信息工资类型审核工资统计工资分析工资员工工资报表员工
3. 系统设计
系统设计主要有以下几项内容: 3.1 系统软件功能结构
员工信息管理系统员工管理部门设置职务设置工资管理工资类别设置系统维护用户设置初始化系统帮助新修删查打增改除询印新修删查打增改除询印 3.2 系统主要技术
本系统采用Borland Delphi 7开发环境,结合Microsoft Access数据库。Borland Delphi 7使用的是面向对象的Object Pascal语言,可以灵活得进行大型应用系统的开发。Delphi 7提供了对数据库系统及规范SQL语言支持,可以开发出符合规范SQL的应用系统,提高系统的可移植性,可根据不同企业的需求,使用Oracle、SQL Server、Access等规范的SQL数据库。同时,Delphi 7自身提供了
很多数据库操作的控件,还有第三方优势的数据库操控件,从面更快,更好得开发出优秀的应用系统。本系统就采用了Dev Express公司的DevExpressVCL数据控件一起实现员工信息经管系统的开发。
3.3 系统数据库设计
3.3.1 数据库设计要点
(9)第一阶段的设计任务是收集和分析用户需求,完成数据库的概念设计。 (10)第二阶段设计任务是数据库的逻辑设计,完成E-R模型向逻辑模型转换。 (11)第三阶段设计任务是数据库的物理设计,确定表的结构,建立数据库模型。 3.3.2 数据库系统设计要点及难点
(12)建立数据库,确定数据库中表的数量及其每个表中各个字段的字段名、类型、宽度、小数及索引、排序。
(13)确定数据库中各个表的字段的主键值、主索引及普通索引。 (14)建立各个表数据环境,确定主表并建立主表与各个表之单的关联。 (15)程序设计过程中的标签、文本框、编辑框、复选框、列表框、数据库连接、数据查询的属性。
(16)采用结构化编程方法,确定系统功能模块及其相互之间的关系。 3.3.3 数据库及其表的建立和使用
使用Access程序建立Access数据库,建立相应表,设置各个表中具体字段名称、类型、主键、索引,设置各个表间的关系。 3.3.4 系统组成及数据环境
(1)数据库:PersonnelInfo.mdb (2)表: 表,
员工-员工信息表, 职务-职务信息表,
工资-工资表, 部门-部门信息工资类别-工资类别信息表
(3)工程:PersonnelInfo.dpr:员工信息经管系统工程经管器 (4)表单: Main.dfm-系统主界面 Wage.dfm-工资经管界面
Personnel.dfm-员工经管界面Department.dfm-部门经管界面
Post.dfm-职务经管界面 About.dfm -关于界面
WageCategory.dfm-工资类型经管界面
(5)程序: Main.pas-系统主程序 Wage.pas-工资经管程序
Personnel.pas -员工经管程序Department.pas-部门经管程序
Post.pas-职务经管程序 About.pas -关于程序
WageCategory.pas-工资类型经管程序
(6)数据环境:
3.3.5 数据库概念设计
数据库概念设计主要采用E-R模型进行设计.E-R模型的关系是确定每一处理模块的实体、实体属性和实体间的联系。实体、属性、联系及数据结构描述如下:
(1)员工经管模块
实体:员工、部门、职务;
属性:员工的属性有姓名、员工编号、部门、职务、入职时间、性别、身份证号、出生日期、学历、私人电话、工作电话及备注等;部门的属性有部门编号和部门名称;职务的属性有职务编号和职务名称。
联系:员工与部门之间是多对一(M:1)的关系;员工与职务之间也是多对一(M:1)的关系。
数据项:见数据库的物理设计。 (2)工资经管模块 实体:工资、工资类别;
属性:工资的属性有员工编号、工资类别和工资金额;工资类别有工资类别编号、工资类别名称。
关系:工资类别与工资这间是一对一(1:1)的关系。 数据项:见数据库的物理设计。 3.3.6 数据库逻辑设计
数据库的逻辑设计主要完成从E-R模型向数据逻辑模型的转换。首先将E-R模型中同一实体的所有属性放在同一记录类型中,变成记录的数据项;其次如果两个实体间有M:N的关系,除各自建立记录类型之外,还需增加一个记录类型,这一记录类型应包括两个实体各自的主键。逻辑模型规范化及总E-R图描述如下:
员工(员工编号、姓名、部门编号、职务编号、入职时间、性别、身份证号、出生日期、学历、私人电话、工作电话、备注);
部门(部门编号、部门名称、备注); 职务(职务编号、职务名称、备注);
工资(员工编号、工资类型编号、金额、备注); 工资类别(工资类别编号、工资类别名称、备注); 用户(用户名、密码、确认密码、备注)。 消除冗余数据和联系后,其系统的E-R图如下:
姓名入职时间性别身份证号出生日期学历私人电话员工编号工作电话部门编号学生M员工档案N工资类型K工资职务编号工资类型编号工资类型名称员工编号工资类型编号工资金额 3.3.7 数据库物理设计
数据库的物理设计将完成数据逻辑模型向数据物理模型的转换。每一记录类型确定为数据库中的一张表;记录类型中的数据项成为相应表中的字段,字段属性根据各字段特点设置;确定索引和表之间的联系。系统表结构描述如下:
(1)员工表
用于存放员工信息,包括员工编号、姓名、部门编号、职务编号、入职时间、性别、身份证号、出生日期、学历、私人电话、工作电话、备注。
字段 字段名称 1 2 3 4 5 员工编号 姓名 部门编号 职务编号 类型 文本 文本 数字 数字 宽度 20 10 长整型 长整型 必需 是 是 索引 说明 有无重复 主键 入职时间 日期/时间 字段 字段名称 6 7 8 9 10 11 12 性别 身份证号 类型 文本 文本 宽度 2 20 10 20 20 100 必需 索引 说明 出生日期 日期/时间 学历 私人电话 工作电话 备注 文本 文本 文本 文本 (2)部门表
用于存放员工的部门信息,包括部门编号、部门名称和备注。 字段 字段名称 1 2 3 部门编号 部门名称 备注 类型 数字 文本 文本 宽度 长整型 20 100 必需 是 是 索引 说明 有无重复 主键 (3)职务表
用于存放员工的职务信息,包括职务编号、职务名称和备注。 字段 字段名称 1 2 3 职务编号 职务名称 备注 类型 数字 文本 文本 宽度 长整型 20 100 必需 是 是 索引 说明 有无重复 主键 (4)工资表
用于存放员工的工资信息,包括员工编号、工资类别编号、金额和备注。 字段 1 2 3 4 字段名称 员工编号 类型 文本 宽度 20 长整型 必需 是 是 索引 有重复 有重复 说明 主键 主键 工资类别编号 数字 金额 备注 数字 单精度型 文本 100 (5)工资类别表
用于存放员工的工资类别,包括工资类别编号、工资类别名称和备注。
字段 1 2 3 字段名称 工资类别编号 工资类别名称 备注 类型 数字 文本 文本 宽度 长整型 20 100 必需 是 是 索引 说明 有无重复 主键 (6)用户表
用于存放系统的用户名和密码,包括用户名、密码和备注。 字段 1 2 3 4 3.4 输出设计
(1) 选择输出方式 :显示终端、打印机; (2) 确定输出格式:格式设计体现在各类报表中; (3) 输出的主要形式:报表;
(4) 输出的内容:主要有员工信息、工资信息、部门信息、职务信息、工资类
别信息和用户信息。
3.5 输入设计
(1) 输入方式设计
①键盘输入和鼠标操作,为常规的数据录入方式; ②磁盘传递数据。
(2) 用户界面设计(详见各子模块用户界面)
①人机对话方式:通过屏幕、键盘、鼠标与系统对话,当操作错误时系统给出提示和警告。
①菜单方式:设计成下拉式、上弹式、按钮式,功能选择:有光带移动、数字或字母选择、鼠标驱动。
字段名称 用户名 密码 确认密码 备注 类型 文本 文本 文本 文本 宽度 20 30 30 100 必需 是 是 是 索引 说明 有无重复 主键 4. 系统实现
系统实施的最主要工作是程序设计,此外还包括了物理系统的实施、程序的调
试等。本系统的程序设计由主程序和各模块表单程序等两大部份组成。
4.1 系统主程序流程
开始输入密码N新增员工N录入工资N部门管理N职务管理N工资类型管理N用户管理N数据初始化N帮助信息Y关于系统Y数据初始化Y用户管理Y工资类型管理Y职务管理Y部门管理Y员工工资管理Y员工信息管理密码正确Y开始
4.2 系统主界面设计
4.3 系统主程序设计
unit Main。
interface
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, Menus, StdCtrls, Dialogs, Buttons, Messages, ExtCtrls, ComCtrls, StdActns, ActnList, ToolWin, ImgList, DB, ADODB, cxControls, cxContainer, cxEdit, cxLabel。 type
TMainForm = class(TForm) MainMenu: TMainMenu。 File1: TMenuItem。 Window: TMenuItem。
Help: TMenuItem。
FileExitItem: TMenuItem。
WindowCascadeItem: TMenuItem。 WindowTileItem: TMenuItem。 WindowArrangeItem: TMenuItem。 HelpAboutItem: TMenuItem。
WindowMinimizeItem: TMenuItem。 ActionList: TActionList。 FileExit: TAction。
WindowCascade1: TWindowCascade。
WindowTileHorizontal1: TWindowTileHorizontal。 WindowArrangeAll1: TWindowArrange。
WindowMinimizeAll1: TWindowMinimizeAll。 HelpAbout1: TAction。
WindowTileVertical1: TWindowTileVertical。 WindowTileItem2: TMenuItem。 ImageList: TImageList。 FileWage: TMenuItem。 FilePersonnel: TMenuItem。 FileDepartment: TMenuItem。
ADOConnection: TADOConnection。 FilePost: TMenuItem。 N1: TMenuItem。
FileWageCategory: TMenuItem。 Image1: TImage。
FileUser: TMenuItem。
ADOQueryDelete: TADOQuery。 FileDataInit: TMenuItem。
procedure HelpAbout1Execute(Sender: TObject)。 procedure FileExitExecute(Sender: TObject)。 procedure FilePersonnelClick(Sender: TObject)。 procedure FileDepartmentClick(Sender: TObject)。 procedure FilePostClick(Sender: TObject)。
procedure FileWageCategoryClick(Sender: TObject)。 procedure FileWageClick(Sender: TObject)。 procedure FormActivate(Sender: TObject)。 procedure FileUserClick(Sender: TObject)。 procedure FileDataInitClick(Sender: TObject)。 private
{ Private declarations } public
{ Public declarations } end。 var
MainForm: TMainForm。 ShowLogin :Boolean = True。
implementation
{$R *.dfm}
uses Login, Personnel, Department, Post, Wage, WageCategory, User, About。
procedure TMainForm.FileExitExecute(Sender: TObject)。 begin Close。 end。
procedure TMainForm.HelpAbout1Execute(Sender: TObject)。 begin
AboutBox.ShowModal。 end。
procedure TMainForm.FilePersonnelClick(Sender: TObject)。 var
MDIPersonnel: TMDIPersonnel。 i: integer。 begin
for i:=0 to MDIChildCount-1 do
if MDIChildren[i] is TMDIPersonnel then begin
MDIChildren[i].BringToFront。
if MDIChildren[i].WindowState = wsMinimized then MDIChildren[i].WindowState := wsNormal。 Exit。 end。
MDIPersonnel := TMDIPersonnel.Create(Application)。 MDIPersonnel.Show。 end。
procedure TMainForm.FileDepartmentClick(Sender: TObject)。
var
MDIDepartment: TMDIDepartment。 i: integer。 begin
for i:=0 to MDIChildCount-1 do
if MDIChildren[i] is TMDIDepartment then begin
MDIChildren[i].BringToFront。
if MDIChildren[i].WindowState = wsMinimized then MDIChildren[i].WindowState := wsNormal。 Exit。 end。
MDIDepartment := TMDIDepartment.Create(Application)。 MDIDepartment.Show。 end。
procedure TMainForm.FilePostClick(Sender: TObject)。 var
MDIPost: TMDIPost。 i: integer。 begin
for i:=0 to MDIChildCount-1 do
if MDIChildren[i] is TMDIPost then begin
MDIChildren[i].BringToFront。
if MDIChildren[i].WindowState = wsMinimized then MDIChildren[i].WindowState := wsNormal。 Exit。 end。
MDIPost := TMDIPost.Create(Application)。 MDIPost.Show。 end。
procedure TMainForm.FileWageCategoryClick(Sender: TObject)。 var
MDIWageCategory: TMDIWageCategory。 i: integer。 begin
for i:=0 to MDIChildCount-1 do
if MDIChildren[i] is TMDIWageCategory then begin
MDIChildren[i].BringToFront。
if MDIChildren[i].WindowState = wsMinimized then MDIChildren[i].WindowState := wsNormal。 Exit。 end。
MDIWageCategory := TMDIWageCategory.Create(Application)。 MDIWageCategory.Show。 end。
procedure TMainForm.FileWageClick(Sender: TObject)。 var
MDIWage: TMDIWage。 i: integer。 begin
for i:=0 to MDIChildCount-1 do
if MDIChildren[i] is TMDIWage then begin
MDIChildren[i].BringToFront。
if MDIChildren[i].WindowState = wsMinimized then MDIChildren[i].WindowState := wsNormal。 Exit。 end。
MDIWage := TMDIWage.Create(Application)。 MDIWage.Show。 end。
procedure TMainForm.FormActivate(Sender: TObject)。 begin
if ShowLogin then begin
LoginBox.ShowModal。 if ShowLogin then Close。 end。 end。
procedure TMainForm.FileUserClick(Sender: TObject)。 var
MDIUser: TMDIUser。 i: integer。 begin
for i:=0 to MDIChildCount-1 do
if MDIChildren[i] is TMDIUser then begin
MDIChildren[i].BringToFront。
if MDIChildren[i].WindowState = wsMinimized then MDIChildren[i].WindowState := wsNormal。 Exit。 end。
MDIUser := TMDIUser.Create(Application)。 MDIUser.Show。 end。 end.
4.4 子程序设计
4.4.1 系统登录
unit Login。
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, StdCtrls。 type
TLoginBox = class(TForm) ButtonLogin: TButton。 ButtonCancel: TButton。 LabelUser: TLabel。 EditUser: TEdit。
LabelPassword: TLabel。 EditPassword: TEdit。
ADOQueryLogin: TADOQuery。
procedure ButtonLoginClick(Sender: TObject)。
procedure FormClose(Sender: TObject。 var Action: TCloseAction)。 procedure ButtonCancelClick(Sender: TObject)。 private
{ Private declarations } public
{ Public declarations } end。 var
LoginBox: TLoginBox。 LoginTime: Integer=0。
implementation
{$R *.dfm}
uses Main。
procedure TLoginBox.ButtonLoginClick(Sender: TObject)。 begin
if (EditUser.Text<>'') then begin try
ADOQueryLogin.Close。 ADOQueryLogin.SQL.Clear。
ADOQueryLogin.SQL.Add('SELECT COUNT(*) FROM 用户 WHERE 用户名=:User AND 密码=:Password')。
ADOQueryLogin.Parameters.ParamByName('User').Value:=EditUser.Text。
ADOQueryLogin.Parameters.ParamByName('Password').Value:=EditPassword.Text。 ADOQueryLogin.Open。
if ADOQueryLogin.Fields[0].AsInteger>=1 then begin
ShowLogin:=False。 Close。 end else begin
ShowMessage('用户名或密码错误!')。 LoginTime:=LoginTime+1。 if LoginTime=3 then Close。 end。 finally
ADOQueryLogin.Close。 end。 end。 end。
procedure TLoginBox.FormClose(Sender: TObject。 var Action: TCloseAction)。 begin
Action := caFree。 end。
procedure TLoginBox.ButtonCancelClick(Sender: TObject)。 begin Close。 end。 end.
4.4.2 员工经管
unit Personnel。
interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, cxDBData, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGrid, cxNavigator, StdCtrls, Grids, DBGrids, StrUtils, cxDBNavigator, cxGridCustomPopupMenu, cxGridPopupMenu, dxStatusBar, cxCalendar, cxDropDownEdit, cxCheckBox, cxRadioGroup, cxDBLookupComboBox。 type
TMDIPersonnel = class(TForm)
DataSourcePersonne: TDataSource。 ADOQueryPersonne: TADOQuery。
cxGrid1DBTableView1: TcxGridDBTableView。 cxGrid1Level1: TcxGridLevel。 cxGrid1: TcxGrid。
cxDBNavigator1: TcxDBNavigator。
cxGrid1DBTableView1DBColumn: TcxGridDBColumn。 cxGrid1DBTableView1DBColumn1: TcxGridDBColumn。 cxGrid1DBTableView1DBColumn2: TcxGridDBColumn。 cxGrid1DBTableView1DBColumn3: TcxGridDBColumn。 cxGrid1DBTableView1DBColumn4: TcxGridDBColumn。 cxGrid1DBTableView1DBColumn5: TcxGridDBColumn。 cxGrid1DBTableView1DBColumn6: TcxGridDBColumn。 cxGrid1DBTableView1DBColumn7: TcxGridDBColumn。 cxGrid1DBTableView1DBColumn8: TcxGridDBColumn。 cxGrid1DBTableView1DBColumn9: TcxGridDBColumn。 cxGrid1DBTableView1DBColumn10: TcxGridDBColumn。 cxGrid1DBTableView1DBColumn11: TcxGridDBColumn。 DataSourceDepartment: TDataSource。 ADOQueryDepartment: TADOQuery。 DataSourcePost: TDataSource。 ADOQueryPost: TADOQuery。
procedure ADOQueryPersonnePostError(DataSet: TDataSet。 E: EDatabaseError。 var Action: TDataAction)。
procedure FormClose(Sender: TObject。 var Action: TCloseAction)。 procedure ADOQueryPersonneBeforeRefresh(DataSet: TDataSet)。 private
{ Private declarations } public
{ Public declarations } end。
implementation
{$R *.dfm}
uses main。
procedure TMDIPersonnel.ADOQueryPersonnePostError(DataSet: TDataSet。 E: EDatabaseError。
var Action: TDataAction)。 begin
if DataSet.Fields[0].AsString = '' then
ShowMessage('“员工编号”不能为空!')
else if AnsiContainsStr(e.Message, '重复数据') then ShowMessage('“员工编号”不能重复!') else if DataSet.Fields[1].AsString = '' then ShowMessage('“姓名”不能为空!') else if DataSet.Fields[2].AsString = '' then
ShowMessage('“部门编号”不能为空!') else if DataSet.Fields[3].AsString = '' then
ShowMessage('“职务编号”不能为空!') else if DataSet.Fields[4].AsString = '' then
ShowMessage('“入职时间”不能为空!') else
ShowMessage(e.Message)。 Action:=daAbort。 end。
procedure TMDIPersonnel.FormClose(Sender: TObject。 var Action: TCloseAction)。 begin
Action := caFree。 end。
procedure TMDIPersonnel.ADOQueryPersonneBeforeRefresh(DataSet: TDataSet)。 begin
ADOQueryDepartment.Close。 ADOQueryDepartment.Open。 ADOQueryPost.Close。 ADOQueryPost.Open。 end。
end.
4.4.3 部门经管
unit Department。
interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, cxDBData, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGrid, cxNavigator, StdCtrls, Grids, DBGrids, StrUtils, cxDBNavigator, cxGridCustomPopupMenu, cxGridPopupMenu, dxStatusBar。 type
TMDIDepartment = class(TForm) DataDepartment: TDataSource。
ADOQueryDepartment: TADOQuery。
cxGrid1DBTableView1: TcxGridDBTableView。
cxGrid1Level1: TcxGridLevel。 cxGrid1: TcxGrid。
cxDBNavigator1: TcxDBNavigator。
cxGrid1DBTableView1DBColumn1: TcxGridDBColumn。 cxGrid1DBTableView1DBColumn2: TcxGridDBColumn。
procedure ADOQueryDepartmentPostError(DataSet: TDataSet。 E: EDatabaseError。
var Action: TDataAction)。
procedure FormClose(Sender: TObject。 var Action: TCloseAction)。 private
{ Private declarations } public
{ Public declarations } end。
implementation
{$R *.dfm}
uses main。
procedure TMDIDepartment.ADOQueryDepartmentPostError(DataSet: TDataSet。EDatabaseError。
var Action: TDataAction)。 begin
if DataSet.Fields[1].AsString = '' then
ShowMessage('“部门名称”不能为空!')
else if AnsiContainsStr(e.Message, '重复数据') then ShowMessage('“部门名称”不能重复!') else
ShowMessage(e.Message)。 Action:=daAbort。 end。
procedure TMDIDepartment.FormClose(Sender: TObject。 var Action: TCloseAction)。 begin
Action := caFree。 end。 end.
E:
4.4.4 职务经管
unit Post。
interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, cxDBData, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGrid, cxNavigator, StdCtrls, Grids, DBGrids, StrUtils, cxDBNavigator, cxGridCustomPopupMenu, cxGridPopupMenu, dxStatusBar。 type
TMDIPost = class(TForm) DataPost: TDataSource。
ADOQueryPost: TADOQuery。
cxGrid1DBTableView1: TcxGridDBTableView。 cxGrid1Level1: TcxGridLevel。 cxGrid1: TcxGrid。
cxDBNavigator1: TcxDBNavigator。
cxGrid1DBTableView1DBColumn1: TcxGridDBColumn。 cxGrid1DBTableView1DBColumn2: TcxGridDBColumn。
procedure ADOQueryPostPostError(DataSet: TDataSet。 E: EDatabaseError。 var Action: TDataAction)。
procedure FormClose(Sender: TObject。 var Action: TCloseAction)。 private
{ Private declarations } public
{ Public declarations } end。
implementation
{$R *.dfm}
uses main。
procedure TMDIPost.ADOQueryPostPostError(DataSet: TDataSet。 var Action: TDataAction)。 begin
if DataSet.Fields[1].AsString = '' then
ShowMessage('“职务名称”不能为空!')
else if AnsiContainsStr(e.Message, '重复数据') then ShowMessage('“职务名称”不能重复!') else
ShowMessage(e.Message)。 Action:=daAbort。 end。
procedure TMDIPost.FormClose(Sender: TObject。 var Action: TCloseAction)。 begin
Action := caFree。 end。 end.
E: EDatabaseError。 4.4.5 工资经管
4.4.6 工资类别经管
unit WageCategory。
interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, cxDBData, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGrid, cxNavigator, StdCtrls, Grids, DBGrids, StrUtils, cxDBNavigator, cxGridCustomPopupMenu, cxGridPopupMenu, dxStatusBar。 type
TMDIWageCategory = class(TForm)
DataSourceWageCategory: TDataSource。 ADOQueryWageCategory: TADOQuery。
cxGrid1DBTableView1: TcxGridDBTableView。 cxGrid1Level1: TcxGridLevel。 cxGrid1: TcxGrid。
cxDBNavigator1: TcxDBNavigator。
cxGrid1DBTableView1DBColumn1: TcxGridDBColumn。
cxGrid1DBTableView1DBColumn2: TcxGridDBColumn。
procedure ADOQueryWageCategoryPostError(DataSet: TDataSet。 E: EDatabaseError。
var Action: TDataAction)。
procedure FormClose(Sender: TObject。 var Action: TCloseAction)。 private
{ Private declarations } public
{ Public declarations } end。
implementation
{$R *.dfm}
uses main。
procedure TMDIWageCategory.ADOQueryWageCategoryPostError(DataSet: TDataSet。 E: EDatabaseError。
var Action: TDataAction)。 begin
if DataSet.Fields[1].AsString = '' then
ShowMessage('“工资类别名称”不能为空!') else if AnsiContainsStr(e.Message, '重复数据') then ShowMessage('“工资类别名称”不能重复!') else
ShowMessage(e.Message)。 Action:=daAbort。 end。
procedure TMDIWageCategory.FormClose(Sender: TObject。 var Action: TCloseAction)。 begin
Action := caFree。 end。 end.
4.4.7 用户经管
unit User。
interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, cxDBData, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGrid, cxNavigator, StdCtrls, Grids, DBGrids, StrUtils, cxDBNavigator, cxGridCustomPopupMenu, cxGridPopupMenu, dxStatusBar, cxTextEdit。 type
TMDIUser = class(TForm)
DataSourceUser: TDataSource。 ADOQueryUser: TADOQuery。
cxGrid1DBTableView1: TcxGridDBTableView。 cxGrid1Level1: TcxGridLevel。 cxGrid1: TcxGrid。
cxDBNavigator1: TcxDBNavigator。
cxGrid1DBTableView1DBColumn: TcxGridDBColumn。 cxGrid1DBTableView1DBColumn1: TcxGridDBColumn。 cxGrid1DBTableView1DBColumn2: TcxGridDBColumn。 cxGrid1DBTableView1DBColumn3: TcxGridDBColumn。
procedure ADOQueryUserPostError(DataSet: TDataSet。 E: EDatabaseError。 var Action: TDataAction)。
procedure FormClose(Sender: TObject。 var Action: TCloseAction)。 procedure ADOQueryUserBeforePost(DataSet: TDataSet)。
procedure cxDBNavigator1ButtonsButtonClick(Sender: TObject。 AButtonIndex: Integer。 var ADone: Boolean)。 private
{ Private declarations } public
{ Public declarations } end。
implementation
{$R *.dfm}
uses main。
procedure TMDIUser.ADOQueryUserPostError(DataSet: TDataSet。 var Action: TDataAction)。 begin
if DataSet.Fields[0].AsString = '' then
ShowMessage('“用户名”不能为空!') else if DataSet.Fields[1].AsString = '' then ShowMessage('“密码”不能为空!') else if DataSet.Fields[2].AsString = '' then
ShowMessage('“确认密码”不能为空!')
else if AnsiContainsStr(e.Message, '重复数据') then ShowMessage('“用户名”不能重复!') else
ShowMessage(e.Message)。 Action:=daAbort。 end。
procedure TMDIUser.FormClose(Sender: TObject。 var Action: TCloseAction)。 begin
。 E: EDatabaseError Action := caFree。 end。
procedure TMDIUser.ADOQueryUserBeforePost(DataSet: TDataSet)。 begin
if DataSet.Fields[1].AsString <> DataSet.Fields[2].AsString then begin
ShowMessage('输入的密码不一样!')。 Abort。 end。 end。
procedure TMDIUser.cxDBNavigator1ButtonsButtonClick(Sender: TObject。 AButtonIndex: Integer。 var ADone: Boolean)。 begin
if (AButtonIndex=7) and (ADOQueryUser.RecordCount=1) then begin
ShowMessage('不能删除最后一个用户!')。 ADone:=True。 end。 end。 end.
4.4.8 数据初始化
procedure TMainForm.FileDataInitClick(Sender: TObject)。 var
i: integer。
TableName: TStrings。 begin
if MessageBox(0,'数据初始化将删除所有的数据!'+CHR(13)+'是否继续?',
'数据初始化',MB_ICONEXCLAMATION+MB_YESNO+MB_DEFBUTTON2) = IDNO then
Exit。
for i:=0 to MDIChildCount-1 do MDIChildren[i].Close。
TableName:=TStringList.Create。 TableName.Add('工资')。 TableName.Add('工资类别')。 TableName.Add('员工')。 TableName.Add('部门')。 TableName.Add('职务')。 TableName.Add('用户')。
for i:=0 to TableName.Count-1 do begin try
ADOQueryDelete.Close。 ADOQueryDelete.SQL.Clear。
ADOQueryDelete.SQL.Add('DELETE FROM ' + TableName.Strings[i])。 ADOQueryDelete.ExecSQL。 finally
ADOQueryDelete.Close。 end。 end。 try
ADOQueryDelete.Close。 ADOQueryDelete.SQL.Clear。
ADOQueryDelete.SQL.Add('INSERT INTO 用户 VALUES(''admin'', ''admin'', ''admin'', '''')')。
ADOQueryDelete.ExecSQL。 finally
ADOQueryDelete.Close。 end。 end。
4.5 系统测试
系统程序设计后,依照测试用例分别进行系统的单元测试、集成测试、有效性测试,最后进行系统的总体测试。
首先,对组成系统的各个模块分别进行单元测试; 其次,对通过单元测试的
各个模块进行了组装测试即集成测试,并完成系统模块功能有效性测试; 最后完成系统测试。通过上述测试后,根据系统设计的要求分别对户主信息经管、雇佣产品信息经管、系统用户经管等模块进行试运行,效果良好,得到了满意的结果。
在测试过程中,不仅选择正确的数据,还要录入假定错误的数据,并对系统的数据进行核对,填写系统运行日志,整理成文档资料,以便于今后系统的维护。
5. 结束语
根据课任老师的要求并在老师的指导下,经过信息系统设计,在计算机经管信息系统的开发研制及其设计方面得到了很好的锻炼和学习。
通过《员工信息经管系统》的设计,让我懂得了信息系统的可行性研究及业务需求分析的重要性,理解了系统的概要设计和详细设计对系统实施的程序设计的重要作用,把所学的编程语言运用于数据库应用系统的设计中,掌握了系统测试的技巧。特别是学会了提出问题、分析问题并解决问题的方法,真正地把书本上、课堂上所学的知识应用于实际的、具体的实践中,很好地完成了理论与实践上相结合的信息系统设计,为今后更为复杂的计算机经管信息系统的开发打下良好的基础。
【参考文献】
[1]朱振元、朱承,《Delphi面向对象程序设计及应用开发》西安电子科技大学出版社,2001
[2]陈瑞、叶核亚,《Delphi程序设计实用教程》,电子工业出版社,1998 (3)、《Delphi 7组件应用实例》 作者:张海莲、马琳、郑城荣、邢海峰 出版社:电子工业出版社 2002
(4)、《Delphi 7程序设计技巧与实例》 作者:吴天准 出版社:中国铁道出版社
(5)、《Delphi 7信息系统设计与开发》 作者:黄明、梁旭、石虎 出版社:机械工业出版社
因篇幅问题不能全部显示,请点此查看更多更全内容