资源描述
摘 要
本论文设计的综合人事管理系统以Visual Basic 6.0和Access 2003为基本开发工具,实现了“部门管理系统”模块,“员工基本信息管理”模块,“员工考勤考评”模块以及“用户管理”模块等。论文对系统的开发进行了需求分析,介绍了系统的总体设计和各功能模块的设计思想及具体的程序设计方法。
关键词:Visual Basic 6.0 , Access2003 , 综合人事管理系统
Abstract
A comprehensive personnel management system was designed with Visual Basic 6.0 and Access 2003 in this paper. The functions of the employees’ basic information managing , attendence managing and transferring information were implemented in the system. And the requirement Analysis and design thought of each module ware also discussed in these paper.
Key Words:Visual Basic 6.0, Access 2003, general human affairs management system
27
目 录
引言 1
1.需求分析 1
1.1问题定义 1
1.1.1要解决的问题 1
1.1.2系统开发的目的 1
1.1.3系统要实现的功能 1
1.2 可行型研究 1
1.2.1 技术可行性 1
1.2.2 经济可行性 2
1.2.3 操作可行性 2
1.3系统功能概述 2
2.系统流程分析和图示 3
3.利用Access建立所需要的数据库 4
3.1创建数据库 4
3.2设计表 4
4.登录模板及系统主界面设计 4
4.1设计登录窗体 4
4.2设计主界面 7
5.部门管理模块设计 8
5.1使用TreeView控件 8
5.2设计部门编辑窗体 10
5.3设计部门管理窗体 11
5.4设计选择部门窗体 12
5.5在主界面中增加部门管理代码 13
6.员工基本信息管理模块设计 13
6.1设计选择员工窗体 13
6.2设计编辑员工基本信息的窗体 14
6.3设计员工信息管理窗体 15
6.4设计员工部门调转窗体 16
6.5在主界面中增加员工管理代码 16
7.员工考勤考评管理模块设计 16
7.1设计考勤信息编辑窗体 17
7.2设计考勤信息管理窗体 17
7.3设计月度考勤统计表窗体 18
7.4设计考评信息编辑窗体 20
7.5设计考评管理窗体 21
7.6在主界面中增加考勤考评管理代码 22
8.用户管理模块设计 22
8.1设计编辑用户信息的窗体 22
8.2设计用户管理窗体 24
8.3在主界面中增加用户管理代码 25
8.4在主界面中增加修改密码代码 25
9.结束语 26
参考文献 27
引言
信息技术的迅猛发展,已经引起社会的深刻变革,信息时代的到来,迫切要求我们的企业管理需要进行变革。每种新一代的软件开发方法的出现,都是因为以前的软件开发方法中存在着局限性。我们发现,使用以往的管理方式,已不再是一种理想的方法。企业中如何进行人事的管理,以及使管理变的更简易更适应企业发展更能有竞争空间已值得我们重视。在一些发达国家已经形成相当的规模和体系,在我国也得到社会的普遍认可,许多大型企业和中小型企业已采用这种软件系统方式来进行管理。它的出现,对现有的企业管理是一次强有力的冲击,而且对人们旧有的管理观念产生了深刻的影响。
1.需求分析
1.1问题定义
1.1.1要解决的问题
随着办公自动化水平的不断提高,人事管理从手工转到计算机自动化信息处理阶段。综合人事管理系统是非常通用的管理信息系统,是企业单位实现办公自动化的前提和基础[1]。
1.1.2系统开发的目的
人事管理系统是公司,企业单位重要的一个环节,人事管理软件有助于减轻人事管理人员的负担,提高工作效率.
1.1.3系统要实现的功能
(1)登录模块及系统主界面
(2)部门管理
(3)员工基本信息管理
(4)员工考勤考评管理
(5)用户管理
1.2 可行性研究
1.2.1 技术可行性
根据上述系统功能的分析,下面将进行具体的实现。从技术角度分析,这项开发工作所涉及的专业技术如下[14] [15]:
⑴技术平台(Operating System:操作系统):Windows系列。虽然理论上对操作系统没作更具体的规定,但由于开发中涉及Microsoft Access2003的应用,所以建议最好使用Windows 2003以上的版本或相应的Windows NT的版本。
⑵ 开发工具:Microsoft Visual Basic 6.0
⑶ 数据库管理系统(DBMS):Microsoft Access2003
具体实现阶段主要分两大部分进行:数据库的实现和各种功能模块及窗体的实现。从运用的技术角度分析即:Microsoft Access 部分的实现和VB部分的实现。
1.2.2 经济可行性
因为采用计算机管理不但可以提高工作效率,而且还可以节省人力、物力、财力。这样原来几个一干的活一个人就完全可以胜任。故单从节省的职工工资、提高工作效率而避免各种直接或间接的经济损失角度来看,软件实际能够起到的作用会远远大于投入的开发费用。故从经济上是完全可行的。
1.2.3 操作可行性
因为开发所采用的工具全是可视化工具,开发出的应用程序均是图形化界面,操作员几乎不用记任何DOS命令就可以操作此软件。另外,软件的操作员大多已经会基本的Windows操作,即使不会操作Windows,经过短期的培训也能熟练的使用本软件。所以在操作上也是可行的。
1.3系统功能概述
综合人事管理系统的基本功能是对企业,事业单位的住址机构和员工进行管理,本论文设计的主要功能如下[2]:
①部门信息管理
包括添加部门信息、修改部门信息、删除部门信息、看部门信息。
②员工基本信息管理
包括添加员工基本信息、修改员工基本信息、删除员工基本信息、查看员工基本信息。
③员工考勤考评管理(包括考勤考评月份,病假天数,事假天数,旷工天数;奖励事由,奖励金额,处罚事由,处罚金额和总体评价等信息)
包括添加员工考勤考评信息、修改员工考勤考评信息、删除员工考勤考评信息、查询员工考勤考评信息、生成月度考勤统计表
④系统用户管理功能
包括添加系统用户信息、修改系统用户信息、删除系统用户信息、查看系统用户信息。
2.系统流程分析和图示
所谓系统流程就是用户在使用系统是的工作过程。对于多类型用户的管理系统来说,每一类用户的工作流程都是不相同的。多用户系统的工作流程都从用户登录开始,对用户的身份进行认证。身份认证可以分为以下两个过程:
(1) 确定用户是否是有效的系统用户。
(2) 确定用户的类型。
第1个过程决定用户能否进入系统。第2个过程根据用户的类型决定户的操作权限,从而决定用户的工作界面。
开始
用户登陆
读用户类型
1. 管理自己的用户信息
2. 管理普通系统管理员用户信息
3. 管理普通用户的用户信息
1. 管理普通系统管理员用户信息
2. 管理普通用户的用户信息
管理自己的用户信息
拥有所有权限
只有查询权限
Admin用户
管理系统管理员用户
普通用户
成功
失败
重试
用户管理模块
人事管理模块
在系统的工作流程中,还将体现各个功能模块之间的依存关系。例如,必须在部门管理模块中添加至少一个部门信息,才能添加员工的基本信息;必须有一条员工的基本信息,才能添加员工照片和用户管理等。本系统的流程分析如图2.1所示:
图2.1 系统的流程分析图
进入系统后,不同的类型的用户所能进行的操作也不同。
3.利用Access建立所需要的数据库
3.1创建数据库[3] [10]
在设计数据库表结构之前,首先要创建一个数据库。本系统使用的数据库为“人事.mdb”。
3.2设计表
数据库包括5张表:
① 部门表Departments,用来保存企业部门的信息。本系统采用树状结构来管理部门数据,也就是在部门之间建立从属关系。
② 员工基本信息表Employees,用来保存员工的基本信息。
③ 员工考勤表Checkin,用来保存员工考勤的基本信息。
④ 员工工作考评表Evaluation,用来保存员工工作考评信息。
⑤ 用户信息表Users,用来保存系统用户信息。
4.登录模板及系统主界面设计
用户要使用本系统,首先必须通过系统的身份认证,这个过程叫做登录。登录过程需要完成以下任务:
1. 根据用户名和密码来判断是否可能进入系统;
2. 根据用户类型决定用户拥有的权限;
3. 成功登录的用户将进入系统的主界面。
4.1设计登录窗体
登录窗体的名称为FrmLogin,它的界面布局如下图4.1所示。
图4.1 身份验证
设置登录窗体的属性如下[4]:
窗体属性
设置值
具体说明
名称
FrmLogin
设置窗体名称
BorderStyle
1-Fixed Single
设置窗体的边框属性
Caption
身份验证
窗体的标题条文本
ControlBox
False
取消控制按钮,防止用户通过控制按钮关闭对话框
StartUpPosition
2-屏幕中心
设置窗体弹出时,位置在屏幕中心
登录窗体中控件的属性如下:
对象名
属性
属性值
Label1
Caption
用户名
Label2
Caption
密码
txtUser
Text
空
txtPwd
Text
空
PasswordChar
*
Cmd_Ok
Caption
确定
Cmd_Cancel
Caption
取消
下面接受登录窗体的部分代码[5]。
1. 变量声明 登录窗体的变量声明如下:
Public PasswordKey As String
Public NameKey As String
Public Try_times As Integer
NameKey保存用户名,PasswordKey保存密码,Try_Time记录尝试登录的次数。
2. Cmd_Ok_Click过程
当用户单击”确定”按钮时,触发Cmd_Ok_Click事件,进行身份验证,对应的代码如下:
Private Sub Cmd_Ok_Click()
'数据有效性检查
If Trim(txtUser) = "" Then
MsgBox "请输入用户名"
txtUser.SetFocus
Exit Sub
End If
If Trim(txtPwd) = "" Then
MsgBox "请输入密码"
txtPwd.SetFocus
Exit Sub
End If
NameKey = MakeStr(txtUser)
PasswordKey = MakeStr(txtPwd)
'判断用户是否存在
If MyUser.In_DB(NameKey) = False Then
MsgBox "用户名不存在"
Try_time = Try_time = 1
If Try_time >= 3 Then
MsgBox "您已经三次尝试进入本系统,均不成功,系统将关闭"
DBapi_Disconnect
End
Else Exit Sub
End If
End If
'判断密码是否正确
MyUser.GetInfo (NameKey)
If MyUser.Pwd <> PasswordKey Then
MsgBox "密码错误"
Try_times = Try_times + 1
If Try_times >= 3 Then
MsgBox "您已经三次尝试进入本系统,均不成功,系统将关闭"
DBapi_Disconnect
End
Else
Exit Sub
End If
End If
'登录成功,将当前用户的信息保存在CurUser中
CurUser.UserName = MyUser.UserName
CurUser.User_type = MyUser.User_type
CurUser.Empld = MyUser.Empld
'关闭自己
Unload Me
End Sub
程序的运行过程如下:
1、判断是否输入了用户名和密码,如果没有输入,则返回,要求用户输入。
2、将输入的用户名和密码赋值到变量NameKey和PasswordKey中,便于处理。
3、调用MyUser.In_DB()函数,判断当前用户名是否存在.如果不存在,则返回,要求用户重新输入,同时将记数变量Try_times加1。
4、如果用户名存在,则调用MyUsers.GetInfo()函数,读取此用户的数据,并将用户密码与输入的密码进行比较.如果密码不同,则返回,要求用户重新输入,同时将记数变量Try_times加1。
5、如果Try_times大于或等于3,则退出系统。
6、如果通过密码验证,则将当前用户的信息保存到curUser对象中,以便后面使用。关闭登录窗体。
4.2设计主界面
主界面是工程的启动对象,可以在系统菜单中选择“工程”、“属性”,打开属性窗口设置启动对象.主窗体名为FrmMain。打开主窗体的设计窗体,选择“工具”菜单项中的“菜单编辑器”,对菜单内容进行编辑。菜单设计器如图4.2所示:
图4.2 菜单编辑器
主界面如如图4.3所示:
图4.3 主界面
在主窗体FrmMain中添加代码:
Private Sub Form_Load()
FrmLogin.Show 1
End Sub
当主窗体启动时,首先打开“登录”对话框。如果不能通过身份验证,则不能进入系统。
当选择“退出系统”菜单项时,触发mn_exit_Click事件,代码如下:
Private Sub mn_exit_Click()
DBapi_Disconnect
End
End Sub
函数DBapi_Disconnect()是自定义函数,它的功能是强制断开与数据库的连接。
5.部门管理模块设计
部门管理模块可以实现:系统管理员可以添加部门记录,修改部门记录,删除部门记录和查看部门记录。而普通用户只能查看部门数据。
5.1使用TreeView控件[6]
为了表现部门间的层次结构,本设计中使用TreeView控件对部门数据进行管理。 TreeView控件是显示Node(结点)对象的分层列表,每个Node对象均由一个标签和一个可选的位图组成。关于TreeView控件的使用方法如下:
选择“工程”菜单中的“部件”命令,打开”部件属性”对话框.在控件列表中,查找并选择Microsoft Windows Common Controls。同时添加近来的是一组控件。这个模块将使用其中的TreeView控件ImageList控件。ImageList控件像图象的储藏室,同时,它需要第二个控件显示所储存的图象。在这里ImageList控件用来为TreeView控件提供图象。
在窗体中添加一个ImageList控件,右击此控件,选择菜单中的“属性” 命令,打开“属性页”对话框。单击“图象”选项卡,通过单击“插入图象”和“删除图象”来编辑图象列表,如图5.1所示。
图5.1辑图像列表
在窗体中添加一个TreeView控件。右击此空间,选择菜单中的”属性”命令,打开”属性页”对话框。将”图象列表”属性设置为ImageList1,其他属性可以根据需要设置。TreeView控件的属性对话框如图5.2所示。
TreeView控件使用惟一的关键字来标识,每一个结点,关键字的第一个字符必须是字母。在这里我们规定关键字的格式为“a”加上部门编号,如果部门编号为1,则此部门在TreeView控件中的关键字为“a1”。
在GeneralFunc模块中,有一个字定义过程Add_DepTOtree()。它的功能是把所有的部门名称按照上下级关系添加到TreeView控件中。
图5.2 TreeView控件的属性
5.2设计部门编辑窗体
编辑部门信息的窗体可以用来添加和修改部门信息。创建一个新的窗体,参照前面的方法设置窗体属性。双体名称设置为FrmDepEdit。
窗体FrmDepEdit的布局如图5.3所示:
图5.3 编辑部门信息
需注意的是此窗体过程代码中全局变量Modify用来标记当前的数据库访问状态。当Modify=True时,表示修改已有的数据;当Modify=False时,表示插入新的数据。
Cmd_OK_Click()过程:当用户单击“确定”按钮时,触发Cmd_Ok_Click事件,对应代码如下:
Private Sub Cmd_OK_Click()
If Trim(txtDep) = "" Then
MsgBox "请输入部门名称"
Exit Sub
End If
'将新输入的数据保存到类变量中
With MyDep
.DepName = MakeStr(txtDep)
.Describes = MakeStr(txtDescribe)
If Modify = False Then '插入
If .In_DB(.DepName, .UpperId) = True Then
MsgBox Trim(txtDep) + " 已经存在"
Exit Sub
End If
'CurDep中保存在部门管理窗体中选中的部门信息
'当插入新记录时,新记录将做为当前部门的下级部门
.UpperId = CurDep.DepId
Bh = .Insert
'生成TreeView中一个结点的关键字
Tmp_Key = "a" + Trim(Str(Bh))
'设置结点的图像
FrmDepMan.TreeView1.SelectedItem.Image = 1
FrmDepMan.TreeView1.SelectedItem.ExpandedImage = 2
FrmDepMan.TreeView1.SelectedItem.SelectedImage = 3
'在树中添加一个结点
Set TmpNode = FrmDepMan.TreeView1.Nodes.Add(FrmDepMan.TreeView1.SelectedItem.Key, _
tvwChild, Tmp_Key, .DepName, 4, 5)
TmpNode.Selected = True
Else '修改
If CurDep.DepName <> Trim(txtDep) Then
If .In_DB(Trim(txtDep), .UpperId) = True Then
MsgBox Trim(txtDep) + " 已经存在"
Exit Sub
End If
End If
'当修改记录时,不能改变上下级之间的关系
.UpperId = CurDep.UpperId
.Update (CurDep.DepId)
If CurDep.DepName <> Trim(txtDep) Then
FrmDepMan.TreeView1.SelectedItem.Text = Trim(txtDep)
End If
'设置CurDep变量
CurDep.DepName = Trim(txtDep)
End If
End With
'关闭窗口
Unload Me
End Sub
在上面的程序段中,分别对插入部门数据和修改部门数据两种情况进行处理。插入数据时调用Department.Inser()过程,修改数据时调用Department.Update()过程。插入新节点时,需要调用FrmDepMan.TreeView 1.Nodes.Add函数:修改当前节点信息时,需要设置FrmDepMan.TreeView 1.SelectedItem.Text属性。SelectedItem属性表示当前选中的节点。
5.3设计部门管理窗体
创建一个新窗体,参照前面的方法设置窗体属性.窗体名称设置为FrmDepMan。部门管理窗体的布局如图5.4所示:
图5.4 部门管理设计
再在代码窗体中填写对应的代码。当装入窗体FrmDepMan时,触发Form_Load事件,在此过程中将根据用户类型的不同决定显示的界面,只有系统管理员用户才能看到添加修改和删除等按钮。其中当用户单击“删除”按钮时,触发Cmd_Del_Click事件。在删除部门前,应对部门信息进行判断,当部门为根结点或包含下一级部门或包含员工时不能删除。当用户单击部门列表时,触发TreeView 1_Click事件。此过程的主要功能是根据选中的部门关键字获取部门信息,并保存在CurDep对象中。
5.4设计选择部门窗体
为了方便用户在其他模块中选择部门,在此设计一个选择部门窗体,窗体名为FrmDepSet。布局如图5.5。
图5.5 选择部门窗体
“选择部门”窗体与”部门窗体”的界面相似,也需要使用TreeView控件来显示部门。使用ImageList控件来管理TreeView控件中的图象信息。
“选择部门”窗体中的很多代码与”部门管理”窗体中的代码相同。需注意的是,当用户单击”确定”按钮时,触发Cmd_Ok_Click事件,对应的代码如下:
Private Sub Cmd_Ok_Click()
If MyDep.Dep_Id <= 0 Then
MsgBox "请选择部门"
Exit Sub
End If
'将选择部门的数据保存在CurDep变量中
CurDep.Dep_Id = MyDep.Dep_Id
CurDep.GetInfo (CurDep.Dep_Id)
Unload Me
End Sub
在其他模块中,可以从CurDep变量中得到选择部门的数据。
5.5在主界面中增加部门管理代码
当选择”部门管理菜单项时,触发mn_dep_Click事件,代码如下:
Private Sub mn_dep_Click()
FrmDepMan.Show 1
End Sub
6.员工基本信息管理模块设计
6.1设计选择员工窗体
在编辑员工基本信息时,要选择员工的上级。为了方便用户在其他模块中选择员工,可以设计选择员工窗体,窗体名为FrEmpSel。窗体布局如图6.1所示:
图6.1选择员工窗体
参照“选择部门”窗体设置窗体的属性。在窗体FrEmpSel中,使用TreeView和ImageList控件来显示部门数据。参照部门管理窗体的内容设置TreeView和ImageList控件的属性。
在此只写出部分代码:
Private Sub Form_Load()
Dim TmpNode As Node
'设置默认选择的部门
FocusDepName = "人事部"
Focuskey = ""
'添加并设置根结点
Set TmpNode = TreeView1.Nodes.Add(, , "a0", "部门信息", 1, 3)
TmpNode.Selected = True
TmpNode.ExpandedImage = 2
'调用函数将所有部门添加到TreeView1中
Call Add_DepToTree(TreeView1, "a0")
'设置员工状态为在职
ComboState.ListIndex = 0
TreeView1_Click
End Sub
6.2设计编辑员工基本信息的窗体
编辑员工基本信息的窗体可以用来添加和修改员工的基本信息。创建一个新窗体,参照前面的方法设置窗体属性。窗体名称设置为FrmEmpEdit。窗体布局如图6.2所示:
图6.2编辑员工信息
在窗体中使用DTPicker控件选择日期数据。DTPicke控件需要手动将其添加到工程中。选择“工程菜单”中的“部件”命令,打开“部件属性”的对话框,在控件列表中,查找并选择Microsoft Windows Common Controls-2.6.0(SP4)。
窗体FrmEmpEdit的部分代码如下:全局变量Modify用来标记当前的数据库访问状态。当Modify=True时,表示修改已有的数据;当Modify=False时,表示插入新的数据。
ComboUpper_GotFocus()过程:
Private Sub ComboUpper_GotFocus()
Dim TmpId As Integer
'将焦点设置为下一个控件,否则将反复执行此过程
txtMemo1.SetFocus
'保存CurDep
TmpId = CurDep.DepId
'设置FrmEmpSel窗体的位置
FrmEmpSel.Left = Me.Left + ComboUpper.Left + 350 - FrmEmpSel.Width
FrmEmpSel.Top = Me.Top + ComboUpper.Top - FrmEmpSel.Height + 450
FrmEmpSel.Show 1
'将选择的员工姓名显示到ComboUpper控件中
ComboUpper.Text = UpperEmp.EmpName
'恢复CurDep
CurDep.DepId = TmpId
CurDep.GetInfo (CurDep.DepId)
End Sub
6.3设计员工信息管理窗体
员工信息管理窗体的名称设置为FrmEmpMan。在此窗体中,使用TreeView和ImageList控件来显示部门数据[7] [11]。布局如图6.3所示:
图6.3 员工信息管理
此过程根据用户类型的不同决定显示的界面,只有系统管理员才能看到添加,修改和删除等按钮,其他用户则只能看到员工的姓名列表。此窗体的功能实现了员工基本信息的管理。
6.4设计员工部门调转窗体
员工部门调转窗体名称设置为FrmTrans,窗体布局如图6.4所示:
图6.4 员工部门调转
在FrmTrans代码窗体中添加对应的代码,变量TmpOk来记录退出窗体的方式,当用户单击“确定”按钮时,TmpOk=True;当用户单击“取消”按钮时,TmpOk=False。 当用户单击ComboDep时,将打开“选择部门”对话框,并把选择的部门名称显示在ComboDep控件中。选择的部门信息保存在CurDep中。
为了能够在员工信息管理窗口中调用FrmTrans窗体,需要在FrmEmpMan窗体中添加对应的代码。因为在FrmEmpMan窗体中也使用到CurDep变量,所以在调用FrmTrans窗体之前,要把CurDep中的内容保存在TmpDepid变量中。在关闭FrmTrans窗体之后,还需要把TmpDepid变量的内容恢复到CurDep中。如果FrmTrans.TmpOk=True,则表明员工部门调转成功,此时应该刷新员工信息管理窗口的界面[8]。
6.5在主界面中增加员工管理代码
当选择“员工管理”菜单项时,触发mn_emp_Click事件,代码如下:
Private Sub mn_emp_Click()
FrmempMan.Show
End Sub
7.员工考勤考评管理模块设计
员工考勤管理可以实现系统管理员可以创建,修改,删除和查看考勤考评记录;普通用户只能查看考勤考评数据。
7.1设计考勤信息编辑窗体
考勤信息编辑窗体的名称为FrmCheckEdit,它的布局如图7.1所示:
图7.1编辑员工考勤信息
在窗体中,用户可以通过组合框输入员工的考勤情况,每个组合框中有3个选择,即0,0.5和1,分别表示没有此项目,半天和一天。 此窗体的代码中包含两上公共变量,变量OriEmpId用于保存当前考勤的员工编号,变量TmpOk用于博爱村用户是否单击“确定”按钮推出。
7.2设计考勤信息管理窗体
考勤信息管理窗体的名称为FrmCheckMan,窗体布局如图7.2所示:
图7.2 员工考勤管理
用户可以按照日期和部门查看员工考勤记录。在此模块中添加对应的代码,其中Refresh_Data()过程是考勤信息管理窗体的重要部门,它决定了DataGrid控件中显示的数据。各个过程的代码在此省略。
7.3设计月度考勤统计表窗体
前面两个窗体完成了每天记录员工考勤的功能,这个窗体将设计月度考勤表,按部门统计员工考勤记录。此窗体的名称为FrmSumCheck。执行SQLServer时候所产生的代码如图7.3所示:
图7.3执行阅读考勤统计的SQLServer语句
执行完SQLServer后的统计表如图7.4所示:
此时需要通过创建查询实现统计功能。在Access中创建一个查询“考勤统计”,下面介绍创建查询过程。
①在“查询”窗体中单击“在设计视图中创建查询”项,打开“查询设计视图”。
②在“显示表”对话框中分别将表Departments,表Employees和表Checkn添加到查询设计视图中。
图7.4 月度考勤统计表
③系统将根据表的字段自动创建如下连接:
Departments.DepId=Employees.DepID
Employees.Empid=Chenkin.EmpId
这正是需要的连接关系。
④ 依次选择需要的字段,读者可以在查询设计视图中看到被选中的字段。
⑤将CheckDate字段修改为“Month:Left([CheckDate],7)”,其中“Month:”表示显示的标题,Left([CheckDate],7)表示提取日期的月份部分。
⑥在表格中单击鼠标右键,在快捷菜单中选择“合计”,添加“合计”列。将考勤数字段的“合计”列选择为Sum,表示求和;将其他字段的“合计”列选择为Group By,表示分组。
⑦依次为所有统计字段设置显示标题。
当装入窗体时,触发Form_Load事件,代码如下:
Private Sub Form_Load()
'设置ADO控件的连接字符串
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
+ App.Path + "\人事.mdb;Persist Security Info=False"
'设置数据源
tmpsource = "SELECT EmpName As 姓名, SumQq As 全勤, SumCc As 出差," _
+ " SumBj As 病假, SumSj As 事假, SumKg As 旷工, SumFdxj As 法定休假," + " SumNxj As 年休假, SumDxj As 倒休假, SumCd As 迟到分钟," _
+ " SumZt As 早退分钟, SumOt1 As 法定节假日加班, SumOt2 As 周末加班," + " SumOt3 As 日常加班 FROM 考勤统计" _
+ " WHERE Month='" + Left(Format(FrmCheckMan.DtCheckDate.Value, "yyyy-mm-dd"), 7) + "' And DepId=" + Trim(OriDepId)
MsgBox tmpsource
Adodc1.RecordSource = tmpsource
Adodc1.Refresh
'设置列宽
With DataGrid1
.Columns(0).Width = 1200
.Columns(1).Width = 900
.Columns(2).Width = 800
.Columns(3).Width = 800
.Columns(4).Width = 800
.Columns(5).Width = 800
.Columns(6).Width = 1000
.Columns(7).Width = 1000
.Columns(8).Width = 1000
.Columns(9).Width = 1000
.Columns(10).Width = 1000
.Columns(11).Width = 1500
.Columns(12).Width = 1000
.Columns(13).Width = 1000
End With
End Sub
程序设置SELECT语句查询“考勤统计”中读取数据,并将其作为ADOData控件的数据源。
7.4设计考评信息编辑窗体
考评信息编辑窗体的名称为FrmEvaEdit,窗体布局如图7.5所示:
图7.5 编辑考评信息
在FrmEvaEdit窗体中,公共变量OriEmpId用于博爱村考评员工的编号,TmpOk用于保存用户是否单击“确定”按钮关闭窗体。当用户单击“确定”按钮时,触发Cmd_OK_Click事件,对应代码如下:
Private Sub Cmd_OK_Click()
If UpperEmp.EmpId <= 0 Then
MsgBox "请选择员工"
Exit Sub
End If
If Trim(txtZt) = "" Then
MsgBox "请输入
展开阅读全文