软件项目开发基于c++的人事管理系统(实训报告,毕业设计)part1

上传人:ra****d 文档编号:193494244 上传时间:2023-03-10 格式:DOC 页数:29 大小:587KB
收藏 版权申诉 举报 下载
软件项目开发基于c++的人事管理系统(实训报告,毕业设计)part1_第1页
第1页 / 共29页
软件项目开发基于c++的人事管理系统(实训报告,毕业设计)part1_第2页
第2页 / 共29页
软件项目开发基于c++的人事管理系统(实训报告,毕业设计)part1_第3页
第3页 / 共29页
资源描述:

《软件项目开发基于c++的人事管理系统(实训报告,毕业设计)part1》由会员分享,可在线阅读,更多相关《软件项目开发基于c++的人事管理系统(实训报告,毕业设计)part1(29页珍藏版)》请在装配图网上搜索。

1、软件项目开发综合实践大作业题 目: 人事管理系统 专 业: 作 者: 指导教师: 目 录第1章 人事管理系统概述1第2章 人事管理系统需求分析223第3章 数据库设计668第4章 模块的设计与实现1111111213134.2.2 部门信息管理的对话框14164.3 员工基本信息管理模块设164.3.1 设计编辑员工基本信息的对话框164.3.2 设计员工信息管理对话框174.3.3 设计员工调转部门对话框20214.4.1 保存BMP图像214.4.2 显示BMP图像2223第5章 总结25参考文献26第1章 人事管理系统概述随着计算机技术、网络技术和信息技术的发展,现在办公系统更趋于系统化

2、、科学化和网络化。网络办公自动化系统是计算机技术和网络迅速发展的一个办公应用解决方案,它的主要目的是实现信息交流和信息共性,提供协同工作的手段,提高办公的效率,让人们从繁琐的有纸办公中解脱出来。现在许多的机关单位的人事管理水平还停留在纸介质的基础上,这样的机制已经不能适应时代的发展,因为它浪费了许多的人力和物力,在信息时代这种传统的管理方法必然被计算机为基础的信息管理所取代。人事管理系统是对工作人员进行统一的管理,可以方便的进行录入,查询,修改,删除,退出。本系统使用Visual C+作为界面和功能开发工具和SQL Sever 2005作为后台数据库,利用其提供的各种面向对象的开发工具进行界面

3、和数据库开发。软件过程结合了快速原型模型与增量模型的优点:首先在短时间内建立系统应用原型,然后,对初始原型系统进行需求迭代,不断修正和改进,直到形成可行系统。从当前用户需求角度分析一款实用性高,界面UI友好,用户交互性强的软件在用户硬盘中的生命周期是强于那些虽然功能实用但是界面操作繁琐的软件,以及用户并不需要软件开发商过于繁琐的操作流程,并不是每一个使用计算机的人都是精通计算机的群体。本系统是对人事资料进行管理,为人事管理人员提供了一套简单的操作、使用可靠、界面友好、易于管理和使用的处理工具。本系统对人事各种数据进行统一处理,避免数据存取、数据处理的重复,提高工作效率,减少了系统数据处理的复杂

4、性。本系统不仅使人事管理人员从繁重的工作中解脱出来,而且提高了人事管理的效率,提高了人事管理的科学性,方便了用户查询、管理人员进行管理。 第2章 人事管理系统需求分析2.1人事管理系统的需求分析整个系统从符合操作简便、界面友好、灵活、实用、安全的要求出发,完成人事、工资管理的全过程,包括部门信息管理、添加员工基本信息、员工照片管理、员工主要家庭成员信息管理、员工主要教育与工作经历管理、员工主要教育与工作经历管理、员工考勤管理、员工工作考评管理功能、等人事管理工作以及新进员工工资的新增、老员工工资修改、奖惩等工资管理工作。经过实际使用证明,本文所设计的人事管理系统可以满足公司人事、工资管理等方面

5、的需要。1. 人事管理系统的主要任务是对人事档案进行整理, 使得能方便快捷地对人事档案进行查询、统计、更新并且能按一定要求输出报表。通过该系统、使企业的人事管理工作系统化、规范化、自动化, 从而提高企业人事管理的效率。2. 需求分析(1) 技术可行性随着国内软件开发的日益发展壮大,各种中小企事业单位已具备独立开发各种类型的软件的能力,能够满足不同行业的特别的需求。而这个系统尽管其在组织关系上存在着很大的复杂性,繁琐性,但是就整个系统的技术构成上来看,它还是属于一个数据库应用类的系统。其基本操作还是对存在数据库进行添加、删除、查找、编辑等。所以就单纯的数据库应用来看,暂不存在太大的技术问题。(2

6、) 经济可行性 对于整个系统而言,在系统未运行之前,初期投资比较大,花费相对而言比较多。各部门必须配置电脑、服务器、打印机、 机及相关的网络设备,但是在整个系统投入运行之后,因为现在计算机已经普及了,相关的人员培训费可以减少很多。而同时又减少了数据的流通环节,不必要花费那么多的时间,也就是说最重要的是就是提高了效率,而又保证了各项数据的准确性,也避免了工作人员的流动造成的收据丢失等问题,适应了当前的发展形式。(3) 管理可行性 随着时代的发展,人员素质己逐步提高,不论是对于电脑系统的基本操作还是对于系统的维护都有了一定的基础。同时还可以配置专业的电脑维护人员来维护电脑,不必担心电脑故障问题。(

7、4) 开发环境可行性 Visual C+ + 为用户提供了ODBC (Open Database Connec2 tivity , 开放式数据库连接) 、DAO (Data Access Object , 数据访问对象) 和OL E DB (OL E Data Base , OL E 数据库) 三种数据库访问技术, 它们都具有简单、灵活、访问速度快、可扩展性强的特点, 这些正是Visual C 6 较其它开发工具所具有的优势。ODBC 是一种使用SQL 的程序设计接口, 它使得编写应用程序避免了与数据源相联的复杂过程。MFC提供的ODBC 类有: CDatabase ( 数据库类) CReco

8、rdSet(记录集类) 和CRecordView ( 可视记录集类) 。其中CDatabase 类提供对数据源的连接, 通过它可以对数据源进行操作; CRecordView 类用来控制并显示数据库记录, 该视图是直接连接到一个CRecordSet 对象的表视图; CRecordSet类提供了从数据源中提取记录并对记录进行操作的多种功能, 如查询记录、添加记录、删除记录、修改记录等。 (1) 具有友好的用户界面。系统以窗口方式来实现用户数据的录入,提供给用户灵活的查询界面,统计结果也以图表方式显示,方便了用户的使用。 (2) 系统具有通用性。系统针对一般人事管理模式进行开发,适合大多数企业的实际

9、使用。 (3) 具有模糊查询功能,处理速度快。(4) 采用面向对象技术和流行的软件工具,系统具有较好的适应性和可扩展性。系统功能模块1部门信息管理 添加部门信息,包括部门编号、部门名称、部门职能描述和上级部门信息; 修改部门信息; 删除部门信息; 查看部门信息。2添加员工基本信息,包括员工编号、姓名、性别、生日、所在部门等信息;修改员工基本信息;删除员工基本信息;查看员工基本信息。3、员工照片管理 添加员工照片,将指定的图像文件存储到数据库中;修改员工照片;删除员工照片;显示员工照片。4、员工主要家庭成员信息管理添加员工主要家庭成员信息,包括员工主要家庭成员的姓名、关系、工作单位等信息;修改员

10、工主要家庭成员信息;删除员工主要家庭成员信息;查看员工主要家庭成员信息。5、员工主要教育与工作经历管理 添加员工主要教育与工作经历信息,包括开始日期、截止日期、学校或单位、职务等信息;修改员工主要教育与工作经历信息;删除员工主要教育与工作经历信息;查看员工主要教育与工作经历信息。6、员工考勤管理添加员工考勤信息,包括考勤月份、病假天数、事假天数、矿工天数等信息;修改员工考勤信息;删除员工考勤信息;查询员工考勤信息;月度考勤统计表。7、员工工作考评管理功能 添加员工工作考评信息,包括考评月份、奖励事由、奖励金额、处罚事由、处罚金额和总体评价等信息;修改员工工作考评信息;删除员工工作考评信息; 查

11、看员工工作考评信息。8、系统用户管理功能 添加系统用户信息,包括用户名、密码、员工编号和用户类型(系统管理员和普通用户)等信息;修改系统用户信息;删除系统用户信息;查看系统用户信息。根据上面介绍的功能,可以设计出系统的总体功能模块,如图所示:人事管理系统基本信息管理考勤考评管理系统用户管理图2.1 人力资源管理系统功能模块示意图可以看到,本系统划分为3个功能模块,基本信息管理模块用于管理部门及员工的基本信息,考勤考评管理功能模块用于按照部门和时间对员工进行考勤和考评记录,系统用户管理模块用于管理系统用户信息。下面分别介绍这3个功能模块的基本功能。基于本信息管理模块的基本功能如图所示:部门信息管

12、理员工基本信息管理员工照片管理员工主要家庭成员信息管理员工学习及工作经历管理 图2.2 基本信息管理模块功能图 员工基本信息管理模块是整个系统的核心。除了部门管理模块外,其他各个模块都针对每个员工的某个方面进行管理,都需要提供员工编号等基本信息作为索引。 考勤考评管理模块的基本功能如图所示:员工基本信息管理员工考勤管理员工工作考评管理图2.3 考勤考评管理模块功能图 系统用户管理模块包括用户信息管理、权限控制等功能。权限控制虽然不是一个独立存在的模块,但是它却贯穿在整个系统的运行过程中。本系统将用户划分为两种类型,即系统管理员用户和普通用户。 系统管理员用户拥有所有的管理权限,普通用户在基本信

13、息管理模块和考勤考评管理模块中只能有查看的权限。在系统初始化时创建一个默认的系统管理员用户Admin,由程序设计人员手动地添加到数据库中。Admin用户可以创建和管理其他管理员用户和普通用户,其他管理员用户可以创建和管理普通用户。所有用户都可以管理自己的用户信息。第3章 数据库设计(1)部门信息管理如图3.1所示:部门信息部门编号部门名称部门职能描述上级部门图3.1部门信息管理(2)员工基本信息管理如图3.2所示:员工基本信息员工编号姓名性别生日所在部门 员工基本信息管理(3)员工主要家庭成员信息管理如图3.3所示:员工主要家庭成员信息姓 名关 系工作单位 员工主要家庭成员信息管理(4)员工主

14、要教育与工作经理管理如图3.4所示:员工主要教育与工作经理开始日期截至日期学校单位职务 员工主要教育与工作经理管理(5)员工考勤管理如图3.5所示:员工考勤信息考勤月份病假天数事假天数旷工天数 员工考勤管(6)员工工作考评管理功能如图3.6所示:员工工作考评信息月 份奖励事由奖励金额处罚事由处罚金额总体评价图3.6 员工工作考评管理功能(7)系统用户管理功能如图3.6所示:系统用户信息用户名密 码员工编号用户类型图3.7 系统用户管理功能数据库逻辑设计是整个设计的前半段,包括所需的实体和关系,实体规范化等工作。设计的后半段则是数据库物理设计,包括选择数据库产品,确定数据库实体属性(字段)、数据

15、类型、长度、精度确定、DBMS页面大小等。通过需求分析, 可确定系统的数据项和数据结构如下: ( 1)部门信息表如图2.1所示:图2.1 部门信息表( 2)员工信息表如图2.2所示:图2.2 员工信息表(3) 员工主要家庭成员表如图2.3所示: 图2.3 员工主要家庭成员表(4) 员工主要经验经历表如图2.4所示: 图2.4 员工主要经验经历表(5)员工工作考评表如图2.5所示: 图2.5 员工工作考评表(6)员工考勤表如图2.6所示: 图2.6 员工考勤表(7)用户信息表如图2.7所示:图2.7 用户信息表第4章 模块的设计与实现工程框架设计系统主界面下拉菜单包括: 基本信息管理 :部门管理

16、,员工管理,退出系统; 考勤考评管理 :考勤管理,考评管理; 系统用户管理 :用户密码,修改密码。图4.1 系统主界面void ADOConn:OnInitADOConn()/ 初始化连接数据库 :CoInitialize(NULL); / 初始化OLE/COM库环境 try m_pConnection.CreateInstance(ADODB.Connection);/ 创建Connection对象_bstr_t strConnect = Provider=SQLOLEDB; Server=ntserver;Database=HrSys; uid=sa; pwd=sa; / 设置连接字符串,

17、必须是BSTR型或者_bstr_t类型 m_pConnection-Open(strConnect,adModeUnknown); catch(_com_error e) / 捕捉异常 AfxMessageBox(e.Description();/ 显示错误信息 _RecordsetPtr& ADOConn:GetRecordSet(_bstr_t bstrSQL) / 执行查询 try / 连接数据库,如果Connection对象为空,则重新连接数据库if(m_pConnection=NULL)m_pRecordset-Open(bstrSQL,m_pConnection.GetInterf

18、acePtr(),adOpenDynamic,adLockOptimistic,adCmdText); / 取得表中的记录 catch(_com_error e) / 捕捉异常 BOOL ADOConn:ExecuteSQL(_bstr_t bstrSQL) / 执行SQL语句,Insert Update _variant_ttry if(m_pConnection = NULL) / 是否已经连接数据库 OnInitADOConn(); / Connection对象的Execute方法:(_bstr_t CommandText, / VARIANT * RecordsAffected, lo

19、ng Options ) / 其中CommandText是命令字串,通常是SQL命令。 / 参数RecordsAffected是操作完成后所影响的行数, / 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名 / adCmdProc-存储过程;adCmdUnknown-未知 m_pConnection-Execute(bstrSQL,NULL,adCmdText);return true; catch(_com_error e) void ADOConn:ExitConnect() if (m_pRecordset != NULL) /

20、 关闭记录集和连接 m_pRecordset-Close(); m_pConnection-Close(); :CoUninitialize();/ 释放环境用户登录用户使用本系统时,首先要通过本系统的身份认证,此过程叫做登录。 登录过程需要完成以下步骤:1.根据用户名和密码判断是否为合法用户; 2.根据用户类型判断用户拥有的权限。 每个用户有3次机会进行身份认证,如果3次输入的用户名和密码和数据库数据不能匹配,则强制退出系统。 登录窗体的界面如:图4.2 登录对话框void CUsers:GetData(CString cUserName) /根据员工编号读取所有字段值 ADOConn m_

21、AdoConn; /连接数据库vSQL = SELECT * FROM Users WHERE UserName= + cUserName + ;_RecordsetPtr m_pRecordset; /执行SELETE语句m_pRecordset = m_AdoConn.GetRecordSet(vSQL);m_AdoConn.ExitConnect();/断开与数据库的连接部门管理模块可以实现以下功能:(1)系统管理员用户可以添加部门记录,修改部门记录,删除部门记录和查看部门记录;(2)普通用户只能查看部门数据。编辑部门信息的对话框编辑部门信息的对话框可用来添加和修改部门信息。设计部门信息

22、编辑对话框如图4.3所示:图 编辑部门信息对话框void CDepartments:GetData(CString cDepId) /根据员工编号读取所有字段值 vSQL = SELECT * FROM Departments WHERE Dep_id= + cDepId;_RecordsetPtr m_pRecordset;m_pRecordset=m_AdoConn.GetRecordSet(vSQL);if (m_pRecordset-adoEOF) /返回各列的值CDepartments();elseDep_id = atoi(cDepId);Dep_name=(LPCTSTR)(_b

23、str_t)m_pRecordset-GetCollect(Dep_Name);Describe=(LPCTSTR)(_bstr_t)m_pRecordset-GetCollect(Describe);UpperId=atoi(LPCTSTR)(_bstr_t)m_pRecordset-GetCollect(UpperId);m_AdoConn.ExitConnect();/断开与数据库的连接 部门信息管理的对话框设计部门信息管理对话框如图4.4所示:图 部门信息管理对话框int CDepartments:HaveSon(CString cDep_id) /判断指定的部门是否包含下级部门(如果

24、包含则不能删除)vSQL = SELECT * FROM Departments WHERE UpperId= + cDep_id;_RecordsetPtr m_pRecordset;m_pRecordset = m_AdoConn.GetRecordSet(vSQL);m_AdoConn.ExitConnect();long CDepartments:sql_insert()/返回新插入记录的编号vSQL = INSERT INTO Departments (Dep_name,Describe,UpperId)VALUES(+Dep_name + , + Describe + , + st

25、rUpperId + );m_AdoConn.ExecuteSQL(vSQL);/执行INSERT语句long lDepId; /读取最大编号vSQL = SELECT MAX(Dep_id) AS MaxId FROM Departments;_RecordsetPtr m_pRecordset; /执行SELETE语句m_pRecordset = m_AdoConn.GetRecordSet(vSQL);if (m_pRecordset-adoEOF) /返回各列的值lDepId = 0;elselDepId=atol(LPCTSTR)(_bstr_t)m_pRecordset-GetCo

26、llect(MaxId);m_AdoConn.ExitConnect();/断开与数据库的连接return lDepId;void CDepartments:sql_update(CString cDepId) vSQL = UPDATE Departments SET Dep_name= + Dep_name + , Describe= + Describe + WHERE Dep_id= + cDepId; /设置UPDATE语句m_AdoConn.ExecuteSQL(vSQL);/执行UPDATE语句m_AdoConn.ExitConnect();/断开与数据库的连接void CDep

27、artments:sql_delete(CString cDepId) vSQL = DELETE FROM Departments WHERE Dep_id= + cDepId;m_AdoConn.ExecuteSQL(vSQL);m_AdoConn.ExitConnect();/断开与数据库的连接选择部门对话框设计选择部门对话框如图4. 5所示:图 选择部门信息对话框int CDepartments:HaveName(CString cDep_Name) /判断指定的部门名称是否存在ADOConn m_AdoConn; /连接数据库vSQL = SELECT * FROM Departme

28、nts WHERE Dep_name= + cDep_Name + ;_RecordsetPtr m_pRecordset; /执行SELECT语句m_pRecordset = m_AdoConn.GetRecordSet(vSQL);m_AdoConn.ExitConnect();/断开与数据库的连接4.3 员工基本信息管理模块设4.3.1 设计编辑员工基本信息的对话框编辑员工基本信息的对话框可以用来添加和修改员工的基本信息,基本信息中并不包含照片。创建一个新对话框,对话框的ID属性为IDD_EMPEDIT_DIALOG,对应的类为CEmpEditDlg。对话框IDD_EMPEDIT_DIA

29、LOG的布局如图4.6所示:图4.6 编辑员工信息 下面是对话框IDD_EMPEDIT_DIALOG的主要代码。BOOL CEmpEditDlg:OnInitDialog() ADOConn m_AdoConn; /连接数据库m_AdoConn.OnInitADOConn();/设置SELECT语句_bstr_t vSQL;vSQL = SELECT * FROM Employees WHERE Emp_id= + cEmpId;/执行SELETE语句_RecordsetPtrm_pRs;m_pRs = m_AdoConn.GetRecordSet(vSQL);程序首先调用UpdataData

30、(TRUE)函数将对话框中的数据读取到对应的成员变量中,然后将这些变量的值分别赋值到类CEmployees对应的成员变量中,最后根据变量EmpId的值决定插入数据还是修改数据。4.3.2 设计员工信息管理对话框创建一个对话框,对话框ID属性设置为IDD_EMPEDIT_DIALOG,对应类为CEmpManDlg员工信息管理那对话框的布局如图4.7所示:图4.7 员工信息管理下面是对话框IDD_EMPEDIT_DIALOG中的主要代码。1.Refresh_Data() 函数Refresh_Data() 函数的功能是根据用户选择的部门和员工状态信息设置SELECT语句,从而刷新DataGird表格

31、中的数据,代码如下:void CEmpManDlg:Refresh_Data()UpdateData(TRUE);/根据部门编号设置SELECT语句CString cDepId;cDepId.Format(%d, iDepId);CString cSource = SELECT Emp_Id, Emp_Name AS 姓名, Sex AS 性别,;cSource += Political_Party AS 政治面貌, Culture_Level 文化程度, Position AS 岗位,;cSource+= Title AS 职务 FROM Employees WHERE Dep_Id= +

32、cDepId;/读取员工状态值,并根据它生成SELECT语句的条件int iType = m_combo.GetCurSel();CString cType;cType.Format(%d, iType);if (iType 0)cSource += AND State= + cType;/刷新ADO Data控件的记录源m_Adodc.SetRecordSource(cSource);m_Adodc.Refresh();2.OnModiButton() 函数当用户单击“修改”按钮时,将执行OnModiButton() 函数,对应的代码如下:void CEmpManDlg:OnModiButt

33、on() UpdateData(TRUE);if (m_Adodc.GetRecordset().GetEof()MessageBox(请选择要修改的记录!);return;/读取选择员工的记录CEmployees emp;emp.GetData(m_datagrid.GetItem(0);/将员工数据读取到编辑对话框中CEmpEditDlg dlg;dlg.EmpId = emp.GetEmp_Id();dlg.EmpName = emp.GetEmp_Name();dlg.DepId = emp.GetDep_Id();dlg.UpperId = emp.GetUpperId();dlg.

34、m_EmpName = emp.GetEmp_Name();dlg.cSex = emp.GetSex();dlg.m_Nation = emp.GetNationality();/设置日期数据int yy=atoi(emp.GetBirth().Left(4);int mm=atoi(emp.GetBirth().Mid(6,2);int dd=atoi(emp.GetBirth().Right(2);CTime t(yy,mm,dd,0,0,0);dlg.m_Birth = t;dlg.m_Marital = emp.GetMarital_Condition();dlg.m_Politic

35、al = emp.GetPolitical_Party();dlg.m_Culture = emp.GetCulture_Level();dlg.m_Family = emp.GetFamily_Place();dlg.m_Badge = emp.GetBadgeId();dlg.m_Idcard = emp.GetId_Card();dlg.m_Office = emp.GetOffice_phone();dlg.m_Mobile = emp.GetMobile();dlg.m_File = emp.GetFiles_Keep_Org();dlg.m_Hukou = emp.GetHukou

36、(); /设置日期数据yy=atoi(emp.GetHireDate().Left(4);mm=atoi(emp.GetHireDate().Mid(6,2);dd=atoi(emp.GetHireDate().Right(2);CTime tt(yy,mm,dd,0,0,0);dlg.m_HireDate = tt;dlg.m_Position = emp.GetPosition();dlg.m_Title = emp.GetTitle();CString cId;cId.Format(%d, emp.GetUpperId();dlg.m_Upper = emp.GetName(cId);d

37、lg.m_Contract = emp.GetContract_Duration();dlg.iState = emp.GetState();dlg.m_Memo = emp.GetMemo();dlg.m_Fillperson = emp.GetFillin_Person();dlg.m_Filltime = emp.GetFillin_Time();if (dlg.DoModal() = IDOK)Refresh_Data();以上的过程已经实现了员工基本信息的管理。4.3.3 设计员工调转部门对话框创建一个对话框,对话框ID属性设置为IDD_TRANSFER_DIALOG,对应的类为CT

38、ransferDlg。对话框IDD_TRANSFER_DIALOG的布局,如图4.8所示:图4.8 员工部门调转程序将调用CEmployees:sql_updataDep() 函数更新部门编号。为了能够在员工信息管理窗口中调用IDD_TRANSFER_DIALOG对话框,在对话框IDD_TRANSFER_DIALOG中添加的代码,如下:void CEmpManDlg:OnTransferButton() / TODO: Add your control notification handler code hereif (m_Adodc.GetRecordset().GetEof()Messag

39、eBox(请选择记录!);return;/读取选择员工的记录CEmployees emp;emp.GetData(m_datagrid.GetItem(0);CString cDepId;cDepId.Format(%d, emp.GetDep_Id();CDepartments dep;dep.GetData(cDepId);/将员工数据读取到调转对话框中CTransferDlg dlg;dlg.m_Old = dep.GetDep_name();dlg.DepId = emp.GetDep_Id();dlg.cEmpId = m_datagrid.GetItem(0);if (dlg.Do

40、Modal() = IDOK)Refresh_Data();程序将从DataGrid表格中读取当前选择的员工信息,并将部门信息赋值到对话框IDD_TRANSFER_DIALOG中。如果用户在对话框IDD_TRANSFER_DIALOG中单击“确定”按钮,则调用Refresh_Data() 函数刷新员工列表。4.4员工照片管理模块设计4.4.1 保存BMP图像在Visual C+中保存图像的过程如下:(1) 打开选择文件对话框,选择一个BMP文件;(2) 将文件读取到一个字符型缓冲区中;、(3) 为了在Visual C+中中显示BMP图像,需要将字符型缓冲区中的数据转换为HBITMAP类型的数据

41、,这个过程中涉及到Visual C+中一些处理BMP位图的类;(4) 激活OnPaint() 函数,显示图像;(5) 将当前员工记录读取到一个_RecordsetPtr对象中,然后调用AppendChunk() 方法将图像数据写入数据库。为了使对话框的每个位置都能访问到HBITMAP格式的BMP图像数据,在EmpEditDlg.h中添加一个公共变量,代码如下:HBITMAP m_hBitmap;/定义一个位图句柄,用于保存读取的位图当用户对话框IDD_EMPEDIT_DIALOG中单击“设置”按钮时,将执行OnSetphotoButton() 函数,对应的代码如下:void CEmpEditD

42、lg:OnSetphotoButton() /激活OnPaint()函数,显示图像Invalidate();/ 将图像数据保存到数据库中 /将当前员工记录读取到m_pRs对象中CString cEmpId;cEmpId.Format(%d, EmpId);/连接数据库ADOConn m_AdoConn;m_AdoConn.OnInitADOConn();/设置SELECT语句_bstr_t vSQL;vSQL = SELECT * FROM Employees WHERE Emp_id= + cEmpId;/执行SELETE语句_RecordsetPtrm_pRs;m_pRs = m_AdoC

43、onn.GetRecordSet(vSQL);psa = SafeArrayCreate(VT_UI1, 1, rgsabound); /创建数组for (long i = 0; i GetFields()-GetItem(Photo)-AppendChunk(varBLOB);/更新数据库m_pRs-Update();/断开与数据库的连接m_AdoConn.ExitConnect();将BMP文件数据从m_pBuffer中转换到m_hBitMap位图句柄的目的不是为了保存数据,而是为了在对话框中显示BMP格式的图像。4.4.2 显示BMP图像当刷新对话框界面时,将执行OnPaint() 函数

44、,可以在此处添加显示BMP图像的代码,内容如下:void CEmpEditDlg:OnPaint() CPaintDC dc(this); / device context for paintingint x=512, y=24;int iWidth=72, iHeight=79;/ TODO: Add your message handler code hereif(!m_hBitmap) /如果内存中没有BMP数据,则返回return;HBITMAP tmpBitmap; /用于保存输出到屏幕的BMP数据CDC MemDC; /CDC对象,用于输出到屏幕MemDC.CreateCompat

45、ibleDC(&dc);tmpBitmap = (HBITMAP)MemDC.SelectObject(m_hBitmap);dc.BitBlt(x,y,iWidth,iHeight,&MemDC,0,0,SRCCOPY);MemDC.SelectObject(tmpBitmap);/ Do not call CDialog:OnPaint() for painting messages4.4.3从数据库中读取BMP图像 在本实例中,从数据库中读取并显示BMP图像的方法如下:(1) 如果当前状态为插入新记录,则不读取BMP图像;(2) 清除原来保存图像数据的HBITMAP对象,以便保存新的图像

46、数据;(3) 将当前员工记录读取到一个_RecordsetPtr对象中,以便通过GetChunk() 函数读取图像数据;(4) 通过GetChunk() 函数读取图像数据到_variant_t类型的变量中;(5) 将数据复制到字符型缓冲区m_pBuffer中;(6) 将数据从字符型缓冲区m_pBuffer转换到HBITMAP对象m_hBitmap中,从而调用OnPaint() 函数时将其显示在屏幕上。从数据库中读取BMP图像的代码应该包含在OnInitDialog() 函数中,内容如下:BOOL CEmpEditDlg:OnInitDialog() /将当前员工记录读取到m_pRs对象中CSt

47、ring cEmpId;cEmpId.Format(%d, EmpId);/连接数据库ADOConn m_AdoConn;m_AdoConn.OnInitADOConn();/设置SELECT语句_bstr_t vSQL;vSQL = SELECT * FROM Employees WHERE Emp_id= + cEmpId;/执行SELETE语句_RecordsetPtrm_pRs;m_pRs = m_AdoConn.GetRecordSet(vSQL);if(lDataSize 0)/从图像字段中读取数据到varBLOB中_variant_t varBLOB;varBLOB=m_pRs-

48、GetFields()-GetItem(Photo)-GetChunk(lDataSize); if(varBLOB.vt = (VT_ARRAY | VT_UI1)if(m_pBuffer = new charlDataSize+1)/分配必要的存储空间char *pBuf = NULL;SafeArrayAccessData(varBLOB.parray,(void *)&pBuf); memcpy(m_pBuffer,pBuf,lDataSize); /复制数据到缓冲区m_pBufferSafeArrayUnaccessData (varBLOB.parray);/根据bfOffBits

49、属性将指针移至文件头后lpDIBBits=(m_pBuffer)+(BITMAPFILEHEADER*)m_pBuffer)-bfOffBits;CClientDC dc(this); /生成一个与当前窗口相关的CClientDC,用于管理输出设置 /生成DIBitmap数据m_hBitmap=CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS); return TRUE; 第5章 总结这次作业,总的下来,感觉不易。一开始,感觉学的云里雾里,不知道用什么去写一个系统。开始想用Java去做,但后

50、来想来想去Java不是很懂,还是选择了C+。这次大作业只要综合应用数据库、SQLServer2005、学生管理等知识。使我们所学知识得到延伸与拓展,也提高了我们的综合实践能力。一周的时间里,我就差不多完成了这个系统。我们做了一个人事管理系统,我们所做的内容是从数据库、数据表的创建和修改开始的,表是建立关系数据库的基本结构,用来存储数据具有已定义的属性,在表的操作过程中,有查看表信息、查看表属性、修改表中的数据、删除表中的数据及修改表和删除表的操作。本系统具有以下特点: (1) 具有友好的用户界面。系统以窗口方式来实现用户数据的录入,提供给用户灵活的查询界面,统计结果也以图表方式显示,方便了用户

51、的使用。 (2) 系统具有通用性。系统针对一般人事管理模式进行开发,适合大多数企业的实际使用。 (3) 具有模糊查询功能,处理速度快。(4) 采用面向对象技术和流行的软件工具,系统具有较好的适应性和可扩展性。在这次做那个系统的过程中,做的也不是很顺利,其中也遇到了许多问题,通过反反复复的看书,并且向同学请教,把相关的知识复习了一遍,这也是一种很大的收获。至少我们在做的过程中学会了思考,就像在做这个人事管理系统的时候,我们在做之前就要有一个方案,设计一个步骤,先开始进行需求分析,接着进行概念模型设计,其次进行逻辑结构设计,最后我们在创建数据库脚本文件。在创建的过程中,是我们问题最多的步骤,通过做

52、题,我们发现了自己的不足,这也与我们平时上课有关,许多学过的知识,转眼就忘,而且也没有在空余时间去复习,并且对于一些重点的知识,我们也掌握的不好,许多的语法知识和基本语句都会出错。对于这种情况,我们就得好好反省自己,在以后的学习当中,我们就要补其不足,掌握更好的学习方法。 其实,不管我们做什么事情,我们都应该想清楚,首先干什么,其次干什么,有了一个合理的规划,我们做起来也就比较的有了方向,有了目标,再向目标去奋斗,这样我们才能更好的把握自己,使自己更好的发展。参考文献1启明工作室.Visual C+ +SQL Server 数据库应用系统开发与实例.人民邮电出版社.2004年7月2朱莉, 阳桑, 金双平.企业人事管理系统的设计与实现.2006- 12- 033张立富, 吴宇红,陆夏美.人事管理系统.黑龙江水专学报.002 年6 月4麻胜远.人事管理系统设计,20055 乔月圆.Visual C+ + 在人事管理系统设计中的应用.山西农业大学学报.(2004) 03 - 0306 036雷灵明,曹步青.人事管理系统设计与实现.网络工程7肖磊.人事管理系统的分析与设计.山东大学:网络出版年期.2007.

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!