第9章企业工资管理系统.ppt

上传人:本田雅阁 文档编号:2083507 上传时间:2019-02-11 格式:PPT 页数:292 大小:2.76MB
返回 下载 相关 举报
第9章企业工资管理系统.ppt_第1页
第1页 / 共292页
第9章企业工资管理系统.ppt_第2页
第2页 / 共292页
第9章企业工资管理系统.ppt_第3页
第3页 / 共292页
亲,该文档总共292页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第9章企业工资管理系统.ppt》由会员分享,可在线阅读,更多相关《第9章企业工资管理系统.ppt(292页珍藏版)》请在三一文库上搜索。

1、上一次课讲到如何减少程序错误、测试调试程序、连编程序和发布程序。请同学们回顾这样两个问题:,1.发布程序需要哪些文件?,2.减少程序错误的方法有哪些?,可执行程序和数据库文件;VFP运行库文件(VFP6R.dll和VFP6RCHS.DLL);使用的外部库或COM组件文件。,备份原始文件; 检查介质完整性; 隔离测试环境; 将应用程序分割成单独工作模块; 保护内存变量; 不要对运行环境进行假设; 逐步测试。,上一次课主要学习的内容,本章主要介绍如何使用VFP建立企业工资管理系统。内容包括功能设计、数据库和表设计,自定义函数、多种方式显示数据、表单之间的数据传递、数据缓冲、菜单和工具栏协调等。,第

2、9章.企业工资管理系统,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=“楷体_GB2312“ FontSize=16 ForeColor=RGB(0,0,0) Height=30 Width=60,9.3.2创建MyCmd类,MyCmd.MouseMove过程: LPARAMETERS nButton, nShift,; nXCoord, nYCoord *如果按钮可用 IF THIS.Ena

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

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

9、(“已到末记录“,48,“人力资源管理系统“) *如果记录指针不位于数据表末尾 ELSE *记录指针下移 SKIP ENDIF *刷新表单 THISFORM.REFRESH,.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.ENAB

10、LED=.F. Return ENDIF *如果在记录指针在数据表的末尾 IF RECNO()=RECCOUNT() .OR. EOF() THIS.Cmdtop.ENABLED=.T. THIS.Cmdpre.ENABLED=.T. THIS.Cmdnxt.ENABLED=.F. THIS.Cmdbtm.ENABLED=.F. RETURN ENDIF,.MyMove.Refresh,*如果记录指针在数据表的首部 IF RECNO()=1 .OR. BOF() THIS.Cmdtop.ENABLED=.F. THIS.Cmdpre.ENABLED=.F. THIS.Cmdnxt.ENABLE

11、D=.T. THIS.Cmdbtm.ENABLED=.T. RETURN ENDIF *如果记录指针不在数据表的首部 *也不在尾部 THIS.Cmdtop.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、ToolTip

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

13、定义。 该类中只添加“退出”钮的Click过程,其他为空。 *CmdExit.Click LOCAL YN YN=MESSAGEBOX(“确定退出“,4+32,“本系统“) IF YN=6 THISFORM.RELEASE ENDIF,9.3.5创建MoreAdmin类,类名:MyControl 基类:Container 类库:MyTools 创建步骤: 向该类中添加5个MyCmd对象,对象名:CmdNew,CmdModify,CmdDelete,CmdRefresh,CmdExit,分别设置其Caption,ToolTipText属性值“新增、增加新记录”、“修改、修改当前记录”、“删除、删

14、除当前记录”、“刷新、刷新显示”、“退出、退出当前表单”,9.3.6创建MyControl类,企业工资管理系统需要自定义的函数包括: AutoInc字符串数自动增1 DateToString日期转换为YYYY/MM/DD形式的串 EnCode将给定的串与数值异或后返回 ITaxComp计算个人所得税,9.4创建通用函数,*“AutoInc”函数 * 作用:使“000000XX”形式的编号自动加1 * 接收“0000XX”形式的字符串作为参数 * 字符串长度限制为10,9.4.1AutoInc,FUNCTION autoinc(nCode) *获取字符串长度 nLen=Len(nCode) *将

15、字符型转换为数值型,即获取非0部分的数值 nCode = VAL(nCode) *非0部分数字加1 nCode = nCode + 1 *转换为字符型 nCode = ALLTRIM(STR(nCode),AutoInc.prg-1/2,*获取转换后的字符串的长度 nLength = LEN(nCode) *在数字之前加上前置“0” nZero=“000000000000“ nCode = SUBSTR(nZero,1,nLen-nLength) + nCode *返回结果 RETURN nCode ENDFUNC,AutoInc.prg-2/2,*“DateToString”函数 * 将日期

16、型数据转换为字符串 * 接收日期型变量作为参数,9.4.2DateToString,*“DateToString”函数 * 将日期型数据转换为字符串 * 接收日期型变量作为参数 FUNCTION DateToString(dDate) *默认返回空字符串 sDate = “ *如果参数非空而且为日期型 IF .NOT. EMPTY(dDate) .AND. VARTYPE(dDate) = “D“ *分别获取其年、月、日字段 nYear = YEAR(dDate) nMonth = MONTH(dDate),DateToString.prg-1/2,nDay = DAY(dDate) *组合数

17、据 sDate = ALLTRIM(STR(nYear)+“/“+ALLTRIM(STR(nMonth)+“/“+ALLTRIM(STR(nDay) sDate = “+sDate +“ ENDIF *返回值 RETURN sDate ENDFUNC,DateToString.prg-22,*函数Encode *作用:对输入的指定的字符串进行编码 *参数:sStr:要编码或者解码的字符串 * nCode:编码或者解码时使用的密钥,9.4.3Encode,FUNCTION ENCODE(sStr,nCode) *声明需要使用的本地变量 LOCAL sTmpStr,cTempChr,i *sTem

18、pStr:用来保存昨时的编码或者解码后的字符串 *cTempChr:用来保存编码或者解码后的字符 *i:循环计数 *对变量赋初值 sTempStr = “ cTempChr = “,Encode.prg-1/2,*如果未指定密钥 IF nCode = 0 nCode = 237 ENDIF *对字符串的每个字符进行编码 FOR i = 1 TO LEN(ALLTRIM(sStr) cTempChr = BITXOR(ASC(SUBSTR(sStr,i,1),nCode) sTempStr = sTempStr+ CHR(cTempChr) ENDFOR *返回编码后的结果 RETURN sTe

19、mpStr ENDFUNC,Encode.prg-2/2,*“ITaxComp”函数 *功能:根据个人所得税率表和系统信息表计 算个个人所得税额 *参数:nNum,月收入总额 * nBeg,个人所得税起征点,如果该参 数为-1则使用“SysInfo”表的设置 *返回值:个人所得税额,9.4.4ITaxComp,在调试程序时,应该先在表taxRate中录入如下数据。,.个人所得税率表初始数据,*“ITaxComp”函数 *功能:根据个人所得税率表和系统信息表计算个 * 个人所得税额 *参数:nNum,月收入总额 * nBeg,个人所得税起征点,如果该参数为-1 * 则使用“SysInfo”表的设

20、置 *返回值:个人所得税额 FUNCTION ITaxComp(nNum, nBeg) *如果不指定个人所得税起征点 IF nBeg = -1 *获取免税工资 noTax = 0,ITaxComp.prg-1/4,*如果表“SysInfo”没有打开 IF !Used(“SysInfo“) *打开表 USE SysInfo SELECT SysInfo *获取个税起征点 noTax = SysInfo.个税起征点 USE ENDIF *减去不用计税部分 nNum = nNum - noTax ELSE,ITaxComp.prg-2/4,nNum = nNum - nBeg ENDIF *如果工资

21、未到起征点 IF nNum 0 RETURN 0 ENDIF *如果没有打开“个人所得税率”表 IF !Used(“TaxRate“) USE TaxRate ENDIF *查找工资级别,ITaxComp.prg-3/4,SELECT TaxRate LOCATE FOR nNum 工资下限 .AND. nNum = 工资上限 IF FOUND() *如果找到,计算税收 ITaxNum = nNum * 所得税率 * 0.01 - 速算扣除数 ELSE *如果未找到,为-1 ITaxNum = -1 ENDIF RETURN ITaxNum &返回值 ENDFUNC,ITaxComp.prg-

22、4/4,作用: 信息设置模块用来设置系统中部分数据项的可选项,确保数据的有效性和规范性。 功能划分: 信息设置模块包括基础信息设置和所得税率查看两个功能。 表单组成: 基础信息设置、输入新值、所得税率查看。,9.5信息设置模块,基础信息设置主要设置学历、职务、民族和政治面貌。表单名:BasicInfo 在表单中添加一个 页框控件PageInfo, 设置PageCount=4 TabStretch=0 -多重行 TabStyle=0-两端 每个页面添加1个 文本框、1个列表框、 1个MyControl对象, 精确定位。,9.5.1创建基础信息设置表单,数据环境如右图所示 其中除personel表

23、之外,其他表设置如下属性: Exclusive=.T.,.数据环境,*接收表单参数 PARAMETERS nPage *如果没有接收到表单参数 IF VARTYPE(nPage) = “L“ *激活第1个选项卡 sPage = 1 ELSE *如果参数过大 IF nPage THISFORM.MainCon.InfoPage.PAGECOUNT sPage = 1,.添加代码 .表单basicInfo.Init-1/2,ELSE *激活指定的选项卡 sPage = nPage ENDIF ENDIF *激活选项卡 THISFORM.MainCon.InfoPage.ACTIVEPAGE = s

24、Page *刷新表单 THISFORM.REFRESH,.表单basicInfo.Init-2/2,SELECT Academy SET FILTER TO &清除可能存在的过滤条件 THIS.DataList.CLEAR &清除列表 *循环在列表框中添加列表项 SCAN THIS.DataList.ADDITEM(学历) ENDSCAN *选中第1项 IF THIS.DataList.LISTCOUNT 0 THIS.DataList.SELECTED(1) = .T. ENDIF THISFORM.REFRESH &刷新表单,.学历设置页面 AcademyPage.Init,IF .NOT

25、. EMPTY(THIS.VALUE) THIS.PARENT.CmdGrp.CmdModify.Click ENDIF,DataList.DblClick,*调用“输入新值”表单获取学历名称 sStr = “ DO FORM Forms/InputNew WITH sStr TO NewValue *如果没有返回学历名称 IF EMPTY(ALLTRIM(NewValue) RETURN ENDIF *检查要新增的学历名称是否已经存在 SELECT Academy COUNT FOR 学历 = NewValue TO RecNum,CmdNew.Click-1/2,IF RecNum 0 M

26、ESSAGEBOX(“学历名称已经存在“, 48, “企业工资管理系统“) RETURN ENDIF *更新记录 INSERT INTO Academy VALUES(NewValue) *更新列表框 THIS.PARENT.PARENT.DataList.ADDITEM(NewValue) *刷新记录 THIS.PARENT.REFRESH,CmdNew.Click-2/2,*检查列表框是否为空 IF THIS.PARENT.PARENT.DataList.LISTCOUNT 1 MESSAGEBOX(“没有可以修改的项“, 48, “企业工资管理系统“) THIS.PARENT.CmdNe

27、w.SETFOCUS RETURN ENDIF *检查列表框中是否有列表项被选中 bSel = .F. nSel = -1 sStr = “,CmdModify.Click-1/4,*循环找出被选择的列表项 FOR nCnt = 1 TO THIS.PARENT.PARENT.DataList.LISTCOUNT *如果被选中了 IF THIS.PARENT.PARENT.DataList.SELECTED(nCnt) *标识被选中,保存其索引值 bSel = .T. nSel = nCnt sStr = THIS.PARENT.PARENT.DataList.LIST(nCnt) EXIT

28、ENDIF ENDFOR,CmdModify.Click-2/4,*如果没有选中的列表项弹出对话框 IF bSel = .F. MESSAGEBOX(“请选择要修改的列表项“, 48, “企业工资管理系统“) THIS.PARENT.PARENT.DataList.SETFOCUS RETURN ENDIF *如果选择了列表项 IF bSel = .T. *调用“输入新值”对话框输入新的值 DO FORM FORMS/InputNew WITH sStr TO newValue *如果输入了新的值,CmdModify.Click-3/4,IF .NOT. EMPTY(newValue) .AN

29、D. .NOT. newValue = sStr *检查要修改的学历名称是否已经存在 SELECT Academy COUNT FOR 学历 = NewValue TO RecNum IF RecNum 1 *更新记录 UPDATE Academy SET 学历 = newValue WHERE 学历 = sStr *更新列表项 THIS.PARENT.PARENT.DataList.LIST(nSel) = newValue ENDIF ENDIF ENDIF,CmdModify.Click-4/4,*检查列表框是否为空 IF THIS.PARENT.PARENT.DataList.LIST

30、COUNT 1 MESSAGEBOX(“没有可以删除的项“, 48, “企业工资管理系统“) THIS.PARENT.CmdNew.SETFOCUS RETURN ENDIF *初始值 bSel = .F. nSel = -1,CmdDelete.Click-1/5,*检查列表框中是否有列表项被选中 FOR nCnt = 1 TO THIS.PARENT.PARENT.DataList.LISTCOUNT IF THIS.PARENT.PARENT.DataList.SELECTED(nCnt) bSel = .T. nSel = nCnt *退出循环 EXIT ENDIF ENDFOR,Cm

31、dDelete.Click-2/5,*如果没有选中的列表项弹出对话框 IF bSel = .F. MESSAGEBOX(“请选择要删除的列表项“, 48, “企业工资管理系统“) THIS.PARENT.PARENT.DataList.SETFOCUS RETURN ENDIF *如果选中 ItemName = THIS.PARENT.PARENT.DataList.LIST(nSel),CmdDelete.Click-3/5,*检测是否有员工的学历为该项 rNum = -1 SELECT Personnel COUNT FOR 学历 = ItemName TO rNum IF rNum 0

32、MESSAGEBOX(“有员工使用该选项“, 48, “企业工资管理系统“) RETURN ENDIF,CmdDelete.Click-4/5,*确认对话框 YN = MESSAGEBOX(“是否要删除列表项“+ CHR(13) + ItemName, 4+32 ,“企业工资管理系统“) IF YN = 6 *删除记录 DELETE FROM Academy WHERE 学历 = ItemName SELECT Academy PACK *刷新显示 THIS.PARENT.PARENT.DataList.REMOVEITEM(nSel) ENDIF,CmdDelete.Click-5/5,TH

33、IS.PARENT.PARENT.INIT,CmdRefresh.Click,SELECT Duty SET FILTER TO THIS.DataList.CLEAR SCAN THIS.DataList.ADDITEM(职务名称) ENDSCAN IF THIS.DataList.LISTCOUNT 1 THIS.DataList.SELECTED(1) = .T. ENDIF,.职务设置页面 DutyPage.Init,IF .NOT. EMPTY(THIS.VALUE) THIS.PARENT.CmdGrp.CmdModify.Click ENDIF,DataList.DblClick

34、,*调用“输入新值”表单获取职务名称 sStr = “ DO FORM FORMS/InputNew WITH sStr TO NewValue *如果没有返回职务名称 IF EMPTY(ALLTRIM(NewValue) RETURN ENDIF *检查要新增的学历名称是否已经存在 SELECT Duty COUNT FOR 职务名称 = NewValue TO RecNum,CmdNew.Click-1/2,IF RecNum 0 MESSAGEBOX(“职务名称已经存在“, 48, “企业工资管理系统“) RETURN ENDIF *添加记录 INSERT INTO Duty VALUE

35、S(NewValue) *列表框中添加项 THIS.PARENT.PARENT.DataList.ADDITEM(NewValue) *刷新记录 THIS.PARENT.REFRESH,CmdNew.Click-2/2,*检查列表框是否为空 IF THIS.PARENT.PARENT.DataList.LISTCOUNT 1 MESSAGEBOX(“没有可以修改的项“, 48, “企业工资管理系统“) THIS.PARENT.cmdnew.SETFOCUS RETURN ENDIF *检查列表框中是否有列表项被选中 bSel = .F. nSel = 0 sStr = “,CmdModify.

36、Click-1/4,FOR nCnt = 1 TO THIS.PARENT.PARENT.DataList.LISTCOUNT IF THIS.PARENT.PARENT.DataList.SELECTED(nCnt) bSel = .T. nSel = nCnt ENDIF ENDFOR sStr = THIS.PARENT.PARENT.DataList.LIST(nSel),CmdModify.Click-2/4,IF bSel = .F. &如果没有选中的列表项弹出对话框 MESSAGEBOX(“请选择要修改的列表项“, 48, “企业工资管理系统“) THIS.PARENT.PARE

37、NT.DataList.SETFOCUS RETURN ENDIF IF bSel = .T. &如果选中了列表项 DO FORM Forms/InputNew WITH sStr TO NewValue IF .NOT. EMPTY(NewValue) .AND. .NOT. NewValue = sStr *检查要修改的职务名称是否已经存在 SELECT Duty COUNT FOR 职务名称 = NewValue TO RecNum,CmdModify.Click-3/4,IF RecNum 0 MESSAGEBOX(“职务名称已经存在“, 48, “企业工资管理系统“) RETURN

38、ELSE UPDATE Duty SET 职务名称 = NewValue WHERE 职务名称 = sStr THIS.PARENT.PARENT.DataList.LIST(nSel) = NewValue ENDIF ENDIF ENDIF,CmdModify.Click-4/4,*检查列表框是否为空 IF THIS.Parent.Parent.DataList.Listcount 1 MESSAGEBOX(“没有可以删除的项“, 48, “企业工资管理系统“) THIS.Parent.cmdnew.setfocus RETURN ENDIF *初始值 bSel = .F. nSel =

39、-1 ItemName = “,CmdDelete.Click-1/5,*检查列表框中是否有列表项被选中 FOR nCnt = 1 TO THIS.PARENT.PARENT.DataList.LISTCOUNT IF THIS.PARENT.PARENT.DataList.SELECTED(nCnt) bSel = .T. nSel = nCnt *退出循环 EXIT ENDIF ENDFOR,CmdDelete.Click-2/5,*如果没有选中的列表项弹出对话框 IF bSel = .F. MESSAGEBOX(“请选择要删除的列表项“, 48, “企业工资管理系统“) THIS.PAR

40、ENT.PARENT.DataList.SETFOCUS RETURN ENDIF *如果选中 ItemName = ALLTRIM(THIS.PARENT.PARENT.DataList.LIST(nSel) *检测是否有员工的职务为该项 rNum = -1,CmdDelete.Click-3/5,SELECT Personnel COUNT FOR 职务 = ItemName TO rNum IF rNum 0 MESSAGEBOX(“有员工使用该选项“, 48, “企业工资管理系统“) RETURN ENDIF *确认对话框 YN = MESSAGEBOX(“是否要删除列表项“+ CHR

41、(13) + ItemName, 4+32 ,“企业工资管理系统“),CmdDelete.Click-4/5,IF YN = 6 *删除记录 DELETE FROM Duty WHERE ALLTRIM(职务名称) = ItemName SELECT Duty PACK *刷新显示 THIS.PARENT.PARENT.DataList.REMOVEITEM(nSel) ENDIF,CmdDelete.Click-5/5,THIS.PARENT.PARENT.INIT,CmdRefresh.Click,SELECT People SET FILTER TO THIS.DataList.Clea

42、r SCAN THIS.DataList.additem(民族) ENDSCAN IF THIS.DataList.LISTCOUNT 1 THIS.DataList.SELECTED(1) = .T. ENDIF,.民族设置 PeoplePage.Init,IF .NOT. EMPTY(THIS.VALUE) THIS.PARENT.CmdGrp.CmdModify.Click ENDIF,DataList.DblClick,*调用“输入新值”表单获取民族名称 sStr = “ DO FORM FORMS/InputNew WITH sStr TO NewValue *如果没有返回民族名称

43、IF EMPTY(ALLTRIM(NewValue) RETURN ENDIF *检查要新增的名称是否已经存在 SELECT People COUNT FOR 民族 = NewValue TO RecNum,CmdNew.Click-1/2,IF RecNum 0 MESSAGEBOX(“民族名称已经存在“, 48, “企业工资管理系统“) RETURN ENDIF *添加记录 INSERT INTO People VALUES(NewValue) *列表框中添加选项 THIS.PARENT.PARENT.DataList.ADDITEM(NewValue) *刷新显示 THIS.PARENT

44、.REFRESH,CmdNew.Click-2/2,*检查列表框是否为空 IF THIS.PARENT.PARENT.DataList.LISTCOUNT 1 MESSAGEBOX(“没有可以修改的项“, 48, “企业工资管理系统“) THIS.PARENT.CmdNew.SETFOCUS RETURN ENDIF *检查列表框中是否有列表项被选中 bSel = .F. sStr = “ nSel = 0,CmdModify.Click-1/4,FOR nCnt = 1 TO THIS.PARENT.PARENT.DataList.LISTCOUNT IF THIS.PARENT.PAREN

45、T.DataList.SELECTED(nCnt) bSel = .T. sStr = THIS.PARENT.PARENT.DataList.LIST(nCnt) nSel = nCnt Exit ENDIF ENDFOR,CmdModify.Click-2/4,*如果没有选中的列表项弹出对话框 IF bSel = .F. MESSAGEBOX(“请选择要修改的列表项“, 48, “企业工资管理系统“) THIS.PARENT.PARENT.DataList.SETFOCUS RETURN ENDIF *如果选中了列表项 IF bSel = .T. DO FORM Forms/InputNe

46、w WITH sStr TO NewValue IF .NOT. EMPTY(NewValue) .AND. .NOT. NewValue = sStr,CmdModify.Click-3/4,*检查要修改的民族名称是否已经存在 SELECT People COUNT FOR 民族 = NewValue TO RecNum IF RecNum 0 MESSAGEBOX(“民族名称已经存在“, 48, “企业工资管理系统“) RETURN ELSE UPDATE People SET 民族 = NewValue WHERE 民族 = sStr THIS.PARENT.PARENT.DataLis

47、t.LIST(nSel) = NewValue ENDIF ENDIF ENDIF,CmdModify.Click-4/4,*检查列表框是否为空 IF THIS.PARENT.PARENT.DataList.LISTCOUNT 1 MESSAGEBOX(“没有可以删除的项“, 48, “企业工资管理系统“) THIS.PARENT.cmdnew.SETFOCUS RETURN ENDIF *初始值 bSel = .F. nSel = -1,CmdDelete.Click-1/5,*检查列表框中是否有列表项被选中 FOR nCnt = 1 TO THIS.PARENT.PARENT.DataLi

48、st.LISTCOUNT IF THIS.PARENT.PARENT.DataList.SELECTED(nCnt) bSel = .T. nSel = nCnt *退出循环 EXIT ENDIF ENDFOR,CmdDelete.Click-2/5,*如果没有选中的列表项弹出对话框 IF bSel = .F. MESSAGEBOX(“请选择要删除的列表项“, 48, “企业工资管理系统“) THIS.PARENT.PARENT.DataList.SETFOCUS RETURN ENDIF *如果选中 ItemName = THIS.PARENT.PARENT.DataList.LIST(nSel) *检测是否有员工的职务为该项 rNum = -1 SELECT Personnel COUNT FOR 民族 = ItemName TO rNum,CmdDelete.Click-3/5,IF rNum 0 MESSAGEBOX(“有员工使用该选项“, 48, “企业工资管理系统“) RETURN ENDIF *确认对话框 YN = MESSAGEBOX(“是否要删除列表项“+ CHR(13) + ItemName,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1