考勤管理人事考勤管理系统c课程设计文档.docx
- 文档编号:18492851
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:64
- 大小:581.53KB
考勤管理人事考勤管理系统c课程设计文档.docx
《考勤管理人事考勤管理系统c课程设计文档.docx》由会员分享,可在线阅读,更多相关《考勤管理人事考勤管理系统c课程设计文档.docx(64页珍藏版)》请在冰点文库上搜索。
考勤管理人事考勤管理系统c课程设计文档
课程设计
人事考勤管理系统
第一部分:
开发背景……………………………………………………………..3
第二部分:
系统分析………………………………………………………………3
第三部分:
系统设计……………………………………………………………..9
第四部分:
公共类设计………………………………………………………….15
第五部分:
主题窗设计………………………………………………………….16
第六部分:
用户登录模块设计……………………………………………...17
第七部分:
用户管理模块设计………………………………………………20
第八部分:
部门管理模块设计………………………………………………23
第九部分:
人员信息管理模块设计……………………………………...32
第十部分:
考勤模块设计………………………………………………………40
第十一部分:
考勤汇总模块设计……………………………………………45
第十二部分:
后续补充部分:
一些过程的具体实现方法总结及图片解释:
…………………………………………………………………....51
第十三部分:
心得…………………………………………………………………..51
人事考勤管理系统
Ø开发背景
随着公司业务不断发展,员工数量不断增加,人事考勤方面的管理已成为公司管理中的重要部分,但传统的人事考勤制度已不能有效地管理员工的出勤状况,急需一套人事考勤管理的有效工具——人事考勤管理系统。
Ø二、系统分析
1)需求分析
通过对人事考勤管理过程的研究和分析,要求本系统应该具有以下功能。
a)用户登录。
b)部门信息录入
c)人员信息管理
d)考勤信息录入
e)考勤信息汇总。
2)系统功能描述
用户需要输入用户名和密码进入人事考勤管理系统,对各部门、员工的基本信息进行维护和管理。
在考勤管理模块中录入员工当天的考勤信息,同时可对年、月、员工进行查询。
此外,还可以通过考勤汇总查询模块对员工某月的考勤记录进行汇总,计算出员工月工作天数、早退、迟到的天数。
Ø三、系统设计
1)系统目标
人事考勤管理系统以实现员工日常出勤信息管理为设计目标,加以强大的数据库管理功能,可以极大地提高人事部门的日常工作效率。
本系统在设计时满足以下几点:
a)采用人机对话的操作方式,信息查询灵活、方便、快捷、准确,数据存储安全可靠。
b)对考勤信息的操作简单,可以方便地进行添加、修改、和删除。
c)可以录入员工信息、部门信息。
d)对员工的考勤信息按月汇总计算。
e)对用户输入的数据,系统进行严格的数据检验,尽可能排除人为错误。
f)系统最大限度地实现了易维护性和易操作性。
g)系统运行稳定、安全可靠。
2)系统功能结构
人事考勤管理系统的功能结构如图所示:
3)业务流图
人事考勤管理系统业务流程图如图:
4)系统预览:
人事考勤管理系统由多个功能模块组成,下面仅列出一些典型的功能模块,其他模块以后陆续列出:
a)部门管理模块如图:
主要管理各部门之间的结构信息
b)用户管理模块如图:
用于用户的一些操作管理
c)人员信息管理如图:
主要用于维护员工的基本信息
d)考勤管理模块如图:
用于记录人事考勤的信息
e)考勤汇总查询如图:
对员工的考勤信息进行汇总统计
4)数据库设计
A.数据库分析
人事考勤系统采用SQLServer2008数据库,数据库名称为tb_person在数据库中建立四个表存储不同的信息,如图:
B.数据库概念设计
根据介绍的需求分析和系统设计,规划处本系统中使用的数据库实体对象,分别以管理员为实体,部门实体和考勤实体等。
下面是实体E-R图。
a)管理员实体
管理员包括编号,用户,密码。
管理员实体E-R图
b)部门实体
部门实体包括编号,部门名称,备注信息和上级部门编号。
部门实体E-R图
c)员工实体
员工实体包括自动编号,员工编号,员工姓名,照片,性别和生日等信息。
员工E-R图
d)考勤实体
考勤实体包括人员姓名,考勤信息,上班时间,下班时间
C.数据库逻辑设计
a)管理员信息表(tab_user),用于保存管理员的信息,如图:
b)部门信息表(tab_Dept)用于记录部门的信息,如图:
C)考勤信息表(tab_check)用于记录考勤信息
c)员工信息表(tab_Employees)保存公司员工信息,如图:
Ø四、公共类设计
本系统采用ADO连接数据库。
为了能够方便的使用ADO建立数据库连接并进行相应的数据操作,在公共类中对系统中是使用的ADO操作进行了封装。
在系统中建立了ADO的两个公共类CADOConnection和CADODataSet,这两个类定义在ADO.h头文件中,实现在ADO.cpp文件中。
A.CADOConnection类
CADOConnection类是用来连接数据库的,实现了对_Connection接口的封装。
CADOConnection类在头文件中的定义如下:
#import"C:
\ProgramFiles\CommonFiles\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()//~CADOConnection方法是构造方法,用于取消OLE的初始化和释放_Connection接口指针
{
if(IsOpen())
m_Connection->Close();
m_Connection=NULL;
UnInitADO();
}
voidCADOConnection:
:
InitADO()//InitADO是一个静态方法,用于初始化OLE
{
if(ConCount++==0)
CoInitialize(NULL);
};
voidCADOConnection:
:
UnInitADO()//UnInitADO是一个静态方法,用于取消初始化OLE
{
if(--ConCount==0)
CoUninitialize();
};
BOOLCADOConnection:
:
Open(CStringConStr)//通过指定的数据库连接字符串于SQL数据库建立连接
{
if(IsOpen())
m_Connection->Close();
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;
}
BOOLCADOConnection:
:
IsOpen()//判断当前数据库连接对象与数据库的连接状态
{
longState;
m_Connection->get_State(&State);
if(State==adStateOpen)
returntrue;
returnfalse;}
CADODataSet类的定义如下:
classCADODataSet
{
protected:
_RecordsetPtrm_DataSet;//数据集接口指针
CADOConnection*m_Connection;//数据库连接对象
public:
BOOLOpen(CStringSQLStr,intLockType);//打开记录集
voidDelete();//记录删除
intGetRecordNo();//获取记录集行号
voidmove(intnIndex);//移动记录指针
voidSave();//保存对记录集的修改
voidSetFieldValue(CStringFieldName,_variant_tValue);//设置字段的值
voidAddNew();//添加新纪录
BOOLNext();//记录集指针指向下一个记录
FieldsPtrGetFields();//获取记录集字段集合
intGetRecordCount();//获取记录集中记录数量
voidSetConnection(CADOConnection*pCon);//设置记录集的数据库连接对象
BOOLOpen(CStringSQLStr);//打开记录集
CADODataSet();
virtual~CADODataSet();
private:
BOOLIsOpen();
};
CADODataSet类的实现如下:
CADODataSet:
:
CADODataSet()//该方法为记录集实现类的构造方法,在该方法中实现记录集接口对象的创建
{
m_DataSet.CreateInstance("ADODB.Recordset");
}
CADODataSet:
:
~CADODataSet()//实现记录集的关闭与接口的释放
{
if(IsOpen())
m_DataSet->Close();
m_DataSet=NULL;
m_Connection=NULL;
}
voidCADODataSet:
:
SetConnection(CADOConnection*pCon)//设置记录集所连接的数据库连接类的对象
{
m_Connection=pCon;
}
intCADODataSet:
:
GetRecordCount()//获取记录集中数据的数量
{
if(IsOpen())
returnm_DataSet->GetRecordCount();
else
return0;
}
BOOLCADODataSet:
:
Open(CStringSQLStr)//打开数据集
{
if(IsOpen())
m_DataSet->Close();
//*/
m_DataSet->Open(_bstr_t(SQLStr),
_variant_t((IDispatch*)g_Connection.GetConnection(),true),
adOpenKeyset,adLockOptimistic,adCmdText);
returnIsOpen();
//*/
}
BOOLCADODataSet:
:
IsOpen()//判断数据集是否处于打开状态
{
longState;
m_DataSet->get_State(&State);
if(State==adStateOpen)
returntrue;
returnfalse;
}
FieldsPtrCADODataSet:
:
GetFields()//用来获取记录集中字段的集合
{
returnm_DataSet->GetFields();
}
BOOLCADODataSet:
:
Next()//记录集指针下移一位
{
if(m_DataSet->adoEOF)
returnfalse;
m_DataSet->MoveNext();
returntrue;
}
voidCADODataSet:
:
AddNew()
{
m_DataSet->AddNew();
}
voidCADODataSet:
:
SetFieldValue(CStringFieldName,_variant_tValue)//想记录集中指定的字段赋值
{
m_DataSet->PutCollect((_bstr_t)FieldName,Value);
}
voidCADODataSet:
:
Save()//保存记录集数据所做的修改
{
m_DataSet->Update();
}
voidCADODataSet:
:
move(intnIndex)//将记录集的当前指针移动到指定的索引位置
{
m_DataSet->MoveFirst();
m_DataSet->Move(nIndex);
}
intCADODataSet:
:
GetRecordNo()//获取记录集中的当前行号
{
returnm_DataSet->AbsolutePosition;
}
voidCADODataSet:
:
Delete()//删除记录集中的当前行
{
m_DataSet->Delete(adAffectCurrent);
}
BOOLCADODataSet:
:
Open(CStringSQLStr,intLockType)
{
if(IsOpen())
m_DataSet->Close();
//*/
m_DataSet->Open(_bstr_t(SQLStr),
_variant_t((IDispatch*)g_Connection.GetConnection(),true),
adOpenKeyset,(LockTypeEnum)LockType,adCmdText);
returnIsOpen();
}
Ø五、主题窗设计
A.主题窗由菜单和图片组成,如图:
B.主题窗设计步骤:
a.启动visualc++,选择File/New命令,打开New对话框
b.在左侧选择MFCAppWizard(exe)选项,在Projectname编辑框中输入工程名称,在location编辑框中设置保存工程的路径,然后单击OK按钮,打开MFCAppWizard对话框,选择对话框编程,打击fish
c.像工程中导入位图,菜单资源(具体操作在最后有补充)
Ø六、用户登录模块设计
A.概述,登录界面是每个管理系统应该具备的,本系统的登录模块如图:
B.技术分析
窗体应在主题窗创建之前并显示,在登录窗体创建的同时应该建立数据库连接,具体操作如下:
BOOLbCon=、GetConnection()->Open(GetConnection()->GetSQLConStr());
CLoginDialoglogindlg;
if(logindlg.DoModal()!
=IDOK)
returnfalse;
:
:
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 { 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='%s'", user,pass); m_DataSet.Open(sql); if(m_DataSet.GetRecordCount()==1) { : : SetUserName(user); this->OnOK(); } else AfxMessageBox("用户名或密码不正确! "); } Ø七、用户管理模块 A.概况: 能实现添加,修改,删除等操作如图: B.实现过程: a.创建一个对话框 b.向对话框中添加相应的控件 c.给对话框添加对话框类 d.给类添加函数及成员变量 e.给控件关联变量 f.编写函数 C.实现代码: a.定义UpdateGrid方法用来更新列表视图中的信息代码如下: voidCUserManage: : UpdateGrid() { m_DataSet.Open("Select*Fromtab_User"); m_grid.DeleteAllItems(); for(inti=0;i { m_grid.InsertItem(i,(_bstr_t)m_DataSet.GetFields()->Item[L"UserName"]->Value); intno=m_DataSet.GetRecordNo(); m_grid.SetItemData(i,no); m_DataSet.Next(); } } b.添加按钮代码如下: voidCUserManage: : OnAppend() { CUserEdituseredit; if(useredit.DoModal()==IDOK) { m_DataSet.AddNew();m_DataSet.SetFieldValue("UserName",(_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(); m_DataSet.Save(); UpdateGrid(); } } d.修改按钮代码: voidCUserManage: : OnEdit() { CUserEdituseredit; intno=m_grid.GetItemData(m_grid.GetSelectionMark()); m_DataSet.move(no-1); useredit.name=(char*)(_bstr_t)m_DataSet.GetFields()->Item[L"UserName"]->Value; if(useredit.DoModal()==IDOK) { m_DataSet.SetFieldValue("UserName",(_bstr_t)useredit.name); m_DataSet.Save(); UpdateGrid(); } } Ø八、部门管理模块设计 A.概述: 该模块记录了部门间的的层次结构和部门信息,一般使用树控件实现,如图: B.实现过程: a.创建一个对话框 b.向对话框中添加相应的控件 c.给对话框添加对话框类 d.给类添加函数及成员变量 e.给控件关联变量 f.编写函数 C.相关代码如下: BOOLCDeptManage: : OnInitDialog()//初始化函数 { CDialog: : OnInitDialog();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 考勤 管理 人事 系统 课程设计 文档