《VC++课设-公司员工工资管理系统(共22页).doc》由会员分享,可在线阅读,更多相关《VC++课设-公司员工工资管理系统(共22页).doc(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上公司员工工资管理系统1课程设计目的公司员工工资管理系统是典型的人员信息管理系统,其主要的功能是把人员管理过程信息化,自动化以减轻人工的重复繁琐劳动。其开发主要包括后台数据库的建立维护以及前台应用程序的开发两个方面。对于后台数据库要求建立一个稳定的数据库,保持数据的一致性,完整性,安全性也是必要的。对于前台要求稳定,实用,易用。本系统是为公司人事管理的各种工作而设计的。根据需求分析,需要实现对系统用户,基本信息(公司部门,人员相关信息等),考勤考评的管理。经过分析,本系统使用SQL SERVER做为其后台数据库,采用ADO数据库链接技术;Visual C+做为开发工具,
2、 提供了相当齐备的类库、友好的编程界面和多种多样的数据库访问技术。其中ADO使得编写数据库应用程序变得简单容易。 公司人事管理系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性,完整性,安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。2功能描述系统功能分析企业工资管理系统需要完成的功能主要有 * 系统数据初始化 * 员工基本信息数据的输入 * 员工基本信息数据的修改、删除 * 企业工资的基本设定 * 员工工资的浏览 * 员工个人工资表的查询3方案论证 3.1总体设计系统功能模块设计如下图所示。员工工资管理系
3、统工资汇总工资基本设置员工信息资料输入员工增删员工查询员工修改基本工资员工奖金工资福利个人罚款工资总表个人工资查询图1 系统功能模块3.2详细设计3.2.1数据库设计通过对企业工资管理的内容和数据流程分析,设计的数据项和数据结构如下。* 员工基本状况包括的数据库项有员工号、员工姓名、性别、所在部门、生日、家庭住址、联系电话等。因为本程序中只涉及到工资管理,故为了说明简单在数据库中只包含进了与员工的工资相关的资料,如入厂时间、所在部门、岗位、工资级别等。* 工资级别的工资金额,包括的数据库项有工资技能等级、工资额。* 企业部门及工作岗位信息包括的数据库项有部门名称、工作岗位名称、岗位工资等。*
4、公司福利金额包含的数据库项有福利值。* 工资信息包含的数据库项有员工号、员工姓名、员工基础工资、公司福利、员工实得工资。3.2.2 数据库概念结构设计根据公司员工信息管理系统设计的信息数据和系统功能模块结构,公司员工信息管理系统数据库包括工资详情表、登陆框结构表、工资详情表、员工信息表。为数据库员工工资表添加如下数据表。表1 工资详情表结构字段名称数据类型说明编号自动编号ID文本员工号departmen文本部门号name文本姓名salary数字工资remark文本备注表2 登陆框结构字段名称数据类型说明Name文本用户名password文本密码表3 工资详情表结构字段名称数据类型说明编号自动编
5、号ID文本员工号department文本部号basic数字基本工资bonus数字奖金welfare数字福利fine数字罚款total数字总工资表4 员工信息表结构字段名称数据类说明编号自动编号ID文本员工号department文本部门号name文本姓名sex文本性别tob文本职务tel文本电话address文本住址3.3 创建数据源为数据库创建用户DSN,数据源名称为“员工工资表”。图2 创建数据源3.3.1 数据库结构的实现在需求分析、概念结构设计的继承上得数据库的逻辑结构之后,我们就可以在数据库系统中实现该逻辑结构。数据库的逻辑结构直接使用项目管理器来实现在这之前先建一个名为salary
6、工资的项目保存在磁盘,如D salary 。存储为D:salarydatabasesalary.dbc。为数据库添加数据表存储为Dsalarydatabasetms.dbf.3.3.2程序界面设计 (1)员工工资模块设计图3 员工工资管理模块查询控件的设计在CEX_Viewl 类中添加按扭控件查询IDC_BUTTON_QUERYY 的BN_CLICKED 消息映射并添加下列代码。void CEx_View:OnButtonQuery()UpdateData();m_strQuery.TrimLeft ();if(m_strQuery.IsEmpty ()MessageBox(要查询的员工号不能
7、为空);return;if(m_pSet-IsOpen ()m_pSet-Close();m_pSet-m_strFilter.Format(ID=%s,m_strQuery);m_pSet-m_strSort=department;m_pSet-Open();if(!m_pSet-IsEOF()UpdateData(FALSE);elseMessageBox(没有查到你要找员工的记录!);(2)添加、修改、删除控件的设计添加一对话框资源ID 号为IDD_SALARY_TABLE ,将表单资源的控件复制到对话框即可,然后为对话框资源创建一个对话框类CSalaryDlg,在MFC 中为控件添加成
8、员变量如下图所示。图4 员工工资表界面图5 为控件添加成员变量然后为IDOK 添加BN_CLICKED 消息映射并添加下列代码:void CSalaryDlg:OnOK()UpdateData();m_strID.TrimLeft();m_strDepartment.TrimLeft();if(m_strID.IsEmpty()MessageBox(员工号不能为空!);elseif(m_strDepartment.IsEmpty()MessageBox(部门号不能为空!);elseCDialog:OnOK();然后CEx_View 类中的三个按扭IDC_REC_ADDIDC_REC_EDITI
9、DC_REC_DEL 添加BN_CLICKED 消息映射,并添加下列代码:void CEx_View:OnRecAdd()CSalaryDlg dlg;if(dlg.DoModal()=IDOK)m_pSet-AddNew();m_pSet-m_department =dlg.m_strDepartment;m_pSet-m_ID =dlg.m_strID;m_pSet-m_name =dlg.m_strName;m_pSet-m_salary =dlg.m_fSalary;m_pSet-Update();m_pSet-Requery();void CEx_View:OnRecEdit()CS
10、alaryDlg dlg;dlg.m_strDepartment =m_pSet-m_department;dlg.m_strID =m_pSet-m_ID;dlg.m_strName =m_pSet-m_name;dlg.m_fSalary =m_pSet-m_salary;if(dlg.DoModal()=IDOK)m_pSet-Edit();m_pSet-m_department =dlg.m_strDepartment;m_pSet-m_ID =dlg.m_strID;m_pSet-m_name =dlg.m_strName;m_pSet-m_salary =dlg.m_fSalary
11、;m_pSet-Update();m_pSet-Requery();UpdateData(FALSE);void CEx_View:OnRecDel()CRecordsetStatus status;m_pSet-GetStatus(status);m_pSet-Delete();if(status.m_lCurrentRecord=0)m_pSet-MoveNext();elsem_pSet-MoveFirst();UpdateData(FALSE);(3)工资详情模块的设计图6 工资详情设计为对话框资源创建一个对话框类CDetailDlg,在MFC 中为控件添加成员变量如下图所示。图7 为
12、控件添加成员变量为表单资源的按扭添加BN_CLICKED 消息映射并添加下列代码。void CEx_View:OnButtonDetail()CDetailDlg dlg;dlg.DoModal();在CDetailDlg 类中添加按扭控件查询IDC_BUTTON_QUERYY2 的BN_CLICKED 消息映射并添加下列代码void CDetailDlg:OnButtonQuery2()UpdateData();m_strQuery2.TrimLeft ();if(m_strQuery2.IsEmpty ()MessageBox(要查询的员工号不能为空!);return;CString st
13、r;str=m_strQuery2;CDetailSet cSet;cSet.m_strFilter.Format(ID=%s,str);cSet.Open();if(!cSet.IsEOF()m_strDepartment=cSet.m_department;m_fBasic=cSet.m_basic;m_fBonus=cSet.m_bonus;m_fWelfare=cSet.m_welfare;m_fFine=cSet.m_fine;m_fTotal=cSet.m_total;m_strID=cSet.m_ID;UpdateData(FALSE);elseMessageBox(查询的员工记
14、录不存在!);if(cSet.IsOpen()cSet.Close();添加一对话框资源ID 号为IDD_DETAIL_TABEL 将工资详情的控件复制到对话框即可。然后为话框资源创建一个对话框类CDtabelDlg 在MFC 中为控件添加成员变量如下图所示。图8 工资详情表界面然后为IDOK 添加BN_CLICKED 消息映射,并添加下列代码:void CDtabelDlg:OnOK()UpdateData();m_strID.TrimLeft();m_strDepartment.TrimLeft();if(m_strID.IsEmpty()MessageBox(员工号不能为空!);else
15、if(m_strDepartment.IsEmpty()MessageBox(部门号不能为空!);elseCDialog:OnOK();然后CDetailDlg 类中的三个按扭,IDC_REC_ADD,IDC_REC_EDIT,IDC_REC_DEL 添加BN_CLICKED 消息映射,并添加下列代码:void CDetailDlg:OnButtonAdd2()CDtabelDlg dlg;if(dlg.DoModal()=IDOK)CDetailSet pSet;pSet.AddNew();pSet.m_department =dlg.m_strDepartment;pSet.m_ID =d
16、lg.m_strID;pSet.m_basic =dlg.m_fBasic;pSet.m_bonus =dlg.m_fBonus;pSet.m_welfare =dlg.m_fWelfare;pSet.m_fine =dlg.m_fFine;pSet.m_total =dlg.m_fTotal;pSet.Update();pSet.Requery();void CDetailDlg:OnButtonEdit2()CDetailSet pSet;pSet.Open();UpdateData();pSet.Edit();pSet.m_department=m_strDepartment;pSet.
17、m_ID= m_strID;pSet.m_basic=m_fBasic;pSet.m_bonus= m_fBonus;pSet.m_welfare=m_fWelfare;pSet.m_fine= m_fFine;pSet.m_total= m_fTotal;UpdateData(FALSE);pSet.Update();pSet.Requery();pSet.Close();MessageBox(修改成功);void CDetailDlg:OnButtonDel2()UpdateData();CDetailSet cSet;cSet.Open();cSet.m_strFilter=ID=+m_
18、strID+;cSet.Requery();cSet.Delete();cSet.Close();UpdateData(false);(4) 登陆框的设计如上的方法依次为其创建对话框类DengluDlg 和CRecordSet 派生类CDengluSet 在MFC中为控件添加成员变量。登陆框界面如下图所示。图9 登陆框界面然后为IDOK 添加BN_CLICKED 消息映射,并添加下列代码:BOOL CDengluDlg:check()UpdateData();CDengluSet pSet;pSet.Open();if(m_stryonghu.IsEmpty()|m_strmima.IsEmp
19、ty() MessageBox(请输用户名和密码!);return false;pSet.m_strFilter.Format(name=%s,m_stryonghu);pSet.Requery();if(pSet.m_name!=m_stryonghu|pSet.m_password!=m_strmima) MessageBox(密码或用户名有错!);return false;return true;void CDengluDlg:OnOK()CWnd *m_pMainWnd;if(!check()return;CDialog:OnOK();m_pMainWnd=AfxGetMainWnd(
20、);CDialog:OnOK();4 系统测试4.1系统测试结果系统测试结果如图所示。图10 进入登陆框测试用户进入主界面如下图所示。图11 进入主界面测试4.2 异常处理由于时间匆忙以及本人水平有限,本程序存在的问题比较多,自认为主要有以下几个方面。(1)程序没有对输入的员工信息诸如 工号、姓名、部门号等进行检测其合理性所以在工号姓名、部门号等中可以输入字母或在名字中可以输入数字就在所难免了作为一个员工信息管理,这样的安全性是致命的。要解决这个问题就要在重载函数中加入各种判断语句工作量比较大。(2)由于水平有限没有制作图形界面多媒体等美化程序的设置只是一些简单的对话框和界面,看起来难免有些单
21、调不够完善。(3)程序的功能也是一个问题员工的信息太简单,可进行的操作也少可能有些功能实现起来显得有些别扭。5心得体会通过这次课题设计,我觉得做好一个程序,灵活运用是关键。把基础学好不一定能把程序编好,但基础知识不好,一定编不出好程序。做大规模的程序不只是一个人努力就行了,一定要有团队合作能力。编程最主要是思路清晰,只要你把思路理顺了,就有利于你在编程的过程中少走弯路。 要想学好这门课我觉得除了在课堂上认真学习之外也要做好以下几点:1.认真对待每一个程序的编写 2.做好对每一个所编程序的总结 3.写程序尽量要规范、严谨,效率尽量要高 4.养成自我测试的习惯 5.多看一些别人编的程序,把好的思路
22、和方法记下来,以备不时之需 6.要有恃之以恒的精神以及严谨的科学研究作风 在努力奋斗中,我终于把本次课题设计顺利完成。回想起课题设计过程中面对程序错误一大堆的失望与成功完成程序中每一个模块的喜悦时,我真正的体会到了:细节决定成败;学术不管是哪一门,只要你用心去对待它,它也会用心地来回报你,这也正印证了一句话:“一分耕耘一分收获”。6 参考文献1 郑阿奇,丁有和.Visual C+教程M.北京:清华大学出版社,2016.3:346-3492 马石安,魏文平.Visual C+程序设计与应用教程题解及课程设计M.北京:清华大学出版社,2015.7:101-2303 郑莉. C+语言程序设计案例教程
23、M.北京:清华大学出版社,2016.7:24-1394 黄明.面向对象程序设计习题详解M.北京:机械工业出版社,2015.9:32-1055 徐士良.C常用算法程序集M.北京:清华大学出版社,2015.9:29-916 黄维通.Visual C+面向对象与可视化设计(第2版)M.北京: 清华大学出版社,2014.12:36-1057 附录(部分源代码)在CEX_Viewl 类中添加按扭控件查询IDC_BUTTON_QUERYY 的BN_CLICKED 消息映射并添加下列代码。void CEx_View:OnButtonQuery()UpdateData();m_strQuery.TrimLef
24、t ();if(m_strQuery.IsEmpty ()MessageBox(要查询的员工号不能为空);return;if(m_pSet-IsOpen ()m_pSet-Close();m_pSet-m_strFilter.Format(ID=%s,m_strQuery);m_pSet-m_strSort=department;m_pSet-Open();if(!m_pSet-IsEOF()UpdateData(FALSE);elseMessageBox(没有查到你要找员工的记录!);然后为IDOK 添加BN_CLICKED 消息映射并添加下列代码:void CSalaryDlg:OnOK(
25、)UpdateData();m_strID.TrimLeft();m_strDepartment.TrimLeft();if(m_strID.IsEmpty()MessageBox(员工号不能为空!);elseif(m_strDepartment.IsEmpty()MessageBox(部门号不能为空!);elseCDialog:OnOK();然后CEx_View 类中的三个按扭IDC_REC_ADDIDC_REC_EDITIDC_REC_DEL 添加BN_CLICKED 消息映射,并添加下列代码:void CEx_View:OnRecAdd()CSalaryDlg dlg;if(dlg.Do
26、Modal()=IDOK)m_pSet-AddNew();m_pSet-m_department =dlg.m_strDepartment;m_pSet-m_ID =dlg.m_strID;m_pSet-m_name =dlg.m_strName;m_pSet-m_salary =dlg.m_fSalary;m_pSet-Update();m_pSet-Requery();void CEx_View:OnRecEdit()CSalaryDlg dlg;dlg.m_strDepartment =m_pSet-m_department;dlg.m_strID =m_pSet-m_ID;dlg.m_
27、strName =m_pSet-m_name;dlg.m_fSalary =m_pSet-m_salary;if(dlg.DoModal()=IDOK)m_pSet-Edit();m_pSet-m_department =dlg.m_strDepartment;m_pSet-m_ID =dlg.m_strID;m_pSet-m_name =dlg.m_strName;m_pSet-m_salary =dlg.m_fSalary;m_pSet-Update();m_pSet-Requery();UpdateData(FALSE);void CEx_View:OnRecDel()CRecordse
28、tStatus status;m_pSet-GetStatus(status);m_pSet-Delete();if(status.m_lCurrentRecord=0)m_pSet-MoveNext();elsem_pSet-MoveFirst();UpdateData(FALSE);为表单资源的按扭添加BN_CLICKED 消息映射并添加下列代码。void CEx_View:OnButtonDetail()CDetailDlg dlg;dlg.DoModal();在CDetailDlg 类中添加按扭控件查询IDC_BUTTON_QUERYY2 的BN_CLICKED 消息映射并添加下列代码
29、void CDetailDlg:OnButtonQuery2()UpdateData();m_strQuery2.TrimLeft ();if(m_strQuery2.IsEmpty ()MessageBox(要查询的员工号不能为空!);return;CString str;str=m_strQuery2;CDetailSet cSet;cSet.m_strFilter.Format(ID=%s,str);cSet.Open();if(!cSet.IsEOF()m_strDepartment=cSet.m_department;m_fBasic=cSet.m_basic;m_fBonus=cS
30、et.m_bonus;m_fWelfare=cSet.m_welfare;m_fFine=cSet.m_fine;m_fTotal=cSet.m_total;m_strID=cSet.m_ID;UpdateData(FALSE);elseMessageBox(查询的员工记录不存在!);if(cSet.IsOpen()cSet.Close();然后为IDOK 添加BN_CLICKED 消息映射,并添加下列代码:void CDtabelDlg:OnOK()UpdateData();m_strID.TrimLeft();m_strDepartment.TrimLeft();if(m_strID.Is
31、Empty()MessageBox(员工号不能为空!);elseif(m_strDepartment.IsEmpty()MessageBox(部门号不能为空!);elseCDialog:OnOK();然后CDetailDlg 类中的三个按扭,IDC_REC_ADD,IDC_REC_EDIT,IDC_REC_DEL 添加BN_CLICKED 消息映射,并添加下列代码:void CDetailDlg:OnButtonAdd2()CDtabelDlg dlg;if(dlg.DoModal()=IDOK)CDetailSet pSet;pSet.AddNew();pSet.m_department =
32、dlg.m_strDepartment;pSet.m_ID =dlg.m_strID;pSet.m_basic =dlg.m_fBasic;pSet.m_bonus =dlg.m_fBonus;pSet.m_welfare =dlg.m_fWelfare;pSet.m_fine =dlg.m_fFine;pSet.m_total =dlg.m_fTotal;pSet.Update();pSet.Requery();void CDetailDlg:OnButtonEdit2()CDetailSet pSet;pSet.Open();UpdateData();pSet.Edit();pSet.m_
33、department=m_strDepartment;pSet.m_ID= m_strID;pSet.m_basic=m_fBasic;pSet.m_bonus= m_fBonus;pSet.m_welfare=m_fWelfare;pSet.m_fine= m_fFine;pSet.m_total= m_fTotal;UpdateData(FALSE);pSet.Update();pSet.Requery();pSet.Close();MessageBox(修改成功);void CDetailDlg:OnButtonDel2()UpdateData();CDetailSet cSet;cSe
34、t.Open();cSet.m_strFilter=ID=+m_strID+;cSet.Requery();cSet.Delete();cSet.Close();UpdateData(false);void CDengluDlg:OnOK()CWnd *m_pMainWnd;if(!check()return;CDialog:OnOK();m_pMainWnd=AfxGetMainWnd();CDialog:OnOK();然后为IDOK 添加BN_CLICKED 消息映射,并添加下列代码:BOOL CDengluDlg:check()UpdateData();CDengluSet pSet;pSet.Open();if(m_stryonghu.IsEmpty()|m_strmima.IsEmpty() MessageBox(请输用户名和密码!);return false;pSet.m_strFilter.Format(name=%s,m_stryonghu);pSet.Requery();if(pSet.m_name!=m_stryonghu|pSet.m_password!=m_strmima) MessageBox(密码或用户名有错!);return false;return true;专心-专注-专业