1、l 人员信息:员工号、密码、权限、姓名、部门、当前状态等。l 部门设置:部门编号、名称等。2.2数据库概念结构设计图3是本系统所需数据的E-R模型图。图3、培训管理E-R图2.3数据库逻辑结构设计根据E-R图和数据库需求分析,培训管理系统需要创建2个主要的数据表:课程设置表和培训安排表。对应这两个表中的个别代码字段,又需要创建2个代码表:课程状态代码表和考核评价代码表。这4个数据表的结构如表1至表4所示。员工信息和部门信息作为外部数据支持可以使用人事管理系统中建立的数据表,如表5和表6所示。表1 COURSE 课程设置表字段名数据类型是否可空说明ID课程编号NAME课程名TEACHER任课教师
2、(外部关键字PERSON)INTRO课程简介BOOK所用教材CLASSROOM上课地点NUMBER课程上限人数CLASSTIME开课时间STATE状态(外部关键字COURSE_STATE)表2 TRAINING_PLAN培训安排表编号PERSON员工(外部关键字PERSON)COURSE课程SCORE成绩APPRAISEMENT评价(外部关键字APPRAISEMENT)EXAM_DATA考核日期表3 COURSE_STATE课程状态代码表CODE状态代码DESCRIPTION描述表4 APPRISEMENT考核评价代码表评价代码表5 PERSON员工个人信息表员工号(主关键字)PASSWD密码
3、AUTHORITY用户权限姓名SEX性别BIRTHDAY生日DEPARTMENT所在部门JOB职务EDU_LEBEL受教育程度SPECIATY专业技能ADDRESS家庭住址TEL联系电话EMAIL电子信箱当前状态(T-员工,F-非员工)REMARK备注表6 DEPARTMENT部门信息表部门编号部门名称MANAGER部门经理简介2.4数据库的建立2.4.1数据库的建立2.4.2初始数据的输入本系统中,初始数据包括课程状态代码和评价代码,如表7至表8所示。表7 课程状态代码代码选课中1进行中2已结束表8 考核评价代码未考核不及格及格3良好4优秀(以下各部分请设计者完成)。3 各功能模块的设计与实
4、现3.1功能说明本管理系统主要分为两大部分:培训管理应用程序和学员选课应用程序。培训管理应用程序主要用于培训中心的管理人员对培训课程和培训情况进行维护。此应用程序主要包括四项功能:课程设置、选课结果查询修改、成绩输入、培训成绩统计报表。另外,系统需要有登录窗口(用于权限认证)和导航窗口(用于连接各项功能)。学员选课应用程序包括个人信息修改、选课和成绩查询三项功能。(一)培训管理管理应用程序功能说明(二)学员选课应用程序功能说明3.2用户界面设计完成数据库创建和功能说明以后,我们可以进行下一步工作,既设计用户界面。1、培训管理应用程序登录窗体的创建2、培训管理应用程序主窗体的创建3、课程设置窗体
5、的创建4、选课结果查询窗体的创建5、学员名单报表窗体的创建6、考核评定结果窗体的创建7、培训统计窗体的创建8、培训成绩报表窗体的创建9、学员选课客户端界面的创建3.3各功能模块的实现1、培训管理应用程序数据模块的创建2、培训管理应用程序登录程序的实现3、课程设置模块的实现4、选课结果查询的实现5、学员名单报表的实现6、考核评定结果的实现7、培训统计的实现8、培训成绩报表的实现9、学员选课客户端应用程序的创建4 系统实现基本方法:通过一个ado控件与数据库进行连接,一个datagrid控件显示表信息。1 edit控件对应表的字段。button按钮对应“查询”、“更新”、“删除”和“添加”。4.1
6、登陆界面:/登陆按钮功能/*1.首先连接数据库2.通过sql语句获得PERSON表的信息,得到与输入账号名相对应的账号密码(sql.Format(select * from person where P_ID = %s and P_PASSWD = ,this-m_id,this-m_password);)3.判断输入的密码与从数据库中得到的密码是否相一致4. 得到与输入账号名相对应的账号权限5.判断用户的身份,选择进入不同的功能界面*/void CEmploymentDlg:OnButton1() this-UpdateData(true);/连接数据库UpdateData(TRUE);_C
7、onnectionPtr m_pConnection;:CoInitialize(NULL);trym_pConnection.CreateInstance(ADODB.Connection);_bstr_t strConn=Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Employee training management system;Data Source=520-002;m_pConnection-Open(strConn,adModeUnknown);
8、catch(_com_error e):CoUninitialize();AfxMessageBox(e.ErrorMessage();return ;/定义sql查询CString sql;variant_t RecordsAffected; _RecordsetPtr m_pRecordset; sql.Format(/执行SQL查询m_pRecordset = m_pConnection-Execute(_bstr_t)sql,&RecordsAffected,adCmdText);/如果找到if(!m_pRecordset-adoEOF) RecordsAffected=m_pReco
9、rdset-GetCollect(p_authorityCString authority=(LPCSTR)_bstr_t(RecordsAffected);/int i=(int)RecordsAffected.iVal;if(authority=employee)this-ShowWindow(SW_HIDE);id=this-m_id;employer dlg;dlg.DoModal();ShowWindow(SW_SHOW);else teacher dlg;else MessageBox(用户名或密码有误/退出按钮功能,直接调用exit(0)退出整个程序OnButton2() exi
10、t(0);1.这个界面主要是有三个按钮,用来选择进入不同的功能区void employer:this-/当前界面隐藏employer_chioce dlg; /需要添加该C*Dlg.h头文件,否则编译通不过dlg.DoModal();employer_score dlg;OnButton3() employer_information dlg;OnButton4() exit(0);点击显示个人课程,会显示出个人课程这部份功能主要有:1.查找2.增加3.删除 */增加选择课程1.连接数据库2.定义sql1,sql2用于获得信息,和添加课程select * from course where C
11、_ID = m_add_id);sql2.Format(SELECT C_NAME,COUNT(C_ID) as num FROM TRAINING_PLAN,PERSON,COURSE WHERE P_ID=T_PERSON and C_ID=T_COURSE GROUP BY C_NAME3.差错控制选课人数与选课上限人数4.其余的功能和增加功能只是sql语句的差别,就不详细描述了void employer_chioce:try_bstr_tstrConn = return;CString sql,sql2;variant_t RecordsAffected,RecordsAffected
12、2;_RecordsetPtr m_pRecordset,m_pRecordset2;m_pRecordset2 = m_pConnection-Execute(_bstr_t)sql2,&RecordsAffected2,adCmdText);RecordsAffected=m_pRecordset-C_NUMBERCString number=(LPCSTR)_bstr_t(RecordsAffected);RecordsAffected2=m_pRecordset2-numCString num=(LPCSTR)_bstr_t(RecordsAffected2);if(numExecut
13、e(strAdd,&ra,adCmdText);Close();/以下显示当前数据CString strSQL=SELECT P_NAME,C_ID,C_NAME,C_TEACHER,C_CLASSROOM,C_CLASSTIME,C_STATE,T_EXAM_DATE FROM TRAINING_PLAN,PERSON,COURSE,APPRISEMENT WHERE P_ID=T_PERSON AND C_ID=T_COURSE AND A_CODE=T_APPRISEMENT and T_PERSON= +id;m_adodc2.SetRecordSource(strSQL);m_ado
14、dc2.Refresh();m_datagrid2.ShowWindow(SW_SHOW);AfxMessageBox(选课成功UpdateData(FALSE);else AfxMessageBox(选课失败,选课人数已达到上限!/显示个人选择课程/ TODO: Add your control notification handler code hereCString tmpStr,strSQL=/删除选择课程/以下插入数据_variant_t ra;delete from training_plan where t_person =+id+ and t_course = +m_delet
15、e_id+/AfxMessageBox(strAdd); return;删除课程成功/查找课程IDOnButton5() CString str=select * from course where c_name like %+m_name+%m_adodc1.SetRecordSource(str);m_adodc1.Refresh();OnButton6() OnButton7() employer dlg;void employer_information:UpdateData(TRUE);SELECT * from PERSON where P_ID= m_adodc1.SetRecordSource(strSQL);m_datagrid1.ShowWindow(SW_SHOW);MessageBox(更新个人信息成功!UPDATE PERSON SET strAdd=strAdd+ p_passwd = +m_passwd+ P_NAME = p_sex =