欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    课程设计报告(员工培训管理系统).docx

    • 资源ID:1928200       资源大小:183.05KB        全文页数:51页
    • 资源格式: DOCX        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    课程设计报告(员工培训管理系统).docx

    湖南科技大学计算机科学与工程学院数据库课程设计报告二九级计三班学 号:09050103XX姓 名:贺 双 凤指导老师:刘 毅 志时 间:2012.02.202012.03.021 系统需求分析1.1系统功能分析员工培训系统需要实现的主要功能包括:l 企业总体培训课程的设置和安排。l 允许员工根据自己的情况选择合适的课程和上课时间。l 对选课结果进行统计报表。允许员工对最后选课结果的查询。l 培训考核成绩的输入和查询。l 员工培训效果的综合报表。l 员工个人信息的修改。图1、员工培训管理系统功能模块图1.2系统功能模块设计(划分)本系统涉及到员工和培训管理部门之间的交流,因此需要根据用户的不同分成两大功能模块。这两个模块的功能和使用的权限完全不同。本系统功能模块如图1所示。1.3与其它系统的关系图2、培训管理数据流程图员工培训系统可以为员工素质技能的评价提供可靠的依据,是职务评定的一个参考信息源。系统本身需要用到人事管理系统中的员工基本信息和部门信息等辅助资料,这些数据可以通过数据库直接读取。1.4数据流程图员工培训管理系统的数据流程如图2所示。2 数据库设计2.1数据库需求分析根据系统数据流程图,我们可以列出以下系统所需的数据项和数据结构:l 课程设置:编号、名称、简介、所用教材、上课地点、人数、上课时间l 选课结果:记录编号、员工、课程、考核成绩、评价、考核日期。所需的外部数据支持:l 人员信息:员工号、密码、权限、姓名、部门、当前状态等。l 部门设置:部门编号、名称等。2.2数据库概念结构设计图3是本系统所需数据的E-R模型图。图3、培训管理E-R图2.3数据库逻辑结构设计根据E-R图和数据库需求分析,培训管理系统需要创建2个主要的数据表:课程设置表和培训安排表。对应这两个表中的个别代码字段,又需要创建2个代码表:课程状态代码表和考核评价代码表。这4个数据表的结构如表1至表4所示。员工信息和部门信息作为外部数据支持可以使用人事管理系统中建立的数据表,如表5和表6所示。表1 course课程设置表字段名数据类型是否可空说明csid课程编号name课程名teacher任课教师(外部关键字person)intro课程简介book所用教材classroom上课地点number课程上限人数classtime开课时间state状态(外部关键字course_state)exam_date表2 training_plan培训安排表字段名数据类型是否可空说明tpid编号person员工(外部关键字person)course课程score成绩appraisement评价(外部关键字appraisement)表3 course_state课程状态代码表字段名数据类型是否可空说明cscode状态代码description描述表4 apprisement考核评价代码表字段名数据类型是否可空说明code评价代码description描述表5 person员工个人信息表字段名数据类型是否可空说明id员工号(主关键字)passwd密码authority用户权限name姓名sex性别birthday生日department所在部门job职务edu_level受教育程度speciaty专业技能address家庭住址tel联系电话email电子信箱state当前状态(T-员工,F-非员工)remark备注表6 department部门信息表字段名数据类型是否可空说明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.description from training_plan,apprisement where training_plan.personid='"+personid+"'and apprisement.appcode=training_plan.appcode;在course表中使用了语句:select 课程号=cid,课程名=cname,老师编号=personid,课程简介=intro,所用教材=book,上课地点=classroom,课程上限人数=number,开课时间=classtime,状态=cscode,考试时间=exam_date;这个问题同样在选择查询字段的时候也出现了,combo控件备选查询字段要用到中文,而数据库中的字段名是英文,所以要进行中英文的转换。刚开始用switch语句,由于switch语句不支持csting型,改用ifelse语句。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 : implementation file#include "stdafx.h"#include "员工培训管理系统.h"#include "DailogForSelectCourse.h"#include "DailogFor_Confirm_sel_course.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ DailogForSelectCourse dialogDailogForSelectCourse:DailogForSelectCourse(CString _peronid,CString Link,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/ void DailogForSelectCourse: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);/ void DailogForSelectCourse: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_MAPBEGIN_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_MAPEND_MESSAGE_MAP()/ DailogForSelectCourse message handlersvoid DailogForSelectCourse:OnOk() / TODO: Add your control notification handler code herevoid DailogForSelectCourse:OnButton1() / TODO: Add your control notification handler code hereUpdateData(TRUE);CString tmpStr1, tmpStr2,strSQL = "select 课程号=cid,课程名=cname,老师编号=personid,课程简介=intro,所用教材=book,上课地点=classroom,课程上限人数=number,开课时间=classtime,状态=cscode,考试时间=exam_date from course WHERE " m_combo1_FieldName.GetWindowText(tmpStr1);if(tmpStr1="课程号")tmpStr2="cid"elseif (tmpStr1="课程名") tmpStr2="cname"elseif(tmpStr1="任课老师")tmpStr2="personid"elseif(tmpStr1="课程简介")tmpStr2="intro"elseif(tmpStr1="所用教材")tmpStr2="book"elseif(tmpStr1="上课地点")tmpStr2="classroom"elseif(tmpStr1="课程上限人数")tmpStr2="number"elseif(tmpStr1="开课时间")tmpStr2="classtime"elseif(tmpStr1="状态")tmpStr2="cscode"elseif(tmpStr1="考核日期")tmpStr2="exam_date"elseif(tmpStr1="")strSQL = "select 课程号=cid,课程名=cname,老师编号=personid,课程简介=intro,所用教材=book,上课地点=classroom,课程上限人数=number,开课时间=classtime,状态=cscode,考试时间=exam_date from course"m_Adodc1.SetRecordSource(strSQL); m_Adodc1.Refresh();UpdateData(FALSE);return;elseAfxMessageBox("查询字段有误,请确认");return ; strSQL += tmpStr2+" = "strSQL += "'"+m_Edit1_FieldValue+"'" m_Adodc1.SetRecordSource(strSQL); m_Adodc1.Refresh();UpdateData(FALSE);void DailogForSelectCourse:OnKillfocusCombo1() / TODO: Add your control notification handler code here/ 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");void DailogForSelectCourse:OnButton2() / TODO: Add your control notification handler code here/ DailogFor_Confirm_sel_course* dlg = new DailogFor_Confirm_sel_course(personid,m_Edit2_cidValue);/ dlg->DoModal();if( :MessageBox(NULL,"确定选这门课吗?","提示",MB_OKCANCEL)=IDOK )/AfxMessageBox("MBOK");UpdateData(TRUE);_ConnectionPtr m_pConnection;:CoInitialize(NULL);/在ADO操作中建议语句中要常用trycatch()来捕获错误信息/因为它有时会经常出现一些想不到的错误try m_pConnection.CreateInstance("ADODB.Connection");_bstr_t strConn=LinkSql.AllocSysString();m_pConnection->Open(strConn,"","",adModeUnknown); /if(m_pConnection->State = adStateOpen) MessageBox("成功连接数据库");catch (_com_error e):CoUninitialize();AfxMessageBox(e.ErrorMessage();return;int cnt=0,sum;_RecordsetPtr m_pRecordset;CString str;str = "SELECT * FROM training_plan"_variant_t pcid,ppersonid,authority,cscode;m_pRecordset.CreateInstance("ADODB.Recordset");int OK=0;m_pRecordset = m_pConnection->Execute(str.AllocSysString(),NULL,adCmdText);UpdateData(TRUE);CString pa;while( !m_pRecordset->adoEOF )pcid = m_pRecordset->GetCollect("cid");ppersonid = m_pRecordset->GetCollect("personid");CString tmp1 = (LPCSTR)(_bstr_t)pcid;CString tmp2 = (LPCSTR)(_bstr_t)ppersonid;if( strcmp(m_Edit2_cidValue,tmp1)=0&&strcmp(tmp2,personid)=0 )OK=1;break;/AfxMessageBox(m_Edit2_cidValue+" "+tmp1+" "+tmp2+" "+personid);if( strcmp(m_Edit2_cidValue,tmp1)=0 ) cnt+;m_pRecordset->MoveNext();if( OK )AfxMessageBox("已选修了该课程!");m_pRecordset->Close();m_pConnection->Close();return ;CString _cid;str = "SELECT * FROM course"m_pRecordset = m_pConnection->Execute(str.AllocSysString(),NULL,adCmdText);UpdateData(TRUE);OK=0;while( !m_pRecordset->adoEOF )_cid=str = (LPCSTR)(_bstr_t)m_pRecordset->GetCollect("cid");if(m_Edit2_cidValue=_cid)str = (LPCSTR)(_bstr_t)m_pRecordset->GetCollect("cscode");break;m_pRecordset->MoveNext();/AfxMessageBox(pa);if( str != "0" )AfxMessageBox("课程已经开始或结束,不能选课");m_pRecordset->Close();m_pConnection->Close();return ;str = "SELECT * FROM course"m_pRecordset = m_pConnection->Execute(str.AllocSysString(),NULL,adCmdText);UpdateData(TRUE);OK=0;while( !m_pRecordset->adoEOF )CString tmp2 = (LPCSTR)(_bstr_t)m_pRecordset->GetCollect("cid");CString tmp1 = (LPCSTR)(_bstr_t)pcid;if( strcmp(tmp1,tmp2)=0 )pa=(LPCSTR)(_bstr_t)m_pRecordset->GetCollect("number");OK=1;break;m_pRecordset->MoveNext();sum=atoi(pa);if( cnt>=sum )AfxMessageBox("该课已满人!");m_pRecordset->Close();m_pConnection->Close();return ;_variant_t ra; _bstr_t strAdd = "INSERT INTO training_plan VALUES('"strAdd = strAdd + personid + "','"strAdd = strAdd + m_Edit2_cidValue + "',"strAdd = strAdd + "'-1'," + "'0')"/AfxMessageBox(strAdd);m_pConnection->Execute(strAdd,&ra,adCmdText);/m_Adodc2.SetRecordSource("SELECT * FROM training_plan"); m_Adodc2.Refresh();UpdateData(FALSE);m_pRecordset->Close();m_pConnection->Close(); AfxMessageBox("成功选课");void DailogForSelectCourse:OnButtonDEL() / TODO: Add your control notification handler code hereCString tmp=personid;if( :MessageBox(NULL,"确定要删除这门课吗?","提示",MB_OKCANCEL)=IDOK )/AfxMessageBox("MBOK");UpdateData(TRUE);_ConnectionPtr m_pConnection;_RecordsetPtr m_pRecordset;:CoInitialize(NULL);/在ADO操作中建议语句中要常用trycatch()来捕获错误信息/因为它有时会经常出现一些想不到的错误try m_pConnection.CreateInstance("ADODB.Connection");_bstr_t strConn=LinkSql.AllocSysString();m_pConnection->Open(strConn,"","",adModeUnknown); /if(m_pConnection->State = adStateOpen) MessageBox("成功连接数据库");catch (_com_error e):CoUninitialize();AfxMessageBox(e.ErrorMessage();return;CString str,_cid;int ok=0;_variant_t cscode;str = "SELECT * FROM course"m_pRecordset = m_pConnection->Execute(str.AllocSysString(),NULL,adCmdText);UpdateData(TRUE);while( !m_pRecordset->adoEOF )_cid = (LPCSTR)(_bstr_t)m_pRecordset->GetCollect("cid");if(m_Edit3_cidValue=_cid)str = (LPCSTR)(_bstr_t)m_pRecordset->GetCollect("cscode");break;m_pRecordset->MoveNext();/AfxMessageBox(pa);if( str != "0" )AfxMessageBox("课程已经开始或结束,不能删除!");m_pRecordset->Close();m_pConnection->Close();return ;/以下删除数据_variant_t ra; _bstr_t strAdd = "DELETE FROM Training_plan where personid ="+tmp;strAdd = strAdd + "AND cid =" +m_Edit3_cidValue;/AfxMessageBox(strAdd);m_pConnection->Execute(strAdd,&ra,adCmdText);m_pConnection->Close(); m_Adodc2.Refresh(); UpdateData(FALSE);AfxMessageBox("成功删除");BOOL DailogForSelectCourse:OnInitDialog()CDialog:OnInitDialog();CString strAdd="select 课程号=training_plan.cid,成

    注意事项

    本文(课程设计报告(员工培训管理系统).docx)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开