职工工资管理系统论文x.docx
《职工工资管理系统论文x.docx》由会员分享,可在线阅读,更多相关《职工工资管理系统论文x.docx(65页珍藏版)》请在冰豆网上搜索。
职工工资管理系统论文x
分类
编号
经济管理学院
数据库综合训练课程设计
课程设计题目工资管理系统
专业班级信管L032
学生姓名路丹
学号031607224
指导教师陈军霞张娜萍
2006年04月08日
1.问题描述
1.1背景
随着经济的发展,企业正向着大型化、规范化发展,而对于大中型企业,员工、职称等跟工资管理有关的信息随之急剧增加,在这种情况下,单靠人工来处理员工的工资显得力不从心,而且极易出错。
该系统的具体任务就是设计一个企业工资的数据库管理系统,由计算机来代替人工执行一系列诸如增加新员工、删除旧员工、工资修改、查询、统计、打印等操作。
1.2数据需求
●尽量利用企业现有的软硬件环境,采用先进的管理系统开发方案,达到充分利用企业现有资源,提高系统开发水平和应用效果的目的;
●系统符合企业工资管理的规定,满足企业相关人员日常使用的需要,并达到操作过程中的直观、方便、使用、安全等要求;
●系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员进行补充、维护。
●系统具备数据库维护功能,及时根据用户需求进行数据的添加、删除、修改、备份等操作。
1.3事务需求
通过使用该系统,使企业的工资管理工作系统化、规范化、自动化,从而提高企业管理效率。
开发的总体任务是使办公人员可以轻松快捷的完成工资管理任务。
2.解决方案(或数据库系统设计)
2.1E-R模型设计
本实例根据上面的设计规划出的实体有:
员工实体、员工工资实体、工资等级实体、部门岗位体、工资实体、公司福利实体。
实体和实体之间的关系E---R图如图1-1所示。
公司福利
图1-1实体之间关系E-R图
2.2数据字典
数据库需求分析是数据库设计的第一个阶段,是非常重要的一个阶段。
这个阶段主要是确定基本数据、数据结构以及数据处理的流程,组成一份详尽的数据字典,为以后进一步设计打下基础。
在仔细调查企业工资管理过程的基础上,我们得到本系统所处理的数据流程,如图1-2所示。
员工工资
图1-2数据流程图
通过对企业工资管理的内容和数据流程分析,针对本实例,我们设计的数据项和数据结构如下:
●员工基本情况。
包括的数据库项有员工号、员工姓名、性别,所在部门、身份证号、生日、籍贯、国籍、民族、婚姻状况、健康状况、参加工作时间、员工状态、状态时间、家庭住址、联系电话等。
●工资级别和工资金额。
包括的数据库项有工资等级、工资额。
●企业部门及工资岗位信息。
包括的数据库项由部门名称、工作岗位名称、工作岗位工资等。
●工龄的工资金额。
包括的数据库项有工龄及对应工资额。
●公司福利表。
包含的数据库项有福利名称、福利值。
●工资信息。
包含的数据库项有员工号、员工姓名、员工基础工资、员工岗位工资、员工工龄工资、公司福利、员工实得工资。
2.3数据库逻辑结构设计
在实体以及实体之间关系的基础上,形成数据库中的表格以及各个表格之间的关系。
工资管理系统数据库中各个表格的设计结果见表1-6所示。
每个表格表示在数据库中的一个表(只列出与本例相关的字段)
表1—1为员工基本状况表
PERSONNEL员工基本状况表
列名
数据类型
可否为空
说明
PID
CHARACTER(3)
NOTNULL
员工号(索引)
PNAME
CHARACTER(10)
NULL
员工姓名
PSEX
CHARACTER
(2)
NULL
员工性别
PDEPT
CHARACTER(10)
NULL
所在部门
PJOB
CHARACTER(10)
NULL
所在岗位
PINDATE
CHARACTER
(2)
NULL
工龄
PRANK
CHARACTER
(2)
NULL
工资等级
表1—2为工资等级表
PANK工资等级表
列名
数据类型
可否为空
说明
RNAME
CHARACTER
(2)
NOTNULL
工资等级(索引)
RSALARY
NUMERIC(10,2)
NULL
相应工资额
表1—3为工作岗位情况表
DEPT工作岗位情况表
列名
数据类型
可否为空
说明
JOBNAME
CHARACTER(10)
NULL
工作岗位名称(索引)
JOBSALARY
NUMERIC(10,2)
NULL
岗位工资
表1—4为工龄工资表
GONGLING工龄工资表
列名
数据类型
可否为空
说明
GNAME
CHARACTER
(2)
NOTNULL
工龄(索引)
GSALARY
NUMERIC(10,2)
NULL
工龄工资额
表1—5为公司福利表
WELFARE为公司福利表
列名
数据类型
可否为空
说明
WNAME
CHARACTER(10)
NOTNULL
福利名称(索引)
WMONEY
NUMERIC(10,2)
NULL
福利费用
表1—6为系统的用户口令表
系统的用户口令表USER_PSWD
列名
数据类型
可否为空
说明
TMS_USER
CHARACTER(10)
NOTNULL
用户名(索引)
TMS_PSWD
CHARACTER(10)
NOTNULL
口令
3系统实现
3.1开发环境
开发工具:
VisualFoxPro6.0;
运行环境:
Windows9X或Windows2000。
3.2系统流程图
系统功能分析
●系统数据初始化;
●员工基本信息数据的输入;
●员工基本信息数据的修改、删除;
●企业工资的基本设定;
●员工工资的浏览;
●员工个人工资表的查询;
●工资报表的打印
在系统功能分析的基础上,得到如图1-3所示的系统功能模块图。
打印
图1-3系统功能模块图
3.3程序调试情况
在设计的过程中,预览中发现报表的行之间有空白,无法连接成表,如图1-41所示。
图1-42错误的报表
这是由于报表栏中的细节栏设计又有误,下面是对应的设计,如图1-42所示。
可以看出两个空白是相同的,因此要想打印出没有空白的表,应将小细节的底框紧贴在表的下缘,如图1-43所示。
图1-43错误的细节设置
3.4数据库结构的实现
在需求分析、概念结构设计的继承上得到数据库的结构之后,我们就可以在VisualFoxPro数据库系统中实现该逻辑结构。
首先建一个名为salary(工资)的项目,保存磁盘中。
例如D:
\salary.可以直接在VisualFoxPro的文件中选择“新建”→“项目”。
打开salary项目后,在项目管理器中展开数据文件夹,鼠标选中数据库,单击右键的“新建”按钮,如图1-4所示,存储为D:
\salary\datebase\salary.dbc。
图1-4新建数据库
在弹出的数据库设计器中单击鼠标右键,选择“新建表,如图1-5所示。
为数据库添加数据表,表的具体内容见表1-1—表1-6。
下面以表6为例。
图1-5新建数据表
在选择“新建表”命令后,在弹出的对话框中将表存储为:
D:
salary\datebase\tms.dbf。
在弹出的表设计器中填写表的内容,如图1-6所示。
图1-6设计表的内容
与表1-6比较,可以发现表的字段名就是列名。
要注意的是在以后的编写程序中对数据库的数据的操作通常是引用表的字段,因此在设计字段是要挑选容易理解的名称。
字段设置完成后,单击“确定”按钮后为表输入数据。
3.5各个功能模块的创建
经过前面对系统功能的分析,我们将企业工资管理系统分为4个模块:
系统主界面、员工信息管理、工资基本设定和工资汇总。
3.5.1系统主界面的设计
为了让使用者有一个轻松操作的界面,系统的主界面设计要求界面友好、功能分块明确、美观大方。
下面将以主界面的设计为例,仔细讲解表单的创建。
首先,展开项目管理器中的文档,选中表单,单击右侧“新建”按钮。
如图1-7所示。
图1-7新建表单
在弹出的对话框中单击“新建”按钮后,会弹出“表单设计器”的界面,如图1-8所示。
图1-8为设计的表单
可以根据界面的需要向其中添加控件如图1-9所示。
图1-9向表单中添加控件
更改各个控件的属性值为所属值,各更改值见表1-7。
表1-7控件属性更改值
控件
Caption
Alignment
Picture
Stretch
Form1
企业工资管理系统
Label1
欢迎使用
2-中央
Command
员工基本信息
Command
员工基本设定
Command
工资汇总
Command
个人工资设定
Command
退出
Image1
D:
\salary\main.jpg
2-变比填充
Caption属性表示控件的显示名,是为了使用者方便特意设计的名称,为一些常用的提示信息。
Alignment为控件中Caption的位置状态,对于Label(标签),有“0-左(缺省)”、“1-右”、“2-中央”等3种设置。
另外,设置Label的Font(字体)和Fontsize(字体大小)属性可以改变Caption显示的字体及大小。
在Picture中可以把控件的界面设为图象,以便使用者能更形象地使用所开发的软件。
对应Image(图象)控件,则表示显示在其中的图象。
其属性值应为要显示的图象的路径和文件名。
并应设置其Streth属性为“2-变比填充”以使图象能正确显示。
更改之后的表单如图1-10所示。
图1-10更改后的表单
要注意的是向容器中添加按钮时候,必须先添加容器,然后在容器单击鼠标右键,选择编辑,此时容器边缘变为绿色,表明此时容器正处于编辑状态。
此时添加按钮到容器中才能是按钮真正处于容器中,如果直接添加,则按钮实际上处于与容器同一层次上。
可以通过查阅表单的结构层次来理解,如图1-11所示
图1-11表单中的控件的结构
控件添加结束后,表单并未完成设计,此时的表单运行后会发现只有一个空壳,单击其中的按钮没有任何反应。
因此,此时需要为表单设计事件响应。
选中Command1(按钮1),双击后弹出控件“方法程序”对话框,如图1-12所示.
图1-12为控件Command1设置Click事件程序
填写代码如下:
Dofromsalary\form\personnel
*打开下级表单pensonnel..scx,salary\form\personnel为它的路径
对Command2(按钮2)、Command3(按钮3)、Command4(按钮4)、Command5(按钮5)、进行同样的操作。
Command2的Click代码为:
doformsalary\form\dataformat
*打开下级表单dateformat
Command3的Click代码为:
doformsalary\form\result
*打开下级表单result
Command4的Click代码为:
doformsalary\form\grcx
*打开下级表单grect
Command5的Click代码为:
thisform.release
clearevents
*释放表单,结束程序
为了使表单更富动感,这里设计了一个闪烁效果,闪烁的对象为“Label”。
选择Timer(记时器)控件,双击后填写其Timer的事件代码:
ifi=0
thisform.label1.visible=.F.
*使Label1不可见
i=1
else
thisform.label1.visible=.T.
*使Label1可见
i=0
endif
设置Timer的Interval属性为“750”。
其作用是控制Timer的执行间隔时间,单位为ms。
既是每隔0.75s执行一次Timer控件的Timer事件。
应用类型的方法还可以随时间推移转变Image1控件里的图像。
注意Timer事件代码中使用了变量i来控制,因此应先声明该变量。
为表单的Init事件添加代码:
Publici
i=0
*声明全局变量i
到此为止,本程序的主界面已设计完成,记住要储存为“D:
\salary\form\ksjm.scx”,以后设计的表单都会放在“D:
salary\form”目录下,以便其他程序员管理。
接下来进入其他表单的设计。
3.4.2员工信息模块的设计
本模块包含的功能有:
员工信息浏览、增加删除修改员工记录、根据查询条件查询员工记录、显示查询结果。
要实现的功能较多,一个表单不可能容纳下所有空件,所以需要使用表单集或页框。
这里使用页框来实现。
新建表单Personal,存储”D:
\salary\form\personnel.scx”。
直接拉伸表单至合适大小。
向表单中加入控件,如图1-13所示
图1-13表单的基本控件
本表单需要对数据库中的表进行操作,因此必须将该表加入到表单的数据环境中。
在表单中单击鼠标右键,选择”DateEnviroment”(数据环境),在弹出的对话框中添加需要的表,如本表需要添加表”Personnel”。
1.“一览”子页面的设计
将表单数据环境中的表”Personnel”的字段添加到表单中,如图1-14所示。
图1-14推拽字段到表单中
注意,此时添加到表单的字段处于与页框同一层次,将其添加到页框的子页面1种,对页框的操作方法与容器类似。
向子页面1中添加控件,如图1-15所示。
图1-15子页面1控件
下面列出更改值,如图表1-8所示
控件属性更改值表
控件
Caption
Alignment
PageCount
FontSize
Form1
员工信息
Label1
员工信息
2-中央
Page1
一览
3
华文彩云
Command1
增加新记录
Command2
修改这条记录
Command3
删除这条记录
Command4
取消操作
Command5
退出
如图1-15所示,该页面使用了,“类”,在VisualFoxPro中使用类可以大大节省开发时间,简化系统的设计工作,并方便系统的维护和修改。
如图1-16位添加的类——导航条。
图1-16查询子页面
该导航条包含4个基本功能。
●“上一个”按钮使记录后退一个;
●“第一个”按钮使记录后退至表首;
●“下一个”按钮使记录前进;
●“最后一个”按钮使记录前进至表尾;
下面给出按钮的Click事件代码。
按钮“上一个”的Click事件代码:
Skip-1
*记录向后退一个
Ifbof()
*判断是否为第一个记录,如是,bof()返回“真”(.T.)
Messagebox("已是第一个记录","48","信息窗口")
mand1.enable=.f.
mand2.enable=.f.
skip
else
mand1.enable=.t.
mand2.enable=.t.
endif
mand3.enable=.t.
mand4.enable=.t.
*根据实际情况给出各个按钮的状态
Thisfrom.refresh
在按钮“第一个”的Click事件中输入如下代码:
gototop
mand1.enable=.f.
mand3.enable=.t.
mand4.enable=.t.
*根据实际情况给出各个按钮的状态
Thisfrom.refresh
在按钮“下一个”的Click事件中输入如下代码:
Skip
Ifeof()
*判断是否最后一个记录,如是,eof()返回“真”(.T.)
Messagebox("已是最后一条记录","48","信息窗口")
skip-1
mand3.enable=.f.
mand4.enable=.f.
else
mand3.enable=.t.
mand4.enable=.t.
endif
mand1.enable=.t.
mand2.enable=.t.
*根据实际情况给出各个按钮的状态
Thisform.refresh
在按钮“最后一个”的Click事件如下代码:
gotobottom
mand3.enable=.f.
mand1.enable=.t.
mand2.enable=.t.
*根据实际情况给出各个按钮的状态
thisform.refresh
为保证表中的数据不被误操作修改,请将页面中的各文本框的“Enabled”属性设为“.F.”。
按钮“取消操作”的“Enabled”属性设为“.F.”。
为“增添新记录”添加Click事件代码:
thisform.pageframe1.page1.fy1.enabled=.F.
*使导航条不可用
mand2.enabled=.F.
*使“修改”按钮不可用
mand3.enabled=.F.
*使“删除”按钮不可用
mand4.enabled=.T.
*使“取消”按钮可用
ifmand1.caption='增加新记录'
thisform.pageframe1.page1.txtpid.enabled=.T.
thisform.pageframe1.page1.txtpname.enabled=.T.
thisform.pageframe1.page1.txtpsex.enabled=.T.
thisform.pageframe1.page1.txtpjob.enabled=.T.
thisform.pageframe1.page1.txtpindate.enabled=.T.
thisform.pageframe1.page1.txtprank.enabled=.T.
*使各文本框可用
appendblank
*添加空行到表的末尾
mand1.caption='增加确认'
*将本控件的Caption更改为“增加确认”
thisform.pageframe1.page1.refresh
*刷新本页面
thisform.pageframe1.page1.txtpid.setfocus
*将鼠标焦点设定到文本框1else
getid=alltrim(thisform.pageframe1.page1.txtpid.value)
getname=alltrim(thisform.pageframe1.page1.txtpname.value)
getsex=alltrim(thisform.pageframe1.page1.txtpsex.value)
getjob=alltrim(thisform.pageframe1.page1.txtpjob.value)
getindate=alltrim(thisform.pageframe1.page1.txtpindate.value)
getrank=alltrim(thisform.pageframe1.page1.txtprank.value)
ifempty(getid)orempty(getname)orempty(getsex)orempty(getjob)orempty(getindate)orempty(getrank)
*判断填入的资料是否齐全
messagebox("资料不足",48,"错误")
如果错误,弹出提示对话框
else
mand1.caption='增加新记录'
*将本控件的Caption更改为“增加新记录”
tableupdate(.t.)
*表单的更改确认
tableupdate(.t.)
thisform.pageframe1.page1.txtpid.enabled=.F.
thisform.pageframe1.page1.txtpname.enabled=.F.
thisform.pageframe1.page1.txtpsex.enabled=.F.
thisform.pageframe1.page1.txtpjob.enabled=.F.
thisform.pageframe1.page1.txtpindate.enabled=.F.
thisform.pageframe1.page1.txtprank.enabled=.F.
thisform.pageframe1.page1.fy1.enabled=.T.
mand2.enabled=.T.
mand3.enabled=.T.
mand4.enabled=.F.
*恢复本子页面的各控件的状态
endif
endif
上段代码的功能是添加一个新的员工的信息到数据库中。
为“修改这条记录”按钮添加Click事件代码:
mand1.enabled=.F.
*使“增加”按钮不可用
mand3.enabled=.F.
*使“删除”按钮不可用
mand4.enabled=.T.
*使“取消”按钮可用
thisform.pageframe1.page1.fy1.enabled=.F.
*使导航条可用
ifmand2.caption='修改这条记录'
thisform.pageframe1.page1.txtpid.enabled=.T.
thisform.pageframe1.page1.txtpname.enabled=.T.
thisform.pageframe1.pa