资源描述
《信息系统设计》
软件工程课程设计
课题名称: 职员信息管理系统
姓 名: 兰朝仁
学 号:
学 院:继续教育学院
专 业:计算机科学和技术
年 级:级(夜大专升本)
指导老师: 陈郞钦
完成日期: 年 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 系统主程序步骤 12
4.2 系统主界面设计 13
4.3 系统主程序设计 13
4.4 子程序设计 17
4.4.1 系统登录 17
4.4.2 职员管理 18
4.4.3 部门管理 21
4.4.4 职务管理 23
4.4.5 工资管理 25
4.4.6 工资类别管理 26
4.5 系统测试 27
5. 结束语 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
性别
文本
2
7
身份证号
文本
20
8
出生日期
日期/时间
9
学历
文本
10
10
私人电话
文本
20
11
工作电话
文本
20
12
备注
文本
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
备注
文本
100
3.4 输出设计
(1) 选择输出方法 :显示终端、打印机;
(2) 确定输出格式:格式设计表现在各类报表中;
(3) 输出关键形式:报表;
(4) 输出内容:关键有职员信息、工资信息、部门信息、职务信息、工资类别信息和用户信息。
3.5 输入设计
(1) 输入方法设计
①键盘输入和鼠标操作,为常规数据录入方法;
②磁盘传输数据。
(2) 用户界面设计(详见各子模块用户界面)
①人机对话方法:经过屏幕、键盘、鼠标和系统对话,当操作错误时系统给出提醒和警告。
①菜单方法:设计成下拉式、上弹式、按钮式,功效选择:有光带移动、数字或字母选择、鼠标驱动。
4. 系统实现
系统实施最关键工作是程序设计,另外还包含了物理系统实施、程序调试等。本系统程序设计由主程序和各模块表单程序等两大部份组成。
4.1 系统主程序步骤
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;
cxGr
展开阅读全文