企业工资管理系统[精品ppt课件]_第1页
企业工资管理系统[精品ppt课件]_第2页
企业工资管理系统[精品ppt课件]_第3页
企业工资管理系统[精品ppt课件]_第4页
企业工资管理系统[精品ppt课件]_第5页
已阅读5页,还剩286页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本章主要介绍如何使用VFP建立企业工资管理系统。内容包括功能设计、数据库和表设计,自定义函数、多种方式显示数据、表单之间的数据传递、数据缓冲、菜单和工具栏协调等。第9章.企业工资管理系统9.1系统功能设计企业工资管理系统信息管理信息管理信息管理信息管理基础信息设置个人所得税率员工信息管理部门信息管理工资统计发放发放记录查询系统登录用户管理修改密码关于系统系统设置功能模块图运行salary.exe,完成系统登录,用户名:Admin,密码:sysadmin,打开系统主表单,如下图:包含菜单、工具栏、状态栏。9.1.1系统管理模块系统管理功能下面的系统设置用于录入公司名称、个税起征点。.系统设置信息

2、设置-所得税率:设置税率、起征点,录入工资可以计算个人所得税额。9.1.2信息设置模块用于设置学历、职务、民族、政治面貌,这些信息在员工信息设置、惩罚、奖励记录管理时作为选项。信息设置.基础信息 员工管理-部门信息:只支持一级部门,可以在表格中查看属于该部门的员工信息。9.1.3员工管理该表单可以完成浏览、新增、修改、删除员工信息操作,单击显示钮可以改变表格中显示方式。员工管理.员工信息在员工信息表单中双击员工图标可以调出本表单。.员工信息设定工资管理-工资统计发放:“统计”钮用于统计员工工资,系统日期是10号前统计上个月工资,28号以后统计本月工资。9.1.4工资管理 录入经手人后单击“发放

3、”可完成工资发放的记录,选中打印工资条后可打印工资条。工资管理.工资统计发放.工资条可按照员工编号、姓名、部门、工资月份查询工资发放记录,结果可打印。工资管理.工资发放查询企业工资管理系统包括部门信息、员工信息、系统管理等操作,使用的表较多,以下分模块说明。9.2数据库设计系统管理主要包括系统设置、用户管理、系统登录和修改密码等功能,主要涉及2个表:系统设置表(SysInfo)和用户信息表(Users)。9.2.1系统管理1.系统设置表字段名类型宽度可否为空说明个税起征点整型4否普通索引公司名称字符型40否普通索引系统设置表(SysInfo)用户信息表(Users)2.用户信息表字段名类型宽度

4、可否为空说明用户名字符20否普通索引密码字符20否普通索引姓名字符20否权限整型4否默认值1信息设置模块中包括学历名称、职务名称、民族名称、和政治面貌名称、个人所得税率等。9.2.2信息设置1.学历名称学历名称表(Academy)字段名类型宽度可否为空说明学历C20否主索引字段2.职务名称职务名称表(Duty)字段名类型宽度可否为空说明职务名称C20否主索引字段3.民族名称民族名称表(People)字段名类型宽度可否为空说明民族C20否主索引字段4.政治面貌表政治面貌表(Political)字段名类型宽度可否为空说明政治面貌C20否主索引字段5.所得税率表所得税率表(TaxRate)字段名类型

5、宽度可否为空说明编号整数4否主索引级数数值2否候选索引工资下限浮动10,1工资上限浮动10,1所得税率浮动10,1速算扣除数浮动10,1员工管理模块数据表主要有个人信息和工资信息、部门信息表。9.2.3员工管理1.部门信息部门信息表(department)字段名类型宽度可否为空说明部门编号C2否主索引字段部门名称C20否2.员工信息-1/2员工信息表(Personnel)字段名类型宽度可否为空说明员工编号C4否主索引字段姓名C30否性别C2否默认值:男婚否C4否默认值:未婚生日C8部门N2否普通索引职务C20民族C40政治面貌C20学历C20 .员工信息-2/2员工信息表(Personnel)

6、-续上页字段名类型宽度可否为空说明毕业学校C40电话C11掩码:99999999999入职日期D8合同期限D8通讯地址C60邮政编码C6掩码:999999身份证号C18掩码 :999999999999999999备注M4密码C20否3.员工工资员工信息表(Personnel)字段名类型宽度可否为空说明员工编号字符4否主索引字段基本工资浮动6,1默认值:0.0岗位工资浮动6,1默认值:0.0浮动工资浮动6,1默认值:0.0奖金浮动6,1默认值:0.0交通补贴浮动6,1默认值:0.0住房补贴浮动6,1默认值:0.0伙食补贴浮动6,1默认值:0.0失业保险浮动6,1默认值:0.0医疗保险浮动6,1默

7、认值:0.0养老保险浮动6,1默认值:0.0公积金浮动6,1默认值:0.0工资管理包括工资统计发放和发放查询,涉及数据表为:工资记录表。该表用来保存员工工资统计的发放情况。9.2.4工资管理.工资记录表-1/2工资记录表(POList)字段名类型宽度可否为空说明结算编号字符6否主索引员工编号字符4否普通索引工资月份字符6否普通索引基本工资浮动6,1岗位工资浮动6,1浮动工资浮动6,1奖金浮动6,1交通补贴浮动6,1住房补贴浮动6,1伙食补贴浮动6,1失业保险浮动6,1医疗保险浮动6,1.工资记录表-2/2工资记录表(POList)-续上页字段名类型宽度可否为空说明养老保险浮动6,1公积金浮动6

8、,1奖励金额浮动6,1惩罚金额浮动6,1工资总额浮动6,1应交金额浮动6,1应缴税额浮动6,1所得税额浮动6,1实发金额浮动6,1结算状态字符默认值:否结算日期日期经手人字符企业工资管理系统中的可视类有:MyCmd、MyMove、MyControl、MyAdmin和MoreAdmin9.3设计可视类创建企业工资管理系统项目的步骤:文件-新建-项目-新建文件-文件名:salary,保存位置:个人文件夹-保存。创建企业工资管理系统数据库的步骤:项目管理器-数据-数据库-新建-新建数据库-文件名:salary,保存位置:个人文件夹DATA-保存;创建企业工资管理系统数据表的步骤:选择salary下面

9、的表-新建-新建表-确认文件名和保存位置后,依次编辑保存表结构信息9.3.1创建项目与数据库 步骤:项目管理器/类库/新建/类名:MyCmd,派生于:CommandButton,存储于:MyTools/确定/在打开的类设计器编辑按钮的属性。属性:Caption=按钮FontName=楷体_GB2312FontSize=16ForeColor=RGB(0,0,0)Height=30Width=609.3.2创建MyCmd类MyCmd.MouseMove过程:LPARAMETERS nButton, nShift,;nXCoord, nYCoord*如果按钮可用IF THIS.Enabled =

10、.T. *使用自定义鼠标指针 This.MousePointer = 99 *指定自定义鼠标指针 This.MouseIcon = hHand.curENDIF在项目管理器中建立左图所示的类MyMove,基于:Container。为该类添加四个MyCmd控件对象。操作方法:点表单控件中“查看类”/添加/找开类库MyTools/在控件工具栏上找到MyCmd,拖画到界面。设置对象名分别为CmdTop、CmdPre、CmdNxt、CmdBtm,修改对应的Captiont和ToolTipText的值如“首记录”和“到第一条记录”、“上记录”和“到上一条记录”、“下记录”和“到下一条记录”、“末记录”和

11、“到最后一条记录”。添加事件过程如下:9.3.3创建MyMove类GO TOP&到首记录THISFORM.REFRESH&刷新表单.CmdTop.Click*如果到了数据表首部IF BOF() .OR. RECNO() = 1 MessageBox(已到首记录,48,人力资源管理系统)ELSE*如果数据指针不位于数据表首部 SKIP-1ENDIF*刷新表单THISFORM.REFRESH.CmdPre.Click*如果记录指针位于数据表末尾IF EOF() or RecNO() = RecCount() MessageBox(已到末记录,48,人力资源管理系统)*如果记录指针不位于数据表末尾E

12、LSE*记录指针下移 SKIPENDIF*刷新表单THISFORM.REFRESH.CmdNxt.ClickGO BOTTOM &到数据表末尾THISFORM.REFRESH&刷新表单.CmdBtm.Click*如果数据表为空或者只有一条记录IF BOF() .AND. EOF() .OR. RECCOUNT()=1 THIS.Cmdtop.ENABLED=.F. THIS.Cmdpre.ENABLED=.F. THIS.Cmdnxt.ENABLED=.F. THIS.Cmdbtm.ENABLED=.F. ReturnENDIF*如果在记录指针在数据表的末尾IF RECNO()=RECCOUN

13、T() .OR. EOF()THIS.Cmdtop.ENABLED=.T.THIS.Cmdpre.ENABLED=.T.THIS.Cmdnxt.ENABLED=.F.THIS.Cmdbtm.ENABLED=.F.RETURNENDIF.MyMove.Refresh*如果记录指针在数据表的首部IF RECNO()=1 .OR. BOF()THIS.Cmdtop.ENABLED=.F.THIS.Cmdpre.ENABLED=.F.THIS.Cmdnxt.ENABLED=.T.THIS.Cmdbtm.ENABLED=.T.RETURNENDIF*如果记录指针不在数据表的首部*也不在尾部THIS.Cm

14、dtop.ENABLED=.T.THIS.Cmdpre.ENABLED=.T.THIS.Cmdnxt.ENABLED=.T.THIS.Cmdbtm.ENABLED=.T.类名:MyAdmin 基类:Container存储:MyTools步骤:在该类的设计器窗口内添加7个MyCmd类对象。对象名依次为:CmdNew/CmdModify/CmdDel/CmdSer/CmdSave/CmdCcl/CmdExit。Caption、ToolTipText属性值参照下图自行定义。该类中只添加“退出”钮的Click过程,其他为空。*CmdExit.ClickLOCAL YNYN=MESSAGEBOX(确定退

15、出,4+32,本系统)IF YN=6THISFORM.RELEASEENDIF9.3.4创建MyAdmin类类名:MoreAdmin 基类:Container存储:MyTools步骤:在该类的设计器窗口内添加7个MyCmd类对象。对象名依次为:CmdNew/CmdModify/CmdDel/CmdSer/CmdSave/CmdCcl/CmdExit。Caption、ToolTipText属性值参照左图自行定义。该类中只添加“退出”钮的Click过程,其他为空。*CmdExit.ClickLOCAL YNYN=MESSAGEBOX(确定退出,4+32,本系统)IF YN=6THISFORM.RE

16、LEASEENDIF9.3.5创建MoreAdmin类类名:MyControl基类:Container类库:MyTools创建步骤:向该类中添加5个MyCmd对象,对象名:CmdNew,CmdModify,CmdDelete,CmdRefresh,CmdExit,分别设置其Caption,ToolTipText属性值“新增、增加新记录”、“修改、修改当前记录”、“删除、删除当前记录”、“刷新、刷新显示”、“退出、退出当前表单”9.3.6创建MyControl类企业工资管理系统需要自定义的函数包括:AutoInc字符串数自动增1DateToString日期转换为YYYY/MM/DD形式的串EnC

17、ode将给定的串与数值异或后返回ITaxComp计算个人所得税9.4创建通用函数*“AutoInc”函数* 作用:使“000000XX”形式的编号自动加1* 接收“0000XX”形式的字符串作为参数* 字符串长度限制为109.4.1AutoIncFUNCTION autoinc(nCode)*获取字符串长度nLen=Len(nCode)*将字符型转换为数值型,即获取非0部分的数值nCode = VAL(nCode)*非0部分数字加1nCode = nCode + 1*转换为字符型nCode = ALLTRIM(STR(nCode)AutoInc.prg-1/2*获取转换后的字符串的长度nLen

18、gth = LEN(nCode)*在数字之前加上前置“0”nZero=000000000000nCode = SUBSTR(nZero,1,nLen-nLength) + nCode*返回结果RETURN nCodeENDFUNCAutoInc.prg-2/2*“DateToString”函数* 将日期型数据转换为字符串* 接收日期型变量作为参数9.4.2DateToString*“DateToString”函数* 将日期型数据转换为字符串* 接收日期型变量作为参数FUNCTION DateToString(dDate)*默认返回空字符串sDate = *如果参数非空而且为日期型IF .NOT

19、. EMPTY(dDate) .AND. VARTYPE(dDate) = D*分别获取其年、月、日字段nYear = YEAR(dDate)nMonth = MONTH(dDate)DateToString.prg-1/2nDay = DAY(dDate)*组合数据sDate = ALLTRIM(STR(nYear)+/+ALLTRIM(STR(nMonth)+/+ALLTRIM(STR(nDay)sDate = +sDate +ENDIF*返回值RETURN sDateENDFUNCDateToString.prg-22*函数Encode*作用:对输入的指定的字符串进行编码*参数:sStr

20、:要编码或者解码的字符串* nCode:编码或者解码时使用的密钥9.4.3EncodeFUNCTION ENCODE(sStr,nCode)*声明需要使用的本地变量LOCAL sTmpStr,cTempChr,i*sTempStr:用来保存昨时的编码或者解码后的字符串*cTempChr:用来保存编码或者解码后的字符*i:循环计数*对变量赋初值sTempStr = cTempChr = Encode.prg-1/2*如果未指定密钥IF nCode = 0nCode = 237ENDIF*对字符串的每个字符进行编码FOR i = 1 TO LEN(ALLTRIM(sStr)cTempChr = B

21、ITXOR(ASC(SUBSTR(sStr,i,1),nCode)sTempStr = sTempStr+ CHR(cTempChr)ENDFOR*返回编码后的结果RETURN sTempStrENDFUNCEncode.prg-2/2*“ITaxComp”函数*功能:根据个人所得税率表和系统信息表计算个个人所得税额*参数:nNum,月收入总额* nBeg,个人所得税起征点,如果该参数为-1则使用“SysInfo”表的设置*返回值:个人所得税额9.4.4ITaxComp在调试程序时,应该先在表taxRate中录入如下数据。.个人所得税率表初始数据*“ITaxComp”函数*功能:根据个人所得税

22、率表和系统信息表计算个* 个人所得税额*参数:nNum,月收入总额* nBeg,个人所得税起征点,如果该参数为-1* 则使用“SysInfo”表的设置*返回值:个人所得税额FUNCTION ITaxComp(nNum, nBeg)*如果不指定个人所得税起征点IF nBeg = -1*获取免税工资noTax = 0ITaxComp.prg-1/4*如果表“SysInfo”没有打开IF !Used(SysInfo)*打开表USE SysInfoSELECT SysInfo*获取个税起征点noTax = SysInfo.个税起征点USEENDIF*减去不用计税部分nNum = nNum - noTa

23、xELSEITaxComp.prg-2/4nNum = nNum - nBegENDIF*如果工资未到起征点IF nNum 工资下限 .AND. nNum THISFORM.MainCon.InfoPage.PAGECOUNTsPage = 1.添加代码.表单basicInfo.Init-1/2ELSE*激活指定的选项卡sPage = nPageENDIFENDIF*激活选项卡THISFORM.MainCon.InfoPage.ACTIVEPAGE = sPage*刷新表单THISFORM.REFRESH.表单basicInfo.Init-2/2SELECT AcademySET FILTER

24、 TO &清除可能存在的过滤条件THIS.DataList.CLEAR &清除列表*循环在列表框中添加列表项SCANTHIS.DataList.ADDITEM(学历)ENDSCAN*选中第1项IF THIS.DataList.LISTCOUNT 0THIS.DataList.SELECTED(1) = .T.ENDIFTHISFORM.REFRESH &刷新表单.学历设置页面AcademyPage.InitIF .NOT. EMPTY(THIS.VALUE)THIS.PARENT.CmdGrp.CmdModify.ClickENDIFDataList.DblClick*调用“输入新值”表单获取

25、学历名称sStr = DO FORM Forms/InputNew WITH sStr TO NewValue*如果没有返回学历名称IF EMPTY(ALLTRIM(NewValue)RETURNENDIF*检查要新增的学历名称是否已经存在SELECT AcademyCOUNT FOR 学历 = NewValue TO RecNumCmdNew.Click-1/2IF RecNum 0MESSAGEBOX(学历名称已经存在, 48, 企业工资管理系统)RETURNENDIF*更新记录INSERT INTO Academy VALUES(NewValue)*更新列表框THIS.PARENT.PA

26、RENT.DataList.ADDITEM(NewValue)*刷新记录THIS.PARENT.REFRESHCmdNew.Click-2/2*检查列表框是否为空IF THIS.PARENT.PARENT.DataList.LISTCOUNT 1MESSAGEBOX(没有可以修改的项, 48, 企业工资管理系统)THIS.PARENT.CmdNew.SETFOCUSRETURNENDIF*检查列表框中是否有列表项被选中bSel = .F.nSel = -1sStr = CmdModify.Click-1/4*循环找出被选择的列表项FOR nCnt = 1 TO THIS.PARENT.PARE

27、NT.DataList.LISTCOUNT *如果被选中了 IF THIS.PARENT.PARENT.DataList.SELECTED(nCnt) *标识被选中,保存其索引值 bSel = .T. nSel = nCnt sStr = THIS.PARENT.PARENT.DataList.LIST(nCnt) EXIT ENDIFENDFORCmdModify.Click-2/4*如果没有选中的列表项弹出对话框IF bSel = .F.MESSAGEBOX(请选择要修改的列表项, 48, 企业工资管理系统)THIS.PARENT.PARENT.DataList.SETFOCUSRETUR

28、NENDIF*如果选择了列表项IF bSel = .T. *调用“输入新值”对话框输入新的值 DO FORM FORMS/InputNew WITH sStr TO newValue *如果输入了新的值CmdModify.Click-3/4 IF .NOT. EMPTY(newValue) .AND. .NOT. newValue = sStr *检查要修改的学历名称是否已经存在SELECT AcademyCOUNT FOR 学历 = NewValue TO RecNumIF RecNum 1*更新记录UPDATE Academy SET 学历 = newValue WHERE 学历 = sS

29、tr*更新列表项THIS.PARENT.PARENT.DataList.LIST(nSel) = newValueENDIF ENDIFENDIFCmdModify.Click-4/4*检查列表框是否为空IF THIS.PARENT.PARENT.DataList.LISTCOUNT 0MESSAGEBOX(有员工使用该选项, 48, 企业工资管理系统)RETURNENDIFCmdDelete.Click-4/5*确认对话框YN = MESSAGEBOX(是否要删除列表项+ CHR(13) + ItemName, 4+32 ,企业工资管理系统)IF YN = 6*删除记录DELETE FROM

30、 Academy WHERE 学历 = ItemNameSELECT AcademyPACK*刷新显示THIS.PARENT.PARENT.DataList.REMOVEITEM(nSel)ENDIFCmdDelete.Click-5/5THIS.PARENT.PARENT.INITCmdRefresh.ClickSELECT DutySET FILTER TOTHIS.DataList.CLEARSCANTHIS.DataList.ADDITEM(职务名称)ENDSCANIF THIS.DataList.LISTCOUNT 1THIS.DataList.SELECTED(1) = .T.EN

31、DIF.职务设置页面DutyPage.InitIF .NOT. EMPTY(THIS.VALUE)THIS.PARENT.CmdGrp.CmdModify.ClickENDIFDataList.DblClick*调用“输入新值”表单获取职务名称sStr = DO FORM FORMS/InputNew WITH sStr TO NewValue*如果没有返回职务名称IF EMPTY(ALLTRIM(NewValue)RETURNENDIF*检查要新增的学历名称是否已经存在SELECT DutyCOUNT FOR 职务名称 = NewValue TO RecNumCmdNew.Click-1/2

32、IF RecNum 0MESSAGEBOX(职务名称已经存在, 48, 企业工资管理系统)RETURNENDIF*添加记录INSERT INTO Duty VALUES(NewValue)*列表框中添加项THIS.PARENT.PARENT.DataList.ADDITEM(NewValue)*刷新记录THIS.PARENT.REFRESHCmdNew.Click-2/2*检查列表框是否为空IF THIS.PARENT.PARENT.DataList.LISTCOUNT 0MESSAGEBOX(职务名称已经存在, 48, 企业工资管理系统) RETURNELSE UPDATE Duty SET

33、 职务名称 = NewValue WHERE 职务名称 = sStr THIS.PARENT.PARENT.DataList.LIST(nSel) = NewValueENDIFENDIFENDIFCmdModify.Click-4/4*检查列表框是否为空IF THIS.Parent.Parent.DataList.Listcount 0MESSAGEBOX(有员工使用该选项, 48, 企业工资管理系统)RETURNENDIF*确认对话框YN = MESSAGEBOX(是否要删除列表项+ CHR(13) + ItemName, 4+32 ,企业工资管理系统)CmdDelete.Click-4/

34、5IF YN = 6*删除记录DELETE FROM Duty WHERE ALLTRIM(职务名称) = ItemNameSELECT DutyPACK*刷新显示THIS.PARENT.PARENT.DataList.REMOVEITEM(nSel)ENDIFCmdDelete.Click-5/5THIS.PARENT.PARENT.INITCmdRefresh.ClickSELECT PeopleSET FILTER TOTHIS.DataList.ClearSCANTHIS.DataList.additem(民族)ENDSCANIF THIS.DataList.LISTCOUNT 1TH

35、IS.DataList.SELECTED(1) = .T.ENDIF.民族设置PeoplePage.InitIF .NOT. EMPTY(THIS.VALUE)THIS.PARENT.CmdGrp.CmdModify.ClickENDIFDataList.DblClick*调用“输入新值”表单获取民族名称sStr = DO FORM FORMS/InputNew WITH sStr TO NewValue*如果没有返回民族名称IF EMPTY(ALLTRIM(NewValue)RETURNENDIF*检查要新增的名称是否已经存在SELECT PeopleCOUNT FOR 民族 = NewVa

36、lue TO RecNumCmdNew.Click-1/2IF RecNum 0MESSAGEBOX(民族名称已经存在, 48, 企业工资管理系统)RETURNENDIF*添加记录INSERT INTO People VALUES(NewValue)*列表框中添加选项THIS.PARENT.PARENT.DataList.ADDITEM(NewValue)*刷新显示THIS.PARENT.REFRESHCmdNew.Click-2/2*检查列表框是否为空IF THIS.PARENT.PARENT.DataList.LISTCOUNT 0MESSAGEBOX(民族名称已经存在, 48, 企业工资

37、管理系统) RETURNELSEUPDATE People SET 民族 = NewValue WHERE 民族 = sStrTHIS.PARENT.PARENT.DataList.LIST(nSel) = NewValueENDIF ENDIFENDIFCmdModify.Click-4/4*检查列表框是否为空IF THIS.PARENT.PARENT.DataList.LISTCOUNT 0MESSAGEBOX(有员工使用该选项, 48, 企业工资管理系统)RETURNENDIF*确认对话框YN = MESSAGEBOX(是否要删除列表项+ CHR(13) + ItemName, 4+32

38、 ,企业工资管理系统)CmdDelete.Click-4/5IF YN = 6*删除记录DELETE FROM People WHERE 民族 = ItemNameSELECT PeoplePACK*刷新显示THIS.PARENT.PARENT.DataList.REMOVEITEM(nSel)THISFORM.REFRESHENDIFCmdDelete.Click-5/5THIS.PARENT.PARENT.INITCmdRefresh.ClickSELECT PoliticalSET FILTER TOTHIS.DataList.clearSCANTHIS.DataList.additem

39、(政治面貌)ENDSCANIF THIS.DataList.LISTCOUNT 1THIS.DataList.SELECTED(1) = .T.ENDIF.政治面貌PoliticalPage.InitIF .NOT. EMPTY(THIS.VALUE)THIS.PARENT.CmdGrp.CmdModify.ClickENDIFDataList.DblClick*调用“输入新值”表单获取职务名称sStr = DO FORM FORMS/InputNew WITH sStr TO NewValue*如果没有返回政治面貌名称IF EMPTY(ALLTRIM(NewValue)RETURNENDIF

40、*检查要新增的名称是否已经存在SELECT PersonnelCOUNT FOR 政治面貌 = NewValue TO RecNumCmdNew.Click-1/2IF RecNum 0MESSAGEBOX(政治面貌名称已经存在, 48, 企业工资管理系统)RETURNENDIF*添加记录INSERT INTO Political VALUES(NewValue)*列表框中添加选项THIS.PARENT.PARENT.DataList.ADDITEM(NewValue)*刷新显示THIS.PARENT.REFRESHCmdNew.Click-2/2*检查列表框是否为空IF THIS.PAREN

41、T.PARENT.DataList.LISTCOUNT 0MESSAGEBOX(政治面貌已经存在, 48, 企业工资管理系统)RETURNELSEUPDATE Political SET 政治面貌 = NewValue WHERE 政治面貌 = sStrTHIS.PARENT.PARENT.DataList.LIST(nCnt) = NewValueENDIFENDIFENDIFCmdModify.Click-4/4*检查列表框是否为空IF THIS.PARENT.PARENT.DataList.LISTCOUNT 0MESSAGEBOX(有员工使用该选项, 48, 企业工资管理系统)RETU

42、RNENDIF*确认对话框YN = MESSAGEBOX(是否要删除列表项+ CHR(13) + ItemName, 4+32 ,企业工资管理系统)CmdDelete.Click-4/5IF YN = 6*删除记录DELETE FROM Political WHERE 政治面貌 = ItemNameSELECT PoliticalPACK*刷新显示THIS.PARENT.PARENT.DataList.REMOVEITEM(nSel)THISFORM.REFRESHENDIFCmdDelete.Click-5/5THIS.PARENT.PARENT.INITCmdRefresh.Click表单

43、名:InputNew添加1个文本框,2个MyCmd类,属性其他表单。事件过程如下:9.5.2创建“输入新值”表单*获取表单参数PARAMETERS cString*判断参数类型*如果没有接收到参数IF VARType(cString) = L*显示空字符串sString = ELSE*显示接收到的字符串sString = cStringENDIF*显示字符串THISFORM.tValue.Value = sStringInputNew.InitRETURN THISFORM.gValueInputNew.Unload*保存用户输入的值THISFORM.gValue = ALLTRIM(THIS

44、FORM.tValue.Value)*退出表单返回值THISFORM.releaseCmdOk.ClickTHISFORM.RELEASECmdExit.Click表单名:ITRate,将表TaxRate和SysInfo添加到数据环境中。在表单中添加1个容器控件:MainCon,在该容器中加入1个标签和2个容器控件,其中一个容器控件中加入5个标签和1个列表控件,另一个容器控件加入2个标签、2个文本框和2个按钮。9.5.3创建个人所得税率表单.列表框控件的设置*获取表单中的值iIncome = THIS.PARENT.txt工资.VALUEiBeg = THIS.PARENT.txt起征点.VA

45、LUE*如果个税起征点小于0IF iBeg 0MESSAGEBOX(个税起征点错误, 48, 企业工资管理系统)THISFORM.txt起征点.VALUE = 0THISFORM.txt起征点.SETFOCUSRETURNENDIF.计算钮事件过程代码CmdComp.Click-1/4*如果收入小于0IF iIncome 0MESSAGEBOX(该部门尚员工,不能删除, 48, 企业工资管理系统)RETURNENDIF*清除过滤条件SET FILTER TOCmdDelete.Click-1/3*确认对话框YN=MESSAGEBOX(确定删除,4+32,企业工资管理系统)*如果确认IF YN=

46、6SELECT Department*逻辑删除DELETE FOR 部门编号 = dNoTHISFORM.MainCon.GridCon.Grid1.RECORDSOURCE = CmdDelete.Click-2/3*物理删除PACKTHISFORM.MainCon.GridCon.Grid1.RECORDSOURCE = Personnel*检查是否表空THISFORM.CheckEmpty*刷新表单THISFORM.REFRESHENDIFCmdDelete.Click-3/3*部门名称不能为空IF EMPTY(ALLTRIM(THISFORM.MainCon.DepCon.txt部门名

47、称.Value)MESSAGEBOX(部门名称能为空,48,企业工资管理系统)THISFORM.txt部门名称.SetFocusRETURNENDIF*如果数据有效,确认对话框YN=MESSAGEBOX(确定保存,4+32,企业工资管理系统)*如果确认CmdSave.Click-1/2IF YN=6*保存记录SELECT DepartmentIF(TABLEUPDATE(.F.)=.F.) MESSAGEBOX(保存记录失败,48,企业工资管理系统)RETURNENDIF*表单进入浏览状态THISFORM.FormMode = browseTHISFORM.SetModeTHISFORM.Re

48、freshENDIFCmdSave.Click-2/2*确认对话框YN=MESSAGEBOX(确定取消,4+32,企业工资管理系统)*如果确认IF YN=6*取消修改SELECT DepartmentTABLEREVERT(.F.)*-如果表单处理于新增状态CmdCcl.Click-1/2IF THISFORM.FormMode = new*-如果原来的记录指针位置有效IF THISFORM.OldRecord 1GO THISFORM.OldRecordENDIFENDIF*表单进入浏览状态THISFORM.FormMode = browseTHISFORM.SetMode*刷新表单THIS

49、FORM.RefreshENDIFCmdCcl.Click-2/2在该表单中可以分部门浏览员工,显示提供了大图标、小图标、列表和详细信息4种方式。9.6.2创建员工信息管理表单表单名称:Pinfo在表单中加入1个容器MainCon、2个ImageList控件,容器中加入1个标签、3个容器(DepCon、PerCon、MyControl)、DepCon中加入1个标签、1个TreeViewPerCon中加入1个标签、1个ListViewMyControl加入5个MyCmd对象1.创建表单数据环境:personnel.dbf&员工信息表、department.dbf&部门信息表、系统信息表SysIn

50、fo、员工工资表Psalary、工资记录表POList。其中personnel.Exclusive=.T.数据环境ListView 控件可使用四种不同视图显示项目。通过此控件,可将项目组成带有或不带有列标头的列,并显示伴随的图标和文本。 ListView控件包括 ListItem 和 ColumnHeader 对象。 ColumnHeaders为列标题,ListItem 对象定义 ListView 控件中项目的各种特性,ListItems对象可以理解为表中一条记录,可以使用该对象引用列表项。 ListItems(1).Text表示第(1行,1列)的文本值, ListItems(1).SubIt

51、em(1)返回第1行第2列文本值。ListView控件属性可以通过快捷菜单“ListViewCtrl Properties”设置。发行注意:ListView 控件是 Mscomctl.ocx 文件中一组 ActiveX 控件的一部分。2.ListView控件1.在BIMGList控件中添加2个32*32图标作为ListView控件大图标;2.在SIMGList控件中添加2个16*16图标作为ListView控件大图标;3.在ListView.Init中设置控件的列标题和其他初始属性;4.使用显示按钮和快捷菜单ShowWay控制列表项的显示方式;5.使用自定义方法FilterStr和自定义方法S

52、howPerson控制列表项的添加。.ListView控件设置方法自定义属性:FilterStr=自定义方法:ShoWPerson 过滤显示员工信息3.添加自定义属性与方法*获取“FilterStr”属性中保存的值cFilter = THISFORM.FilterStr*清空ListView中的列表项LView = THISFORM.MainCon.PerCon.PListLView.ListItems.CLEAR*设置过滤条件SELECT PersonnelSET FILTER TO &cFilterShoWPerson-1/4*添加列表项SCAN*性别不同,图标不同IF 性别 = 男 LI

53、tem = LView.ListItems.Add(, K + 员工编号, ALLTRIM(姓名), 1, 1)ELSELItem = LView.ListItems.ADD(, K + 员工编号, ALLTRIM(姓名), 2, 2)ENDIFShoWPerson-2/4LItem.SubItems(1) = ALLTRIM(员工编号)LItem.SubItems(2) = ALLTRIM(性别)LItem.SubItems(3) = 部门LItem.SubItems(4) = ALLTRIM(职务)LItem.SubItems(5) = ALLTRIM(民族)LItem.SubItems(

54、6) = ALLTRIM(学历)ENDSCANShoWPerson-3/4*如果列表项不为空,选中第1项IF LView.ListItems.COUNT 0LView.SelectedItem = LView.ListItems(1)ENDIF*刷新表单THISFORM.REFRESHShoWPerson-4/4*大图标THIS.Icons = THISFORM.BIMGList*小图标THIS.SmallIcons = THISFORM.SIMGList*以详细信息方式显示THIS.VIEW = 3*鼠标所在行高亮显示THIS.HotTracking = .T.4.添加代码ListView.

55、Init-1/3*添加列标头THIS.COLUMNHEADERS.ADD(, K11, 姓名, THIS.WIDTH/6)THIS.COLUMNHEADERS.ADD(, K12, 员工编号, THIS.WIDTH/6)THIS.COLUMNHEADERS.ADD(, K13, 性别, THIS.WIDTH/9)THIS.COLUMNHEADERS.ADD(, K14, 部门, THIS.WIDTH/8)THIS.COLUMNHEADERS.ADD(, K15, 职务, THIS.WIDTH/6)THIS.COLUMNHEADERS.ADD(, K16, 民族, THIS.WIDTH/8)TH

56、IS.COLUMNHEADERS.ADD(, K17, 学历, THIS.WIDTH/8)ListView.Init-2/3*显示所有员工THISFORM.FilterStr = .T.THISFORM.ShowPerson*刷新显示THISFORM.REFRESHListView.Init-3/3* ActiveX 控件事件 *IF THIS.ListItems.COUNT 0cParam1 = browse* 要浏览的记录编号cParam2 = SUBSTR(THIS.SelectedItem.KEY, 2)DO FORM FORMS/EditPInfo WITH cParam1, cPa

57、ram2*重新显示用户信息THISFORM.ShowPersonTHISFORM.RefreshENDIFListView.DblClick*设置TreeView控件的显示方式THIS.LineStyle = 1*在TreeView控件中显示图标THIS.STYLE = 6*清除结点THIS.NODES.CLEAR*读取公司名称作为根结点SELECT SYSInfoPTree.Init-1/3IF .NOT. ( EOF() AND. BOF() THIS.NODES.ADD(,K0,ALLTRIM(公司名称)ELSE MESSAGEBOX(系统设置错误, 48, 企业工资管理系统) RETU

58、RNENDIF*读取部门信息作为子结点SELECT DepartmentGO TOPPTree.Init-2/3SCANTHIS.NODES.ADD(K0, 4, K+; ALLTRIM(STR(Department.部门编号),; ALLTRIM(部门名称)ENDSCANIF THIS.NODES.COUNT 0THIS.NODES(1).SELECTED = .T.ENDIF*刷新显示THIS.REFRESHPTree.Init-3/3* ActiveX 控件事件 *LPARAMETERS NODE*判断是否单击了根结点IF NODE.KEY = K0*显示全部员工THISFORM.Fil

59、terStr = .T.THISFORM.ShowPerson*刷新显示THISFORM.REFRESHELSEPTree.NodeClick-1/2*获取部门编号dNo = SUBSTR(NODE.KEY, 2)*只显示单击的部门的员工列表THISFORM.FilterStr = 部门 = + dNoTHISFORM.ShowPerson*刷新显示THISFORM.REFRESHENDIFPTree.NodeClick-2/2cParam1 = newcParam2 = *调用“员工信息设计”表单DO FORM FORMS/EditPInfo WITH cParam1, cParam2THI

60、SFORM.ShowPerson*刷新表单THISFORM.RefreshCmdNew.ClickLView = THISFORM.MainCon.PerCon.PListIF LView.ListItems.COUNT 0cParam1 = browsecParam2 = SUBSTR(LView.SelectedItem.KEY, 2)DO FORM FORMS/EditPInfo WITH cParam1, cParam2THISFORM.ShowPersonTHISFORM.RefreshENDIFCmdModify.Click*获取要删除的员工的员工编号LView = THISFOR

温馨提示

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

评论

0/150

提交评论