1、中国管理软件学院毕业(设计)论文 目录 摘要 3前言 4第一章 系统设计 1.1 用户需求分析 41.2 系统功能分析 51.3 系统功能模块设计 51.4 与其他系统的关系1.5 数据流程图 6第二章 数据库设计 2.1数据库需求分析 72.2数据库概念结构设计 72.3 数据库逻辑结构设计与实现 82.4 初始数据的输入 9第三章 各个功能模块的创建 3.1 模块开发环境简介 103.2系统模块的具体实现 113.2.1 生成程序框架 113.2.2 主框架窗口设计 123.2.3 登录对话框的创建 153.2.4 添加新员工对话框的创建 203.2.5 人事变更对话框的创建 253.2.
2、6 查询修改对话框的创建 333.2.7程序其他方面的实现 37 3.2.8 数据库类的实现 38第四章 系统的实现 第五章 系统的编译和发行 第六章 结论 参考文献 摘要企业人事信息管理系统主要包括数据库的建立和维护以及前端应用程序的开发两个方面。对于前者我们建立起了一个数据一致性和完整性强、数据安全性好的库,在程序中对管理员的密码采用了加密的方法。而对于应用程序来说,程序功能完备,容易使用。本程序采用Microsoft Access作为数据库开发软件, 一共建立了六张数据库表,包括”员工信息表”, “部门表”, “教育水平表”, “密码表”, “人事变更表”, “职务表”。只读的表”部门表
3、”, “职务表”,”教育水平表”,可以在数据库中修改,添加新记录或者删除旧记录对程序都不影响。使用提供强大面向对象功能的Microsoft VC+ 6.0作为开发软件。程序主框架采用不支持文档/视图体系结构的单文档结构。系统的主要功能模块有:管理员登录模块,新员工档案输入模块,人事变动模块,员工档案查询修改模块, 修改管理员账号密码模块。首先插入5个对话框资源并编辑,使其具备上述功能。然后为每个对话框创建一个新类,基类为CDialog,并用DDX机制为对话框中的控件定义相应的变量。在视图类中完成对各个变量的判断以及数据库的读写操作。程序中自定义了一个加密类,可以方便的对管理员的密码进行加密和解
4、密。加密后的密码为18位以上,可以确保安全。 程序主要通过菜单进行操作,同时加入了右键菜单功能。在没有登录的情况下, 大部分功能不能使用. 登录之后可以输入新员工的资料,查询修改员工资料,修改人事变动信息,修改管理员密码。本程序生成的代码使用静态连接后可以独立地在WINDOWS中运行,程序发布编译成Release版。数据库方面,只需注册相应的ODBC数据源即可,缺省的数据源为MISDB,数据源的名字可以变化,而实现数据库的后台平台也可以不是Access 2000,只要数据库平台支持ODBC,程序都可以无须重新编译访问数据库。经过测试,在win98,win2000,winxp下均可正常运行。 关
5、键字: 原型法,面向对象,数据窗口,信息管理系统.前言随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。 作为计算机应用的一部分,使用计算机对人事信息进行管理,具有手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高人事管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。 人事管理系统是一个企业单位不可缺少的部分,它的内容对于企业的决策者和管理者来说都至关重要,所以人事管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使
6、用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。 因此,开发这样一套管理软件成为很有必要的事情,在下面的各章中我们将以开发一套企业人事管理系统为例,谈谈其开发过程和所涉及到的问题及解决方法。第一章 系统设计11用户需求分析 人事信息管理系统是针对企业人事处的大量业务处理工作用计算机进行全面现代化管理.主要包括新员工信息输入管理、人事变动管理、和员工基本信息查询管理、人事资料管理。等几个方面的功能,以实现用户方便的输入、查询、统计的业务需求。 具体系统功能需求描述(1) 新员工信息输入
7、管理提供对” 员工信息表”数据输入、统计功能,实现”员工信息表”数据生成、查询、统计功能。(2) 人事变动管理 提供对”人事变动表”数据的输入,完成对“员工信息表”数据的统计、查询,便于单位企业领导掌握人员的动向,及时调整人才的分配。(3) 员工基本信息查询管理提供对“员工信息表”数据的录入、查询、统计功能;根据“计数器表”及“职务表”和“部门表”数据的资料进行修改统计,且生成新的“员工信息表”,以便企业单位能快速的查询到当前人员的具体情况。1. 2系统功能分析人事管理系统主要有以下几项功能要求:1)新员工资料的输入.2)自动分配员工号,并且设置初始的用户密码.3)人事变动的详细记录,包括岗位
8、和部门的调整.4)员工信息的查询和修改,包括员工个人信息和密码等.1.3系统功能模块设计 跟据系统功能的要求,可以将系统分解为几个功能模块来分别设计,功能模块如下图所示: 人事管理系统新 员工员工 人事 档案档案 变更 查寻输入 修改1. 4与其他系统的关系本系统是公司人事管理信息系统的基础部分,它为其他子系统,如考勤管理系统,工资管理系统和员工培训系统,提供员工的基本信息.同时为其他系统提供了员工登录的密码认证和权限分配功能.1. 5数据流图系统的数据流图如下图所示,所有数据由人事科管理人员输入. 招聘新员工 分配员工号 员工信息数据人事科 岗位调整 人事变更记录 员工辞退 个人信息查询 “
9、新员工档案输入”视类字段:员工号,密码,姓名,性别,生日,部门,职务,受教育水平,专业,住址,电话,E-mail,备注.“人事变更”视类字段:员工号,变更情况(职务变更,辞职退休),时间,员工信息(姓名,部门,职务),具体描述.“员工信息查询修改”视类字段:员工号, 密码, 性别, 部门, 职务, 受教育水平, 姓名, 生日, 住址, 电话, E-mail, 备注.第二章 数据库设计2.1数据库需求分析根据数据流程图,可以列出以下数据项和数据结构: 员工信息表:员工号、密码、姓名、性别、生日、部门、职务、教育程度、通讯地址、电话、E-mail、备注。 人事变动表: 记录号、员工、变动和详细描述
10、。所需的外部数据支持: 部门表:部门编号、名称。 职务表:职务编号,名称。 教育水平表:学历编号,名称。.2.2 数据库概念结构设计 关于人事管理系统的E-R图如下所示: 归属N:1 变动-员工员工部门N:1人事变动记录部门编号 名称简介记录编号变动描述员工号员工密码姓名性别生日职位学历联系地址联系电话Email 管理1:1 变动时间 2.3 数据库逻辑结构设计与实现 根据系统E-R图,本系统需要有2个数据分别来存放员工个人信息和人事变动记录。并且需要一个外部数据表(部门信息)的支持。同时部分记录字段要用代码来表示,因此需要3个代码表来分别记录教育程度、职务和人事变更的代码。最后,设立一个计数
11、器数据表用于实现员工号的自动分配。这5个数据表用Access2000实现.: 部门表 教育水平表 职务表人事变更表员工信息表2.4 初始数据的输入本例中需要输入的初始数据包括:部门信息、教育水平、职务信息。部门信息和职务信息可以根据需要设置。在本例中三个表的设计如下:部门信息表:人事部,市场部,销售部,财务部,后勤部。职务信息表:经理,副经理,科长,副科长,职员。教育水平表:小学,初中,中专,高中,职高,大专,大本,硕士,博士,博士后。第三章 各个功能模块的创建3.1 模块开发环境简介Visual c+Visual C+开发环境简介Visual C+是MicroSoft提供的一个支持可视化编程
12、的集成开发环境:Visual Studio(又名Developer Studio)。Developer Studio是一个通用的应用程序集成开发环境,它不仅支持Visual C+,还支持Visual Basic,Visual J+,Visual InterDev等Microsoft系列开发工具。Developer Studio包含了一个文本编辑器、资源编辑器、工程编译工具、一个增量连接器、源代码浏览器、集成调试工具,以及一套联机文档。使用Developer Studio,可以完成创建、调试、修改应用程序等的各种操作。Developer Studio采用标准的多窗口Windows用户界面,并增加
13、了一些新特性,使得开发环境更易于使用,用户很容易学会它的使用方法。一个典型的Developer Studio用户界面如图3.1所示。图3.1 Developer Studio用户界面由于Developer Studio是一个可视化的开发工具,在介绍Developer Studio的各个组成部分之前,首先了解一下可视化编程的概念。可视化技术是当前发展迅速并引人注目的技术之一,它的特点是把原来抽象的数字、表格、功能逻辑等用直观的图形、图像的形式表现出来。可视化编程是它的重要应用之一。所谓可视化编程,就是指:在软件开发过程中,用直观的具有一定含义的图标按钮、图形化的对象取代原来手工的抽象的编辑、运行
14、、浏览操作,软件开发过程表现为鼠标点击按钮和拖放图形化的对象以及指定对象的属性、行为的过程。这种可视化的编程方法易学易用,而且大大提高了工作效率。3.2系统模块的具体实现在本程序中,我们将使用不支持文档/视图(Document/View architecture )的单文档界面的结构来开发数据库管理程序。本程序中不使用文档类,因此没有创建文档模板类的对象。主程序界面如下图3.2.1 生成程序框架 在这里,用AppWizard生成程序框架,且手工假如数据库支持。在MFC AppWizard Step1中选择Single document 项,并去掉Document/View architectu
15、re support 选项。其余都采用缺省配置。本程序数据库的操作是通过MFC的ODBC类实现的,为了使用ODBC类,需要在stdafx.h中加入#include “afxdb.h”一行。3.2.2 主框架窗口设计1菜单的创建用Visual C+6.0的菜单编辑器可以很方便的创建菜单。在菜单编辑器中打开的设计窗口如图3.22。AppWizard创建的程序缺省有两个菜单:IDR_MAINFRAME为主框架窗口所用,IDR_TESTTYPE(设应用程序名为TEST)为子框架窗口所用。因本程序中没有用缺省的子框架,所以将IDR_TESTTYPE菜单去掉,同时编辑IDR_MAINFRAME菜单。图3.
16、22然后在视图类中添加菜单的消息处理函数:BEGIN_MESSAGE_MAP(CChildView,CWnd )ON_COMMAND(ID_LAND, OnLand) 登录菜单的消息处理函数ON_UPDATE_COMMAND_UI(ID_LAND, OnUpdateLand)ON_COMMAND(ID_ADD, OnAdd) 添加新员工菜单的消息处理函数ON_UPDATE_COMMAND_UI(ID_ADD, OnUpdateAdd)ON_COMMAND(ID_CHANGE, OnChange) 人事变更菜单的消息处理函数ON_UPDATE_COMMAND_UI(ID_CHANGE, OnUp
17、dateChange)ON_COMMAND(ID_SEARCH, OnSearch) 查询修改菜单的消息处理函数ON_UPDATE_COMMAND_UI(ID_SEARCH, OnUpdateSearch)END_MESSAGE_MAP()3.2.3 登录对话框的创建 登录对话框如下图所示,包括两个Edit Box 和两个Button。登录和取消按钮的ID分别设置为IDOK和IDCANCEL,即系统默认ID。IDCANCEL采用系统缺省处理,不做另外编程。IDOK需另外编程以登录数据库。框架创建完成后双击对话框体,为登录对话框新建一个类CLandDialog,基类为CDialog。然后在Cla
18、ssWizard的MemberVairables中加入两个Edit控件的处理变量,如下图:视图类中添加如下代码然后在主:void CChildView:OnLand() / TODO: Add your command handler code hereCLandDialog land;while( land.DoModal() = IDOK )if( ( m_CSid = land.m_CSid )&( m_CSpasswd = land.m_CSpasswd ) )AfxMessageBox( _T(欢迎进入企业人事信息管理系统!) );m_Badd = m_Bchange = m_Bse
19、arch = m_Bstatenow = TRUE;m_Bland = FALSE;break;elseAfxMessageBox( _T(用户名或密码错误!) );land.m_CSpasswd = _T();3.2.4 添加新员工对话框的创建 添加新员工对话框如下图在程序中插入一个新的对话框资源,如上图方式编辑完成,双击对话框体新建一个类CAddDialog, 基类为CDialog。然后在ClassWizard的MemberVairables中加入控件的处理变量,如下图:然后在视图类中加入如下代码:void CChildView:OnAdd() int count;/ TODO: Add
20、your command handler code hereCAdd add;infordset.Open();infordset.MoveLast();count = infordset.m_COUNT;if( count = 0 )m_CSautoid.Format( _T(%d), 10000 );add.m_CSid = add.m_CSpasswd = m_CSautoid;else m_CSautoid.Format( _T(%d), count + 10000 );add.m_CSid = add.m_CSpasswd = m_CSautoid;infordset.Close()
21、;while( add.DoModal() = IDOK )if( ( add.m_CSname = _T() )|( add.m_CSaddress = _T() ) |( add.m_CSemail = _T() )|( add.m_CStell = _T() ) |( add.m_CSmtell = _T() )|( add.m_CSremark = _T() ) |( add.m_birthday = -1 ) |( add.m_CSbranch = _T() ) |( add.m_CSjob = _T() )|( add.m_CSstudy = _T() ) ) AfxMessage
22、Box( 请将个人信息填写完整! );elseinfordset.Open();infordset.AddNew();infordset.m_ID = add.m_CSid;infordset.m_PASSWD = add.m_CSpasswd;infordset.m_NAME = add.m_CSname;infordset.m_BIRTHDAY = add.m_birthday;infordset.m_ADDRESS = add.m_CSaddress;infordset.m_TEL = add.m_CStell;infordset.m_MTEL = add.m_CSmtell;infor
23、dset.m_SEX = add.m_Isex;infordset.m_DEPARTMENT = add.m_CSbranch;infordset.m_JOB = add.m_CSjob;infordset.m_EDU_LEVEL = add.m_CSstudy;infordset.m_REMARK = add.m_CSremark;infordset.m_EMAIL = add.m_CSemail;infordset.m_COUNT = count + 1;infordset.Update();infordset.Close();AfxMessageBox( 您的信息已经成功的写入数据库!
24、);break;在CAddDialog类中加入以下代码用于打开数据库并将“部门”, “职务”, “教育水平”数据库中的内容添加到对话框中的下拉列表中,并且执行相应的判断:CAdd:CAdd(CWnd* pParent /*=NULL*/): CDialog(CAdd:IDD, pParent)m_Byear = m_Bmonth = FALSE;m_birthday = -1;m_CSbranch = m_CSjob = m_CSstudy = _T();/AFX_DATA_INIT(CAdd)m_CSid = _T();m_CSpasswd = _T();m_CSname = _T();m_
25、CSremark = _T();m_CStell = _T();m_CSmtell = _T();m_CSemail = _T();m_CSaddress = _T();m_Isex = 0;/AFX_DATA_INITfor( int i = 0; i 55; i+ )m_CSyear i .Format( _T(%d年), i + 1949 );for( i = 0; i 12; i+ )m_CSmonth i .Format( _T(%d月), i + 1 );for( i = 0; i 31; i+ )m_CSday i .Format( _T(%d日), i + 1 );void C
26、Add:DoDataExchange(CDataExchange* pDX)int j = 0, k = 0, m = 0;CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAdd)DDX_Control(pDX, IDC_COMBOBRANCH, m_CBbranch);DDX_Control(pDX, IDC_COMBOAYEAR, m_CByear);DDX_Control(pDX, IDC_COMBOASTUDY, m_CBstudy);DDX_Control(pDX, IDC_COMBOAMONTH, m_CBmonth);DDX_Control(
27、pDX, IDC_COMBOAJOB, m_CBjob);DDX_Control(pDX, IDC_COMBOADAY, m_CBday);DDX_Text(pDX, IDC_EDITAID, m_CSid);DDX_Text(pDX, IDC_EDITAPASSWD, m_CSpasswd);DDX_Text(pDX, IDC_EDITANAME, m_CSname);DDX_Text(pDX, IDC_EDITAREMARK, m_CSremark);DDX_Text(pDX, IDC_EDITATELL, m_CStell);DDX_Text(pDX, IDC_EDITAMTELL, m
28、_CSmtell);DDX_Text(pDX, IDC_EDITAEMAIL, m_CSemail);DDX_Text(pDX, IDC_EDITAADDRESS, m_CSaddress);DDX_Radio(pDX, IDC_RADIO1, m_Isex);/AFX_DATA_MAPm_CByear.ResetContent();m_CBmonth.ResetContent();m_CBbranch.ResetContent();m_CBjob.ResetContent();m_CBstudy.ResetContent();for( int i = 0; i 55; i+ )m_CByea
29、r.InsertString( i, m_CSyear i );for( i = 0; i 12; i+ )m_CBmonth.InsertString( i, m_CSmonth i );if( !database.Open( NULL, FALSE, FALSE, ODBC;DSN=人事管理 ) )AfxMessageBox( 人事管理数据库无法打开!);branchrdset.Open();branchrdset.MoveFirst();while( !branchrdset.IsEOF() )m_CSbranchs j = branchrdset.m_MANAGER;m_CBbranc
30、h.InsertString( j, m_CSbranchs j );branchrdset.MoveNext();j+;branchrdset.Close();jobrdset.Open();jobrdset.MoveFirst();while( !jobrdset.IsEOF() )m_CSjobs k = jobrdset.m_JOB;m_CBjob.InsertString( k, m_CSjobs k );jobrdset.MoveNext();k+;jobrdset.Close();studyrdset.Open();studyrdset.MoveFirst();while( !s
31、tudyrdset.IsEOF() )m_CSstudys m = studyrdset.m_EDU_LEVEL;m_CBstudy.InsertString( m, m_CSstudys m );studyrdset.MoveNext();m+;studyrdset.Close();database.Close();3.2.5人事变更对话框的创建 人事变更对话框如下图:在程序中插入一个新的对话框资源,如上图方式编辑完成,双击对话框体新建一个类CChangeDialog, 基类为CDialog。然后在ClassWizard的MemberVairables中加入控件的处理变量,如下图:然后在视图
32、类中加入如下代码:void CChildView:OnChange() CChangeDialog change;if( change.DoModal() = IDOK )if( change.m_Bfind ) infordset.Open(); infordset.MoveFirst(); while( !infordset.IsEOF() ) if( infordset.m_ID = change.m_CSid ) infordset.Edit(); infordset.m_STATE = change.m_Ichange; infordset.Update(); changerdset
33、.Open(); changerdset.AddNew(); changerdset.m_ID = change.m_CSid; changerdset.m_CHANGE = change.m_Ichange; changerdset.m_TIME = change.m_changetime; changerdset.m_OLDMANAGER = change.m_CSoldbranch; changerdset.m_NEWMANAGER = change.m_CSbranch; changerdset.m_OLDJOB = change.m_CSoldjob; changerdset.m_N
34、EWJOB = change.m_CSjob; changerdset.Update(); changerdset.Close();AfxMessageBox( 您修改的信息已经成功的导入数据库!); break; else infordset.MoveNext();infordset.Close();elseAfxMessageBox( 没有您要修改的用户!); 在CChangeDialog类中加入以下代码用于打开数据库并将“部门”, “职务”,数据库中的内容添加到对话框中的下拉列表中,并且执行相应的判断:CChangeDialog:CChangeDialog(CWnd* pParent /
35、*=NULL*/): CDialog(CChangeDialog:IDD, pParent)m_Byear = m_Bmonth = m_Bfind = FALSE;m_changetime = -1;m_CSbranch = m_CSjob = _T();/AFX_DATA_INIT(CChangeDialog)m_CSid = _T();m_CSremark = _T();m_Ichange = 0;m_CSname = _T();/AFX_DATA_INITfor( int i = 0; i 21; i+ )m_CSyear i .Format( _T(%d年), i + 2000 );
36、 for( i = 0; i 12; i+ )m_CSmonth i .Format( _T(%d月), i + 1 );for( i = 0; i 31; i+ )m_CSday i .Format( _T(%d日), i + 1 );if( !database.Open( NULL, FALSE, FALSE, ODBC;DSN=人事管理) )AfxMessageBox( 人事管理数据库无法打开!);CChangeDialog:CChangeDialog()database.Close();void CChangeDialog:DoDataExchange(CDataExchange* p
37、DX)int j = 0, k = 0;CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CChangeDialog)DDX_Control(pDX, IDC_COMBOCYEAR, m_CByear);DDX_Control(pDX, IDC_COMBOCMONTH, m_CBmonth);DDX_Control(pDX, IDC_COMBOCJOB, m_CBjob);DDX_Control(pDX, IDC_COMBOCDAY, m_CBday);DDX_Control(pDX, IDC_COMBOCBRANCH, m_CBbranch);DDX_Tex
38、t(pDX, IDC_EDITCID, m_CSid);DDX_Text(pDX, IDC_EDITCREMARK, m_CSremark);DDX_Radio(pDX, IDC_RADIOCHANGE, m_Ichange);DDX_Text(pDX, IDC_EDITCNAME, m_CSname);/AFX_DATA_MAPm_CByear.ResetContent();m_CBmonth.ResetContent();m_CBbranch.ResetContent();m_CBjob.ResetContent();for( int i = 0; i 21; i+ )m_CByear.I
39、nsertString( i, m_CSyear i );for( i = 0; i 12; i+ )m_CBmonth.InsertString( i, m_CSmonth i );branchrdset.Open();branchrdset.MoveFirst();while( !branchrdset.IsEOF() )m_CSbranchs j = branchrdset.m_MANAGER;m_CBbranch.InsertString( j, m_CSbranchs j );branchrdset.MoveNext();j+;branchrdset.Close();jobrdset.Open();jobrdset.MoveFirst();while( !jobrdset.IsEOF() )m_CSjobs k = jobrdset.m_JOB;m_CBjob.InsertString( k, m_CSjobs k );jobrdset.MoveNext();k+;jobrdset.Close();BEGIN_MESSAGE_MAP(CChangeDialog, CDialog)/AFX_MSG_MAP(CChangeDialog)ON_CBN_SELENDOK(IDC_COMBOCYEAR, OnSelendokCombocyear)ON_CBN_