人事考勤管理系统c++毕业课程设计文档文档格式.docx
《人事考勤管理系统c++毕业课程设计文档文档格式.docx》由会员分享,可在线阅读,更多相关《人事考勤管理系统c++毕业课程设计文档文档格式.docx(56页珍藏版)》请在冰豆网上搜索。
b)部门信息录入
c)人员信息管理
d)考勤信息录入
e)考勤信息汇总。
2)系统功能描述
用户需要输入用户名和密码进入人事考勤管理系统,对各部门、员工的基本信息进行维护和管理。
在考勤管理模块中录入员工当天的考勤信息,同时可对年、月、员工进行查询。
此外,还可以通过考勤汇总查询模块对员工某月的考勤记录进行汇总,计算出员工月工作天数、早退、迟到的天数。
三、系统设计
1)系统目标
人事考勤管理系统以实现员工日常出勤信息管理为设计目标,加以强大的数据库管理功能,可以极大地提高人事部门的日常工作效率。
本系统在设计时满足以下几点:
a)采用人机对话的操作方式,信息查询灵活、方便、快捷、准确,数据存储安全可靠。
b)对考勤信息的操作简单,可以方便地进行添加、修改、和删除。
c)可以录入员工信息、部门信息。
d)对员工的考勤信息按月汇总计算。
e)对用户输入的数据,系统进行严格的数据检验,尽可能排除人为错误。
f)系统最大限度地实现了易维护性和易操作性。
g)系统运行稳定、安全可靠。
2)系统功能结构
人事考勤管理系统的功能结构如图所示:
3)业务流图
人事考勤管理系统业务流程图如图:
4)系统预览:
人事考勤管理系统由多个功能模块组成,下面仅列出一些典型的功能模块,其他模块以后陆续列出:
a)部门管理模块如图:
主要管理各部门之间的结构信息
b)用户管理模块如图:
用于用户的一些操作管理
c)人员信息管理如图:
主要用于维护员工的基本信息
d)考勤管理模块如图:
用于记录人事考勤的信息
e)考勤汇总查询如图:
对员工的考勤信息进行汇总统计
5)数据库设计
A.数据库分析
人事考勤系统采用SQLServer2008数据库,数据库名称为tb_person在数据库中建立四个表存储不同的信息,如图:
B.数据库逻辑设计
a)管理员信息表(tab_user),用于保存管理员的信息,如图:
b)部门信息表(tab_Dept)用于记录部门的信息,如图:
C)考勤信息表(tab_check)用于记录考勤信息
c)员工信息表(tab_Employees)保存公司员工信息,如图:
四、公共类设计
本系统采用ADO连接数据库。
为了能够方便的使用ADO建立数据库连接并进行相应的数据操作,在公共类中对系统中是使用的ADO操作进行了封装。
在系统中建立了ADO的两个公共类CADOConnection和CADODataSet,这两个类定义在ADO.Files\System\ado\msado15.dll"
no_namespacerename("
EOF"
"
adoEOF"
)
classCADOConnection
{
private:
staticvoidInitADO();
初始化ADO
staticvoidUnInitADO();
protected:
_ConnectionPtrm_Connection;
指针接口
public:
BOOLIsOpen();
判断是否与数据库连接
_ConnectionPtrGetConnection();
获取连接接口
CStringGetSQLConStr();
获取SQL连接字符串
BOOLOpen(CStringConStr);
建立数据库连接
CADOConnection();
virtual~CADOConnection();
};
CADOConnection类的实现代码如下:
CADOConnection*GetConnection()GetConnection函数是一个全局函数,用于返回全局数据库连接对象的的指针
return&
g_Connection;
}
CADOConnection:
:
CADOConnection()CADOConnection方法是构造方法,用于初始化OLE和创建_Connection接口指针
InitADO();
m_Connection.CreateInstance("
ADODB.Connection"
);
~CADOConnection()~CADOConnection方法是构造方法,用于取消OLE的初始化和释放_Connection接口指针
if(IsOpen())
m_Connection->
Close();
m_Connection=NULL;
UnInitADO();
voidCADOConnection:
InitADO()InitADO是一个静态方法,用于初始化OLE
if(ConCount++==0)
CoInitialize(NULL);
UnInitADO()UnInitADO是一个静态方法,用于取消初始化OLE
if(--ConCount==0)
CoUninitialize();
BOOLCADOConnection:
Open(CStringConStr)通过指定的数据库连接字符串于SQL数据库建立连接
m_Connection->
Open((_bstr_t)ConStr,"
"
adModeUnknown);
returnIsOpen();
CStringCADOConnection:
GetSQLConStr()生成数据库连接需要的字符串
CStringStr;
Str.Format("
Provider=SQLOLEDB.1;
IntegratedSecurity=SSPI;
PersistSecurityInfo=False;
InitialCatalog=tb_person;
DataSource=LONGFEI-PC\\SQLEXPRESS"
returnStr;
_ConnectionPtrCADOConnection:
GetConnection()该方法用于返回_Connection接口指针
returnm_Connection;
IsOpen()判断当前数据库连接对象与数据库的连接状态
longState;
get_State(&
State);
if(State==adStateOpen)
returntrue;
returnfalse;
CADODataSet类的定义如下:
classCADODataSet
_RecordsetPtrm_DataSet;
数据集接口指针
CADOConnection*m_Connection;
数据库连接对象
BOOLOpen(CStringSQLStr,intLockType);
打开记录集
voidDelete();
记录删除
intGetRecordNo();
获取记录集行号
voidmove(intnIndex);
移动记录指针
voidSave();
保存对记录集的修改
voidSetFieldValue(CStringFieldName,_variant_tValue);
设置字段的值
voidAddNew();
添加新纪录
BOOLNext();
记录集指针指向下一个记录
FieldsPtrGetFields();
获取记录集字段集合
intGetRecordCount();
获取记录集中记录数量
voidSetConnection(CADOConnection*pCon);
设置记录集的数据库连接对象
BOOLOpen(CStringSQLStr);
CADODataSet();
virtual~CADODataSet();
CADODataSet类的实现如下:
CADODataSet:
CADODataSet()该方法为记录集实现类的构造方法,在该方法中实现记录集接口对象的创建
m_DataSet.CreateInstance("
ADODB.Recordset"
CADODataSet:
~CADODataSet()实现记录集的关闭与接口的释放
m_DataSet->
m_DataSet=NULL;
voidCADODataSet:
SetConnection(CADOConnection*pCon)设置记录集所连接的数据库连接类的对象
m_Connection=pCon;
intCADODataSet:
GetRecordCount()获取记录集中数据的数量
returnm_DataSet->
GetRecordCount();
else
return0;
BOOLCADODataSet:
Open(CStringSQLStr)打开数据集
*
m_DataSet->
Open(_bstr_t(SQLStr),
_variant_t((IDispatch*)g_Connection.GetConnection(),true),
adOpenKeyset,adLockOptimistic,adCmdText);
IsOpen()判断数据集是否处于打开状态
FieldsPtrCADODataSet:
GetFields()用来获取记录集中字段的集合
returnm_DataSet->
GetFields();
Next()记录集指针下移一位
if(m_DataSet->
adoEOF)
returnfalse;
MoveNext();
returntrue;
AddNew()
AddNew();
SetFieldValue(CStringFieldName,_variant_tValue)想记录集中指定的字段赋值
PutCollect((_bstr_t)FieldName,Value);
Save()保存记录集数据所做的修改
Update();
move(intnIndex)将记录集的当前指针移动到指定的索引位置
MoveFirst();
Move(nIndex);
GetRecordNo()获取记录集中的当前行号
AbsolutePosition;
Delete()删除记录集中的当前行
Delete(adAffectCurrent);
Open(CStringSQLStr,intLockType)
adOpenKeyset,(LockTypeEnum)LockType,adCmdText);
五、主题窗设计
A.主题窗由菜单和图片组成,如图:
B.主题窗设计步骤:
a.启动visualc++,选择FileNew命令,打开New对话框
b.在左侧选择MFCAppWizard(exe)选项,在Projectname编辑框中输入工程名称,在location编辑框中设置保存工程的路径,然后单击OK按钮,打开MFCAppWizard对话框,选择对话框编程,打击fish
c.像工程中导入位图,菜单资源(具体操作在最后有补充)
六、用户登录模块设计
A.概述,登录界面是每个管理系统应该具备的,本系统的登录模块如图:
B.技术分析
窗体应在主题窗创建之前并显示,在登录窗体创建的同时应该建立数据库连接,具体操作如下:
BOOLbCon=、GetConnection()->
Open(GetConnection()->
GetSQLConStr());
CLoginDialoglogindlg;
if(logindlg.DoModal()!
=IDOK)
:
CoInitialize(NULL);
CPersonDlgdlg;
C.实现过程
a.创建一个对话框
b.向对话框中添加两个静态文本控件、一个编辑框控件、和两个按钮控件。
分别设置两个静态文本控件的Caption属性为“用户名”和“密码”设置编辑框控件类型为password;
分别设置连个按钮为“确定”和“取消”。
C.在窗体初始化方法中创建用户表的数据,并将用户添加到列表框控件中。
代码如下:
BOOLCLoginDialog:
OnInitDialog()
CDialog:
OnInitDialog();
m_DataSet.SetConnection(GetConnection());
m_DataSet.Open("
Select*FromTab_User"
intcount=m_DataSet.GetRecordCount();
for(inti=0;
i<
count;
i++)
{
m_UserList.AddString((_bstr_t)m_DataSet.GetFields()->
Item[L"
UserName"
]->
Value);
m_DataSet.Next();
}
m_UserList.SetCurSel(0);
returnTRUE;
returnTRUEunlessyousetthefocustoacontrol
EXCEPTION:
OCXPropertyPagesshouldreturnFALSE
d.确定按钮事件代码如下:
voidCLoginDialog:
OnLogin()
CStringsql,user,pass;
m_UserList.GetWindowText(user);
m_PassWord.GetWindowText(pass);
sql.Format("
Select*Fromtab_userWhereUserName='
%s'
andPassWord='
user,pass);
m_DataSet.Open(sql);
if(m_DataSet.GetRecordCount()==1)
:
SetUserName(user);
this->
OnOK();
AfxMessageBox("
用户名或密码不正确!
七、用户管理模块
A.概况:
能实现添加,修改,删除等操作如图:
B.实现过程:
a.创建一个对话框
b.向对话框中添加相应的控件
c.给对话框添加对话框类
d.给类添加函数及成员变量
e.给控件关联变量
f.编写函数
C.实现代码:
a.定义UpdateGrid方法用来更新列表视图中的信息代码如下:
voidCUserManage:
UpdateGrid()
Select*Fromtab_User"
m_grid.DeleteAllItems();
for(inti=0;
i<
m_DataSet.GetRecordCount();
m_grid.InsertItem(i,(_bstr_t)m_DataSet.GetFields()->
intno=m_DataSet.GetRecordNo();
m_grid.SetItemData(i,no);
}
b.添加按钮代码如下:
voidCUserManage:
OnAppend()
CUserEdituseredit;
if(useredit.DoModal()==IDOK)
m_DataSet.AddNew();
m_DataSet.SetFieldValue("
(_bstr_t)useredit.name);
m_DataSet.Save();
UpdateGrid();
c.删除按钮代码:
voidCUserManage:
OnDelete()
if(MessageBox("
是否删除此记录!
提示"
MB_YESNO|MB_ICONWARNING)==IDYES)
intno=m_grid.GetItemData(m_grid.GetSelectionMark());
m_DataSet.move(no-1);
m_DataSet.Delete();
d.修改按钮代码:
OnEdit()
intno=m_grid.GetItemData(m_grid.GetSelectionMark());
m_DataSet.move(no-1);
useredit.name=(char*)(_bstr_t)m_DataSet.GetFields()->
Value;
m_DataSet.SetFieldValue("
八、部门管理模块设计
A.概述:
该模块记录了部门间的的层次结构和部门信息,一般使用树控件实现,如图:
B.实现过程:
b.向对话框中添加相应的控件
c.给对话框添加对话框类
d.给类添加函数及成员变量
e.给控件关联变量
f.编写函数
C.相关代码如下:
BOOLCDeptManage:
OnInitDialog()初始化函数
m_DataSet.SetConnection(:
GetConnection());
UpdateDept();
将部门信息一次性读入树控件中。
代码如下:
voidCDeptManage:
GetNode(HTREEITEMpNode,intnPid)
HTREEITEMnode;
CADODataSetDataSet;
DataSet.SetConnection(:
CStringstr;
str.Format("
Select*Fromtab_Deptwherepid=%d"
nPid);
DataSet.Open(str);
intcount=DataSet.GetRecordCount();
intID;
_variant_tvalue;
i<
count;
node=m_tree.InsertItem((_bstr_t)DataSet.GetFields()->
Item["