数据库课程设计人事管理系统_第1页
数据库课程设计人事管理系统_第2页
数据库课程设计人事管理系统_第3页
数据库课程设计人事管理系统_第4页
数据库课程设计人事管理系统_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、人事管理系统第一章人事管理系统概述1.1人事管理系统简介1.2企业信息化发展1.3 关于人事管理系统的几个误区第二章人事管理系统分析2.1系统初步调查 2.2系统可行性分析2.3系统详细调查2.4系统的安全性第三章人事管理系统设计3.1方案设计3.2 开发工具选择3.3数据库设计 3.3.1人事管理系统的详细调查3.3.2系统逻辑模型的提出3.3.3数据字典3.4数据模块设计图第四章人事管理系统的实现4.1开发环境的选择4.2人事管理系统模块设计举例4.3人事管理系统测试4.4 系统运行与维护4.5系统的转换方案第五章开发总结 参考文献 1设计目标使用人事管理系统,便于公司领导掌握人员的动向,

2、及时调整人才的分配。本系统主要维护新员工资料;详细记录人事变动,包括岗位和部门的调整;员工信息的查询和修改,包括员工个人信息和密码等;作为公司人事管理信息系统的基础部分,它为其他子系统如考勤管理系统,工资管理系统等,提供员工的基本信息。 根据系统功能的要求,人事管理系统可以分为新员工档案的输入,人事变更,员工档案的修改和查询等模块。2 功能设计企业人事管理系统主要用于员工个人资料的录入,职务变动的记录和管理。使用人事管理系统,便于公司领导掌握人员的动向,及时调整人才的分配。本系统是公司人事管理信息系统的基础部分,它为其他子系统,如考勤管理系统,工资管理系统和员工培训系统,提供员工的基本信息。同

3、时为其他系统提供了员工登录的密码认证和权限分配功能。人事管理系统在设计时主要考虑以下几项功能要求:新员工资料的输入。人事变动的详细记录,包括岗位和部门的调整。员工信息的查询和修改,包括员工个人信息和密码等。为了更好的理解该系统和读懂该系统的源码,读者应对以下的知识点有所了解:MS SQL SERVER 2000数据库操作的基础知识。ODBC数据源基础知识。基本的SQL语句,如添加,查询,修改和删除记录语句。Visual C+界面设计和关于数据库的基础知识。3数据库设计3.1 数据库设计3.1.1 数据库需求分析根据数据流程图,可以列出以下数据项和数据结构:员工信息:员工号,密码,权限,姓名,性

4、别,生日,部门,职务,教育程度,专业,通讯地址,电话,E-mail,当前状态和其他。人事变动:记录号,员工,变动和详细描述。所需的外部数据支持。部门设置:部门编号,名称等。3.1.2 数据库概念结构设计3.1.3 数据库逻辑结构设计与实现根据系统E-R图,本系统需要有2个数据表分别来存放员工个人信息和人事变动记录。并且需要一个外部数据表(部门信息)的支持。同时部分记录字段要用代码来表示,银次需要3个代码表来分别记录教育程度,职务和人事变更的代码。最后,设立一个计数器数据表用于实现员工号的自动分配。这7个数据表用Access 2000实现,Access 2000中的设计视图如表3-13-7所示。

5、其中数据类型的细节应根据具体字段分别设置,如PERSON表的ID字段大小为6,AUTHORITY字段,SEX字段,EDU_LEVEL字段和STATE字段的大小为1,DEPARTMENT字段,JOB字段的大小为3。表3-1 员工个人信息表(PERSON)字段名称数据类型说明ID文本员工号PASSWD文本密码AUTHORITY文本用户权限NAME文本姓名SEX文本性别BIRTHDAY日期/时间生日DEPARTMENT文本所在部门JOB文本职务EDU_LEVEL文本受教育程度SPECIALTY文本专业技能ADDRESS文本家庭住址TEL文本联系电话EMAIL文本电子信箱STATE文本当前状态(T-员

6、工,F-非员工)REMARK文本备注表3-2 人事变更记录表 (PERSONNEL)字段名称数据类型说明ID数字记录编号PERSON文本员工号CHANGE文本变更代码RECORD_TIME日期/时间记录时间DESCRIPTION备注详细记录表3-3 L受教育程度代码表(EDU_LEVE)字段名称数据类型说明CODE文本代码DESCRIPTION文本描述表3-4 职务代码表(JOB)字段名称数据类型说明CODE文本代码DESCRIPTION文本描述表3-5 人事变动代码表(PERSONNEL_CHANGE)字段名称数据类型说明CODE文本代码DESCRIPTION文本描述表3-6 计数器表(CO

7、UNTER)字段名称数据类型说明ID文本计数器编号COUNTER_VALUE数字计数值DESCRIPTION文本描述表3-7 部门信息表(DEPARTMENT)字段名称数据类型说明ID文本部门编号NAME文本部门名称MANGER文本部门经理INTRO备注简介3.1.4初始数据的输入本例中需要输入的初始数据包括:部门信息,计数器,受教育程度代码,职务代人事变动代码。部门信息和职务代码可以根据需要设置。计数器和另外的两种代码的设置如表3-8表3-10所示。表3-8 计数器设置计数器编号说明P员工编号C人事变更记录编号表3-9 受教育程度代码代码说明0小学1初中2高中3职高4大本5大专6硕士7博士8

8、博士后表3-10 人事变更代码代码说明0新员工加入1职务变动2辞退3.2 系统设计3.2.1 系统功能分析人事管理系统主要有以下几项功能要求:新员工资料的输入。自动分配员工号,并且设置初始的用户密码。人事变动的详细记录,包括岗位和部门的调整。员工信息的查询和修改,包括员工个人信息和密码等。 系统功能模块设计根据系统功能的要求,可以将系统分解成几个功能模块来分别设计,功能模块如图3-2所示。人事管理系统人事管理系统新员工档案输入人事变更员工档案查询修改 图3-2 人事管理系统功能模块图 数据流程图系统的数据流程图如图3-3所示,所有数据由人事科管理人员输入。个人信息查询招聘新员工个人信息查询招聘

9、新员工员工辞退岗位调整分配员工号员工信息数据人事变动记录人事科图3-3 人事管理系统数据流程图下面是系统运行时主要界面信息。启动程序,首先出现主框架窗口。但是由于没有登录服务器,大部分菜单项都是不可用的。只有“连接”,“关于”和“退出”菜单可选。单击“连接”菜单和工具条相应按钮会弹出“登陆”窗口,如图3-4所示。登陆界面允许修改ODBC数据源名称,无需重新编译程序。 图3-4 登录对话框登录后,相关菜单会被激活。此时可以单击菜单或相应的工具条按钮来弹出相应的子框架窗口和视图。在MDI模式下,3个功能窗口可以同时被显示,如图3-5所示。图3-5 人事管理系统“增加新员工”子窗口中,员工号和密码会

10、自动按顺序生成,并且不允许修改。“人事变动”和“员工信息查询修改”子窗口中,须先输入员工号, 确认显示的信息后才可进行相关的修改。产生的3个窗体列在“窗口”菜单下。当鼠标在菜单项上移动时,状态栏中会自动显示菜单项的Prompt属性的内容。“窗口”菜单中的4项功能是标准的窗口排列功能。3.3 生成程序框架在本章中,将使用不支持文档/视图体系(Document/View architecture)的多文档界面(Multiple-Document Interface, MDI)的结构来开发数据库管理程序。MDI结构包括一个主框架窗口和若干个子框架窗口,子框架窗口可包含文档类和相关的视图,如果使用文档

11、类,MDI文档模板类CMultiDocTemplate将为文档类和视图之间提供方便的联系,可简化编程的工作量。在本实例中不使用文档类,因此没有创建文档模板类的对象,此外实例中还创建了自己的视图以实现相关功能。MDI界面可以方便地在各个子窗口之间切换。典型的MDI结构软件如Microsoft的Office系列软件。在这里,用AppWizard生成程序框架,且手工加入数据库支持。在MFC AppWizard-Step1中选择Multiple document项,并去掉Document/View architecturesupport?选项。其余均采用默认配置。这样生成的程序中包含CTestApp(

12、设应用程序名为 Test),CMainFrame,CChildFrame,CChildView和CAboutDlg五个类。由于子框架类CChildFrame中自动创建CChildView类,而此类并非所需,因此在程序中将不用CChildFrame和CChildView类,而创建自己的子框架和视图。用Class Wizard创建一个新的子框架类CTheChildFrame,基类为CMDIChildWnd,程序中将用此子框架类包含视图,因程序的功能主要在视图中实现,故无需修改默认创建的CTheChildFrame类。本程序数据库的操作是通过MFC的ODBC类实现的。为了使用ODBC类,需要在std

13、afx.h中加入#include“afxdb.h”一行。因本程序只需要连接一个数据库,所以定义了一个CDatabase型的全局变量db,一次性的打开和关闭数据库,方便程序的编写。3.4 主框架窗口设计3.4.1 菜单的创建用VisualC+6.0的菜单编辑器(Menu Editor)可以会让你方便的创建菜单。在菜单编辑器中打开的设计窗口如图3-6所示。AppWizard创建的程序默认有两个菜单:IDR_MAINFRAME为主框架窗口所用,IDR_TESTTYPE(设应用程序名为Test)为子框架窗口所用。因本例中没有用默认的子框架,所以将IDR_TESTTYPE菜单删去,同时重新编辑IDR_M

14、AINFRAME菜单,菜单属性设置如表3-11所示。图3-6 菜单编辑器窗口表3-11 菜单属性表菜单栏菜单项属性取值(说明)系统Caption&S系统连接IDID_SYSTEM_CONNECTCaption&C连接tF2Prompt连接到服务器断开连接IDID_SYSTEM_DISCONNECTCaption&D断开连接tF3Prompt断开当前连接分割线选中SEPARATOR属性退出IDID_APP_EXITCaption&X退出tCtl+QPrompt关闭整个应用程序人事管理Caption&M人事管理增加新员工IDID_MANAGE_ADDCaption&增加新员工Prompt输入新员工

15、的信息人事变动IDID_MANAGE_CHANGECaption&C人事变动Prompt记录员工的职位变动查询修改IDID_MANAGER_SEARCHCaption&S查询修改Prompt查询修改员工信息窗口Caption&W窗口重叠排列IDID_WINDOW_CASCADECaption&C重叠排列Prompt重叠排列窗口水平平铺IDID_WINDOW_TILE_HORZCaption&H水平平铺Prompt水平排列窗口垂直平铺IDID_WINDOW_TILE_VERTCaption&V垂直平铺Prompt垂直排列窗口最小化所有窗口IDID_WINDOW_MINIALLCaption&M最

16、小化所有窗口Prompt将所有窗口最小化帮助Caption&H帮助关于IDID_APP_ABOUTCaption&A关于tF1Prompt本程序的说明其中,“退出”、“重叠排序”、“水平平铺”、“垂直平铺”和“关于”菜单项用了系统的标准ID,其功能已由MFC实现,无需另外编程。3.4.2 工具条的创建用Visual C+6.0的工具条编辑器(Toolbar Editor)可以很方便的编辑工具条。本程序创建的工具条如图3-7所示,其中工具条各按钮的ID分别对应相应的菜单项,按从左到右的次序对应的菜单项ID如表3-12所示。表3-12 工具条按钮对应的菜单项ID次序ID1ID_SYSTEM_CON

17、NECT2ID_SYSTEM_DISCONNECT3ID_MANAGE_ADD4ID_MANAGER_CHANGE5ID_MANAGER_SEARCH6ID_WINDOW_CASCADE7ID_WINDOW_TILE_HORZ8ID_WINDOW_TILE_VERT9ID+APP_ABOUT3.4.3增加一个状态栏指示器在程序中加入一个状态栏指示器以显示登录状态。首先用增加一个资源ID:ID_INDICATOR_LOGIN,然后在MainFrm.cpp中找到indicators变量的定义处,添加此ID至其列表,程序如下:Static UNIT indicators=ID_SEPARATOR,

18、/status line indicatorID_INDICATOR_LOGIN, /登录状态ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,;3.4.4 程序相关代码在CmainFrame中定义如下变量。CTheChildFrame *m_pAdd,*m_pChange,*m_pSearch; /指向3个功能子框架窗口BOOL m_bLogin; /登陆状态BOOL m_bltemAdd,m_blItemChange,m_bltemSearch;/菜单项及工具单按钮是否可用为了实现菜单项于工具条按钮的开发与禁用,需要通过Class W

19、izard假日相应ID的UPDATE_COMMAND_UI处理程序如下:void CMainFrame:OnUpdateSystemConnect(CCmdUI* pCmdUI) pCmdUI-Enable(!m_bLogin); / 根据登录状态改变菜单项和工具栏相应按钮状态void CMainFrame:OnUpdateSystemDisconnect(CCmdUI* pCmdUI) pCmdUI-Enable(m_bLogin); / 根据登录状态改变菜单项和工具栏相应按钮状态void CMainFrame:OnUpdateManageAdd(CCmdUI* pCmdUI) pCmdUI

20、-Enable(m_bItemAdd); / 根据m_bItemAdd改变菜单项和工具栏相应按钮状态void CMainFrame:OnUpdateManagerSearch(CCmdUI* pCmdUI) pCmdUI-Enable(m_bItemSearch); / 根据m_bItemSearch改变菜单项和工具栏相应按钮状态void CMainFrame:OnUpdateManagerChange(CCmdUI* pCmdUI) / 根据m_bItemChange改变菜单项和工具栏相应按钮状态pCmdUI-Enable(m_bItemChange); CMainFrame类的构造函数中需

21、要初始化一些变量。CMainFrame:CMainFrame()/ TODO: add member initialization code herem_bLogin=FALSE; / 缺省未登录m_bItemAdd=FALSE; / 增加新员工功能缺省为不可用m_bItemChange=FALSE; / 人事变动功能缺省为不可用m_bItemSearch=FALSE; / 查询修改功能缺省为不可用 m_pAdd=m_pChange=m_pSearch=NULL; / 初始化为空各菜单的Command事件处理代码如下:void CMainFrame:OnSystemConnect() CLog

22、inDlg dlg;if(dlg.DoModal()=IDOK) /判断是否通过m_bLogin=TRUE; / 已登录m_bItemAdd=TRUE; / 开放增加新员工功能m_bItemChange=TRUE; / 开放人事变动功能m_bItemSearch=TRUE; / 开放查询修改功能/ 改变状态栏m_wndStatusBar.SetPaneText(1, 已登录到数据库:+dlg.m_strDSN);void CMainFrame:OnSystemDisconnect() db.Close(); / 关闭数据库/ 关闭所有子框架窗口if(m_pAdd) m_pAdd-Destroy

23、Window();if(m_pChange) m_pChange-DestroyWindow();if(m_pSearch) m_pSearch-DestroyWindow();m_bLogin=FALSE; / 未登录m_bItemAdd=FALSE; / 禁止增加新员工功能m_bItemChange=FALSE; / 禁止人事变动功能m_bItemSearch=FALSE; / 禁止查询修改功能/ 改变状态栏m_wndStatusBar.SetPaneText(1, 尚未登录数据库!请按F2登录);void CMainFrame:OnUpdateSystemConnect(CCmdUI*

24、pCmdUI) pCmdUI-Enable(!m_bLogin); / 根据登录状态改变菜单项和工具栏相应按钮状态void CMainFrame:OnUpdateSystemDisconnect(CCmdUI* pCmdUI) pCmdUI-Enable(m_bLogin); / 根据登录状态改变菜单项和工具栏相应按钮状态void CMainFrame:OnUpdateManageAdd(CCmdUI* pCmdUI) pCmdUI-Enable(m_bItemAdd); / 根据m_bItemAdd改变菜单项和工具栏相应按钮状态void CMainFrame:OnUpdateManagerS

25、earch(CCmdUI* pCmdUI) pCmdUI-Enable(m_bItemSearch); / 根据m_bItemSearch改变菜单项和工具栏相应按钮状态void CMainFrame:OnUpdateManagerChange(CCmdUI* pCmdUI) pCmdUI-Enable(m_bItemChange); / 根据m_bItemChange改变菜单项和工具栏相应按钮状态void CMainFrame:OnManageAdd() / 创建新子框架和视m_pAdd = new CTheChildFrame();CCreateContext context;context

26、.m_pNewViewClass=RUNTIME_CLASS(CAddView);if(!m_pAdd-LoadFrame(IDR_MAINFRAME,WS_OVERLAPPEDWINDOW | FWS_PREFIXTITLE ,this, &context ) return;m_pAdd-InitialUpdateFrame(NULL,TRUE);m_bItemAdd=FALSE; / 禁止增加新员工功能void CMainFrame:OnManagerChange() / 创建新子框架和视m_pChange = new CTheChildFrame();CCreateContext con

27、text;context.m_pNewViewClass=RUNTIME_CLASS(CChangeView);if(!m_pChange-LoadFrame(IDR_MAINFRAME,WS_OVERLAPPEDWINDOW | FWS_PREFIXTITLE ,this, &context ) return;m_pChange-InitialUpdateFrame(NULL,TRUE);m_bItemChange=FALSE; / 禁止人事变动功能void CMainFrame:OnManagerSearch() / 创建新子框架和视m_pSearch = new CTheChildFra

28、me();CCreateContext context;context.m_pNewViewClass=RUNTIME_CLASS(CSearchView);if(!m_pSearch-LoadFrame(IDR_MAINFRAME,WS_OVERLAPPEDWINDOW | FWS_PREFIXTITLE ,this, &context ) return;m_pSearch-InitialUpdateFrame(NULL,TRUE);m_bItemSearch=FALSE; / 禁止查询修改功能void CMainFrame:OnWindowMiniall() / 最小化所有窗口if(m_p

29、Add) m_pAdd-ShowWindow(SW_MINIMIZE);if(m_pChange) m_pChange-ShowWindow(SW_MINIMIZE);if(m_pSearch) m_pSearch-ShowWindow(SW_MINIMIZE);在程序结束时需关闭数据库,因此需处理CMAinFrame的M_DESTROY消息。void CMainFrame:OnDestroy()CMDIFrameWnd:OnDestroy();if(db.IsOpen() db.Close(); / 如数据库未关闭则关闭3.5 增加新员工视类的创建首先加入一个新的窗体资源,在Insert R

30、esource对话框中选择Dialog 的 IDD_FORMVIEW项。窗体创建后,在其上添加所需控件,最后的布局如图3-8所示。创建好资源后,为窗体加入一个由CFormView类继承的CAddView封装此窗体资源,然后用Class Wizard为所需控件加入成员变量。主要控件类型、ID和对应的成员变量及说明如表3-13所示。 图3-8 增加新员工窗体 表1-13 增加新员工窗体控件列表控件类型ID成员变量说明Edit BoxIDC_ADD_EDT_IDm_strID员工号Edit BoxIDC_ADD_EDT_PASSWODm_strPassword密码Edit BoxIDC_ADD_ED

31、T_NAMEm_strName姓名Radio ButtonIDC_ADD_RADIO_MALE无性别-男Radio ButtonIDC_ADD_RADIO_FEMALE无性别-女Edit BoxIDC_ADD_EDT_BIRTHDAYm_strBirthday生日Combo BoxIDC_ADD_CMB_DEPARTMENTm_cDepartmentm_strDepartment部门Combo BoxIDC_ADD_CMB_JOBm_cJobm_strJob职务Combo BoxIDC_ADD_CMB_EDULEVELm_cEdulevelm_strEdulevel受教育水平Edit BoxI

32、DC_ADD_EDT_SPECIALTYm_strSpecialty专业Edit BoxIDC_ADD_EDT_ADDRESSm_strAddress地址Edit BoxIDC_ADD_EDT_TELm_strTel电话Edit BoxIDC_ADD_EDT_EMALm_strEmailE-mailEdit BoxIDC_ADD_EDT_MEMOm_strMemo备注(Style选Multiline)ButtonIDC_ADD_BTN_ADD无“增加”按钮CAddView类需要用到主框架窗口类和加密类,因此需要在cpp文件开头加入以下两行:#include Crypt.h#include Ma

33、inFrm.h另外,为了使用全局数据库变量db,需要在cpp文件开头加入如下语句:Extern CDatabase db;每次增加新成员时需要先做一些初始化工作,如设置自动生成员工号和密码等,哟个ClassView加入初始化函数Init(),代码如下:void CAddView:Init()/ 清空成员变量m_strID = _T();m_strPasswd = _T();m_strName = _T();m_strBirthday = _T();m_strDepartment = _T();m_cDepartment.SetCurSel(-1);m_strJob = _T();m_cJob.

34、SetCurSel(-1);m_strEdulevel = _T();m_cEdulevel.SetCurSel(-1);m_strSpecialty = _T();m_strAddress = _T();m_strTel = _T();m_strEmail = _T();m_strMemo = _T();/ 生成员工号CString str;int counter; / 用于计数CRecordset rs(&db); / 数据集rs.Open(CRecordset:forwardOnly,select COUNTER_VALUE from COUNTER where ID=P);rs.Get

35、FieldValue(COUNTER_VALUE, str);sscanf(str, %d, &counter); / 获取计数值rs.Close();str.Format(P%05d, counter); / 产生标准格式的编号m_strID=str; / 自动产生员工号m_strPasswd=str; / 默认密码为员工号/ 设置缺省性别为男(CButton*)GetDlgItem(IDC_ADD_RADIO_MALE)-SetCheck(TRUE);UpdateData(FALSE); / 更新界面数据重载CformView的OnInitialUpdate函数如下,其中调整窗口外观,并设

36、置几个ComboBox中的值:void CAddView:OnInitialUpdate() CFormView:OnInitialUpdate();/ 使框架窗口大小与视图匹配GetParentFrame()-RecalcLayout(); ResizeParentToFit(FALSE);GetParentFrame()-SetWindowText(增加新员工); / 设置标题CRecordset rs(&db); / 数据集CString str;/ 设置部门下拉框所取的值为DEPARTMENT表中的值rs.Open(CRecordset:forwardOnly, select NAME

37、 from DEPARTMENT);while(!rs.IsEOF()rs.GetFieldValue(NAME, str);m_cDepartment.AddString(str);rs.MoveNext();rs.Close();/ 设置职务下拉框所取的值为JOB表中的值rs.Open(CRecordset:forwardOnly, select DESCRIPTION from JOB);while(!rs.IsEOF()rs.GetFieldValue(DESCRIPTION, str);m_cJob.AddString(str);rs.MoveNext();rs.Close();/

38、设置受教育水平下拉框所取的值为EDU_LEVEL表中的值rs.Open(CRecordset:forwardOnly, select DESCRIPTION from EDU_LEVEL);while(!rs.IsEOF()rs.GetFieldValue(DESCRIPTION, str);m_cEdulevel.AddString(str);rs.MoveNext();rs.Close();Init(); / 调用初始化函数“增加”按钮的COMMAND消息处理如下,其中完成的记录的添加。void CAddView:OnAddBtnAdd() CString str,strSQL;int c

39、ounter; / 用于计数CRecordset rs(&db); / 数据集UpdateData(); / 更新数据if(m_strName.IsEmpty() / 姓名为空则返回AfxMessageBox(姓名不能为空!);return;/ 累加员工编号计数器rs.Open(CRecordset:forwardOnly,select COUNTER_VALUE from COUNTER where ID=P);rs.GetFieldValue(COUNTER_VALUE, str);sscanf(str, %d, &counter); / 获取计数值rs.Close(); / 关闭数据集c

40、ounter+;/ 计数值加1str.Format(%d, counter); / 转换为字符串strSQL=update COUNTER set COUNTER_VALUE= + str + where ID=P; / 设置SQL语句db.ExecuteSQL(strSQL); / 执行/ 增加员工个人信息记录CString strPasswd,strSex,strDepID,strJobID,strEduID;/ 判断生日是否为空if(m_strBirthday.IsEmpty() m_strBirthday=1900-1-1; / 缺省值/ 加密密码strPasswd=CCrypt:En

41、crypt(m_strPasswd, 123);/ 判断性别if(CButton*)GetDlgItem(IDC_ADD_RADIO_MALE)-GetCheck() strSex=M;else strSex=F;/ 得到部门IDrs.Open(CRecordset:forwardOnly,select ID from DEPARTMENT where NAME= + m_strDepartment +);rs.GetFieldValue(ID, strDepID);rs.Close();/ 得到职务代码rs.Open(CRecordset:forwardOnly,select CODE fr

42、om JOB where DESCRIPTION= + m_strJob +);rs.GetFieldValue(CODE, strJobID);rs.Close();/ 得到受教育水平代码rs.Open(CRecordset:forwardOnly,select CODE from EDU_LEVEL where DESCRIPTION= + m_strEdulevel +);rs.GetFieldValue(CODE, strEduID);rs.Close();/ 写SQL语句strSQL=insert into PERSON(ID,PASSWD,NAME,SEX,BIRTHDAY,DEP

43、ARTMENT,JOB,EDU_LEVEL,SPECIALTY,ADDRESS,TEL,EMAIL,REMARK) values(+ m_strID + , / ID+ strPasswd + , / PASSWD+ m_strName + , / NAME+ strSex + , / SEX+ m_strBirthday + , / BIRTHDAY+ strDepID + , / DEPARTMENT+ strJobID + , / JOB+ strEduID + , / EDU_LEVEL+ m_strSpecialty + , / SPECIALTY+ m_strAddress + ,

44、 / ADDRESS+ m_strTel + , / TEL+ m_strEmail + , / EMAIL+ m_strMemo + ); / REMARKdb.ExecuteSQL(strSQL); / 执行/ 获取人事变动记录号并累加rs.Open(CRecordset:forwardOnly,select COUNTER_VALUE from COUNTER where ID=C);rs.GetFieldValue(COUNTER_VALUE, str);sscanf(str, %d, &counter); / 获取计数值rs.Close(); / 关闭数据集counter+;/计数值

45、加1str.Format(%d, counter); / 转换为字符串strSQL=update COUNTER set COUNTER_VALUE= + str + where ID=C; / 设置SQL语句db.ExecuteSQL(strSQL); / 执行/ 追加人事变动记录str.Format(%d,counter); / 计数值转换为字符串CTime time=CTime:GetCurrentTime();CString strNow=time.Format(%Y-%m-%d %H:%M:%S);/ 写SQL语句strSQL=insert into PERSONNEL(ID,PER

46、SON,CHANGE,RECORD_TIME,DESCRIPTION)values(+ str + , / ID+ m_strID + , / PERSON+ 0 + , / CHANGE - 加入公司代码+ strNow + , / RECORD_TIME+ 加入公司); / DESCRIPTIONdb.ExecuteSQL(strSQL);/ 重新初始化窗口Init();窗口关闭时,需要恢复菜单项和工具条按钮状态并清空相应的子框架窗口指针。void CAddView:OnDestroy() CFormView:OnDestroy();(CMainFrame*)AfxGetMainWnd()

47、-m_bItemAdd=TRUE; / 开放增加新员工功能(CMainFrame*)AfxGetMainWnd()-m_pAdd=NULL; / 清空窗口指针3.6 人事变动视类的创建首先加入一个新的窗体资源,同样在Insert Resource对话框中选择Dialog的IDD_FORMVIEW项。窗体创建后,在其上添加所需控件,最后的布局如图3-9所示。创建好资源后,为窗体加入一个由CFormView类继承的CChangeView封装此窗体资源,然后用Class Wizard为所需控件加入成员变量。主要控件类型,ID和对应的成员变量及说明如表3-14所示。 图3-9 人事变动输入窗体 表1-

48、14 人事变动窗体控制列表控制类型 ID成员变量说明Edit BoxIDC_CHANGE_EDT_IDm_strID员工号Radio ButtonIDC_CHANGE_RADIO_JOB无职务变更Radio ButtonIDC_CHANGE_RADIO_FIRE无辞职退休DateTime PickerIDC_CHANGE_DATETIMEPICKERm_Time时间Edit BoxIDC_CHANGE_EDT_NAMEm_strName姓名Combo BoxIDC_CHANGE_CMB_DEPARTMENTm_cDepartment部门Combo BoxIDC_CHANGE_CMB_JOBm_

49、cJob职务Edit BoxIDC_CHANGE_EDT_DESCRIPTIONm_strDescription具体描述ButtonIDC_CHANGE_BTN_CHANGE无“修改”按钮CChangeView中需要加入如下语句包含主框架窗口类:#include MainFrm.h同样,本类也需要加入以下语句引用全局变量db。extern CDatabase db;初始化函数代码如下:void CChangeView:Init()/ 初始化成员变量m_strID = _T();m_Time = CTime:GetCurrentTime();m_strName = _T();m_strDescr

50、iption = _T();m_cDepartment.SetCurSel(-1);m_cJob.SetCurSel(-1);/ 设置缺省变动情况为职务变更(CButton*)GetDlgItem(IDC_CHANGE_RADIO_JOB)-SetCheck(TRUE);UpdateData(FALSE); / 更新界面数据重载CFormView类的OnInitialUpdate()函数如下:void CChangeView:OnInitialUpdate() CFormView:OnInitialUpdate();/ 使框架窗口大小与视图匹配GetParentFrame()-RecalcLa

51、yout(); ResizeParentToFit(FALSE);GetParentFrame()-SetWindowText(人事变动); / 设置标题CRecordset rs(&db); / 数据集CString str;/ 设置部门下拉框所取的值为DEPARTMENT表中的值rs.Open(CRecordset:forwardOnly, select NAME from DEPARTMENT);while(!rs.IsEOF()rs.GetFieldValue(NAME, str);m_cDepartment.AddString(str);rs.MoveNext();rs.Close(

52、);/ 设置职务下拉框所取的值为JOB表中的值rs.Open(CRecordset:forwardOnly, select DESCRIPTION from JOB);while(!rs.IsEOF()rs.GetFieldValue(DESCRIPTION, str);m_cJob.AddString(str);rs.MoveNext();rs.Close();Init(); / 调用初始化函数当员工号编辑框中输入改变时,需要检索员工信息以显示。用Class Wizard加入处理IDC_CHANGE_EDT-ID的EN_CHANGE消息的函数,代码如下:void CChangeView:On

53、ChangeChangeEdtId() UpdateData(); / 更新数据CRecordset rs(&db);CString strDep,strJob;rs.Open(CRecordset:forwardOnly,select NAME,DEPARTMENT,JOB from PERSON where ID= + m_strID + );if(!rs.IsEOF() / 非空则获取员工信息rs.GetFieldValue(NAME, m_strName); / 名字rs.GetFieldValue(DEPARTMENT, strDep); / 部门编号rs.GetFieldValue

54、(JOB, strJob); / 职务代码rs.Close();if(!strDep.IsEmpty()rs.Open(CRecordset:forwardOnly,select NAME from DEPARTMENT where ID= + strDep + );rs.GetFieldValue(NAME, strDep); / 部门名称rs.Close();if(!strJob.IsEmpty()rs.Open(CRecordset:forwardOnly,select DESCRIPTION from JOB where CODE= + strJob + );rs.GetFieldVa

55、lue(DESCRIPTION, strJob); / 职务名称rs.Close();UpdateData(FALSE); / 更新数据m_cDepartment.SelectString(-1,strDep);m_cJob.SelectString(-1,strJob);m_bExist=TRUE; / 该员工存在else / 否则清空员工信息rs.Close();m_strName.Empty();m_cDepartment.SetCurSel(-1);m_cJob.SetCurSel(-1);UpdateData(FALSE); / 更新数据m_bExist=FALSE; / 该员工不存

56、在单击“修改”按钮时,添加人事变动记录。void CChangeView:OnChangeBtnChange() CRecordset rs(&db);CString str,strSQL;int counter;if(!m_bExist) / 该员工号不存在MessageBox(请确认员工号!,输入错误);return;UpdateData(); / 更新数据/ 获取人事变动记录号并累加rs.Open(CRecordset:forwardOnly,select COUNTER_VALUE from COUNTER where ID=C);rs.GetFieldValue(COUNTER_VA

57、LUE, str);sscanf(str, %d, &counter); / 获取计数值rs.Close(); / 关闭数据集counter+; / 计数器加1str.Format(%d, counter); / 转换为字符串strSQL=update COUNTER set COUNTER_VALUE= + str + where ID=C; / 设置SQL语句db.ExecuteSQL(strSQL); / 执行/ 更新员工信息CString strDepID,strJobID,strState,strChange;/ 得到部门IDm_cDepartment.GetWindowText(s

58、tr);rs.Open(CRecordset:forwardOnly,select ID from DEPARTMENT where NAME= + str +);rs.GetFieldValue(ID, strDepID);rs.Close();/ 得到职务代码m_cJob.GetWindowText(str);rs.Open(CRecordset:forwardOnly,select CODE from JOB where DESCRIPTION= + str +);rs.GetFieldValue(CODE, strJobID);rs.Close();if(CButton*)GetDlg

59、Item(IDC_CHANGE_RADIO_FIRE)-GetCheck()strState=F;strChange=2; / 辞退elsestrState=T;strChange=1; / 职务变动strSQL=update PERSON set STATE= + strState + ,+ DEPARTMENT= + strDepID + ,+ JOB= + strJobID + ;db.ExecuteSQL(strSQL); / 执行/ 追加人事变动记录str.Format(%d,counter); / 计数值转换为字符串CString strNow=m_Time.Format(%Y-%

60、m-%d %H:%M:%S);/ 写SQL语句strSQL=insert into PERSONNEL(ID,PERSON,CHANGE,RECORD_TIME,DESCRIPTION)values(+ str + , / ID+ m_strID + , / PERSON+ strChange + , / CHANGE+ strNow + , / RECORD_TIME+ m_strDescription + ); / DESCRIPTIONdb.ExecuteSQL(strSQL);/ 重新初始化窗口Init();窗口关闭时需要进行一定的状态修改,处理WM_DESTROY消息。void CC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论