人事管理系统实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据库系统课程设计报告题目:人事管理系统
年级专业:12网络工程
学号:
*名:***
小组成员:贺锦鹏田野
指导老师:
完成时间:2014.06.08
评分:
湖南科技大学计算机科学与工程学院
1系统需求分析
1.1系统功能分析
人事管理系统主要有以下几项功能要求:
●新员工资料的输入
●自动分配员工,并且设置初始的用户密码
●人事变动的详细记录,包括岗位和部门的调整
●员工信息的查询和修改,包括员工个人信息和密码等
●查询人事变更记录
1.2 系统功能模块设计
根据系统功能需求,可以将系统分解成几个模块来分别设计应用程序设计界面,如下图所示:
1.3 与其它系统的关系
本系统是公司管理信息系统的基础部分。

为其他子系统,如考勤管理系统、工资管理系统和员工培训系统,提供员工的基本信息。

同时为其它的系统提供了员工登录的密码认定和权限分配功能。

1.4 数据流程图
人事信息管理系统的数据流程如图所示,所有数据有人事科管理员输入。

1.5 数据库需求分析
根据数据流程图,可以列出以下数据项和数据结构:
●员工信息:员工号、密码、权限、姓名、性别、生日、所在部门、职务、受
教育程度、专业、家庭住址、电话、电子邮箱、当前状态、备注
●人事变更记录:记录号、员工号、变动、详细记录。

所需的外部数据支持:
●部门信息:部门编号、名称、部门经理、简介
●受教育程度代码表:代码、说明
●职务代码表:职务编号、名称
●人事变动代码:代码、描述
2概念结构设计
2.1 概念结构设计的步骤
概念结构的设计可分为两步:第一步是抽象数据并设计局部视图。

第二步是集成局部视图,得到全局的概念结构。

员工实体E-R图:
部门实体E-R图:
职务代码表E-R图:
教育程度代码表E-R图:
人事变动代码表E-R图
人事变更记录表E-R图:
实体E-R总图:
3逻辑结构设计
3.1 E-R图向关系模型的转换
将总体关系的E-R图转换为关系模型:
员工(员工号、密码、用户权限、姓名、性别、生日、所在部门、职务、
受教育程度、专业技能、家庭住址、联系电话、电子邮箱、当前状态、
备注)
部门(部门号,部门名称,部门经理,简介)
职务(职务号、职务名称)
教育程度(代码,说明)
人事变更记录(记录编号,员工号,变更代码,详细记录)
人事变动代码(代码,描述)
4物理结构设计
4.1数据表的物理结构
根据系统E-R图,本系统需要有两个数据分别来存放工人个人信息和人事变动记录。

并且需要一个外部数据表(部门信息)的支持。

同时部分记录字段需要用代码来表示,因此需要3个代码来分别记录教育程度、职务和人事变更的代码。

这个6个数据表的结构如表1到表6所示。

5各功能模块的设计与实现
5.1各功能说明
⏹增加新员工
⏹人事变动
⏹员工信息查询和修改
⏹加密模块
5.2用户界面设计
完成数据库创建和功能说明以后,我们可以进行下一步工作,即设计用户界面。

我们把人事信息系统的窗口分成4个主要部分。

1.登录模块的创建
2.增加新员工窗体的创建
3.人事变动窗体的创建
4.员工信息查询修改窗体的创建
5.加密模块的创建
5.3各功能模块的实现
1.加密模块
窗口设计:
由于时间关系只实现了固定的用户名和密码,为实现数据库验证的用户名和密码
相关代码:
//**********************以下实现管理员密码登陆************************************************************//
//未实现管理员密码的可修改性
void CMyDlg::OnLoad()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CString ID = "admin";
CString PASSWD = "123";
if(m_ID == "")
{
MessageBox("请输入用户名");
return;
}
if(m_PASSWD == "")
{
MessageBox("请输入密码");
return;
}
if(ID != "" && PASSWD != "")
{
if(ID == m_ID && PASSWD == m_PASSWD)
{
AfxMessageBox("欢迎使用!");
CAdminBox a;//调用管理员窗口的一个对象
a.DoModal();//调用函数
}
else
{
AfxMessageBox("用户信息不正确,重新登录!");
/* time++;
if(time>2)
exit(0);
*/
}
}
}
//***************************************************************//
2.主窗口的设计
主窗口只实现相关功能窗口的调用按钮,不实现具体功能
//***************************************************************************** *********************//
//以下实现员工信息修改窗口
void CAdminBox::OnBUTTONUpdateName()
{
// TODO: Add your control notification handler code here
CUpdateName a;
a.DoModal();
}
//***************************************************************************** *************************************//
//调用人事变动窗口
void CAdminBox::OnBUTTONPersonnel()
{
// TODO: Add your control notification handler code here
CPERSONNEL a;
a.DoModal();
}
//***************************************************************************** *************************************//
//提供退出系统的功能
void CAdminBox::OnButtonExit()
{
// TODO: Add your control notification handler code here
if(MessageBox("确定退出?",_T(""),MB_YESNO|MB_ICONSTOP)==IDYES) exit(0);
}
3.人事变动
窗口设计:
实现的功能是在往数据库人事变更表中添加数据的时候同时修改员工信息表中的相关信息
代码如下:
void CPERSONNEL::OnButton1()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
_ConnectionPtr m_pConnection;
::CoInitialize(NULL);
//在ADO操作中建议语中要常用try...catch()来捕获错误信息
//因为他有时会经常出现一些想不到的错误
try
{
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_t strConn = "Provider = SQLOLEDB;Data Sourse = (local); Initial Catalog =人事管理系统;UID=sa;PWD=;";
m_pConnection->Open(strConn,"","",adModeUnknown);
if(m_pConnection->State == adStateOpen)MessageBox("成功连接数据库");
}
catch(_com_error e)
{
::CoUninitialize();
AfxMessageBox(e.ErrorMessage());
return;
}
//以下插入人事变更记录
_variant_t ra;
_bstr_t strAdd = "INSERT INTO PERSONNEL VALUES('";
// strAdd = strAdd + m_ID + "','";
strAdd = strAdd + m_PERSON + "','";
strAdd = strAdd + m_CHANGE + "','";
strAdd = strAdd + m_DESCRIPTION + "')";
// AfxMessageBox(strAdd);
m_pConnection->Execute(strAdd,&ra,adCmdText);
// m_pConnection->Close();
//下面同样涉及对其他表数据修改故不能关闭数据库连接
strAdd = "UPDATE PERSON SET STATE =";
if(m_CHANGE=="0")
{
strAdd=strAdd+"'T' where ID="+m_PERSON;
// AfxMessageBox(strAdd);
}
else if(m_CHANGE=="2")
strAdd=strAdd+"'F' where ID="+m_PERSON;
// AfxMessageBox(strAdd);
}
m_pConnection->Execute(strAdd,&ra,adCmdText);
m_pConnection->Close();
m_adodc1.SetRecordSource("select * from PERSONNEL");
m_adodc1.Refresh();
UpdateData(FALSE);
}
⏹ 3.员工信息查询修改
窗口设计如下:
实现功能:
可以在所有记录上进行相关信息的查询和修改
各部分功能的代码如下
●增加新员工信息
//*************************************************************// //以下实现按钮触发添加员工信息功能
void CUpdateName::OnBUTTONAddName()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
_ConnectionPtr m_pConnection;
::CoInitialize(NULL);
//在ADO操作中建议语中要常用try...catch()来捕获错误信息
//因为他有时会经常出现一些想不到的错误
try
{
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_t strConn = "Provider = SQLOLEDB;Data Sourse = (local); Initial Catalog =人事管理系统;UID=sa;PWD=;Persist Security Info=FALSE";
m_pConnection->Open(strConn,"","",adModeUnknown);
// if(m_pConnection->State == adStateOpen) MessageBox("成功连接数据库");
}
catch(_com_error e)
{
::CoUninitialize();
// AfxMessageBox(e.ErrorMessage());
return;
}
_variant_t ra;
m_PASSWD = "12345";
m_AUTHORITY = "2";
_bstr_t strAdd = "INSERT INTO PERSON VALUES ('";
// strAdd = strAdd + m_ID + "','";
strAdd = strAdd + m_PASSWD + "','";
strAdd = strAdd + m_AUTHORITY + "','";
strAdd = strAdd + m_NAME + "','";
strAdd = strAdd + m_SEX + "','";
strAdd = strAdd + m_BIRTHDAY + "','";
strAdd = strAdd + m_DEPARTMENT + "','";
strAdd = strAdd + m_JOB + "','";
strAdd = strAdd + m_EDU_LEVEL + "','";
strAdd = strAdd + m_SPCIALTY + "','";
strAdd = strAdd + m_ADDRESS + "','";
strAdd = strAdd + m_TEL + "','";
strAdd = strAdd + m_EMAIL + "','";
strAdd = strAdd + m_STATE + "','";
strAdd = strAdd + m_REMARK + "')";
// AfxMessageBox(strAdd);
m_pConnection->Execute(strAdd,&ra,adCmdText);
m_pConnection->Close();
m_adodc1.SetRecordSource("select * from PERSON");
m_adodc1.Refresh();
UpdateData(FALSE);
}
查询功能
//***************************************************************************// //连接上面两个组合框的输入值来响应相应的查询信息
void CUpdateName::OnBUTTONCheck()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if((m_SelectYes==1 && m_CheckName == "") || (m_SelectYes ==2 && m_CheckID == ""))
{
CString str = "select * from PERSON";
m_adodc1.SetRecordSource(str);
m_adodc1.Refresh();
UpdateData(FALSE);
return;
}
else
{
if(m_SelectYes==1)
{
CString str = "select * from PERSON where NAME='" + m_CheckName +"'";
// AfxMessageBox(str);
m_adodc1.SetRecordSource(str);
m_adodc1.Refresh();
UpdateData(FALSE);
}
else if(m_SelectYes==2)
{
CString str = "select * from PERSON where ID='" + m_CheckID +"'";
// AfxMessageBox(str);
m_adodc1.SetRecordSource(str);
m_adodc1.Refresh();
UpdateData(FALSE);
}
}
}
删除选定记录
//***************************************************************************// //以下实现按钮触发删除当前列表所选择的记录
void CUpdateName::OnBUTTONDeleteName()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
int ColNum = 2;
CString colVal;
//要包含头文件"Columns.h"
CColumns cols;
//要包含头文件"Column.h"
CColumn col;
VARIANT v_ColNum,v_Value;
cols = m_datagrid1.GetColumns(); //调用 GetColumns返回CDataGrid对应的CColumns对象
v_ColNum.vt = VT_I2;
//读取ID
v_ColNum.iVal = 0; //设置列编号
col = cols.GetItem(v_ColNum); //根据列编号返回CColumn对象
v_Value = col.GetValue(); //读取列植
CString tmp = v_Value.bstrVal;
// int curRow = atoi(tmp);
CString tmp2 = "确认要删除编号为 "+tmp+" 的记录吗?";
if(MessageBox(tmp2,_T("数据删除提示"),MB_YESNO|MB_ICONSTOP) != IDYES) return;
UpdateData(TRUE);
_ConnectionPtr m_pConnection;
::CoInitialize(NULL);
try
{
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_t strConn = "Provider = SQLOLEDB;Data Sourse = (local); Initial Catalog =人事管理系统;UID=sa;PWD=;";
m_pConnection->Open(strConn,"","",adModeUnknown);
if(m_pConnection->State == adStateOpen)MessageBox("成功连接数据库");
}
catch(_com_error e)
{
::CoUninitialize();
AfxMessageBox(e.ErrorMessage());
return;
}
//以下删除当前数据
_variant_t ra;
_bstr_t strAdd = "DELETE FROM PERSON WHERE ID ='"+tmp+"'";
//AfxMessageBox(strAdd);
m_pConnection->Execute(strAdd,&ra,adCmdText);
m_pConnection->Close();
//以下显示当前数据
m_adodc1.SetRecordSource("SELECT * FROM PERSON");
m_adodc1.Refresh();
UpdateData(FALSE);
}
通过双击复制员工信息功能
//***************************************************************************// //通过双击Datagrid实现列表数据进行数据复制
void CUpdateName::OnClickDatagrid1()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
int ColNum = 2;
CString colVal;
//要包含头文件"Columns.h"
CColumns cols;
//要包含头文件"Column.h"
CColumn col;
VARIANT v_ColNum,v_Value;
cols = m_datagrid1.GetColumns();//调用GetColumns返回CDataGrid对应的CColumns对象
v_ColNum.vt = VT_I2;
//读取ID0
v_ColNum.iVal = 0;
col = cols.GetItem(v_ColNum);
v_Value = col.GetValue();
m_ID = v_Value.bstrVal;
//读取密码1
v_ColNum.iVal = 1;
col = cols.GetItem(v_ColNum);
v_Value = col.GetValue();
m_PASSWD = v_Value.bstrVal;
//读取权限2
v_ColNum.iVal =2 ;
col = cols.GetItem(v_ColNum);
v_Value = col.GetValue();
m_AUTHORITY = v_Value.bstrVal;
//读取姓名3
v_ColNum.iVal = 3; //设置列编号
col = cols.GetItem(v_ColNum); //根据列编号返回CColumn对象
v_Value = col.GetValue(); //读取列植
m_NAME = v_Value.bstrVal;
//读取性别4
v_ColNum.iVal = 4;
col = cols.GetItem(v_ColNum); v_Value = col.GetValue();
m_SEX = v_Value.bstrVal;
//读取生日5
v_ColNum.iVal = 5;
col = cols.GetItem(v_ColNum); v_Value = col.GetValue();
m_BIRTHDAY = v_Value.bstrVal;
//读取所在部门6
v_ColNum.iVal = 6;
col = cols.GetItem(v_ColNum); v_Value = col.GetValue();
m_DEPARTMENT = v_Value.bstrVal;
//读取职务7
v_ColNum.iVal =7;
col = cols.GetItem(v_ColNum); v_Value = col.GetValue();
m_JOB = v_Value.bstrVal;
//读取受教育程度8
v_ColNum.iVal = 8;
col = cols.GetItem(v_ColNum); v_Value = col.GetValue();
m_EDU_LEVEL = v_Value.bstrVal;
//读取专业技能9
v_ColNum.iVal = 9;
col = cols.GetItem(v_ColNum); v_Value = col.GetValue();
m_SPCIALTY = v_Value.bstrVal;
//读取家庭住址10
v_ColNum.iVal = 10;
col = cols.GetItem(v_ColNum); v_Value = col.GetValue();
m_ADDRESS = v_Value.bstrVal;
//读取联系电话11
v_ColNum.iVal = 11;
col = cols.GetItem(v_ColNum);
v_Value = col.GetValue();
m_TEL = v_Value.bstrVal;
//读取电子邮箱12
v_ColNum.iVal = 12;
col = cols.GetItem(v_ColNum);
v_Value = col.GetValue();
m_EMAIL = v_Value.bstrVal;
//读取当前状态13
v_ColNum.iVal = 13;
col = cols.GetItem(v_ColNum);
v_Value = col.GetValue();
m_STATE = v_Value.bstrVal;
//读取备注14
v_ColNum.iVal = 14 ;
col = cols.GetItem(v_ColNum);
v_Value = col.GetValue();
m_REMARK = v_Value.bstrVal;
UpdateData(FALSE);
}
修改员工信息
//***************************************************************************// //以下实现按钮触发修改列表所选信息功能
void CUpdateName::OnBUTTONUpdateName()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
_ConnectionPtr m_pConnection;
::CoInitialize(NULL);
//在ADO操作中建议语中要常用try...catch()来捕获错误信息
//因为他有时会经常出现一些想不到的错误
try
{
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_t strConn = "Provider = SQLOLEDB;Data Sourse = (local); Initial Catalog =人事管理系统;UID=sa;PWD=;";
m_pConnection->Open(strConn,"","",adModeUnknown);
// if(m_pConnection->State == adStateOpen)MessageBox("成功连接数据库");
}
catch(_com_error e)
{
::CoUninitialize();
AfxMessageBox(e.ErrorMessage());
return;
}
//以下插入数据
_variant_t ra;
_bstr_t strAdd = "UPDATE PERSON SET PASSWD='";
strAdd = strAdd + m_PASSWD + "',AUTHORITY='";
strAdd = strAdd + m_AUTHORITY + "',NAME='";
strAdd = strAdd + m_NAME + "',SEX='";
strAdd = strAdd + m_SEX + "',BIRTHDAY='";
strAdd = strAdd + m_BIRTHDAY + "',DEPARTMENT='";
strAdd = strAdd + m_DEPARTMENT + "',JOB='";
strAdd = strAdd + m_JOB + "',EDU_LEVEL='";
strAdd = strAdd + m_EDU_LEVEL + "',ADDRESS='";
strAdd = strAdd + m_ADDRESS + "',TEL='";
strAdd = strAdd + m_TEL + "',EMAIL='";
strAdd = strAdd + m_EMAIL + "',STATE='";
strAdd = strAdd + m_STATE + "',REMARK='";
strAdd = strAdd + m_REMARK + "'";
strAdd = strAdd + " where ID=" + m_ID;
AfxMessageBox(strAdd);
m_pConnection->Execute(strAdd,&ra,adCmdText);
m_pConnection->Close();
//以下显示数据
m_adodc1.SetRecordSource("select * from PERSON");
m_adodc1.Refresh();
AfxMessageBox("修改信息成功!");
UpdateData(FALSE);
}
4 系统实现
5 系统的编译和发行
设计人事管理系统中所出现的相关错误:
1._Connection未定义之类问题
解决办法:需要在总的软件头文件stdafx.h需要包含相应的ADO库控件,同时在相应的CPP文件了包含ADO库控件调用的初始化函数。

2.数据库链接不成功之类问题
解决办法:需要验证用户之类的问题,确定Sa包含在数据库管理员里面,同时确定在源代码中数据库链接函数的编写正确,必要的时候在固定处编写窗口程序来确定代码的正确执行3.部分变量提示未定义
解决办法:通过查看view中的类向导来查看变量是否定义正确,以及相关控件的变量设计无误。

4.操作数据库数据出错Runtime Error
解决办法:通过窗口显示代码执行过程中SQL语言传递函数中strAdd的字符串来验证确定执行的SQL语言无误,同时注意一些变量类型定义不同的错误,这类错误不易发现(具体表现在SQL语言中将其表现为字符型,但是数据库中相应的变量或者列名变量为整形之类的)
5.SQL操作成功后相关的Datagrid无法显示操作后的结果
解决方法:在相关代码中加入控件刷新的代码即可解决。

更多的问题可以查询百度。

课程设计总结
两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。

在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。

学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。

课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.在设计过程中,体现了自己单独设计程式的能力以及综合运用知识的能力,体会了学以致用,突出自己劳动果实的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。

由于本人能力有限,在设计调试程序过程中难免会出现一些错误,在此感谢指导老师和同学的帮助。

我十分乐意接受你们的批评与指正,本人将万分感谢。

------陈嘉升。

相关文档
最新文档