考勤管理系统.docx
《考勤管理系统.docx》由会员分享,可在线阅读,更多相关《考勤管理系统.docx(37页珍藏版)》请在冰豆网上搜索。
考勤管理系统
考勤管理系统
一系统设计
1系统设计的目标
考勤管理系统的总体任务是实现企业员工考勤管理的规范化,考勤数据统计的自动化。
系统的设计目标即是完成这一任务
2设计思想
系统应该具备数据库维护功能,能够让用户进行数据包的备份和恢复。
系统应采用模块化程序设计,便于功能的组合与修改,以及以后可能进行的补充。
综合烤炉,缺的本系统采用才C/S工作模式,以Oracle作为后台数据库,visualbasic6.0为前台程序开发语言。
3系统功能模块划分
根据系统的设计思想,划分系统功能为以下几个模块。
考勤管理系统
员工管理
类型管理
考勤录入
考勤统计
二数据库设计
1数据库需求设计
需求分析要做的工作是与用户结合,调查用户需要操作的资料,以决定在数据库中存储什么数据,还要弄清用户怎么样处理各种数据资料,理清数据库中各数据之间的关系。
针对本实例,经认真调查分析,得到系统处理数据的流程图如下:
考勤
统计
员工信息数据
员工考勤信息数据
考勤类型数据
员工管理
类型管理
考勤录入
2数据库结构设计
2.1数据对象和数据类型,只是构建一个概念上的数据模型。
一般我们都将涉及结果用E—R图来表示
员工信息实体E—R图如下
员工信息
员工号
所属部门
员工性别
员工姓名
考勤类型实体E—R如如下
考勤类型
类型号
类型名称
员工考勤情况实体E—R图如下:
员工考勤情况
考勤日期
备注
考勤类型号
员工号
实体和实体之间的关系E—R如如下
员工
具有
考勤情况
属于
考勤类型
三数据库对象的创建
1创建考勤类型表
使用SQL语句创建如下的考勤类型表:
CREATETABLEKQLXB
(BHVARCHAR2(4)NOTNULL,
LXVARCHAR2(20)NULL,
CONSTRAINTKQLXBPRIPRIMARYKEY(BH)
);
插入数据
INSERTINTOKQLXBVALUES('0001','出勤');
INSERTINTOKQLXBVALUES('0002','迟到');
INSERTINTOKQLXBVALUES('0003','旷工');
INSERTINTOKQLXBVALUES('0004','早退');
INSERTINTOKQLXBVALUES('0005','病假');
INSERTINTOKQLXBVALUES('0006','事假');
2创建员工表
CREATETABLEYGB
(BHVARCHAR2(8)NOTNULL,
XMVARCHAR2(12)NOTNULL,
XBVARCHAR2
(2)NOTNULL,
BMVARCHAR2(20),
CONSTRAINTYGBPRIPRIMARYKEY(BH)
);
插入数据
INSERTINTOYGBVALUES('00000001','张成','男','财务部');
INSERTINTOYGBVALUES('00000002','李刚','男','教务处');
INSERTINTOYGBVALUES('00000003','刘元薇','女','人事处');
INSERTINTOYGBVALUES('00000004','刘奇','男','教务处');
INSERTINTOYGBVALUES('00000005','黄婷婷','女','人事处');
INSERTINTOYGBVALUES('00000006','罗桂英','女','财务部');
INSERTINTOYGBVALUES('00000007','周天','男','会计系');
INSERTINTOYGBVALUES('00000008','张以能','男','会计系');
INSERTINTOYGBVALUES('00000009','谭华','男','人事处');
INSERTINTOYGBVALUES('00000010','王玉梅','女','会计系');
3创建考勤管理表
CREATETABLEKQGLB
(KQRQDATENOTNULL,
YGBHVARCHAR2(8)NOTNULL,
LXBHVARCHAR2(4)NOTNULL,
BZVARCHAR2(60),
CONSTRAINTKQGLBPRIPRIMARYKEY(KQRQ,YGBH)
);
插入数据
INSERTINTOKQGLBVALUES('15-3月-2010','00000001','0002','塞车');
INSERTINTOKQGLBVALUES('16-3月-2010','00000003','0004','');
INSERTINTOKQGLBVALUES('16-3月-2010','00000004','0002','');
INSERTINTOKQGLBVALUES('17-4月-2010','00000001','0001','');
INSERTINTOKQGLBVALUES('17-4月-2010','00000002','0006','');
再添加两个必要的外键
ALTERTABLEKQGLBADD
(CONSTRAINTKQGL_BH_FKFOREIGNKEY(LXBH)REFERENCESKQLXB(BH),
CONSTRAINTYG_BH_FKFOREIGNKEY(YGBH)REFERENCESYGB(BH)
);
系统界面设计,运行界面及代码
主界面(Frm_main)
一、运行界面:
二、设计界面:
三、主要事件与代码:
PrivateSubForm_Resize()
Image1.Width=Me.Width
Image1.Height=Me.Height
Label1.Left=Me.Width/2-Label1.Width/2
Label2.Left=Me.Width/2-Label2.Width/2
EndSub
PrivateSubToolbar1_ButtonClick(ByValButtonAsMSComctlLib.Button)
SelectCaseButton.Key
Case"bt1"'员工管理
frm_yggl.Show,Me
Case"bt2"'类型管理
frm_lxgl.Show,Me
Case"bt3"'考勤录入
Frm_kqlr.Show,Me
Case"bt4"'考勤统计
frm_kqtj.Show,Me
EndSelect
EndSub
考勤类型管理(Frm_lxgl)
一、运行界面:
二、设计界面:
三、主要事件与代码:
Dimadd_flagAsBoolean,modify_flagAsBoolean
PrivateSubAdodc1_MoveComplete(ByValadReasonAsADODB.EventReasonEnum,ByValpErrorAsADODB.Error,adStatusAsADODB.EventStatusEnum,ByValpRecordsetAsADODB.Recordset)
IfAdodc1.Recordset.RecordCount>0Then
Text1.Text=Adodc1.Recordset.Fields("bh")&""
Text2.Text=Adodc1.Recordset.Fields("lx")&""
Else
Text1.Text=""
Text2.Text=""
Callshowbuttons
EndIf
EndSub
PrivateSubcmdadd_Click()
Text1.Text=""
Text2.Text=""
Text1.Locked=False
Text2.Locked=False
DataGrid1.Enabled=False
add_flag=True
Callshowbuttons
Text1.SetFocus
EndSub
PrivateSubcmdcancle_Click()
IfAdodc1.Recordset.RecordCount>0Then
Text1.Text=Adodc1.Recordset.Fields("bh")&""
Text2.Text=Adodc1.Recordset.Fields("lx")&""
Else
Text1.Text=""
Text2.Text=""
EndIf
Text1.Locked=True
Text2.Locked=True
DataGrid1.Enabled=True
add_flag=False
modify_flag=False
Callshowbuttons
DataGrid1.SetFocus
EndSub
PrivateSubcmddelete_Click()
ret=MsgBox("是否要删除"+Adodc1.Recordset.Fields("lx")+"类型吗?
",vbYesNo+vbQuestion+vbDefaultButton2,"删除提示")
Ifret=vbYesThen
Adodc1.Recordset.Delete
Adodc1.Recordset.Update
EndIf
DataGrid1.SetFocus
EndSub
PrivateSubcmdexit_Click()
UnloadMe
EndSub
PrivateSubcmdmodify_Click()
Text1.Locked=False
Text2.Locked=False
DataGrid1.Enabled=False
modify_flag=True
Callshowbuttons
Text1.SetFocus
EndSub
PrivateSubcmdsave_Click()
Text1.Text=Trim(Text1.Text)
Text2.Text=Trim(Text2.Text)
Ifis_data_ok()=FalseThen
ExitSub
EndIf
in_bh=Text1.Text
in_lx=Text2.Text
Ifadd_flag=TrueThen
Adodc1.Recordset.AddNew
EndIf
Adodc1.Recordset("bh")=in_bh
Adodc1.Recordset("lx")=in_lx
Adodc1.Recordset.Update
Ifadd_flag=TrueThen
Adodc1.Refresh
Adodc1.Recordset.Find"bh='"+in_bh+"'",,adSearchForward,1
EndIf
Text1.Locked=True
Text2.Locked=True
DataGrid1.Enabled=True
add_flag=False
modify_flag=False
Callshowbuttons
DataGrid1.SetFocus
EndSub
PrivateSubForm_Load()
add_flag=False
modify_flag=False
Callshowbuttons
EndSub
PrivateSubshowbuttons()
Ifadd_flag=FalseAndmodify_flag=FalseThen
cmdadd.Enabled=True
IfAdodc1.Recordset.RecordCount=0Then
cmdmodify.Enabled=False
cmddelete.Enabled=False
Else
cmdmodify.Enabled=True
cmddelete.Enabled=True
EndIf
cmdexit.Enabled=True
cmdcancle.Enabled=False
cmdsave.Enabled=False
Else
cmdadd.Enabled=False
cmdmodify.Enabled=False
cmddelete.Enabled=False
cmdexit.Enabled=False
cmdcancle.Enabled=True
cmdsave.Enabled=True
EndIf
EndSub
PrivateFunctionis_data_ok()AsBoolean
oldbh=IIf(modify_flag=True,Adodc1.Recordset.Fields("bh"),"")
IfLen(Text1.Text)<>4Then
MsgBox("编号未输入或输入的编号长度不够!
")
is_data_ok=False
Text1.SetFocus
ExitFunction
EndIf
Ifadd_flag=TrueThen
Adodc2.RecordSource="select*fromkqlxbwherebh='"+Text1.Text+"'"
Adodc2.Refresh
Else
Adodc2.RecordSource="select*fromkqlxbwherebh='"+Text1.Text+"'andbh<>'"+oldbh+"'"
Adodc2.Refresh
EndIf
IfAdodc2.Recordset.RecordCount>0Then
MsgBox("输入编号重复!
")
is_data_ok=False
Text1.SetFocus
ExitFunction
EndIf
IfLen(Text2.Text)=0Then
MsgBox("类型名称未输入!
")
is_data_ok=False
Text2.SetFocus
ExitFunction
EndIf
is_data_ok=True
EndFunction
PrivateSubForm_QueryUnload(CancelAsInteger,UnloadModeAsInteger)
Ifadd_flag=TrueOrmodify_flag=TrueThen
MsgBox("正在编辑数据,请先按取消键后再退出!
")
Cancel=True
EndIf
EndSub
PrivateSubText1_KeyPress(KeyAsciiAsInteger)
If(KeyAscii<48OrKeyAscii>57)AndKeyAscii<>8Then
KeyAscii=0
EndIf
EndSub
员工信息管理(Frm_yggl)
一、运行界面:
二、设计界面:
三、属性设置:
1.Frm_yggl的属性设置
属性名
值
含义
Caption
员工信息管理
BorderStyle
1
Fixedsingle
StartUpPosition
1
所有者中心
2.Combo1的属性设置
Style
2
DropdownList
List
男 女
Locked
True
3.DataGrid1的属性设置
DataSource
Adodc1
4.Text1--Text3的属性设置
Locked
True
四、主要事件与代码:
Dimadd_flagAsBoolean,modify_flagAsBoolean
'add_flag:
增加状态标志modify_flag:
修改状态标志
PrivateSubAdodc1_MoveComplete(ByValadReasonAsADODB.EventReasonEnum,ByValpErrorAsADODB.Error,adStatusAsADODB.EventStatusEnum,ByValpRecordsetAsADODB.Recordset)
Text1.Text=Adodc1.Recordset.Fields("bh")&""
Text2.Text=Adodc1.Recordset.Fields("xm")&""
Text3.Text=Adodc1.Recordset.Fields("bm")&""
Combo1.ListIndex=IIf(Adodc1.Recordset.Fields("xb")="男",0,1)
EndSub
PrivateSubcmdadd_Click()'增加按钮
'初始化文本框、组合框,设置增加编辑状态
Text1.Text=""'清空文本框内容
Text2.Text=""
Text3.Text=""
Text1.Locked=False'取消对象的只读
Text2.Locked=False
Text3.Locked=False
Combo1.Locked=False
Combo1.ListIndex=0
DataGrid1.Enabled=False'锁定表格
add_flag=True'设置为增加编辑状态
Callshowbuttons'刷新按钮状态
Text1.SetFocus
EndSub
PrivateSubcmdmodify_Click()'修改按钮
'初始化文本框、组合框,设置修改编辑状态
Text1.Locked=False'取消对象的只读
Text2.Locked=False
Text3.Locked=False
Combo1.Locked=False
DataGrid1.Enabled=False'锁定表格
modify_flag=True'设置为修改编辑状态
Callshowbuttons'刷新按钮状态
Text1.SetFocus
EndSub
PrivateSubcmddelete_Click()'删除按钮
ret=MsgBox("是否要删除"+Adodc1.Recordset("xm")+"员工的记录!
",vbYesNo+vbExclamation+vbDefaultButton2,"提示")
Ifret=vbYesThen'确定要删除
WithAdodc1.Recordset
.Delete
.Update
EndWith
EndIf
DataGrid1.SetFocus
EndSub
PrivateSubcmdcancle_Click()'取消按钮
Text1.Text=Adodc1.Recordset.Fields("bh")&""
Text2.Text=Adodc1.Recordset.Fields("xm")&""
Text3.Text=Adodc1.Recordset.Fields("bm")&""
Combo1.ListIndex=IIf(Adodc1.Recordset.Fields("xb")="男",0,1)
Text1.Locked=True'设置对象的只读
Text2.Locked=True
Text3.Locked=True
Combo1.Locked=True
DataGrid1.Enabled=True'取消锁定表格
add_flag=False'设置为非增加状态
modify_flag=False'设置为非修改状态
Callshowbuttons'刷新按钮状态
DataGrid1.SetFocus
EndSub
PrivateSubcmdsave_Click()'保存按钮
Text1.Text=Trim(Text1.Text)
Text2.Text=Trim(Text2.Text)
Text3.Text=Trim(Text3.Text)
'检查数据的正确性
Ifisdataok()=FalseThen'数据有错误
ExitSub
EndIf
in_bh=Text1.Text
in_xm=Text2.Text
in_bm=Text3.Text
in_xb=Combo1.Text
'-----------------------
Ifadd_flag=TrueThen'增加数据
Adodc1.Recordset.AddNew
EndIf
Adodc1.Recordset("bh")=in_bh
Ad