员工培训管理系统方案.docx

上传人:b****5 文档编号:6417811 上传时间:2023-01-06 格式:DOCX 页数:42 大小:162.26KB
下载 相关 举报
员工培训管理系统方案.docx_第1页
第1页 / 共42页
员工培训管理系统方案.docx_第2页
第2页 / 共42页
员工培训管理系统方案.docx_第3页
第3页 / 共42页
员工培训管理系统方案.docx_第4页
第4页 / 共42页
员工培训管理系统方案.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

员工培训管理系统方案.docx

《员工培训管理系统方案.docx》由会员分享,可在线阅读,更多相关《员工培训管理系统方案.docx(42页珍藏版)》请在冰豆网上搜索。

员工培训管理系统方案.docx

员工培训管理系统方案

科技大学计算机科学与工程学院

 

数据库课程设计报告

二○○九级计三班

 

学号:

09050103XX

姓名:

贺双凤

指导老师:

毅志

时间:

2012.02.20—2012.03.02

1系统需求分析

1.1系统功能分析

员工培训系统需要实现的主要功能包括:

●企业总体培训课程的设置和安排。

●允许员工根据自己的情况选择合适的课程和上课时间。

●对选课结果进行统计报表。

允许员工对最后选课结果的查询。

●培训考核成绩的输入和查询。

●员工培训效果的综合报表。

●员工个人信息的修改。

图1、员工培训管理系统功能模块图

1.2系统功能模块设计(划分)

本系统涉及到员工和培训管理部门之间的交流,因此需要根据用户的不同分成两大功能模块。

这两个模块的功能和使用的权限完全不同。

本系统功能模块如图1所示。

1.3与其它系统的关系

图2、培训管理数据流程图

员工培训系统可以为员工素质技能的评价提供可靠的依据,是职务评定的一个参考信息源。

系统本身需要用到人事管理系统中的员工基本信息和部门信息等辅助资料,这些数据可以通过数据库直接读取。

1.4数据流程图

员工培训管理系统的数据流程如图2所示。

2数据库设计

2.1数据库需求分析

根据系统数据流程图,我们可以列出以下系统所需的数据项和数据结构:

●课程设置:

编号、名称、简介、所用教材、上课地点、人数、上课时间

●选课结果:

记录编号、员工、课程、考核成绩、评价、考核日期。

所需的外部数据支持:

●人员信息:

员工号、密码、权限、、部门、当前状态等。

●部门设置:

部门编号、名称等。

2.2数据库概念结构设计

图3是本系统所需数据的E-R模型图。

图3、培训管理E-R图

2.3数据库逻辑结构设计

根据E-R图和数据库需求分析,培训管理系统需要创建2个主要的数据表:

课程设置表和培训安排表。

对应这两个表中的个别代码字段,又需要创建2个代码表:

课程状态代码表和考核评价代码表。

这4个数据表的结构如表1至表4所示。

员工信息和部门信息作为外部数据支持可以使用人事管理系统中建立的数据表,如表5和表6所示。

表1course课程设置表

字段名

数据类型

是否可空

说明

csid

课程编号

name

课程名

teacher

任课教师(外部关键字person)

intro

课程简介

book

所用教材

classroom

上课地点

number

课程上限人数

classtime

开课时间

state

状态(外部关键字course_state)

exam_date

表2training_plan培训安排表

字段名

数据类型

是否可空

说明

tpid

编号

person

员工(外部关键字person)

course

课程

score

成绩

appraisement

评价(外部关键字appraisement)

表3course_state课程状态代码表

字段名

数据类型

是否可空

说明

cscode

状态代码

description

描述

表4apprisement考核评价代码表

字段名

数据类型

是否可空

说明

code

评价代码

description

描述

表5person员工个人信息表

字段名

数据类型

是否可空

说明

id

员工号(主关键字)

passwd

密码

authority

用户权限

name

sex

性别

birthday

生日

department

所在部门

job

职务

edu_level

受教育程度

speciaty

专业技能

address

家庭住址

tel

联系

email

电子信箱

state

当前状态(T-员工,F-非员工)

remark

备注

表6department部门信息表

字段名

数据类型

是否可空

说明

depid

部门编号

name

部门名称

manager

部门经理

intro

简介

2.4数据库的建立

2.4.1数据库的建立

2.4.2初始数据的输入

本系统中,初始数据包括课程状态代码和评价代码,如表7至表8所示。

表7课程状态代码

代码

说明

0

选课中

1

进行中

2

已结束

表8考核评价代码

代码

说明

0

未考核

1

不及格

2

及格

3

良好

4

优秀

(以下各部分请设计者完成)。

3各功能模块的设计与实现

3.1功能说明

本管理系统主要分为两大部分:

培训管理应用程序和学员选课应用程序。

培训管理应用程序主要用于培训中心的管理人员对培训课程和培训情况进行维护。

此应用程序主要包括四项功能:

课程设置、选课结果查询修改、成绩输入、培训成绩统计报表。

另外,系统需要有登录窗口(用于权限认证)和导航窗口(用于连接各项功能)。

学员选课应用程序包括个人信息修改、选课和成绩查询三项功能。

(一)培训管理管理应用程序功能说明

(二)学员选课应用程序功能说明

3.2用户界面设计

完成数据库创建和功能说明以后,我们可以进行下一步工作,既设计用户界面。

1、培训管理应用程序登录窗体的创建

2、培训管理应用程序主窗体的创建

3、课程设置窗体的创建

4、选课结果查询窗体的创建

5、学员报表窗体的创建

6、考核评定结果窗体的创建

7、培训统计窗体的创建

8、培训成绩报表窗体的创建

9、学员选课客户端界面的创建

3.3各功能模块的实现

1、培训管理应用程序数据模块的创建

2、培训管理应用程序登录程序的实现

3、课程设置模块的实现

4、选课结果查询的实现

5、学员报表的实现

6、考核评定结果的实现

7、培训统计的实现

8、培训成绩报表的实现

9、学员选课客户端应用程序的创建

4系统实现

本实验由三个人共同完成,我负责“选择培训课程模块”和“课程设置模块”。

阮柳春同学负责“登陆模块”、“用户信息修改模块”、和“培训成绩管理模块”。

王相同学负责“考核成绩查询模块”和“选课结果管理模块”

4.1选课培训课程模块

4.1.1具体功能分析

1)能查询课程表

2)能选择课程

3)能删除选择的课程

4.1.2实现方法

通过两个ado控件与数据库进行连接,两个datagrid控件分别显示课程表和登陆用户已选择的课程。

3个button按钮对应查询课程表、选择课程和删除课程。

4.1.2遇到的主要问题及相关解决方法

1)因为在数据库中建立course表的时候用的是英文,故在查询的时候表显示的也是英文,这给用户带来了极大的不便,使系统的友好性降低,为了解决这个问题,我使用了sql重命名语句,对用户已选择的课程表,使用了语句:

select课程号=training_plan.cid,成绩=score,考核评价=apprisement.descriptionfromtraining_plan,apprisementwheretraining_plan.personid='"+personid+"'andapprisement.appcode=training_plan.appcode;在course表中使用了语句:

select课程号=cid,课程名=cname,老师编号=personid,课程简介=intro,所用教材=book,上课地点=classroom,课程上限人数=number,开课时间=classtime,状态=cscode,考试时间=exam_date;这个问题同样在选择查询字段的时候也出现了,combo控件备选查询字段要用到中文,而数据库中的字段名是英文,所以要进行中英文的转换。

刚开始用switch语句,由于switch语句不支持csting型,改用if……else…语句。

2)选课函数的编码要考虑多种情况。

第一,如果登录用户已选择这门课,则不能再选。

第二,课程已经开始或结束则不能选。

第三,该课上限人数已到,则选课失败。

3)退选课程函数要考虑课程是否已经开始或结束,如果已经开始或结束,则不能退选。

4.1.3本模块的部分界面截图

4.2设置课程模块

4.2.1具体功能分析

1)能查询课程表

2)能删除某门课程

3)能更新某门课程

4)能添加某门课程

4.2.3实现方法

通过一个ado控件与数据库进行连接,一个datagrid控件显示课程表信息。

10个edit控件对应课程表的10个字段。

4个button按钮对应“查询”、“更新”、“删除”和“添加”。

在测试的时候,老师给我提出了有用的建议,要我增加一个“清零”按钮,故在后来增加了一个“清零”按钮。

4.2.4遇到的主要问题及相关解决方法

1)在写查询函数的时候,发现这次与以前要实现的功能有所差异。

以前都是对单个字段进行查询,很容易编码。

现在要对单个或多个字段进行查询,比如要查询同时满足上课地点为10,课程号为1,老师编号为5的单元组,这样实现起来就难度加大了。

因为查询的字段具有不可预知性。

为了解决这个问题,我引入了一个标记变量ok,成功解决了这个问题。

值得一提的是当查询字段全部为空的时候,点击“查询”按钮,课程表应该显示全部的课程信息。

不然的话,只能在初次进入该模块时,能看到全部课程信息。

当完成某个操作的时候,就无法看到全部课程的信息了。

在测试的时候,老师建议我对某些字段(如课程名)加入模糊查询功能,我觉得这个建议非常好,很方便,实现起来也不是很复杂,引入通配符*即可。

2)更新一定要通过课程编号,不然无法得到要更新的元组,如果没有输入课程编号,应该给出错误提示。

课程表的状态字段,只能是0.,1,2三个数字中的一个,如果不是,要给出错误提示。

(其实这里通过combo控件实现起来更方便)

3)刚开始写删除函数的时候,只考虑到了不存在该课程时,不能删除,给出提示。

后来发现了一个很隐蔽的问题,就是如果有学生选了这门课,则不能随便删除。

如一定要删除,必须先对培训计划表training_plan表进行处理。

4)添加函数要考虑几个问题。

第一,检测该课程是否已在course表存在,如存在,则不能添加。

第二,检测输入的任课老师是否存在,如果在person表中没有该任课老师,则给出错误提示。

第三,状态字段的容是否是0,1,2三个数字中的一个,如不是,给出错误提示。

第四,要考虑哪些字段可以为空,哪些字段不能为空,不为空的地方,如输入为空,要给出相关提示。

4.2.3本模块的部分界面截图

 

5.心得体会

第一,由于是第一次进行数据库开发,并且vc使用了MFC,且工作量不小。

所以前两天我们遇到了不少的麻烦。

基于此,我们并没有忙于进行项目开发,而是找寻相关书籍资料认真了解数据库详细开发流程,参照课程设计指导书的前两章,先做单模块的功能开发,实现“插入”,“删除”,“查询”,“添加”,并且读懂提供的代码。

从这里,我知道了一个拿到一个项目,并且是陌生的,以前没有做过类似的,一定不要急于动手,事先要做好需求分析,逻辑设计,概念设计,否则只会事倍功半。

第二,要学会团队合作。

相比以前做的课程设计,这个项目无论从难度上,还是工作量上都大很多。

故这时,团队合作就显得非常重要了。

一个人是无法在短时间完成这样一个项目的。

在分工的时候,一定要明确各自的任务,定义好相关的接口。

第三,要对工程文件及时进行正确清楚有层次的备份,最好是每次修复的bug,都有相关的日志文件进行记录。

由于没有大型项目开发的经验,我们虽然对工程文件进行了备份,但是没有层次,工程命名也没有按项目开发的进度命名,没有日志文件,加上分工合作,常常是这个bug在这个工程进行了修复,另一个bug在竟然是在令一个版本进行修复。

搞得很乱。

开发前期,我们在这点上吃了不少苦果。

幸好及时意识到了错误,果断进行了改正。

以后,进公司了,项目会大很多,动则几十万行代码,从事开发的团队成员也很多,这时候,对工程文件进行正确清楚有层次的备份,对bug修复进行记录就变得很重要了。

6.源代码

由于整个项目的源代码比较多,所以在此只附上我写的两个模块的源代码。

6.1选课模块源代码

//DailogForSelectCourse.cpp:

implementationfile

#include"stdafx.h"

#include"员工培训管理系统.h"

#include"DailogForSelectCourse.h"

#include"DailogFor_Confirm_sel_course.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

//DailogForSelectCoursedialog

 

DailogForSelectCourse:

:

DailogForSelectCourse(CString_peronid,CStringLink,CWnd*pParent

/*=NULL*/)

:

CDialog(DailogForSelectCourse:

:

IDD,pParent)

{

personid=_peronid;

LinkSql=Link;

//{{AFX_DATA_INIT(DailogForSelectCourse)

m_Edit1_FieldValue=_T("");

m_Edit2_cidValue=_T("");

m_Edit3_cidValue=_T("");

//}}AFX_DATA_INIT

}

//voidDailogForSelectCourse:

:

OnInitDialog()

//{

//m_combo1_FieldName.AddString(cid);

//m_combo1_FieldName.AddString(cname);

//m_combo1_FieldName.AddString(personid);

//m_combo1_FieldName.AddString(intro);

//m_combo1_FieldName.AddString(book);

//m_combo1_FieldName.AddString(classroom);

//m_combo1_FieldName.AddString(number);

//m_combo1_FieldName.AddString(classtime);

//m_combo1_FieldName.AddString(cscode);

//}

voidDailogForSelectCourse:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

//{{AFX_DATA_MAP(DailogForSelectCourse)

DDX_Control(pDX,IDC_COMBO1,m_combo1_FieldName);

DDX_Text(pDX,IDC_EDIT1,m_Edit1_FieldValue);

DDX_Control(pDX,IDC_ADODC1,m_Adodc1);

DDX_Text(pDX,IDC_EDIT2,m_Edit2_cidValue);

DDX_Text(pDX,IDC_EDIT3,m_Edit3_cidValue);

DDX_Control(pDX,IDC_ADODC2,m_Adodc2);

//}}AFX_DATA_MAP

}

 

BEGIN_MESSAGE_MAP(DailogForSelectCourse,CDialog)

//{{AFX_MSG_MAP(DailogForSelectCourse)

ON_BN_CLICKED(IDC_OK,OnOk)

ON_BN_CLICKED(IDC_BUTTON1,OnButton1)

ON_CBN_KILLFOCUS(IDC_COMBO1,OnKillfocusCombo1)

ON_BN_CLICKED(IDC_BUTTON2,OnButton2)

ON_BN_CLICKED(IDC_BUTTON3,OnButtonDEL)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

//DailogForSelectCoursemessagehandlers

voidDailogForSelectCourse:

:

OnOk()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

}

voidDailogForSelectCourse:

:

OnButton1()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

UpdateData(TRUE);

CStringtmpStr1,tmpStr2,strSQL="select课程号=cid,课程名=cname,老师编号

=personid,课程简介=intro,所用教材=book,上课地点=classroom,课程上限人数=number,开课时间

=classtime,状态=cscode,考试时间=exam_datefromcourseWHERE";

m_combo1_FieldName.GetWindowText(tmpStr1);

if(tmpStr1=="课程号")

tmpStr2="cid";

else

if(tmpStr1=="课程名")

tmpStr2="cname";

else

if(tmpStr1=="任课老师")

tmpStr2="personid";

else

if(tmpStr1=="课程简介")

tmpStr2="intro";

else

if(tmpStr1=="所用教材")

tmpStr2="book";

else

if(tmpStr1=="上课地点")

tmpStr2="classroom";

else

if(tmpStr1=="课程上限人数")

tmpStr2="number";

else

if(tmpStr1=="开课时间")

tmpStr2="classtime";

else

if(tmpStr1=="状态")

tmpStr2="cscode";

else

if(tmpStr1=="考核日

期")

tmpStr2="exam_date";

else

if

(tmpStr1=="")

{

strSQL="select课程号=cid,课程名=cname,老师编号=personid,课程简介=intro,所用教材=book,上

课地点=classroom,课程上限人数=number,开课时间=classtime,状态=cscode,考试时间=exam_datefrom

course";

m_Adodc1.SetRecordSource(strSQL);

m_Adodc1.Refresh();

UpdateData(FALSE);

return;

}

else

{

AfxMessageBox("查询字段有误,请确认");

return;

}

strSQL+=tmpStr2+"=";

strSQL+="'"+m_Edit1_FieldValue+"'";

m_Adodc1.SetRecordSource(strSQL);

m_Adodc1.Refresh();

UpdateData(FALSE);

}

voidDailogForSelectCourse:

:

OnKillfocusCombo1()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

//m_combo1_FieldName.AddString("cid");

//m_combo1_FieldName.AddString("cname");

//m_combo1_FieldName.AddString("intro");

//m_combo1_FieldName.AddString("book");

//m_combo1_FieldName.AddString("classroom");

//m_combo1_FieldName.AddString("number");

//m_combo1_FieldName.AddString("classtime");

//m_combo1_FieldName.AddString("state");

}

voidDailogForSelectCourse:

:

OnButton2()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

//DailogFor_Confirm_sel_course*dlg=newDailogFor_Confirm_sel_course

(personid,m_Edit2_cidValue);

//dlg->DoModal();

if(:

:

MessageBox(NULL,"确定选这门课吗?

","提示",MB_OKCANCEL)==IDOK){

//AfxMessageBox("MBOK");

UpdateD

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1