员工工资管理系统课案(共21页).doc
精选优质文档-倾情为你奉上员工工资管理系统1课程设计的目的员工工资管理问题,一直是企业内的一个大问题。工资问题的有效解决将有利于管理者更好的管理企业,也有利于员工安心工作,所以对于一个企事业单位来说有一个好的工资管理系统是必不可少的。工资管理系统应包括员工的基本工资的浏览查询等功能。并且有一个方便易操作的界面对管理者来说是很必要的。本系统基于这些原因以精简的界面和方便易操作的设计思想设计了该小型的员工工资管理系统。本系统主要解决一般的企事单位内的工资管理问题,建立一个透明、相容、一致、易查的工资管理信息系统。本系统开发平台为Windows XP,程序设计设计语言采用Visual C+,数据库采用Mcrosoft Access,程序运行平台为Windows 2000/XP/7。本系统主要实现对员工工资的查询、添加、修改、删除和统计功能,通过对各个模块的设计来实现不同的功能。程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以应用在商业中解决实际问题。员工工资管理系统将达到以下几个目的:(1) 提供更好的服务员工工资管理系统可以迅速、有效地收集各种信息,加强内部的信息沟通。各种用户可以直接从系统中获得自己所需的各种信息,并根据相关的信息做出决策和相应的行动方案。(2) 降低成本员工工资管理系统通过减少员工工资管理工作的操作成本、降低员工流动率以及减少通信费用等达到降低企业运作成本的目的。2设计方案及论证2.1系统需求分析要实现一个软件系统,首先应该进行需求分析,这样才能令设计出的软件满足用户的各项功能。下面就对员工工资管理系统的设计进行需求分析。首先,因为工资是面向特定的某些对象的,所以人员进入系统应该进行身份验证。管理人员进入工资系统后,可以查看和编辑员工的工资,由于员工有很多,所以系统必须记录员工一些一般信息。至于工资,一般公司的工资是由很多部分组成,比如,基本工资、绩效、奖金、补助等等,还要扣除保险、水电等一些费用,这些都要让员工自己清楚的看到,所以要一一体现出来。最后一个工资计算体现出应发工资减掉扣除的工资的过程,最后给出实际发的工资。2.3系统的技术可行性(1)技术可行性系统的性质为管理软件,因而数据库的设计与操纵是系统设计的核心。我在半年时间学习了数据库的有关知识,具备一定的系统分析与设计能力,基本熟悉数据库的设计与操纵;因而该系统的实现在技术上是可行的。(2)人员可能性我有上机实验经验,目前时间充足,可以完成开发任务。我有深厚的文字功底,可以参与用户文档的制作、内部文档整理、后期测试等任务。2.4 总体设计程序设计设计语言采用Visual C+,数据库采用Mcrosoft Access,设计的员工工资管理系统,用户由系统的登录见面登录系统,输入密码,进入该员工工资管理系统的主界面,系统包括主界面、编辑界面、工资计算三个个部分,用户可根据自己的需求选择员工进行编辑和查询工资,结束后可退出该系统。1根据总体分析,得到系统的功能模块。如图1所示:员工工资管理系统用户登录界面退出用户登录主界面修改删除添加工资计算退出确定统计结果图1系统模块图2.5数据库设计(1)实体E-R图这一设计阶段是在需求分析的基础上,设计出能满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。E-R图为实体-联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。 将现实世界的实体,属性和联系转化为抽象的概括的概念模型。构成E-R图的基本要素是实体型、属性和联系。员工信息的实体-属性图,如图2所示。图2员工工资实体-属性图 选择“文件”“新建”菜单,在右边任务窗格中单击“空数据库”,弹出一个对话框,指定数据库名员工工资管理系统.mdb。单击“创建”按钮。就创建了数据库,该课程一共需要2张表,分别存放相应的数据信息,其中工资数据表是关键表,用于存放基础数据信息。它涉及职员信息和工资情况的表;另一张表用来存放登录的用户名和密码用来登录的时候用。2(2)员工的工资数据库表 员工的工资数据库表的设计界面如图3所示 图3工资数据表 员工工资数据库表的数据结构如表1所示表1员工工资数据库表字段名称字段类型字段大小员工编号字符型8部门编号字符型8工龄数值型1000姓名字符型10职称字符型12基础工资数值型10奖金数值型10车补数值型10饭补数值型10其他补助数值型10(3)员工的登录表员工的登录对话框记录着用户需要的登录的用户名和密码,表结构如图3所示:表2用户的登录表字段名称字段类型字段大小Username字符型10Password数值型6员工登录对话框表的设计界面如图4所示图4员工的登录数据表(4)ODBC数据源Windows中的ODBC组件是出现在系统的“控制面板”管理工具中。双击ODBC图标,进入ODBC数据源管理器。运行ODBC组件,进入ODBC数据源管理器。单击“添加”按钮,弹出有一驱动程序列表的“创建新数据源”对话框,在该对话框中选择Microsoft Access Driver。单击“完成”按钮,进入指定驱动程序的安装对话框,数据源名称设为“员工工资管理系统”,单击“选择”按钮将本实验中的数据库。单击“确定”按钮,刚才创建的用户数据源被添加在“ODBC数据源管理器”的“用户数据源”列表中。2.6具体界面设计打开计算机,启动Visual C+ 6.0系统创建一个单文档应用程序,在工程名称框中输入Win32应用程序项目名称员工工资管理系统。(1)登录界面的设计系统登录表单主要任务是输入密码,其作用是保护系统数据的安全性。只有合法用户才可以使用本系统。当系统运行时,首先打开登录窗体,只有有权限的用户才能进入系统。在【用户名】文本框中输入后按Tab键,程序将自动查询用户名并跳到【密码】文本框中,输入密码后按Enter键即可进入系统,登陆界面的实现如图5示:3 42015年12月29日李博课设图5 登陆界面具体的步骤如下:将本项目工作区窗口切换到ResourceView页面插入一个对话框资源,打开属性对话框,设置字体设置,向对话框中添加两个编辑框:“请输入用户名”( IDC_EDIT_USERNAME)、“请输入密码”( IDC_EDIT_USERPASSWD)为登陆界面对话框资源模板添加控件如表3所示。表3 登陆界面控件属性设置添加的控件ID号标题静态文本框IDC_STATIC用户名:静态文本框IDC_STATIC密码:编辑框IDC_EDIT_USERNAME编辑框IDC_EDIT_USERPASSWD按钮IDC_BUTTON_OK确定按钮IDC_BUTTON_CANCEL取消双击对话框模板或按【Ctrl+W】快捷键为对话框资源建立类向导。为该对话框类取个名字:CDlg_login。左键双击IDC_EDIT_USERNAME(或者单击后,点击右边的add variables),为IDC_EDIT1增加一个对应在类中的名字:m_login_name。点击确定。同样也对IDC_EDIT_USERPASSWD也取一个名字:m_login_pwd。 【Ctrl+W】快捷键,进入类向导界面,为IDC_BUTTON_OK和IDC_BUTTON_CANCEL添加代码void Cdenglu:OnOK() / TODO: Add extra validation hereUpdateData(); m_username.TrimLeft(); if(m_username.IsEmpty()MessageBox("请输入用户名!");return;CDatabase database; database.OpenEx( _T( "DSN=工资管理数据库" ),CDatabase:noOdbcDialog); CRecordset recset(&database);CString mSqlStr;mSqlStr= "SELECT * FROM 登录对话框 WHERE username='"mSqlStr = mSqlStr + m_username; mSqlStr = mSqlStr + "' AND passwor d='"mSqlStr = mSqlStr + m_password; /mSqlStr = mSqlStr + "'"if (!recset.Open(CRecordset:forwardOnly, mSqlStr, CRecordset:readOnly)AfxMessageBox("登陆界面表打开失败!");return;if (!recset.IsEOF()/ Open all function for userAfxMessageBox("登录成功");elseAfxMessageBox("登录失败!");return;void Cdenglu:OnCancel() / TODO: Add extra cleanup hereCDialog:OnCancel();exit(0); 在mainFrm.cpp文件的前面添加:#include "dlg_login.h"。在运行过程中,点击OK后,主窗体会显示出来,并没有在用户名以及密码框中输入。要求输入正确的用户名和密码,主窗体才能显示出来。增加一个成员函数,点击OK。 (2)系统编辑界面的设计 进入主界面,主要是编辑员工的基本信息,可以对这些基本信息进行添加删除修改等一些操作,具体的设计界面如图6所示2015年12月29日图6用户主界面(3)员工工资管理系统表单对话框资源模板添加部分控件如表4所示。表4 表单对话框控件及属性添加的控件ID号标题编辑框IDC_QUESTION编辑框IDC_ANSWER编辑框IDC_REANAME编辑框IDC_IDNUM编辑框IDC_AGE编辑框IDC_PHINE编辑框IDC_QUESTION静态文本框IDC_STATIC年份静态文本框IDC_STATIC月份静态文本框IDC_STATIC员工编号静态文本框IDC_STATIC员工姓名静态文本框IDC_STATIC员工部门静态文本框IDC_STATIC基本工资静态文本框IDC_STATIC业绩工资静态文本框IDC_STATIC津贴静态文本框IDC_STATIC各种补助静态文本框IDC_STATIC水电费组框IDC_STATIC编辑模块组框IDC_STATIC查询模块按钮IDC_BUTTON添加按钮IDC_BUTTON删除按钮IDC_BUTTON修改按钮IDC_BUTTON 查询 双击对话框模板或按【Ctrl+W】快捷键为对话框资源建立类向导。在弹出MFC ClassWizard对话框,切换到Member Varibles选项卡,在Class name框中为上述控件添加相关联的数据成员变量。 具体代码如下/ CMyView database supportCRecordset* CMyView:OnGetRecordset()return m_pSet; / CMyView message handlersBOOL CMyView:OnCommand(WPARAM wParam, LPARAM lParam) / TODO: Add your specialized code here and/or call the base classCString str;CMainFrame *pFrame =(CMainFrame*)AfxGetApp()->m_pMainWnd; CStatusBar *pStatus=&pFrame->m_wndStatusBar; if(pStatus) CRecordsetStatus rStatus; m_pSet->GetStatus(rStatus); str.Format("当前记录:%d/总记录:%d",1+rStatus.m_lCurrentRecord,m_pSet->GetRecordCount(); pStatus->SetPaneText(1,str); return CRecordView:OnCommand(wParam, lParam);void CMyView:OnChaxunzgbh() / TODO: Add your control notification handler code hereUpdateData();m_ZGBH.TrimLeft(); m_ZGBH.TrimRight(); if(m_ZGBH.IsEmpty() MessageBox("要查询的员工编号不能为空"); return; m_pSet->Close(); m_pSet->m_strFilter.Format("ZGBH='%S'",m_ZGBH); /查询字符串m_ZGBHm_pSet->m_strSort="YF" m_pSet->Open();if(!m_pSet->IsEOF() UpdateData(FALSE);else MessageBox("没有查到你要找的纪录!");m_pSet->Close(); void CMyView:OnButtonAdd() / TODO: Add your control notification handler code hereCEditDlg dlg;if(dlg.DoModal()=IDOK) m_pSet->AddNew() ; / m_pSet->m_NF=dlg.m_intNF; m_pSet->m_YF=dlg.m_intYF; m_pSet->m_ZGBH=dlg.m_strZGBH; m_pSet->m_ZGXM=dlg.m_strZGXM; m_pSet->m_ZGBM=dlg.m_strZGBM; m_pSet->m_JBGZ=dlg.m_longJBGZ; m_pSet->m_YJGZ=dlg.m_longYJGZ; m_pSet->m_JJ=dlg.m_longJJ; m_pSet->m_JT=dlg.m_longJT; m_pSet->m_GZBZ=dlg.m_longGZBZ; m_pSet->m_SDF=dlg.m_longSDF; m_pSet->m_FZ=dlg.m_longFZ; m_pSet->m_HF=dlg.m_longHF; m_pSet->m_CX=dlg.m_longCX; m_pSet->m_BX=dlg.m_longBX;m_pSet->Update(); m_pSet->Requery(); void CMyView:OnButtonDelete() / TODO: Add your control notification handler code here CRecordsetStatus status; m_pSet->GetStatus(status);m_pSet->Delete();if(status.m_lCurrentRecord=0) m_pSet->MoveNext(); elsem_pSet->MoveFirst();UpdateData(FALSE); void CMyView:OnButtonEdit() / TODO: Add your control notification handler code hereCEditDlg dlg; dlg.m_intNF=m_pSet->m_NF;dlg.m_intYF=m_pSet->m_YF; dlg.m_strZGBH =m_pSet->m_ZGBH; dlg.m_strZGXM =m_pSet->m_ZGXM; dlg.m_strZGBM =m_pSet->m_ZGBM; dlg.m_longJBGZ=m_pSet->m_JBGZ; dlg.m_longYJGZ=m_pSet->m_YJGZ; dlg.m_longJJ =m_pSet->m_JJ; dlg.m_longJT=m_pSet->m_JT; dlg.m_longGZBZ=m_pSet->m_GZBZ; dlg.m_longSDF=m_pSet->m_SDF; dlg.m_longFZ=m_pSet->m_FZ; dlg.m_longHF=m_pSet->m_HF; dlg.m_longCX=m_pSet->m_CX; dlg.m_longBX=m_pSet->m_BX;/IDOK if(dlg.DoModal()=IDOK) m_pSet->Edit(); / m_pSet->m_NF=dlg.m_intNF; m_pSet->m_YF=dlg.m_intYF; m_pSet->m_ZGBH=dlg.m_strZGBH; m_pSet->m_ZGXM=dlg.m_strZGXM; m_pSet->m_ZGBM=dlg.m_strZGBM; m_pSet->m_JBGZ=dlg.m_longJBGZ; m_pSet->m_YJGZ=dlg.m_longYJGZ; m_pSet->m_JJ=dlg.m_longJJ; m_pSet->m_JT=dlg.m_longJT; m_pSet->m_GZBZ=dlg.m_longGZBZ; m_pSet->m_SDF=dlg.m_longSDF; m_pSet->m_FZ=dlg.m_longFZ; m_pSet->m_HF=dlg.m_longHF; m_pSet->m_CX=dlg.m_longCX; m_pSet->m_BX=dlg.m_longBX; m_pSet->Update(); / m_pSet->Requery(); UpdateData(FALSE); void CEditDlg:OnOK() / TODO: Add extra validation hereUpdateData(); m_strZGBH.TrimLeft();m_strZGXM.TrimLeft();m_strZGBM.TrimLeft();if(m_strZGBH.IsEmpty()MessageBox("员工编号不能为空!"); elseif(m_strZGXM.IsEmpty() MessageBox("员工姓名不能为空!"); elseif(m_strZGBM.IsEmpty() MessageBox("员工部门不能为空!"); elseCDialog:OnOK(); (4)系统工资统计界面的设计 员工的最后实际发的工资是经过计算后的,这个界面就是体现出这个计算的过程,应发工资减掉各种扣钱,得到最后的工资,设计界面如图7所示2015年12月29日图7用户主界面为IDC_GUOJI对话框资源模板添加控件如表5所示表5单对话框控件及属性添加的控件ID号标题静态文本框IDC_STATIC应发合计静态文本框IDC_STATIC扣除合计静态文本框IDC_STATIC实发工资编辑框IDC_IDUNM编辑框IDC_GUOJI编辑框IDC_CMDE按钮IDC_BUTTON_OK确定按钮IDC_BUTTON_CANCEL 取消按Ctrl+W键,弹出MFC ClassWizard对话框,切换到Member Varibles选项卡,在Class name框中选择IDC_GUOJI,为上述控件添加相关联的数据成员变量。代码如下:void CMyView:OnButtonTongji() / TODO: Add your control notification handler code hereCTongji dlg; dlg.m_YFHJ=m_pSet->m_JBGZ+m_pSet->m_YJGZ+m_pSet->m_JJ+m_pSet->m_JT+m_pSet->m_GZBZ;dlg.m_KCHJ=m_pSet->m_SDF+m_pSet->m_FZ+m_pSet->m_HF+m_pSet->m_BX+m_pSet->m_CX;dlg.m_SFGZ=dlg.m_YFHJ-dlg.m_KCHJ;dlg.DoModal(); UpdateData(FALSE); /3设计结果与分析3.1系统登录界面设计进入程序后,首先出现的是【员工登陆】对话框,在【用户名】文本框中输入后按Tab键,程序将自动查询用户名并跳到【密码】文本框中,输入密码后按Enter键即可进入系统,执行denglu.cpp文件,调用CEditDlg:OnOK()函数。登录对话框如图8所示。2015年12月29日图8员工登录对话框3.2系统主界面设计登录成功后将显示主界面主界面如图9所示,在此界面可以选择各种按钮进行不同的操作。比如点击【添加】按钮,系统将执行EditDlg.cpp文件,调用void CMyView:OnButtonAdd() 函数。然后将进出编辑对话框,对数据进行添加操作。点击【查询】按钮,调用void CMyView:OnChaxunzgbh() 函数。系统将显示出该员工号的工资。点击【工资统计结果】按钮,调用CMyView:OnButtonTongji() 函数,系统将显示该员工号的工资。32015年12月29日图9主界面3.3编辑功能的实现(1) 增加功能单击“增加“按钮,进入增加记录功能窗体,如图10所示。在上边的编辑框中,可以很清楚看到整个表中的记录和主视图一致,在编辑框中输入完成了记录后按确定按钮,这样刚才输入的内容就同过m_pSet这个指针写如了数据库,调用void CEditDlg:OnOK() 函数;按取消则推出刚才的操作。2015年12月29日图10编辑界面(2) 删除功能 完成机构“增加“功能后,进入主界面,按下删除按钮,则删除当前显示的记录。这个窗体相对简单,它实际上是管理各个记录的删除的,以便能即时更新旧的记录,删除旧的没用的记录。(3) 修改功能对于有些写错了的记录,我们往往需要在事后才能进行修改,这个功能就为我们提供了很好的操作界面。它先把当前记录的信息显示在另外一个窗口里,这样能避免对记录的误操作。3.4工资统计界面设计完成当前记录下的工资的统计功能,单击“工资统计”按钮,则调用了OnChaxunzgbh() 函数,则进入“工资统计”窗体。如果没有输入员工号,系统将填出提示信息。该窗体中显示了员工的应发合计,扣除合计,实发工资,如图11所示。52015年12月29日图11统计结果界面4设计体会通过一周的课程设计,我完成了员工工资管理系统的设计,虽然有刘伟杰老师的帮助,但是还有很多做的不好的地方。开始时我先是做了一个单文挡应用程序主要用来显示员工的各种工资情况,这也是我设计的主界面,在界面上有五个功能按钮分别是增加、修改、删除、查询和工资统计结果。增加和修改都是另外弹出一个对话框来实现各自的功能;删除就是删除当前浏览界面上的记录;查询只提供了按员工编号查询的方法,只要输入员工编号就可以直接查询了;工资统计结果就是计算出当前员工的个人所得工资。后来在添加程序代码的时候又遇到了好多麻烦,单靠我个人的努力,很难按时完成该课程设计,但在刘伟杰老师的帮助下我都一一解决了。在此,我衷心感谢我的指导老师。老师认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我获益非浅,为我提供了良好的设计环境以及各方面的支持。最后我希望在以后的学习中能够努力弥补自己的不足争取在以后的课程设计中能够有好的成绩。5参考文献1 郑阿奇,丁有和. Visual C+教程M. 北京:机械工程出版社,2006.6:125-1532 张荣梅,赵传启 .中文版Access 2003宝典M.上海:电子工业出版社,2008.8:56-593 陈志泊,王春玲.面向对象的程序设计语言 M. 邮电出版社,2009.10:25-354 苏宁,王明福.C+程序设计M. 北京:高等教育出版社,2003.2:12-32 5 马希荣,王洪权,姜丽芬.等. C+语言程序设计M.北京:电子工业出版社,2005.3:15-466 李强,贾芸Visual C+项目开发实践M中国铁道出版社,2004.3:24-297 任重,杨灿军.陈鹰.轨迹规划中的B样条插值算法J.机电工程,2001,18(5):38-39.专心-专注-专业