收藏 分销(赏)

VC课设公司员工工资管理系统.doc

上传人:丰**** 文档编号:9720673 上传时间:2025-04-04 格式:DOC 页数:22 大小:1.15MB 下载积分:10 金币
下载 相关 举报
VC课设公司员工工资管理系统.doc_第1页
第1页 / 共22页
VC课设公司员工工资管理系统.doc_第2页
第2页 / 共22页


点击查看更多>>
资源描述
VC++课设-公司员工工资管理系统 公司员工工资管理系统 1课程设计目的 公司员工工资管理系统是典型的人员信息管理系统,其主要的功能是把人员管理过程信息化,自动化以减轻人工的重复繁琐劳动。其开发主要包括后台数据库的建立维护以及前台应用程序的开发两个方面。对于后台数据库要求建立一个稳定的数据库,保持数据的一致性,完整性,安全性也是必要的。对于前台要求稳定,实用,易用。 本系统是为公司人事管理的各种工作而设计的。根据需求分析,需要实现对系统用户,基本信息(公司部门,人员相关信息等),考勤考评的管理。 经过分析,本系统使用SQL SERVER做为其后台数据库,采用ADO数据库链接技术;Visual C++做为开发工具, 提供了相当齐备的类库、友好的编程界面和多种多样的数据库访问技术。其中ADO使得编写数据库应用程序变得简单容易。 公司人事管理系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性,完整性,安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。 2功能描述 系统功能分析 企业工资管理系统需要完成的功能主要有 * 系统数据初始化 * 员工基本信息数据的输入 * 员工基本信息数据的修改、删除 * 企业工资的基本设定 * 员工工资的浏览 * 员工个人工资表的查询 3方案论证 3.1总体设计 系统功能模块设计如下图所示。 员工工资管理系 统 工资汇总 工资基本设置 员工信息 资料输入 员工增删 员工查询 员工修改 基本工资 员工奖金 工资福利 个人罚款 工资总表 个 人工资查询 图1 系统功能模块 3.2详细设计 3.2.1数据库设计 通过对企业工资管理的内容和数据流程分析,设计的数据项和数据结构如下。 * 员工基本状况包括的数据库项有员工号、员工姓名、性别、所在部门、生日、家庭住址、联系电话等。因为本程序中只涉及到工资管理,故为了说明简单在数据库中只包含进了与员工的工资相关的资料,如入厂时间、所在部门、岗位、工资级别等。 * 工资级别的工资金额,包括的数据库项有工资技能等级、工资额。 * 企业部门及工作岗位信息包括的数据库项有部门名称、工作岗位名称、岗位工资 等。 * 公司福利金额包含的数据库项有福利值。 * 工资信息包含的数据库项有员工号、员工姓名、员工基础工资、公司福利、员工 实得工资。 3.2.2 数据库概念结构设计 根据公司员工信息管理系统设计的信息数据和系统功能模块结构,公司员工信息管理系统数据库包括工资详情表、登陆框结构表、工资详情表、员工信息表。为数据库员工工资表添加如下数据表。 表1 工资详情表结构 字段名称 数据类型 说明 编号 自动编号 ID 文本 员工号 departmen 文本 部门号 name 文本 姓名 salary 数字 工资 remark 文本 备注 表2 登陆框结构 字段名称 数据类型 说明 Name 文本 用户名 password 文本 密码 表3 工资详情表结构 字段名称 数据类型 说明 编号 自动编号 ID 文本 员工号 department 文本 部 号 basic 数字 基本工资 bonus 数字 奖金 welfare 数字 福利 fine 数字 罚款 total 数字 总工资 表4 员工信息表结构 字段名称 数据类 说明 编号 自动编号 ID 文本 员工号 department 文本 部门号 name 文本 姓名 sex 文本 性别 tob 文本 职务 tel 文本 电话 address 文本 住址 3.3 创建数据源 为数据库创建用户DSN,数据源名称为“员工工资表”。 图2 创建数据源 3.3.1 数据库结构的实现 在需求分析、概念结构设计的继承上得数据库的逻辑结构之后,我们就可以在数据库系统中实现该逻辑结构。数据库的逻辑结构直接使用项目管理器来实现在这之前先建一个名为salary 工资的项目保存在磁盘,如D \salary 。存储为 D:\salary\database\salary.dbc。为数据库添加数据表存储为D\salary\database\ tms.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("要查询的员工号不能为空"); 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); else MessageBox("没有查到你要找员工的记录!"); } (2)添加、修改、删除控件的设计 添加一对话框资源ID 号为IDD_SALARY_TABLE ,将表单资源的控件复制到对话框即可,然后为对话框资源创建一个对话框类CSalaryDlg,在MFC 中为控件添加成员变量如下图所示。 图4 员工工资表界面 图5 为控件添加成员变量 然后为IDOK 添加BN_CLICKED 消息映射并添加下列代码: void CSalaryDlg::OnOK() { UpdateData(); m_strID.TrimLeft(); m_strDepartment.TrimLeft(); if(m_strID.IsEmpty()) MessageBox("员工号不能为空!"); else if(m_strDepartment.IsEmpty()) MessageBox("部门号不能为空!"); else CDialog::OnOK(); } 然后CEx_View 类中的三个按扭IDC_REC_ADDIDC_REC_EDITIDC_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() { CSalaryDlg 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; 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(); else m_pSet->MoveFirst(); UpdateData(FALSE); } (3)工资详情模块的设计 图6 工资详情设计 为对话框资源创建一个对话框类CDetailDlg,在MFC 中为控件添加成员变量如下图所示。 图7 为控件添加成员变量 为表单资源的按扭添加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 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=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); } else MessageBox("查询的员工记录不存在!"); 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 if(m_strDepartment.IsEmpty()) MessageBox("部门号不能为空!"); else CDialog::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 =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_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; cSet.Open(); cSet.m_strFilter="ID='"+m_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.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; } void CDengluDlg::OnOK() CWnd *m_pMainWnd; if(!check()) return; CDialog::OnOK(); m_pMainWnd=AfxGetMainWnd(); CDialog::OnOK(); } 4 系统测试 4.1系统测试结果 系统测试结果如图所示。 图10 进入登陆框测试 用户进入主界面如下图所示。 图11 进入主界面测试 4.2 异常处理 由于时间匆忙以及本人水平有限,本程序存在的问题比较多,自认为主要有以下几个方面。 (1)程序没有对输入的员工信息诸如 工号、姓名、部门号等进行检测其合理性所以在工号姓名、部门号等中可以输入字母或在名字中可以输入数字就在所难免了 作为一个员工信息管理,这样的安全性是致命的。要解决这个问题就要在重载函数 中加入各种判断语句工作量比较大。 (2)由于水平有限没有制作图形界面多媒体等美化程序的设置只是一些简单的对 话框和界面,看起来难免有些单调不够完善。 (3)程序的功能也是一个问题员工的信息太简单,可进行的操作也少可能有些功能 实现起来显得有些别扭。 5心得体会 通过这次课题设计,我觉得做好一个程序,灵活运用是关键。把基础学好不一定能把程序编好,但基础知识不好,一定编不出好程序。做大规模的程序不只是一个人努力就行了,一定要有团队合作能力。编程最主要是思路清晰,只要你把思路理顺了,就有利于你在编程的过程中少走弯路。 要想学好这门课我觉得除了在课堂上认真学习之外也要做好以下几点: 1.认真对待每一个程序的编写 2.做好对每一个所编程序的总结 3.写程序尽量要规范、严谨,效率尽量要高 4.养成自我测试的习惯 5.多看一些别人编的程序,把好的思路和方法记下来,以备不时之需 6.要有恃之以恒的精神以及严谨的科学研究作风 在努力奋斗中,我终于把本次课题设计顺利完成。回想起课题设计过程中面对程序错误一大堆的失望与成功完成程序中每一个模块的喜悦时,我真正的体会到了:细节决定成败;学术不管是哪一门,只要你用心去对待它,它也会用心地来回报你,这也正印证了一句话:“一分耕耘一分收获”。 6 参考文献 [1] 郑阿奇,丁有和.Visual C++教程[M].北京:清华大学出版社,2016.3:346-349 [2] 马石安,魏文平.Visual C++程序设计与应用教程题解及课程设计[M].北京:清华大学出版社,2015.7:101-230 [3] 郑莉. C++语言程序设计案例教程[M].北京:清华大学出版社,2016.7:24-139 [4] 黄明.面向对象程序设计习题详解[M].北京:机械工业出版社,2015.9:32-105 [5] 徐士良.C常用算法程序集[M].北京:清华大学出版社,2015.9:29-91 [6] 黄维通.Visual C++面向对象与可视化设计(第2版)[M].北京: 清华大学出版社,2014.12:36-105 7 附录(部分源代码) 在CEX_Viewl 类中添加按扭控件查询IDC_BUTTON_QUERYY 的BN_CLICKED 消息映射并添加下列代码。 void CEx_View::OnButtonQuery() { UpdateData(); m_strQuery.TrimLeft (); 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); else MessageBox("没有查到你要找员工的记录!"); } 然后为IDOK 添加BN_CLICKED 消息映射并添加下列代码: void CSalaryDlg::OnOK() { UpdateData(); m_strID.TrimLeft(); m_strDepartment.TrimLeft(); if(m_strID.IsEmpty()) MessageBox("员工号不能为空!"); else if(m_strDepartment.IsEmpty()) MessageBox("部门号不能为空!"); else CDialog::OnOK(); } 然后CEx_View 类中的三个按扭IDC_REC_ADDIDC_REC_EDITIDC_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() { CSalaryDlg 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; 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(); else m_pSet->MoveFirst(); UpdateData(FALSE); } 为表单资源的按扭添加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 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=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); } else MessageBox("查询的员工记录不存在!"); if(cSet.IsOpen())cSet.Close(); } 然后为IDOK 添加BN_CLICKED 消息映射,并添加下列代码: void CDtabelDlg::OnOK() { UpdateData(); m_strID.TrimLeft(); m_strDepartment.TrimLeft(); if(m_strID.IsEmpty()) MessageBox("员工号不能为空!"); else if(m_strDepartment.IsEmpty()) MessageBox("部门号不能为空!"); else CDialog::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 =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_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; cSet.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; } 22 / 22
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服