《企业工资管理系统.ppt》由会员分享,可在线阅读,更多相关《企业工资管理系统.ppt(292页珍藏版)》请在三一办公上搜索。
1、上一次课讲到如何减少程序错误、测试调试程序、连编程序和发布程序。请同学们回顾这样两个问题:,1.发布程序需要哪些文件?,2.减少程序错误的方法有哪些?,可执行程序和数据库文件;VFP运行库文件(VFP6R.dll和VFP6RCHS.DLL);使用的外部库或COM组件文件。,备份原始文件;检查介质完整性;隔离测试环境;将应用程序分割成单独工作模块;保护内存变量;不要对运行环境进行假设;逐步测试。,上一次课主要学习的内容,本章主要介绍如何使用VFP建立企业工资管理系统。内容包括功能设计、数据库和表设计,自定义函数、多种方式显示数据、表单之间的数据传递、数据缓冲、菜单和工具栏协调等。,第9章.企业工
2、资管理系统,9.1系统功能设计,功能模块图,运行salary.exe,完成系统登录,用户名:Admin,密码:sysadmin,打开系统主表单,如下图:包含菜单、工具栏、状态栏。,9.1.1系统管理模块,系统管理功能下面的系统设置用于录入公司名称、个税起征点。,.系统设置,信息设置-所得税率:设置税率、起征点,录入工资可以计算个人所得税额。,9.1.2信息设置模块,用于设置学历、职务、民族、政治面貌,这些信息在员工信息设置、惩罚、奖励记录管理时作为选项。,信息设置.基础信息,员工管理-部门信息:只支持一级部门,可以在表格中查看属于该部门的员工信息。,9.1.3员工管理,该表单可以完成浏览、新增
3、、修改、删除员工信息操作,单击显示钮可以改变表格中显示方式。,员工管理.员工信息,在员工信息表单中双击员工图标可以调出本表单。,.员工信息设定,工资管理-工资统计发放:“统计”钮用于统计员工工资,系统日期是10号前统计上个月工资,28号以后统计本月工资。,9.1.4工资管理,录入经手人后单击“发放”可完成工资发放的记录,选中打印工资条后可打印工资条。,工资管理.工资统计发放.工资条,可按照员工编号、姓名、部门、工资月份查询工资发放记录,结果可打印。,工资管理.工资发放查询,企业工资管理系统包括部门信息、员工信息、系统管理等操作,使用的表较多,以下分模块说明。,9.2数据库设计,系统管理主要包括
4、系统设置、用户管理、系统登录和修改密码等功能,主要涉及2个表:系统设置表(SysInfo)和用户信息表(Users)。,9.2.1系统管理,1.系统设置表,系统设置表(SysInfo),用户信息表(Users),2.用户信息表,信息设置模块中包括学历名称、职务名称、民族名称、和政治面貌名称、个人所得税率等。,9.2.2信息设置,1.学历名称,2.职务名称,3.民族名称,4.政治面貌表,5.所得税率表,员工管理模块数据表主要有个人信息和工资信息、部门信息表。,9.2.3员工管理,1.部门信息,2.员工信息-1/2,.员工信息-2/2,3.员工工资,工资管理包括工资统计发放和发放查询,涉及数据表为
5、:工资记录表。该表用来保存员工工资统计的发放情况。,9.2.4工资管理,.工资记录表-1/2,.工资记录表-2/2,企业工资管理系统中的可视类有:MyCmd、MyMove、MyControl、MyAdmin和MoreAdmin,9.3设计可视类,创建企业工资管理系统项目的步骤:文件-新建-项目-新建文件-文件名:salary,保存位置:个人文件夹-保存。创建企业工资管理系统数据库的步骤:项目管理器-数据-数据库-新建-新建数据库-文件名:salary,保存位置:个人文件夹DATA-保存;创建企业工资管理系统数据表的步骤:选择salary下面的表-新建-新建表-确认文件名和保存位置后,依次编辑保
6、存表结构信息,9.3.1创建项目与数据库,步骤:项目管理器/类库/新建/类名:MyCmd,派生于:CommandButton,存储于:MyTools/确定/在打开的类设计器编辑按钮的属性。属性:Caption=按钮FontName=楷体_GB2312FontSize=16ForeColor=RGB(0,0,0)Height=30Width=60,9.3.2创建MyCmd类,MyCmd.MouseMove过程:LPARAMETERS nButton,nShift,;nXCoord,nYCoord*如果按钮可用IF THIS.Enabled=.T.*使用自定义鼠标指针 This.MousePoin
7、ter=99*指定自定义鼠标指针 This.MouseIcon=hHand.curENDIF,在项目管理器中建立左图所示的类MyMove,基于:Container。为该类添加四个MyCmd控件对象。操作方法:点表单控件中“查看类”/添加/找开类库MyTools/在控件工具栏上找到MyCmd,拖画到界面。设置对象名分别为CmdTop、CmdPre、CmdNxt、CmdBtm,修改对应的Captiont和ToolTipText的值如“首记录”和“到第一条记录”、“上记录”和“到上一条记录”、“下记录”和“到下一条记录”、“末记录”和“到最后一条记录”。添加事件过程如下:,9.3.3创建MyMove
8、类,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,人力资源管理系统)*如果记录指针不位于数据表末尾ELSE*记录指针下移 SKIPENDIF*刷新表单THISFORM.R
9、EFRESH,.CmdNxt.Click,GO 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()=RECCOUNT().OR.EOF()THIS.Cmdtop.ENABLED=.T.THIS.
10、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.Cmdtop.ENABLED=.T.THIS.Cmdpre.ENABLED=.T.THI
11、S.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(确定退出,4+32,本系统)IF YN=6THISFORM.RELEASEENDIF,9
12、.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.RELEASEENDIF,9.3.5创建MoreAdmin类,类名:MyContr
13、ol基类:Container类库:MyTools创建步骤:向该类中添加5个MyCmd对象,对象名:CmdNew,CmdModify,CmdDelete,CmdRefresh,CmdExit,分别设置其Caption,ToolTipText属性值“新增、增加新记录”、“修改、修改当前记录”、“删除、删除当前记录”、“刷新、刷新显示”、“退出、退出当前表单”,9.3.6创建MyControl类,企业工资管理系统需要自定义的函数包括:AutoInc字符串数自动增1DateToString日期转换为YYYY/MM/DD形式的串EnCode将给定的串与数值异或后返回ITaxComp计算个人所得税,9.4
14、创建通用函数,*“AutoInc”函数*作用:使“000000XX”形式的编号自动加1*接收“0000XX”形式的字符串作为参数*字符串长度限制为10,AutoInc,FUNCTION autoinc(nCode)*获取字符串长度nLen=Len(nCode)*将字符型转换为数值型,即获取非0部分的数值nCode=VAL(nCode)*非0部分数字加1nCode=nCode+1*转换为字符型nCode=ALLTRIM(STR(nCode),AutoInc.prg-1/2,*获取转换后的字符串的长度nLength=LEN(nCode)*在数字之前加上前置“0”nZero=000000000000
15、nCode=SUBSTR(nZero,1,nLen-nLength)+nCode*返回结果RETURN nCodeENDFUNC,AutoInc.prg-2/2,*“DateToString”函数*将日期型数据转换为字符串*接收日期型变量作为参数,DateToString,*“DateToString”函数*将日期型数据转换为字符串*接收日期型变量作为参数FUNCTION DateToString(dDate)*默认返回空字符串sDate=*如果参数非空而且为日期型IF.NOT.EMPTY(dDate).AND.VARTYPE(dDate)=D*分别获取其年、月、日字段nYear=YEAR(d
16、Date)nMonth=MONTH(dDate),DateToString.prg-1/2,nDay=DAY(dDate)*组合数据sDate=ALLTRIM(STR(nYear)+/+ALLTRIM(STR(nMonth)+/+ALLTRIM(STR(nDay)sDate=+sDate+ENDIF*返回值RETURN sDateENDFUNC,DateToString.prg-22,*函数Encode*作用:对输入的指定的字符串进行编码*参数:sStr:要编码或者解码的字符串*nCode:编码或者解码时使用的密钥,9.4.3Encode,FUNCTION ENCODE(sStr,nCode)
17、*声明需要使用的本地变量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=BITXOR(ASC(SUBSTR(sStr,i,1),nCode)sTempStr=sTempStr+CHR(cTempChr)ENDFOR*返回编码后的结果R
18、ETURN sTempStrENDFUNC,Encode.prg-2/2,*“ITaxComp”函数*功能:根据个人所得税率表和系统信息表计算个个人所得税额*参数:nNum,月收入总额*nBeg,个人所得税起征点,如果该参数为-1则使用“SysInfo”表的设置*返回值:个人所得税额,ITaxComp,在调试程序时,应该先在表taxRate中录入如下数据。,.个人所得税率表初始数据,*“ITaxComp”函数*功能:根据个人所得税率表和系统信息表计算个*个人所得税额*参数:nNum,月收入总额*nBeg,个人所得税起征点,如果该参数为-1*则使用“SysInfo”表的设置*返回值:个人所得税额
19、FUNCTION ITaxComp(nNum,nBeg)*如果不指定个人所得税起征点IF nBeg=-1*获取免税工资noTax=0,ITaxComp.prg-1/4,*如果表“SysInfo”没有打开IF!Used(SysInfo)*打开表USE SysInfoSELECT SysInfo*获取个税起征点noTax=SysInfo.个税起征点USEENDIF*减去不用计税部分nNum=nNum-noTaxELSE,ITaxComp.prg-2/4,nNum=nNum-nBegENDIF*如果工资未到起征点IF nNum 0RETURN 0ENDIF*如果没有打开“个人所得税率”表IF!Use
20、d(TaxRate)USE TaxRateENDIF*查找工资级别,ITaxComp.prg-3/4,SELECT TaxRateLOCATE FOR nNum 工资下限.AND.nNum=工资上限IF FOUND()*如果找到,计算税收ITaxNum=nNum*所得税率*0.01-速算扣除数ELSE*如果未找到,为-1ITaxNum=-1ENDIFRETURN ITaxNum&返回值ENDFUNC,ITaxComp.prg-4/4,作用:信息设置模块用来设置系统中部分数据项的可选项,确保数据的有效性和规范性。功能划分:信息设置模块包括基础信息设置和所得税率查看两个功能。表单组成:基础信息设置
21、、输入新值、所得税率查看。,9.5信息设置模块,基础信息设置主要设置学历、职务、民族和政治面貌。表单名:BasicInfo在表单中添加一个页框控件PageInfo,设置PageCount=4TabStretch=0-多重行TabStyle=0-两端每个页面添加1个文本框、1个列表框、1个MyControl对象,精确定位。,9.5.1创建基础信息设置表单,数据环境如右图所示其中除personel表之外,其他表设置如下属性:Exclusive=.T.,.数据环境,*接收表单参数PARAMETERS nPage*如果没有接收到表单参数IF VARTYPE(nPage)=L*激活第1个选项卡sPage
22、=1ELSE*如果参数过大 IF nPage THISFORM.MainCon.InfoPage.PAGECOUNTsPage=1,.添加代码.表单basicInfo.Init-1/2,ELSE*激活指定的选项卡sPage=nPageENDIFENDIF*激活选项卡THISFORM.MainCon.InfoPage.ACTIVEPAGE=sPage*刷新表单THISFORM.REFRESH,.表单basicInfo.Init-2/2,SELECT AcademySET FILTER TO&清除可能存在的过滤条件THIS.DataList.CLEAR&清除列表*循环在列表框中添加列表项SCANT
23、HIS.DataList.ADDITEM(学历)ENDSCAN*选中第1项IF THIS.DataList.LISTCOUNT 0THIS.DataList.SELECTED(1)=.T.ENDIFTHISFORM.REFRESH&刷新表单,.学历设置页面AcademyPage.Init,IF.NOT.EMPTY(THIS.VALUE)THIS.PARENT.CmdGrp.CmdModify.ClickENDIF,DataList.DblClick,*调用“输入新值”表单获取学历名称sStr=DO FORM Forms/InputNew WITH sStr TO NewValue*如果没有返回
24、学历名称IF EMPTY(ALLTRIM(NewValue)RETURNENDIF*检查要新增的学历名称是否已经存在SELECT AcademyCOUNT FOR 学历=NewValue TO RecNum,CmdNew.Click-1/2,IF RecNum 0MESSAGEBOX(学历名称已经存在,48,企业工资管理系统)RETURNENDIF*更新记录INSERT INTO Academy VALUES(NewValue)*更新列表框THIS.PARENT.PARENT.DataList.ADDITEM(NewValue)*刷新记录,CmdNew.Click-2/2,*检查列表框是否为空
25、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.PARENT.DataList.LISTCOUNT*如果被选中了 IF THIS.PARENT.PARENT.DataList.SELECTED(nCnt)*标识被选中,保存其索引值 b
26、Sel=.T.nSel=nCnt sStr=THIS.PARENT.PARENT.DataList.LIST(nCnt)EXIT ENDIFENDFOR,CmdModify.Click-2/4,*如果没有选中的列表项弹出对话框IF bSel=.F.MESSAGEBOX(请选择要修改的列表项,48,企业工资管理系统)THIS.PARENT.PARENT.DataList.SETFOCUSRETURNENDIF*如果选择了列表项IF bSel=.T.*调用“输入新值”对话框输入新的值 DO FORM FORMS/InputNew WITH sStr TO newValue*如果输入了新的值,Cmd
27、Modify.Click-3/4,IF.NOT.EMPTY(newValue).AND.NOT.newValue=sStr*检查要修改的学历名称是否已经存在SELECT AcademyCOUNT FOR 学历=NewValue TO RecNumIF RecNum 1*更新记录UPDATE Academy SET 学历=newValue WHERE 学历=sStr*更新列表项THIS.PARENT.PARENT.DataList.LIST(nSel)=newValueENDIF ENDIFENDIF,CmdModify.Click-4/4,*检查列表框是否为空IF THIS.PARENT.PA
28、RENT.DataList.LISTCOUNT 1MESSAGEBOX(没有可以删除的项,48,企业工资管理系统)THIS.PARENT.CmdNew.SETFOCUSRETURNENDIF*初始值bSel=.F.nSel=-1,CmdDelete.Click-1/5,*检查列表框中是否有列表项被选中FOR nCnt=1 TO THIS.PARENT.PARENT.DataList.LISTCOUNTIF THIS.PARENT.PARENT.DataList.SELECTED(nCnt)bSel=.T.nSel=nCnt*退出循环EXITENDIFENDFOR,CmdDelete.Click
29、-2/5,*如果没有选中的列表项弹出对话框IF bSel=.F.MESSAGEBOX(请选择要删除的列表项,48,企业工资管理系统)THIS.PARENT.PARENT.DataList.SETFOCUSRETURNENDIF*如果选中ItemName=THIS.PARENT.PARENT.DataList.LIST(nSel),CmdDelete.Click-3/5,*检测是否有员工的学历为该项rNum=-1SELECT PersonnelCOUNT FOR 学历=ItemName TO rNumIF rNum 0MESSAGEBOX(有员工使用该选项,48,企业工资管理系统)RETURNE
30、NDIF,CmdDelete.Click-4/5,*确认对话框YN=MESSAGEBOX(是否要删除列表项+CHR(13)+ItemName,4+32,企业工资管理系统)IF YN=6*删除记录DELETE FROM Academy WHERE 学历=ItemNameSELECT AcademyPACK*刷新显示THIS.PARENT.PARENT.DataList.REMOVEITEM(nSel)ENDIF,CmdDelete.Click-5/5,CmdRefresh.Click,SELECT DutySET FILTER TOTHIS.DataList.CLEARSCANTHIS.Data
31、List.ADDITEM(职务名称)ENDSCANIF THIS.DataList.LISTCOUNT 1THIS.DataList.SELECTED(1)=.T.ENDIF,.职务设置页面DutyPage.Init,IF.NOT.EMPTY(THIS.VALUE)THIS.PARENT.CmdGrp.CmdModify.ClickENDIF,DataList.DblClick,*调用“输入新值”表单获取职务名称sStr=DO FORM FORMS/InputNew WITH sStr TO NewValue*如果没有返回职务名称IF EMPTY(ALLTRIM(NewValue)RETURN
32、ENDIF*检查要新增的学历名称是否已经存在SELECT DutyCOUNT FOR 职务名称=NewValue TO RecNum,CmdNew.Click-1/2,IF RecNum 0MESSAGEBOX(职务名称已经存在,48,企业工资管理系统)RETURNENDIF*添加记录INSERT INTO Duty VALUES(NewValue)*列表框中添加项THIS.PARENT.PARENT.DataList.ADDITEM(NewValue)*刷新记录,CmdNew.Click-2/2,*检查列表框是否为空IF THIS.PARENT.PARENT.DataList.LISTCOU
33、NT 1MESSAGEBOX(没有可以修改的项,48,企业工资管理系统)THIS.PARENT.cmdnew.SETFOCUSRETURNENDIF*检查列表框中是否有列表项被选中bSel=.F.nSel=0sStr=,CmdModify.Click-1/4,FOR nCnt=1 TO THIS.PARENT.PARENT.DataList.LISTCOUNTIF THIS.PARENT.PARENT.DataList.SELECTED(nCnt)bSel=.T.nSel=nCntENDIFENDFORsStr=THIS.PARENT.PARENT.DataList.LIST(nSel),Cm
34、dModify.Click-2/4,IF bSel=.F.&如果没有选中的列表项弹出对话框 MESSAGEBOX(请选择要修改的列表项,48,企业工资管理系统)THIS.PARENT.PARENT.DataList.SETFOCUS RETURNENDIFIF bSel=.T.&如果选中了列表项DO FORM Forms/InputNew WITH sStr TO NewValueIF.NOT.EMPTY(NewValue).AND.NOT.NewValue=sStr*检查要修改的职务名称是否已经存在SELECT DutyCOUNT FOR 职务名称=NewValue TO RecNum,Cm
35、dModify.Click-3/4,IF RecNum 0MESSAGEBOX(职务名称已经存在,48,企业工资管理系统)RETURNELSE UPDATE Duty SET 职务名称=NewValue WHERE 职务名称=sStr THIS.PARENT.PARENT.DataList.LIST(nSel)=NewValueENDIFENDIFENDIF,CmdModify.Click-4/4,*检查列表框是否为空IF THIS.Parent.Parent.DataList.Listcount 1MESSAGEBOX(没有可以删除的项,48,企业工资管理系统)THIS.Parent.cmd
36、new.setfocusRETURNENDIF*初始值bSel=.F.nSel=-1ItemName=,CmdDelete.Click-1/5,*检查列表框中是否有列表项被选中FOR nCnt=1 TO THIS.PARENT.PARENT.DataList.LISTCOUNTIF THIS.PARENT.PARENT.DataList.SELECTED(nCnt)bSel=.T.nSel=nCnt*退出循环EXITENDIFENDFOR,CmdDelete.Click-2/5,*如果没有选中的列表项弹出对话框IF bSel=.F.MESSAGEBOX(请选择要删除的列表项,48,企业工资管理
37、系统)THIS.PARENT.PARENT.DataList.SETFOCUSRETURNENDIF*如果选中ItemName=ALLTRIM(THIS.PARENT.PARENT.DataList.LIST(nSel)*检测是否有员工的职务为该项rNum=-1,CmdDelete.Click-3/5,SELECT PersonnelCOUNT FOR 职务=ItemName TO rNumIF rNum 0MESSAGEBOX(有员工使用该选项,48,企业工资管理系统)RETURNENDIF*确认对话框YN=MESSAGEBOX(是否要删除列表项+CHR(13)+ItemName,4+32,
38、企业工资管理系统),CmdDelete.Click-4/5,IF YN=6*删除记录DELETE FROM Duty WHERE ALLTRIM(职务名称)=ItemNameSELECT DutyPACK*刷新显示THIS.PARENT.PARENT.DataList.REMOVEITEM(nSel)ENDIF,CmdDelete.Click-5/5,CmdRefresh.Click,SELECT PeopleSET FILTER TOTHIS.DataList.ClearSCANTHIS.DataList.additem(民族)ENDSCANIF THIS.DataList.LISTCOUN
39、T 1THIS.DataList.SELECTED(1)=.T.ENDIF,.民族设置PeoplePage.Init,IF.NOT.EMPTY(THIS.VALUE)THIS.PARENT.CmdGrp.CmdModify.ClickENDIF,DataList.DblClick,*调用“输入新值”表单获取民族名称sStr=DO FORM FORMS/InputNew WITH sStr TO NewValue*如果没有返回民族名称IF EMPTY(ALLTRIM(NewValue)RETURNENDIF*检查要新增的名称是否已经存在SELECT PeopleCOUNT FOR 民族=NewV
40、alue TO RecNum,CmdNew.Click-1/2,IF RecNum 0MESSAGEBOX(民族名称已经存在,48,企业工资管理系统)RETURNENDIF*添加记录INSERT INTO People VALUES(NewValue)*列表框中添加选项THIS.PARENT.PARENT.DataList.ADDITEM(NewValue)*刷新显示,CmdNew.Click-2/2,*检查列表框是否为空IF THIS.PARENT.PARENT.DataList.LISTCOUNT 1MESSAGEBOX(没有可以修改的项,48,企业工资管理系统)THIS.PARENT.C
41、mdNew.SETFOCUSRETURNENDIF*检查列表框中是否有列表项被选中bSel=.F.sStr=nSel=0,CmdModify.Click-1/4,FOR nCnt=1 TO THIS.PARENT.PARENT.DataList.LISTCOUNTIF THIS.PARENT.PARENT.DataList.SELECTED(nCnt)bSel=.T.sStr=THIS.PARENT.PARENT.DataList.LIST(nCnt)nSel=nCntExitENDIFENDFOR,CmdModify.Click-2/4,*如果没有选中的列表项弹出对话框IF bSel=.F.
42、MESSAGEBOX(请选择要修改的列表项,48,企业工资管理系统)THIS.PARENT.PARENT.DataList.SETFOCUSRETURNENDIF*如果选中了列表项IF bSel=.T.DO FORM Forms/InputNew WITH sStr TO NewValueIF.NOT.EMPTY(NewValue).AND.NOT.NewValue=sStr,CmdModify.Click-3/4,*检查要修改的民族名称是否已经存在SELECT PeopleCOUNT FOR 民族=NewValue TO RecNumIF RecNum 0MESSAGEBOX(民族名称已经存
43、在,48,企业工资管理系统)RETURNELSEUPDATE People SET 民族=NewValue WHERE 民族=sStrTHIS.PARENT.PARENT.DataList.LIST(nSel)=NewValueENDIF ENDIFENDIF,CmdModify.Click-4/4,*检查列表框是否为空IF THIS.PARENT.PARENT.DataList.LISTCOUNT 1MESSAGEBOX(没有可以删除的项,48,企业工资管理系统)THIS.PARENT.cmdnew.SETFOCUSRETURNENDIF*初始值bSel=.F.nSel=-1,CmdDele
44、te.Click-1/5,*检查列表框中是否有列表项被选中FOR nCnt=1 TO THIS.PARENT.PARENT.DataList.LISTCOUNTIF THIS.PARENT.PARENT.DataList.SELECTED(nCnt)bSel=.T.nSel=nCnt*退出循环EXITENDIFENDFOR,CmdDelete.Click-2/5,*如果没有选中的列表项弹出对话框IF bSel=.F.MESSAGEBOX(请选择要删除的列表项,48,企业工资管理系统)THIS.PARENT.PARENT.DataList.SETFOCUSRETURNENDIF*如果选中Item
45、Name=THIS.PARENT.PARENT.DataList.LIST(nSel)*检测是否有员工的职务为该项rNum=-1SELECT PersonnelCOUNT FOR 民族=ItemName TO rNum,CmdDelete.Click-3/5,IF rNum 0MESSAGEBOX(有员工使用该选项,48,企业工资管理系统)RETURNENDIF*确认对话框YN=MESSAGEBOX(是否要删除列表项+CHR(13)+ItemName,4+32,企业工资管理系统),CmdDelete.Click-4/5,IF YN=6*删除记录DELETE FROM People WHERE
46、民族=ItemNameSELECT PeoplePACK*刷新显示THIS.PARENT.PARENT.DataList.REMOVEITEM(nSel)THISFORM.REFRESHENDIF,CmdDelete.Click-5/5,CmdRefresh.Click,SELECT PoliticalSET FILTER TOTHIS.DataList.clearSCANTHIS.DataList.additem(政治面貌)ENDSCANIF THIS.DataList.LISTCOUNT 1THIS.DataList.SELECTED(1)=.T.ENDIF,.政治面貌PoliticalP
47、age.Init,IF.NOT.EMPTY(THIS.VALUE)THIS.PARENT.CmdGrp.CmdModify.ClickENDIF,DataList.DblClick,*调用“输入新值”表单获取职务名称sStr=DO FORM FORMS/InputNew WITH sStr TO NewValue*如果没有返回政治面貌名称IF EMPTY(ALLTRIM(NewValue)RETURNENDIF*检查要新增的名称是否已经存在SELECT PersonnelCOUNT FOR 政治面貌=NewValue TO RecNum,CmdNew.Click-1/2,IF RecNum 0
48、MESSAGEBOX(政治面貌名称已经存在,48,企业工资管理系统)RETURNENDIF*添加记录INSERT INTO Political VALUES(NewValue)*列表框中添加选项THIS.PARENT.PARENT.DataList.ADDITEM(NewValue)*刷新显示,CmdNew.Click-2/2,*检查列表框是否为空IF THIS.PARENT.PARENT.DataList.LISTCOUNT 1MESSAGEBOX(没有可以修改的项,48,企业工资管理系统)THIS.PARENT.CmdNew.SETFOCUSRETURNENDIF*检查列表框中是否有列表项
49、被选中bSel=.F.sStr=nSel=0,CmdModify.Click-1/4,FOR nCnt=1 TO THIS.PARENT.PARENT.DataList.LISTCOUNTIF THIS.PARENT.PARENT.DataList.SELECTED(nCnt)bSel=.T.nSel=nCntEXITENDIFENDFORsStr=THIS.PARENT.PARENT.DataList.LIST(nSel),CmdModify.Click-2/4,*如果没有选中的列表项弹出对话框IF bSel=.F.MESSAGEBOX(请选择要修改的列表项,48,企业工资管理系统)THIS
50、.PARENT.PARENT.DataList.SETFOCUSRETURNENDIF*如果选中了列表项IF bSel=.T.DO FORM Forms/InputNew WITH sStr TO NewValueIF.NOT.EMPTY(NewValue).AND.NOT.NewValue=sStr,CmdModify.Click-3/4,*检查要修改的政治面貌是否已经存在SELECT PoliticalCOUNT FOR 政治面貌=NewValue TO RecNumIF RecNum 0MESSAGEBOX(政治面貌已经存在,48,企业工资管理系统)RETURNELSEUPDATE Po