资源描述
信息系统设计 软件工程课程设计课题名称: 员工信息管理系统 姓 名: 兰朝仁 学 号: 学 院:继续教育学院专 业:计算机科学与技术年 级:2008级(夜大专升本)指导教师: 陈郞钦 完成日期: 2010 年 10 月 11 日目 录引言11.系统规划21.1系统设计目标21.2系统总体规划21.3设计方案(步骤)22.系统分析22.1业务需求与分析22.2系统业务流程图32.3系统数据流程图43.系统设计53.1系统软件功能结构53.2系统主要技术53.3系统数据库设计63.3.1数据库设计要点63.3.2数据库系统设计要点及难点63.3.3数据库及其表的建立和使用63.3.4系统组成及数据环境63.3.5数据库概念设计73.3.6数据库逻辑设计83.3.7数据库物理设计93.4输出设计113.5输入设计114.系统实现114.1系统主程序流程124.2系统主界面设计134.3系统主程序设计134.4子程序设计174.4.1系统登录174.4.2员工管理184.4.3部门管理214.4.4职务管理234.4.5工资管理254.4.6工资类别管理264.5系统测试275.结束语28【摘 要】本文从员工信息管理系统规划、需求分析、系统设计、系统实现及系统测试等多个方面,分别叙述系统研发的整个实现过程,简述采用Delphi 7编程工具及Access数据库实现系统应用的设计要点,重点阐述系统实现过程中的重点和难点问题的分析及其解决方案,解决企业对员工的计算机管理。【关键词】员工、人事、工资、管理、数据库引言随着我国国民经济建设的蓬勃发展和社会主义市场经济体制的迅速完善,各个行业都在积极使用现代化的手段,不断改善服务质量,提高工作效率,这些都在很大程度上给企业提出越来越严峻的挑战,对企业体系无论是在行政职能、企业管理水平以及优质服务上都提出更高的要求。建设一个科学高效的信息管理系统是解决这一问题的必由之路。员工信息管理作为企业内部的一种员工基本档案管理也是如此,由于企业的人数较多,每一位员工的具体实际情况也不尽相同,如果没有一个完整的员工信息管理系统去完成,将使工作变得复杂,并且对于工作的效率也将使一个致命的打击,使无论如何也无法适应现代社的需要。另外,目前部分企业使用的员工信息管理系统只有信息的录入,修改和删除的功能,而不具有信息查询的功能,这对于企业的信息管理工作来说是一个很遗憾的事情。因此,开发一套功能完整,设计合理,使用方便的企业员工信息管理系统成为很有必要的事情。企业员工信息管理系统的内容功能对于企业的决策者和管理者来说都至关重要,所以企业员工信息管理系统应该能够为管理者提供充足的信息和快捷的查询与管理手段。作为计算机应用的一部分,使用计算机对企业员工信息进行管理,具有手工管理所无法比拟的优点.例如:查询迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够降低员工管理工作的成本,减轻企业管理人员的负担,方便员工信息的更新、维护和查询,增加数据的可靠性;从而提高企业员工信息管理的效率,开拓企业员工管理工作的新局面,提高管理水平,是企业管理的科学化、正规化、信息化管理,与世界接轨的重要条件。当前主流的程序开发环境有Microsoft Visual Studio.NET,Sun Java,Borland Delphi等。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系统主界面Personnel.dfm 员工管理界面Wage.dfm工资管理界面Department.dfm部门管理界面Post.dfm职务管理界面About.dfm 关于界面WageCategory.dfm工资类型管理界面(5)程序:Main.pas系统主程序Personnel.pas 员工管理程序Wage.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图如下:3.3.7 数据库物理设计数据库的物理设计将完成数据逻辑模型向数据物理模型的转换。每一记录类型确定为数据库中的一张表;记录类型中的数据项成为相应表中的字段,字段属性根据各字段特点设置;确定索引和表之间的联系。系统表结构描述如下:(1)员工表用于存放员工信息,包括员工编号、姓名、部门编号、职务编号、入职时间、性别、身份证号、出生日期、学历、私人电话、工作电话、备注。字段字段名称类型宽度必需索引说明1员工编号文本20是有无重复主键2姓名文本10是3部门编号数字长整型4职务编号数字长整型5入职时间日期/时间6性别文本27身份证号文本208出生日期日期/时间9学历文本1010私人电话文本2011工作电话文本2012备注文本100(2)部门表用于存放员工的部门信息,包括部门编号、部门名称和备注。字段字段名称类型宽度必需索引说明1部门编号数字长整型是有无重复主键2部门名称文本20是3备注文本100(3)职务表用于存放员工的职务信息,包括职务编号、职务名称和备注。字段字段名称类型宽度必需索引说明1职务编号数字长整型是有无重复主键2职务名称文本20是3备注文本100(4)工资表用于存放员工的工资信息,包括员工编号、工资类别编号、金额和备注。字段字段名称类型宽度必需索引说明1员工编号文本20是有重复主键2工资类别编号数字长整型是有重复主键3金额数字单精度型4备注文本100(5)工资类别表用于存放员工的工资类别,包括工资类别编号、工资类别名称和备注。字段字段名称类型宽度必需索引说明1工资类别编号数字长整型是有无重复主键2工资类别名称文本20是3备注文本100(6)用户表用于存放系统的用户名和密码,包括用户名、密码和备注。字段字段名称类型宽度必需索引说明1用户名文本20是有无重复主键2密码文本30是3确认密码文本30是4备注文本1003.4 输出设计(1) 选择输出方式 :显示终端、打印机;(2) 确定输出格式:格式设计体现在各类报表中;(3) 输出的主要形式:报表;(4) 输出的内容:主要有员工信息、工资信息、部门信息、职务信息、工资类别信息和用户信息。3.5 输入设计(1) 输入方式设计键盘输入和鼠标操作,为常规的数据录入方式;磁盘传递数据。(2) 用户界面设计(详见各子模块用户界面)人机对话方式:通过屏幕、键盘、鼠标与系统对话,当操作错误时系统给出提示和警告。菜单方式:设计成下拉式、上弹式、按钮式,功能选择:有光带移动、数字或字母选择、鼠标驱动。4. 系统实现系统实施的最主要工作是程序设计,此外还包括了物理系统的实施、程序的调试等。本系统的程序设计由主程序和各模块表单程序等两大部份组成。4.1 系统主程序流程4.2 系统主界面设计4.3 系统主程序设计unit Main;interfaceuses 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 *.dfmuses 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 MDIChildreni is TMDIPersonnel then begin MDIChildreni.BringToFront; if MDIChildreni.WindowState = wsMinimized then MDIChildreni.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 MDIChildreni is TMDIDepartment then begin MDIChildreni.BringToFront; if MDIChildreni.WindowState = wsMinimized then MDIChildreni.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 MDIChildreni is TMDIPost then begin MDIChildreni.BringToFront; if MDIChildreni.WindowState = wsMinimized then MDIChildreni.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 MDIChildreni is TMDIWageCategory then begin MDIChildreni.BringToFront; if MDIChildreni.WindowState = wsMinimized then MDIChildreni.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 MDIChildreni is TMDIWage then begin MDIChildreni.BringToFront; if MDIChildreni.WindowState = wsMinimized then MDIChildreni.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 MDIChildreni is TMDIUser then begin MDIChildreni.BringToFront; if MDIChildreni.WindowState = wsMinimized then MDIChildreni.WindowState := wsNormal; Exit; end; MDIUser := TMDIUser.Create(Application); MDIUser.Show;end;end.4.4 子程序设计4.4.1 系统登录unit Login;interfaceuses 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 *.dfmuses 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.Fields0.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;interfaceuses 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 *.dfmuses main;procedure TMDIPersonnel.ADOQueryPersonnePostError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction);begin if DataSet.Fields0.AsString = then ShowMessage(“员工编号”不能为空!) else if AnsiContainsStr(e.Message, 重复数据) then ShowMessage(“员工编号”不能重复!) else if DataSet.Fields1.AsString = then ShowMessage(“姓名”不能为空!) else if DataSet.Fields2.AsString = then ShowMessage(“部门编号”不能为空!) else if DataSet.Fields3.AsString = then ShowMessage(“职务编号”不能为空!) else if DataSet.Fields4.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;interfaceuses 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 *.dfmuses main;procedure TMDIDepartment.ADOQueryDepartmentPostError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction);begin if DataSet.Fields1.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.4.4.4 职务管理unit Post;interfaceuses 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 *.dfmuses main;procedure TMDIPost.ADOQueryPostPostError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction);begin if DataSet.Fields1.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.4.4.5 工资管理4.4.6 工资类别管理unit WageCategory;in
展开阅读全文