人事管理系统

   前言

      

  本次软件工程的课程设计我们完成了一个人事管理系统。通过这次课程设计,我们掌握了Microsoft Visual Studio2005和Microsoft Office Access 2003的使用方法和软件设计的方法。这次的课程设计我们实现了人事管理系统的基本数据管理,人事档案管理,数据库管理和系统管理的功能。其中基本数据管理可分为民族档案设置,职工类型设置,文化程度设置,政治面貌设置,部门类别设置,工资类别设置,职称类别设置,职务类别设置这8个部分,人事档案管理可分为人事档案浏览,人事资料查询,人事资料统计这三部分,数据库管理可分为数据库备份和恢复。系统管理可分为用户设置和系统退出。由于时间紧促,还有很多功能没有完成,譬如考试管理和职工的通信录等。通过这次的课程设计,在界面设计上也收获不少,学会了skinplusplus的使用,这使界面的美化变得更容易。我们将继续改进这系统。     

本次课程设计的需求分析和数据库设计是2个人共同完成的。

叶伟平(3105007360)完成了基本数据的管理(民族档案设置,职工类型设置,文化程度设置,政治面貌设置,部门类别设置,工资类别设置,职称类别设置,职务类别设置)的功能和系统管理。

叶丙坤(3105007359)主要完成了数据库备份与恢复的功能,人事档案管理(人事档案浏览,人事资料查询,人事资料统计)和用户设置和系统退出的功能和报告的撰写。

广东工业大学课程设计任务书


题目名称

人事管理系统

学生学院

计算机学院

专业班级

05计算机软件工程(3)班

姓    名

叶伟平

学    号

3105007360

   

一、课程设计的内容

这次课程设计采用Microsoft Visual Studio2005作为前台应用程序的设计工具,用Microsoft Office Access 2003作为后台数据库,完成一个人事管理系统。实现的主要功能有基础数据管理(民族档案设置,职工类型设置,文化程度设置,政治面貌设置,部门类别设置,工资类别设置,职称类别设置,职务类别设置),人事档案管理(人事档案浏览,人事资料查询,人事资料统计),数据库管理(数据库的备份与恢复)系统管理(设置用户和退出系统)。

二、课程设计的要求与数据

使用 Microsoft Visual Studio 2005和 Microsoft Office Access 2003完成一个人事管理系统。按照一个企业实际管理中的实际需要实际数据库,选定数据。  

三、课程设计应完成的工作

1. 独立完成系统的分析、设计、编码、测试工作。

2.完成设计报告的撰写。

四、课程设计进程安排

序号

设计(论文)各阶段名称

地点

起止日期

1

选定本次课程设计及报告的研究课题

宿舍

2

对研究课题进行调查并做出详细的需求分析

宿舍

日期

3

收集资料和参考文献

图书馆

4

认真阅读和学习资料、文献并做出初步构思

宿舍

一周

5

制定出整个系统的设计构想、设计思路和方法

宿舍

左右

6

进行系统的设计、开发和编写程序代码

实验室

7

对系统进行测试和系统调试

实验室

8

完成整个系统的开发并进行系统维护

宿舍

9

撰写课程设计报告

宿舍

10

最终完成系统修改、论文撰写和表格填写

宿舍

11

上交课程设计报告、系统答辩

教学楼

2008.6.26-2008.6.27

五、应收集的资料及主要参考文献

[1].郑阿奇/丁有和.  Visual Studio2005教程,北京:机械工业出版社,2006.9

[2].李代平.软件工程.第二版.北京冶金工业出版社,2006.11

[3].王珊/萨师煊.数据库系统概论.第四版.-北京:高等教育出版社,2006.5

[4].李春葆/曾平.数据库原理与应用,北京:清华大学出版社,2005.

发出任务书日期:2007年6月10日    指导教师签名:

计划完成日期:  2007年6月29日    基层教学单位责任人签章:

主管院长签章:

目   录

课程设计(论文)

1.开发环境和相关技术介绍

1.1开发环境

1.2相关技术介绍

2.需求分析

2.1系统需求和功能

2.2数据字典

2.2.1数据项

2.2.2数据结构

2.3安全性要求

3.概念结构设计

3.1设计方法和步骤

3.2概念结构E-R

3.2 E-R图的有关实体和联系的说明

4.逻辑设计

4.1 关系模式

5.逻辑设计

5.1建立数据库

5.2建立表

6 应用程序设置和代码分析

61.配置ODBC数据源和添加skin++皮肤

62人事档案浏览

63人事档案查询

64人事资料统计

65数据库备份以及恢复

66设置用户

7. 测试方案和测试报告

7.1白盒测试

7.2黑盒测试

7.2.1登陆测试

7.2.2人事查询功能测试

8.安装说明和使用说明

8.1运行条件

8.2使用方法

9.  

10.参考文献

1.开发环境和相关技术介绍

1.1开发环境

系统结构:C/S结构

数据库系统:Microsoft Office Access 2003

数据库连接方式:ODBC连接方式

开发工具:Microsoft Visual Studio2005

1.2相关技术介绍

Visual Studio是微软公司推出的开发环境。是目前最流行的Windows 平台应用程序开发环境。目前已经开发到9.0版本,也就是Visual Studio 2008。

Visual Studio可以用来创建 Windows平台下的Windows应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和Office 插件。使用Visual Studio 2005, 专业开发人员能够:使用改进后的可视化设计工具、编程语言和代码编辑器,享受高效率的开发环境;使用集成的可视化数据库设计和报告工具,创建SQL Server 2005解决方案;使用Visual Studio SDK创建可以扩展Visual Studio IDE的工具;专业开发人员喜欢自由的使用.NET Framework 2.0,它是一种稳健的、功能齐备的开发环境,支持创建扩展Visual Studio集成开发环境的工具。

2.需求分析

2.1系统需求和功能

设计一个人事管理系统,使系统满足以下需求和功能

1)根据企业人事管理的需要,对企业以及企业中员工的信息进行添假删除等操作,并能对人事档案进行浏览,对人事资料进行查询,对人事资料进行统计。为企业的人事管理提供一个便利的管理系统。

2)、系统功能包括:

a系统管理(设置用户和退出系统)。

b基础数据管理(民族档案设置,职工类型设置,文化程度设置,政治面貌设置,部门类别设置,工资类别设置,职称类别设置,职务类别设置)。

c人事档案管理(人事档案浏览,人事资料查询,人事资料统计)。

数据库管理(数据库的备份与恢复)。

2.2数据字典

2.2.1数据项

1)数据项名称: 用户名

简述:用户的名字,没有重复,可以唯一标识每一用户

类型:文本

长度:50

2)数据项名称:用户密码

简述:用户的密码,用来证验登陆的用户是否合法。

类型:文本

长度:50

3)数据项名称:是否管理员

简述:描述是否系统管理员

类型:是/否

取值范围:真/假

……

2.2.2数据结构

1)数据结构名称:用户名和密码信息

组成:用户名,密码,是否管理员

2)数据结构名称:民族档案设置

组成:民族编号,民族名称

3)数据结构名称:职工类型设置

组成:职工类型编号,职工类型名称

4)数据结构名称:文化程度设置

组成:文化程度编号,文化程度名称。

5)数据结构名称:政治面貌设置

组成:政治面貌编号,政治面貌名称

6)数据结构名称:部门类别设置

组成:部门类别编号,部门类别名称

7)数据结构名称:工资类型设置

组成:工资类型编号,工资类型名称

8)数据结构名称:职称类别设置

组成:职称类别编号,职称类别名称。

9)数据结构名称:职务类别设置

组成:职务类别编号,职务类别名称

10)数据结构名称:职工信息

组成:职工编号,职工性别,职工年龄,民族,婚姻状况,家庭电话,电子邮箱,手机,籍贯,地址,毕业学校,职称,入职时间,职称类别,部门类别,职务类别。

11)数据结构名称:职工的家庭成员

组成:编号,员工号,成员姓名,关系,出生日期,工作单位,担任职务,政治面貌

2.3安全性要求

访问数据库时需要输入登陆帐号和密码。在数据库内设有用户表,登陆系统时会要求输入用户帐号和密码。登陆模块根据输入帐号和密码查用户表,查到匹配记录则允许其登陆系统。用户帐号和密码可以在系统中添加和删除。

3.概念结构设计

3.1设计方法和步骤

采用自底而上的设计方法。先自顶向下地进行需求分析,对人事管理系统的需求进行逐步细化;然后再自底而上地设计概念结构,最终将各个局部应用的概念结构集合成为全局概念结构。

3.2概念结构E-R图

通过对局部应用的选择,逐一设计出分E-R图,并对各个分E-R图进行合并,生成初步E-R图,消除不必要的系统冗余,可以得出以下人事管理系统E-R图。

                       图3.1 人事管理系统的 E-R 图1

   

图3.12人事管理系统的 E-R 图2

3.2 E-R图的有关实体和联系的说明

说明:对于人事管理系统的 E-R 图1,一个用户可以设置多个民族的情况,一个民族档案能被多个用户设置。一个用户可以设置多个职工类型,一个职工类型能被多个用户设置。其他的类似。

对于图3.12人事管理系统的 E-R 图2,一个用户可以浏览,查询多个职工的档案,一个职工的档案能被多个用户浏览。

4.逻辑设计

4.1 关系模式

由E-R图转换得到的关系模式如下:

用户(用户名,密码,是否管理员)

民族档案设置(民族编号,民族名称)

职工类型设置(职工类型号,职工类型名称)

文化程度设置(文化程度编号,文化程度名称)

政治面貌设置(政治面貌编号,政治面貌名称)

部门类别设置(部门类别编号,部门类别名称)

工资类别设置(工资类别编号,工资类别名称)

职称类别设置( 职称类别编号,职称类别名称)

职务类别设置(职务类别编号,职务类别名称)

职工表(职工编号,职工名,出生日期,年龄,民族,婚姻状况,身份证,家庭电话,电子邮箱,手机,籍贯,地址,毕业学校,所在部门,政治面貌,职称类别,职务类别,工资类别,文化程度)

职工家庭情况(编号,员工工号,成员姓名,关系,出生日期,所在部门,担任职务,政治面貌,手机)

5.逻辑设计

5.1建立数据库

本设计用Microsoft Office Access 2003作为后台数据库,在MS SQL Server 2000中创建一个名为Manager1的数据库,并在其中建立逻辑设计中涉及的表.

5.2建立表

在Access中,可以查看所建立的表,并添加适当测试数据

5.2.1 用户表

                              

 表 5.1

5.2.2 民族挡案表

                                    表 5.2

                      

5.2.3职工类型表

                                 表 5.3

5.2.4文化程度表

                                 表 5.4

  

5.2.5政治面貌表

                                 表 5.5

5.2.6部门类别设置表

表 5.6

 

5.2.7工资类别表  

                            表 5.7

5.2.8职称类别表

                                  表 5.8

                   

                   

5.2.9职务类别表

             

5.2.10职工表

5.2.11 职工家庭情况表

6 应用程序设置和代码分析

6.1配置ODBC数据源和添加skin++皮肤

本系统使用的是当程序运行时自动配置数据源的方法。实现方法如下:

首先在stdafx.h文件中添加 头文件 afxdb.h ,     #include <afxdb.h>

和数据库API头文件,     #include <odbcinst.h>//ODBC数据库API头文件。

然后在manager.cpp 的BOOL CManagerApp::InitInstance() 函数中添加如下代码

SQLConfigDataSource(NULL,ODBC_ADD_DSN,

       "Microsoft Access Driver (*.mdb)",

       "DSN=Manager1\0"

       "Description=Hotel\0"

               "FileType=Access\0"

               "DBQ=.\\Manager1.mdb\0"

               );

添加皮肤

在manager.cpp中添加 #include ".\skins\SkinPlusPlus.h"

在BOOL CManagerApp::InitInstance() 函数中添加

InitializeSkin(_T("XPCorona.ssk"));

6.2人事档案浏览

先建立IDD_PAGE_BASEINFO对话框,之后为此对话框的部分控件建立关联变量,之后再建立IDD_DIALOG_BROWSE对话框,之后为此对话框的部分控件建立关联变量。

添加代码实现人事档案浏览功能

实现这个功能的主要代码如下:

void CBrowseDlg::OnButtonSearch()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

if(m_nCondition<0)

{

MessageBox("请选择查询条件!");

m_ctrCondition.SetFocus();

return;

}

if(m_strContent=="")

{

MessageBox("请输入查询内容!");

m_ctrContent.SetFocus();

return;

}

CString strSQL;

if(0==m_nCondition)

{//按部门查询

strSQL.Format("select * from person where dept='%s'",m_strContent);

RefreshData(strSQL);

}

else if(1==m_nCondition)

{//按职工职务查询

strSQL.Format("select * from person where duty='%s'",m_strContent);

RefreshData(strSQL);

}

else if(2==m_nCondition)

{//按职工职称查询

strSQL.Format("select * from person where technical='%s'",m_strContent);

RefreshData(strSQL);

}

else if(3==m_nCondition)

{//按职工类型查询

strSQL.Format("select * from person where isworker='%s'",m_strContent);

RefreshData(strSQL);

}

else if(4==m_nCondition)

{//按工资类别查询

strSQL.Format("select * from person where aboutpay='%s'",m_strContent);

RefreshData(strSQL);

}

else if(5==m_nCondition)

{//按职工性别查询

strSQL.Format("select * from person where sex='%s'",m_strContent);

RefreshData(strSQL);

}

else if(6==m_nCondition)

{//按婚姻状况查询

strSQL.Format("select * from person where ismarry='%s'",m_strContent);

RefreshData(strSQL);

}

else if(7==m_nCondition)

{//按职工民族查询

strSQL.Format("select * from person where folk='%s'",m_strContent);

RefreshData(strSQL);

}

else if(8==m_nCondition)

{//按政治面貌查询

strSQL.Format("select * from person where political='%s'",m_strContent);

RefreshData(strSQL);

}

else if(9==m_nCondition)

{//按文化程度查询

strSQL.Format("select * from person where education='%s'",m_strContent);

RefreshData(strSQL);

}

//设置按钮状态

m_ctrNewBnt.EnableWindow(TRUE);

m_ctrDelBnt.EnableWindow(TRUE);

m_ctrSaveBnt.EnableWindow(FALSE);

m_ctrCancelBnt.EnableWindow(FALSE);

m_bNew = FALSE;

m_ctrModify.EnableWindow(TRUE);

m_BaseInfoDlg.m_ctrID.EnableWindow(FALSE);

}

void CBrowseDlg::OnButtonSearch()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

if(m_nCondition<0)

{

MessageBox("请选择查询条件!");

m_ctrCondition.SetFocus();

return;

}

if(m_strContent=="")

{

MessageBox("请输入查询内容!");

m_ctrContent.SetFocus();

return;

}

CString strSQL;

if(0==m_nCondition)

{//按部门查询

strSQL.Format("select * from person where dept='%s'",m_strContent);

RefreshData(strSQL);

}

else if(1==m_nCondition)

{//按职工职务查询

strSQL.Format("select * from person where duty='%s'",m_strContent);

RefreshData(strSQL);

}

else if(2==m_nCondition)

{//按职工职称查询

strSQL.Format("select * from person where technical='%s'",m_strContent);

RefreshData(strSQL);

}

else if(3==m_nCondition)

{//按职工类型查询

strSQL.Format("select * from person where isworker='%s'",m_strContent);

RefreshData(strSQL);

}

else if(4==m_nCondition)

{//按工资类别查询

strSQL.Format("select * from person where aboutpay='%s'",m_strContent);

RefreshData(strSQL);

}

else if(5==m_nCondition)

{//按职工性别查询

strSQL.Format("select * from person where sex='%s'",m_strContent);

RefreshData(strSQL);

}

else if(6==m_nCondition)

{//按婚姻状况查询

strSQL.Format("select * from person where ismarry='%s'",m_strContent);

RefreshData(strSQL);

}

else if(7==m_nCondition)

{//按职工民族查询

strSQL.Format("select * from person where folk='%s'",m_strContent);

RefreshData(strSQL);

}

else if(8==m_nCondition)

{//按政治面貌查询

strSQL.Format("select * from person where political='%s'",m_strContent);

RefreshData(strSQL);

}

else if(9==m_nCondition)

{//按文化程度查询

strSQL.Format("select * from person where education='%s'",m_strContent);

RefreshData(strSQL);

}

//设置按钮状态

m_ctrNewBnt.EnableWindow(TRUE);

m_ctrDelBnt.EnableWindow(TRUE);

m_ctrSaveBnt.EnableWindow(FALSE);

m_ctrCancelBnt.EnableWindow(FALSE);

m_bNew = FALSE;

m_ctrModify.EnableWindow(TRUE);

m_BaseInfoDlg.m_ctrID.EnableWindow(FALSE);

}

6.3人事档案查询

void CSearchDlg::OnButtonSearch()

{

// TODO: Add your control notification handler code here

UpdateData();

CString strSQL;

CString strTemp;

CString strType;

BOOL bNoCondition = TRUE;

//选择是否进行模糊查询

if(m_bType)

strType = " = ";

else

strType = " like ";

//根据查询条件构造SQL语句///

strSQL = "select * from person where ";

if(m_strAboutPay!="")

{

strTemp.Format(" aboutpay %s '%s' ",strType,m_strAboutPay);

if(!bNoCondition)

strSQL += " and ";

strSQL += strTemp;

bNoCondition = FALSE;

}

if(m_strDept!="")

{

strTemp.Format(" dept %s '%s' ",strType,m_strDept);

if(!bNoCondition)

strSQL += " and ";

strSQL += strTemp;

bNoCondition = FALSE;

}

if(m_strDuty!="")

{

strTemp.Format(" duty %s '%s' ",strType,m_strDuty);

if(!bNoCondition)

strSQL += " and ";

strSQL += strTemp;

bNoCondition = FALSE;

}

if(m_strEducation!="")

{

strTemp.Format(" education %s '%s' ",strType,m_strEducation);

if(!bNoCondition)

strSQL += " and ";

strSQL += strTemp;

bNoCondition = FALSE;

}

if(m_strFolk!="")

{

strTemp.Format(" folk %s '%s' ",strType,m_strFolk);

if(!bNoCondition)

strSQL += " and ";

strSQL += strTemp;

bNoCondition = FALSE;

}

if(m_strIsWorker!="")

{

strTemp.Format(" isworker %s '%s' ",strType,m_strIsWorker);

if(!bNoCondition)

strSQL += " and ";

strSQL += strTemp;

bNoCondition = FALSE;

}

if(m_strMarry!="")

{

strTemp.Format(" ismarry %s '%s' ",strType,m_strMarry);

if(!bNoCondition)

strSQL += " and ";

strSQL += strTemp;

bNoCondition = FALSE;

}

if(m_strPolitical!="")

{

strTemp.Format(" political %s '%s' ",strType,m_strPolitical);

if(!bNoCondition)

strSQL += " and ";

strSQL += strTemp;

bNoCondition = FALSE;

}

if(m_strSex!="")

{

strTemp.Format(" sex %s '%s' ",strType,m_strSex);

if(!bNoCondition)

strSQL += " and ";

strSQL += strTemp;

bNoCondition = FALSE;

}

if(m_strTechnical!="")

{

strTemp.Format(" technical %s '%s' ",strType,m_strTechnical);

if(!bNoCondition)

strSQL += " and ";

strSQL += strTemp;

bNoCondition = FALSE;

}

if(m_nAge>0)

{

strTemp.Format(" age = %d ",strType,m_nAge);

if(!bNoCondition)

strSQL += " and ";

strSQL += strTemp;

bNoCondition = FALSE;

}

// MessageBox(strSQL);

if(m_strDept2!="")

{

strTemp.Format(" dept2 %s '%s' ",strType,m_strDept2);

if(!bNoCondition)

strSQL += " and ";

strSQL += strTemp;

bNoCondition = FALSE;

}

if(m_strDept3!="")

{

strTemp.Format(" dept3 %s '%s' ",strType,m_strDept3);

if(!bNoCondition)

strSQL += " and ";

strSQL += strTemp;

bNoCondition = FALSE;

}

if(m_strName!="")

{

strTemp.Format(" name %s '%s' ",strType,m_strName);

if(!bNoCondition)

strSQL += " and ";

strSQL += strTemp;

bNoCondition = FALSE;

}

if(m_strNative!="")

{

strTemp.Format(" native %s '%s' ",strType,m_strNative);

if(!bNoCondition)

strSQL += " and ";

strSQL += strTemp;

bNoCondition = FALSE;

}

if(bNoCondition)

{

strSQL = "select * from person";

}

///

//MessageBox(strSQL);

m_ctrList.DeleteAllItems();

m_ctrList.SetRedraw(FALSE);

if(!m_PersonSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))

{

MessageBox("打开数据库失败!","数据库错误",MB_OK);

return ;

}

char buffer[20];

CString   strTime;

int i=0;

if(m_PersonSet.IsEOF())

{

MessageBox("没有符合条件的记录!");

return;

}

while(!m_PersonSet.IsEOF())

{

m_ctrList.InsertItem(i,m_PersonSet.m_ID);

m_ctrList.SetItemText(i,1,m_PersonSet.m_name);

m_ctrList.SetItemText(i,2,m_PersonSet.m_sex);

strTime.Format("%d-%d-%d",m_PersonSet.m_birth.GetYear(),m_PersonSet.m_birth.GetMonth(),m_PersonSet.m_birth.GetDay());

m_ctrList.SetItemText(i,3,strTime);

_itoa(m_PersonSet.m_age,buffer,10);

m_ctrList.SetItemText(i,4,buffer);

m_ctrList.SetItemText(i,5,m_PersonSet.m_ismarry);

m_ctrList.SetItemText(i,6,m_PersonSet.m_duty);

m_ctrList.SetItemText(i,7,m_PersonSet.m_technical);

m_ctrList.SetItemText(i,8,m_PersonSet.m_isworker);

m_ctrList.SetItemText(i,9,m_PersonSet.m_aboutpay);

m_ctrList.SetItemText(i,10,m_PersonSet.m_education);

m_ctrList.SetItemText(i,11,m_PersonSet.m_political);

strTime.Format("%d-%d-%d",m_PersonSet.m_date2.GetYear(),m_PersonSet.m_date2.GetMonth(),m_PersonSet.m_date2.GetDay());

m_ctrList.SetItemText(i,12,strTime);

i++;

m_PersonSet.MoveNext();

}

m_PersonSet.Close();

m_ctrList.SetRedraw(TRUE);

}

6.4人事资料统计

主要代码如下:

void CStatDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)

{

// TODO: Add your control notification handler code here

CString strSQL;

CString strValue="0";

CDatabase db;

db.Open(_T("Manager1"));

CRecordset recordset(&db);

UpdateData(TRUE);

//获得统计类型

int nType = m_ctrList.GetSelectionMark();

int i=0;

switch(nType)

{

case 0://按性别统计

m_ctrResult.DeleteAllItems();

m_ctrResult.DeleteColumn(1);

m_ctrResult.DeleteColumn(0);

m_ctrResult.InsertColumn(0,"性别");

m_ctrResult.InsertColumn(1,"人数");

m_ctrResult.SetColumnWidth(0,100);

m_ctrResult.SetColumnWidth(1,100);

strSQL="select count(ID) as num ,sex from person group by sex";

//MessageBox(strSQL);

if(!recordset.Open(CRecordset::forwardOnly,strSQL))

{

MessageBox("打开数据库失败!","数据库错误",MB_OK);

return ;

}

while(!recordset.IsEOF())

{

recordset.GetFieldValue("sex",strValue);

m_ctrResult.InsertItem(i,strValue);

recordset.GetFieldValue("num",strValue);

//MessageBox(strValue);

m_ctrResult.SetItemText(i,1,strValue);

i++;

recordset.MoveNext();

}

recordset.Close();

break;

case 1://按年龄统计

m_ctrResult.DeleteAllItems();

m_ctrResult.DeleteColumn(1);

m_ctrResult.DeleteColumn(0);

m_ctrResult.InsertColumn(0,"年龄");

m_ctrResult.InsertColumn(1,"人数");

m_ctrResult.SetColumnWidth(0,100);

m_ctrResult.SetColumnWidth(1,100);

strSQL="select count(ID) as num ,age from person group by age";

if(!recordset.Open(CRecordset::forwardOnly,strSQL))

{

MessageBox("打开数据库失败!","数据库错误",MB_OK);

return ;

}

while(!recordset.IsEOF())

{

recordset.GetFieldValue("age",strValue);

m_ctrResult.InsertItem(i,strValue);

recordset.GetFieldValue("num",strValue);

m_ctrResult.SetItemText(i,1,strValue);

i++;

recordset.MoveNext();

}

recordset.Close();

break;

case 2://按民族统计

m_ctrResult.DeleteAllItems();

m_ctrResult.DeleteColumn(1);

m_ctrResult.DeleteColumn(0);

m_ctrResult.InsertColumn(0,"民族");

m_ctrResult.InsertColumn(1,"人数");

m_ctrResult.SetColumnWidth(0,100);

m_ctrResult.SetColumnWidth(1,100);

strSQL="select count(ID) as num ,folk from person group by folk";

if(!recordset.Open(CRecordset::forwardOnly,strSQL))

{

MessageBox("打开数据库失败!","数据库错误",MB_OK);

return ;

}

while(!recordset.IsEOF())

{

recordset.GetFieldValue("folk",strValue);

m_ctrResult.InsertItem(i,strValue);

recordset.GetFieldValue("num",strValue);

m_ctrResult.SetItemText(i,1,strValue);

i++;

recordset.MoveNext();

}

recordset.Close();

break;

case 3://按籍贯统计

m_ctrResult.DeleteAllItems();

m_ctrResult.DeleteColumn(1);

m_ctrResult.DeleteColumn(0);

m_ctrResult.InsertColumn(0,"籍贯");

m_ctrResult.InsertColumn(1,"人数");

m_ctrResult.SetColumnWidth(0,100);

m_ctrResult.SetColumnWidth(1,100);

strSQL="select count(ID) as num ,native from person group by native";

if(!recordset.Open(CRecordset::forwardOnly,strSQL))

{

MessageBox("打开数据库失败!","数据库错误",MB_OK);

return ;

}

while(!recordset.IsEOF())

{

recordset.GetFieldValue("native",strValue);

m_ctrResult.InsertItem(i,strValue);

recordset.GetFieldValue("num",strValue);

m_ctrResult.SetItemText(i,1,strValue);

i++;

recordset.MoveNext();

}

recordset.Close();

break;

case 4://按职务类别统计

m_ctrResult.DeleteAllItems();

m_ctrResult.DeleteColumn(1);

m_ctrResult.DeleteColumn(0);

m_ctrResult.InsertColumn(0,"职务");

m_ctrResult.InsertColumn(1,"人数");

m_ctrResult.SetColumnWidth(0,100);

m_ctrResult.SetColumnWidth(1,100);

strSQL="select count(ID) as num ,duty from person group by duty";

if(!recordset.Open(CRecordset::forwardOnly,strSQL))

{

MessageBox("打开数据库失败!","数据库错误",MB_OK);

return ;

}

while(!recordset.IsEOF())

{

recordset.GetFieldValue("duty",strValue);

m_ctrResult.InsertItem(i,strValue);

recordset.GetFieldValue("num",strValue);

m_ctrResult.SetItemText(i,1,strValue);

i++;

recordset.MoveNext();

}

recordset.Close();

break;

case 5://按职称类别统计

m_ctrResult.DeleteAllItems();

m_ctrResult.DeleteColumn(1);

m_ctrResult.DeleteColumn(0);

m_ctrResult.InsertColumn(0,"职称");

m_ctrResult.InsertColumn(1,"人数");

m_ctrResult.SetColumnWidth(0,100);

m_ctrResult.SetColumnWidth(1,100);

strSQL="select count(ID) as num ,technical from person group by technical";

if(!recordset.Open(CRecordset::forwardOnly,strSQL))

{

MessageBox("打开数据库失败!","数据库错误",MB_OK);

return;

}

while(!recordset.IsEOF())

{

recordset.GetFieldValue("technical",strValue);

m_ctrResult.InsertItem(i,strValue);

recordset.GetFieldValue("num",strValue);

m_ctrResult.SetItemText(i,1,strValue);

i++;

recordset.MoveNext();

}

recordset.Close();

break;

case 6://按文化程度统计

m_ctrResult.DeleteAllItems();

m_ctrResult.DeleteColumn(1);

m_ctrResult.DeleteColumn(0);

m_ctrResult.InsertColumn(0,"文化程度");

m_ctrResult.InsertColumn(1,"人数");

m_ctrResult.SetColumnWidth(0,100);

m_ctrResult.SetColumnWidth(1,100);

strSQL="select count(ID) as num ,education from person group by education";

if(!recordset.Open(CRecordset::forwardOnly,strSQL))

{

MessageBox("打开数据库失败!","数据库错误",MB_OK);

return ;

}

while(!recordset.IsEOF())

{

recordset.GetFieldValue("education",strValue);

m_ctrResult.InsertItem(i,strValue);

recordset.GetFieldValue("num",strValue);

m_ctrResult.SetItemText(i,1,strValue);

i++;

recordset.MoveNext();

}

recordset.Close();

break;

case 7://按政治面貌统计

m_ctrResult.DeleteAllItems();

m_ctrResult.DeleteColumn(1);

m_ctrResult.DeleteColumn(0);

m_ctrResult.InsertColumn(0,"政治面貌");

m_ctrResult.InsertColumn(1,"人数");

m_ctrResult.SetColumnWidth(0,100);

m_ctrResult.SetColumnWidth(1,100);

strSQL="select count(ID) as num ,political from person group by political";

if(!recordset.Open(CRecordset::forwardOnly,strSQL))

{

MessageBox("打开数据库失败!","数据库错误",MB_OK);

return ;

}

while(!recordset.IsEOF())

{

recordset.GetFieldValue("political",strValue);

m_ctrResult.InsertItem(i,strValue);

recordset.GetFieldValue("num",strValue);

m_ctrResult.SetItemText(i,1,strValue);

i++;

recordset.MoveNext();

}

recordset.Close();

break;

case 8://按所在部门统计

m_ctrResult.DeleteAllItems();

m_ctrResult.DeleteColumn(1);

m_ctrResult.DeleteColumn(0);

m_ctrResult.InsertColumn(0,"部门");

m_ctrResult.InsertColumn(1,"人数");

m_ctrResult.SetColumnWidth(0,100);

m_ctrResult.SetColumnWidth(1,100);

strSQL="select count(ID) as num ,dept from person group by dept";

if(!recordset.Open(CRecordset::forwardOnly,strSQL))

{

MessageBox("打开数据库失败!","数据库错误",MB_OK);

return ;

}

while(!recordset.IsEOF())

{

recordset.GetFieldValue("dept",strValue);

m_ctrResult.InsertItem(i,strValue);

recordset.GetFieldValue("num",strValue);

m_ctrResult.SetItemText(i,1,strValue);

i++;

recordset.MoveNext();

}

recordset.Close();

break;

case 9://按职工类型统计

m_ctrResult.DeleteAllItems();

m_ctrResult.DeleteColumn(1);

m_ctrResult.DeleteColumn(0);

m_ctrResult.InsertColumn(0,"职工类型");

m_ctrResult.InsertColumn(1,"人数");

m_ctrResult.SetColumnWidth(0,100);

m_ctrResult.SetColumnWidth(1,100);

strSQL="select count(ID) as num ,isworker from person group by isworker";

if(!recordset.Open(CRecordset::forwardOnly,strSQL))

{

MessageBox("打开数据库失败!","数据库错误",MB_OK);

return ;

}

while(!recordset.IsEOF())

{

recordset.GetFieldValue("isworker",strValue);

m_ctrResult.InsertItem(i,strValue);

recordset.GetFieldValue("num",strValue);

m_ctrResult.SetItemText(i,1,strValue);

i++;

recordset.MoveNext();

}

recordset.Close();

break;

case 10://按工资类型统计

m_ctrResult.DeleteAllItems();

m_ctrResult.DeleteColumn(1);

m_ctrResult.DeleteColumn(0);

m_ctrResult.InsertColumn(0,"工资类型");

m_ctrResult.InsertColumn(1,"人数");

m_ctrResult.SetColumnWidth(0,100);

m_ctrResult.SetColumnWidth(1,100);

strSQL="select count(ID) as num ,aboutpay from person group by aboutpay";

if(!recordset.Open(CRecordset::forwardOnly,strSQL))

{

MessageBox("打开数据库失败!","数据库错误",MB_OK);

return ;

}

while(!recordset.IsEOF())

{

recordset.GetFieldValue("aboutpay",strValue);

m_ctrResult.InsertItem(i,strValue);

recordset.GetFieldValue("num",strValue);

m_ctrResult.SetItemText(i,1,strValue);

i++;

recordset.MoveNext();

}

recordset.Close();

break;

case 11://按婚姻状况统计

m_ctrResult.DeleteAllItems();

m_ctrResult.DeleteColumn(1);

m_ctrResult.DeleteColumn(0);

m_ctrResult.InsertColumn(0,"婚姻状况");

m_ctrResult.InsertColumn(1,"人数");

m_ctrResult.SetColumnWidth(0,100);

m_ctrResult.SetColumnWidth(1,100);

strSQL="select count(ID) as num ,ismarry from person group by ismarry";

if(!recordset.Open(CRecordset::forwardOnly,strSQL))

{

MessageBox("打开数据库失败!","数据库错误",MB_OK);

return ;

}

while(!recordset.IsEOF())

{

recordset.GetFieldValue("ismarry",strValue);

m_ctrResult.InsertItem(i,strValue);

recordset.GetFieldValue("num",strValue);

m_ctrResult.SetItemText(i,1,strValue);

i++;

recordset.MoveNext();

}

recordset.Close();

break;

default:

return;

}

UpdateData(FALSE);

*pResult = 0;

}

6.5数据库备份以及恢复

代码如下:

void CMainFrame::OnDatabaseBackup()

{

// TODO: Add your command handler code here

if(AfxMessageBox("您确定要备份数据库吗?",MB_OKCANCEL)==IDCANCEL)

{

return;

}   

if(CopyFile(".\\manager1.mdb",".\\backup\\manager1.bak",FALSE))

AfxMessageBox("数据库备份成功!");

else

AfxMessageBox("数据库备份失败!");

}

void CMainFrame::OnDatabaseRecover()

{

// TODO: Add your command handler code here

if(AfxMessageBox("还原数据库将覆盖原来的数据库。您确定要还原吗?",MB_OKCANCEL)==IDCANCEL)

{

return;

}   

if(CopyFile(".\\backup\\manager1.bak",".\\manager1.mdb",FALSE))

AfxMessageBox("数据库还原成功!");

else

AfxMessageBox("数据库还原失败!");  

}

6.6设置用户

主要代码如下:

void CUserDlg::OnOK()

{

UpdateData();

if(m_ctrUser.IsWindowEnabled())

{//增加新用户的输入检查

if(m_strUser=="")

{

MessageBox("请填写用户名!");

m_ctrUser.SetFocus();

return;

}

}

else

{//修改用户信息的输入检查

if(m_strUser=="")

{

MessageBox("请选择一个用户!");

return;

}

}

//限制密码不能为空

if(m_strPass=="")

{

MessageBox("密码不能为空,请输入密码!");

m_ctrPass.SetFocus();

return;

}

//验证密码与确认密码是否一致

if(m_strPass!=m_strRePass)

{

MessageBox("两次输入地密码不一致,请重新输入密码!");

m_ctrPass.SetFocus();

m_strPass = "";

m_strRePass = "";

UpdateData(FALSE);

return;

}

//打开记录集

CString strSQL;

strSQL.Format("select * from password where user='%s'",m_strUser);

if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))

{

MessageBox("打开数据库失败!","数据库错误",MB_OK);

return ;

}

if(m_ctrUser.IsWindowEnabled())

{//增加新用户

//判断用户是否已经存在

if(m_recordset.GetRecordCount()!=0)

{

m_recordset.Close();

MessageBox("该用户已经存在!");

return;

}

m_recordset.AddNew();

m_recordset.m_user = m_strUser;

       m_recordset.m_isadmin = m_IsAdmin;

m_recordset.m_passwd = m_strPass;

m_recordset.Update();

MessageBox("用户添加成功!请记住用户名和密码!");

m_recordset.Close();

}

else

{//修改用户信息

//判断用户是否不存在

if(m_recordset.GetRecordCount()==0)

{

m_recordset.Close();

MessageBox("该用户不存在!请更新数据库");

return;

}

m_recordset.Edit();

m_recordset.m_user = m_strUser;

m_recordset.m_passwd = m_strPass;

m_recordset.m_isadmin = m_IsAdmin;

m_recordset.Update();

MessageBox("用户修改成功!请记住用户名和密码!");

m_recordset.Close();

}

m_ctrUser.EnableWindow(FALSE);

//更新用户列表

RefreshData();

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
课 程 设 计 报 告 书 专 业: 信息管理与信息系统 课程设计名称: 《数据库原理及应用》 题 目: 人事管理系统 班 级: XXXXXXX 设 计 者: XXX 完 成 时 间: 2010-06-18 一:需求分析 通过实际调查,要求本系统具有以下功能: 1)良好的人机界面 2)要求实现一定的权限管理 3)方便的数据查询功能 4)方便的添加,删除和修改数据功能 二:开发工具选择 本系统采用SQL Server 2005创建后台数据库,前台开发工具利用Visual Studio 2005进行开发,同时运用一定C#语言的辅助 三:系统功能设计 要设计一个完备的企业人事管理系统,需涉及大量的信息,因目前还未涉及C#语言的学 习,只能简化系统设计,只选取与企业基本信息紧密相关的部门信息,员工信息以及考 勤信息等进行管理。具体规划的模块如下: 1. 部门信息管理:包括部门信息的查询,修改,添加,删除等功能 2. 员工信息管理:包括员工基本信息的查询,修改,添加,删除等功能 3. 考勤信息管理:包括考勤信息的录入,查看等功能 四:系统功能设计 根据功能的关联关系,将功能细化为下图所示的功能结构图(图1),其业务流程如图( 2)所示。 图(1) 图(2) 五:系统数据库设计 1:实体E-R图 根据人事管理系统的系统分析与功能设计,人事管理系统主要包括部门信息实体 ,员工信息实体,职位信息实体,考勤信息实体等,下面为它们的E-R图: 实体E- R图 2:由实体E-R图得到的关系模式如下: 员工表(员工编号 姓名 性别 职位 学历 所属部门 联系电话 出生年月 政治面貌 婚姻状况) 部门表(部门编号 部门名称 负责人 办公室) 考勤表(员工编号 考勤编号 考勤月份 出差天数 病假天数 事假天数) 职位表(职位编号 职位名称 所属部门) 婚姻表(员工编号 婚姻状况) 政治面貌表(员工编号 政治面貌) (说明:以上关系模式达到第三范式) 3 数据库关系图: 六:前台界面设计 1 创建项目 启动程序"Microsoft Visual Studio 2005",创建项目,创建文件夹。 2 模板页设计 添加新项——选择母版页,命名为MasterPage.master,添加一行两列的ta ble,将模板编辑区拖入右边单元格,在左侧单元格 添加treeciew控件,建立如图所示的目录树 再创建一模板页保存为MasterPage2.master,雷同上述操作建立如下图所示的母版页: 3.查看部门信息窗体 添加一应用模板一的web窗体,命名为ckbm.aspx,在编辑区输入相应文本,配置数据 源,并添加gridview和detailsview控件,建立如下图所示窗体,实现部门信息的查看: 4.修改部门信息窗体 添加一应用模板一的wen窗体,命名为xgbm.aspx,在编辑区内输入相应文本,配置数据源 ,并设置其select查询属性,添加gridview控件,再配置数据源,设置其delect查询属 性和updata查询属性,建立如下图所示的窗体,实现管理员对部门信息的编辑,更改,删 除操作: 5.添加部门信息窗体 添加一应用模板一得web窗体,命名为tjbm.aspx,在编辑区内输入相应文本,配置数据 源,添加一十行两列的table,分别添加相应的label控件和textbox,最后添加两个butt on控件,分别将其text文本改为"确定""取消",配置数据源,并设置其insert查询属性 ,建立如下图所示的窗体,实现部门信息的录入: 以上为部门信息管理模块部分的窗体设计过程和示例,员工信息管理模块和考勤信息管 理模块均与其类似,应用模板一实现的均是系统管理员的权限,可以对系统内部信息添 加,删除,修改,查看,下面为应用模板二的普通用户的权限实现页面,实现过程与以 上页面均为相似,以查看考勤信息页面为例: 6 母版页导航的实现 各个具体功能页面建好之后,回到模板页,将建好的目录树与相应的具体 共能页面之间建立联系,实现 导航的功能,使得用户使用时方便在各个页面之间进行转换。分别应用模 板页建立管理员和普通用户登录时的欢迎界面 7 登录窗体设计 添加新项——选择web窗体,命名为dl1.aspx,单击确定。在页面输入相 关文本,然后添加两个hiperlink控件,并将其text 文本改为"管理员""普通用户",将其NavigateUrl设置为"gly.aspx""pty h.aspx" 将图的"管理员"和"普通用户"分别与建好的管理员登录欢迎界面和普通 用户欢迎界面链接在一起,方便用户实现自己权限范围内 的访问和操作。 七:代码部分 在设计过程运用到的代码,下面以几个页面源代码作为示例 1. 添加部门信息 using System; using
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等天晴i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值