- 154.94 KB
- 2022-07-29 发布
- 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
- 网站客服QQ:403074932
VFP数据席是由若十相关数据表,各数据农的有关属性以及各农之间的联系等信息构成的文件—个数据怩由三个文件组成,这些文件的主文件名相同,扩展名分别为.DBC、.DCT、.DCX。VFP的表分为自由表和数据廉表。数据库表貝有以下特点:1•可以使用心表名、长字段名2.可以为字段指定标题和注释3.可以为字段设置默认值和掩码4.支持主关键字、参照完整性和表间关系建立新的数据阳步骤:{建立新项冃:hrm}->打开项冃管理器〉数据选项卡〉数据库〉新建・>新建数据库・>{输入文件名及保存位置卜〉保存。数据库只是一个容器,要在数据库中存储数据需要创建表。数据库表结构中项冃组成:1•字段名称、类型、宽度、小数位数、索引方式;2.字段格式、输入掩码、标题;3.字段有效性规则;4.字段注释。建立数据膊表结构时,涉及的主要项冃中,“输入掩码”属性代码含义,“格式”用于对整个字段格式的控制妞立数据库表结构时,涉及的主要项口中的“输入掩码”用于对字段中每个字符进行格式控制。A・只能输入字母L■只能输入逻辑符N・只输入字母、数字X•可输入任何字符Y・只接收Y,N9■只接收数字建立数据库表字段“婚姻状态”,要求只允许选择“已婚、未婚、离店。操作设置方法:将该字段“格式”屈性设置为在“输入掩码”中输入“己婚,未婚,离界”注意其中的逗号为半角字符。建立数据库表字段“婚姻状态”,要求只允许选择“已婚、未婚、离异”。操作编辑方法:焦点进入该字段后按空格键。建立数据库表“年龄”字段有效性规则:“年龄”字段只允许输入18-60Z间的数值。操作:1.设置表结构中,字段有效性“规则”属性为“Between(年龄,18,60)"2.设置表结构中,字段冇效性“信息”属性为“请输入18至60Z间的数值”VFPHj以通过命令操作数据,包括移动记录指针、新增记录、修改记录和删除记录。也町以使用SQL语句增加、删除、修改记录。\nVFP提供程序方式和命令方式两种操作方式。并提供设计器、牛成器、向导等操作工具。数据库、表、视图的建立都是通过使用设计器完成的。対于工作区选择、表的打开、关闭,记录浏览、增加、删除、编辑可以通过命令完成。打开数据库:OPENDATABASEV数据库名〉lExclusivelShared]打开表:USE[v表文件^>][ExclusivelShared][INv工作区号>][NoUpdate][Aliasv别名>]工作区操作SELECTv工作区号/别名/0/A...J>功能:设置当前工作区(1-32767之间),0表示设置示使用最小编号的工作区,A...J可用来表示M0号工作区。定位记录命令中,记录指针的绝对移动命令有GO[GOTO]GO[GOTO1TOPGO[GOTO]BOTTOM定位记录命令屮,记录指针的相对移动命令有SKIP[]追加记录命令APPEND[BLANK]从其他表追加记录APPENDFROMv表名〉[v范M>][FOR/WHILEv条件>][FIELDSv字段名表>][TYPEv类型>]插入记录命令INSERT[BLANK][BEFORE]浏览修改记录命令BROWSEIFIELDSv字段表>][LOCK][FREEZEv字段名>]INOAPPENDJ[NOMODIFY]替换式修改记录命令REPLACE[v范围〉][FOR/WHILEv条件>]v字段名>WITHv表达式〉[,...]逻辑删除记录命令DELETE[V范ffl>][FOR/WHILEv条件>]去掉删除记录标记命令RECALL[v范围>][FOR/WHILEV条件>]物理删除记录命令PACK\n百接删除全部记录命令ZAPSQL词句可以进行记录的新增、修改、删除和查询。新增记录的SQL命令INSERTINTOv表名〉[v字段名表>]VALUES(表达式表)功能:在表尾添加一•条记录,将表达式值赋给对应字段说明:该命令可以自动打开表,值与字段一一对应,省略字段名表默认全部字段。利用SQL命令在”通信录”表屮添加两条记录INSERTINTO通信录VALUES(“李明“,{人1974/08/06},“65865678”,”13912345678”)INSERTINTO通信录(姓名,手机)VALUES(”刘晶晶”,”13612345678”)新增记录:的SQL命令INSERTINTOV表名〉FROMARRAYv数组名>IFROMMEMVAR功能:将数组或与字段同名的内存变量的值添加到表尾说明:内存变量不存在时,字段值为默认值或空先创建一个一维数组,并赋以有关的值。再利用SQL命令将此数组的值作为新记录添加到“通信录”表中。DIMENSIUONA(4)A⑴二”王敏”A(2)={A1968/05/18}A(3)=”63627776”A(4)=”1361372578"INSERTINTO通信录FROMARRAYA修改记录的SQL命令格式:UPDATEv表名〉SETv字段名l>=v表达式1>[,v字段名2>=v表达式2>...][WHEREv逻辑表达式>]功能:対于指定的表屮符合条件的记录,用指定的表达式值来更新指定的字段值。说明:缺省条件吋更新所有记录利用SQL命令,将职工档案表ZGDA中职工年龄加1,基本工资增10%,女职工基本工资增80元。UPDATEZGDASET年龄=年龄+1,基木工资二基木工资*L1UPDATEZGDASET基木工资二基木工资+80WHERE性别-女,删除记录的SQL命令格式:DELETEFROMV表名〉[WHEREv条件>]功能:逻辑删除符合条件的记录物理删除ZGDA表小,年龄大于55的记录的SQL命令DELETEFROMZGDAWHERE年龄>55PACK使用VFP开发的应用程序,数据一般都是借助表单來进行显示和供用八操作。不同应用程序中对数据的操作表单上-•些按钮如增加、删除、移动记录指针等都是类似的,可以将这些按钮抽象为可视类。创建自定义按钮类步骤:项目管理器/类阳/新建/{类名:MyCmd,派生于:CommandButton,存储于:MyTools}/确定/在打开的类设计器编辑按钮的屈性。MyCmd.MouseMove过程:LPARAMETERSnButton,nShift,;\nnXCoord,nYCoord*——如果按钮可用IFTHIS.Enablcd=.T.*——使用自定义鼠标指针This.MousePointcr=99*——指定自定义鼠标指针This.Mouselcon="hHand.cur1'END1FCmdTop.ClickGOTOP&&到首记录THISFORM.REFRESH&&刷新衣单CmdPre.Click*——如果到了数据表首部IFBOF().OR.RECNO()=1MessageBox(“已到首记录”,48,”人力资源管理系统“)ELSE*——如果数据指针不位于数据表首部SKIP-1ENDIF*——刷新表单THISFORM.REFRESHCmdNxt.Click*——如果记录指针位于数据表末尾IFEOF()orRecNO()=RecCount()MessageBox(“已到末记录”,48,”人力资源管理系统“)*—如果记录指针不位于数据表末尾ELSE记录指针下移SKIPENDIF*——刷新表单THISFORM.REFRESHCmdBtm.ClickGOBOTTOM&&到数据表末尾THISFORM.REFRESH&&刷新表单*CmdExit・ClickLOCALYNYN二MESSAGEBOX(“确定退IIIu,4+32,H人力资源管理系统”)IFYN=6THISFORM.RELEASEENDIF\n设置衣单属性AutoCenter=.T.BorderStyle=2-h'|定对话框Caption』培训项目管理”Closable=.F.Hcight=32OWidth=615Icon="pcoplc.iconMDIForm=.T.MaxButton=.F.MinButton=F.ShowTips=.T.ShowWindow=l-在顶层农单中WindowType=l-模式Name=Trainpij设置数据环境中表属性BufferModeOverRide=2-保式行缓冲,Exc1usive=.T,设置数据环境中表属性“Buffe「ModeOve「Ride=2-保守式彳亍缓冲”吋,在表单上修改当前记录的数据不直接写入表,而是先写入缓冲区。使用函数TableUpdate(.E)将当前1条记录写入表小,TableUpdate(.T.)将所有缓冲记录写入表,该丙数返|h].T.表示写入成功。TableRevert(.F.或T.),为放弃对表当前/全部记录的修改。VFP提供多种方法向表单添加字段,如表单向导、快速表单、从数据坏境拖放、从表单控件工具栏拖放。从表单控件工具栏拖放文本框、组合框或编辑框后,通过设置其Controlsource属性为对应的字段,可以建立控件与字段的数据关联。控件拖放完成后,可以通过设置控件的外观、布局,使表单显得美观。表单常用属性:BorderStyle-用于设置窗口是否允许拖动边框改变大小。表单常川属性Closable-指定能否通过双击窗口菜单图标来关闭表单表单常用属性MaxButton>MinButton^ControlBox-设置是否可用最大化、最小化、关闭按钮表单常用屈性ShowTips-鼠标指针悬停在控件区域时,是否显示ToolTipText的值。表单常用属性ShowWindow-设置表单类型常用标签属性AutoSize-m据内容自动调整控件区域大小常用标签屈性BackStyle■背景是否透明常用标签囲性Caption-标签内容常用标签属性\nFont***-字体设置,FontBold粗体,Fontltalic斜体,FontName字体名称,FontSize字体大小,FontStrikethru删除线,FontUnderLine下划线常用标签屈性ForeColor-标签标题文字颜色常用标签属性Wordwrap-标题文字是否自动折行显示常用文本框控件属性:Controlsource-文本框的数据源,一般为字段,运行时显示该字段的值,所作修改自动保存常用文木框控件屈性Height-文本框窩度(点)Width-文木框宽度(点)常用文本框控件属性IMEModc-得到焦点时输入法状态常川文本框控件属性PassWordChar-加密显示字符常用文木框控件屈性SelectOnEntry-f#以焦点时是否选中文本内容常用按钮控件属性Caption-按钮标题常用按钮控件屈性Cancel-设置为.T.时,按键盘ESC键等于单击该钮。常川按钮控件属性Default-设置为.T.时,按键盘Enter键等丁•单击该钮。一个表单上只能有一个按钮的Cancel或Default为.T.设置Tab次序步骤:菜单:显示・>Tab键次序依次单击蓝色矩形框,设置完成后单击表单确认。创建自定义函数函数功能:自动为数据串増1,补前0。FUNCTIONautoinc(nCode)&&作用:使“000000XX"形式的编号自动加1nLen=Len(nCode)&&获取字符串©度nCode=VAL(nCode)&&将了符型转换为数值型,即获取菲0部分的数值nCode=nCode+1&&非0部分数字加1nCode=ALLTRIM(STR(nCode))&&转换为字符型nLcngth=LEN(nCodc)&&获取转换后的字符出的长度nZero=n0000000000nnCode=SUBSTR(nZero,1,nLen-nLength)+nCode&&在数字之询加上前置“0”RETURNnCode&&返冋结果ENDFUNC\n添加自定义屈性的步骤:菜单:表单/新建属性/输入上而的属性名/添加添加自定义方法的步骤菜单:表单/新建方法程序/输入上述方法名/添加添加的自定义属性或方法,可以通过“菜单:表单/编辑属性/方法程序”进行编辑。对农单对象新建方法程序内容的编辑与对象事件过程编辑相同。代码设计屮判断表是否为空Reccount()=0或者EOF()和BOF()同时为.T.代码设计屮设置容器内某类控件的一个屈性Container.SetAll(属性名串,属性值[,类名串])例:ThisForm.SetAll(HFontName",u楷体_GB2312”,“Label”)常川控件类对象:CheckBox,ComboBox,CommandButton,OptionButton,Label,EditBox,Image,Line,ListBox,OLEBound,OLEContainer,Shape,Spinner,TextBox,Timer数据廓表结构中项目组成?1•字段名称、类型、宽度、小数位数、索引方式;2.字段格式、输入掩码、标题;3.字段有效性规则;4.字段注释如何添加、编辑1‘1定义方法?①添加方法:菜单:表单/新建属性/输入上血的属性名/添加②建立以后,可以通过“菜单:表单/编辑属性/方法程序''进行编辑。③对表单对象新建方法程序内容的编辑与对象事件过程编辑相同。VFP屮数据杳询命令分类:VFP屮数据查询命令可以分为顺序查询、索引查询和过滤记录3种。顺序查询命令格式LOCATE[v范围>]FORv条件〉格式:CONTINUE功能:定位到第一个符合条件的记录位置,CONTINUE定位卜"一个符合条件的记录注意:该命令只能在当前工作区杳询。索引查询命令格式:SEEK<表达式〉功能:SEEK在一个表屮搜索首次出现的一个记录,这个记录的索引关键字必须与指定的表达式匹配。记录过滤VFP记录过滤是从逻辑上过滤掉不符合条件的记录,不真止删除。记录过滤可以将不需要的记录屏蔽掉。命令格式:SETHLTERTO[趁[IN区号I别笛\n功能:指定访问当前表屮记录时必须满足的条件。查询操作VFP支持SQL语句,可以从一个或多个表中检索数据。SELECTSQL命令是与其它VFP—样的内置的VFP命令。当你使用SELECT來生成查询时,VFP翻译查询并从表屮获取指定数据。你可以从以下地方创建SELECT查询:“命令”窗口中带有其它任何VFP命令的VFP程序中查询设计器中Sclcct-SQL格式中町以使用的函数及功能AVG(检索项),计算列中数值的平均值。COUNT(检索项),计算列中选定项的数冃。计算查询输出的行数。COUNT(*)计算查询输出中的行数。MIN(检索项),确定列中检索项的最小值。MAX(检索项),确定列中检索项的最大值。SUM(检索项),计算列屮数值的和。使用Select-SQL命令完成如下功能:显示customer表屮所有的公司名称(来自一个表的一个字段)。CLOSEALLCLOSEDATABASESOPENDATABASE(H0ME(2)+'dataXtestdata*)SELECTcustomer.companyFROMcustomer使用Select-SQL命令完成如卜•功能:显示两个表屮的三个字段的内容并根据custjd字段连接表。它使用两个表的本地别名。CLOSEALLCLOSEDATABASESOPENDATABASE(H0ME(2)+'dataXtestdata')SELECTx.company,y.order_date,y.shipped_on;FROMcustomerx;INNERJOINordersyONx.custjd=y.cust」d使用Select-SQL命令完成如下功能:显示在指定字段只有唯一•数据的记录。CLOSEALLCLOSEDATABASESOPENDATABASE(H0ME(2)+,data\testdata,)SELECTDISTINCTx.company,y.order_date,;y.shipped_on;FROMcustomerx,ordersy;WHEREx.cust_id=y.cust_id\n使用Select-SQL命令完成如卜•功能:以升序次序显示countrypostalcode和company字段。CLOSEALLCLOSEDATABASESOPENDATABASE(H0ME(2)+,data\testdata,)SELECTcountry,postalcode,company;FROMcustomer;OrderBycountry,postalcode,companyVFP提供了5个统计命令:Count>Sum、AverageCalculate>Total®计数命令命令格式:COUNT[v范围〉][FOR/WHILEV条件>][TOv内存变量〉]功能:统计表中记录数冃。求和命令格式:SUMI表达式列衣\\范[FOR/WHILE务豹[TO矽莎变均谈TTOARRAY数组名}功能:对当前选定表的指定数值字段或全部数值字段进行求和。求平均值格式:AVERAGE\表达式列表\\范H牝[FOR/WHILE条浮][TO一变砌/茨ITOARRAY数组名\功能:応数值表达式或字段的算术平均值。分组汇总命令格式:TOTALONv关键字>TOv文件名>[v范围〉][FOR/WHILEv条件〉][FIELDSv?段名表>]功能:计算当前选定表中数值字段的总和。创建表单界而\n在VFP中,可将用户信息保存到文本文件、二进制文件或者数据库中。将信息存储在数据库中对数据的存取、查询更方便。建立表结构后,需要将表添加到表单的数据环境中,以方便操作。步骤:激活表单,菜单:显示/数据坏境/右击菜单屮选择“添加,7{选择数据库:Hrmdata,选择表:users}/添加/关闭cmdok.click过程说明单击确定按钮时,首先检测是否输入用户名,密码,若输入则核对与表小事先保存的是否一致,如果-•致则调系统主表单,否则检测出错次数,如果达到3次,退出系统,否则清空用户名和密码,等待重新输入。退出按钮设计说明用户单击时弹出确认对话框,如果用户确认则。退出系统。代码:*——确认对话框YN=MESSAGEBOX(”确定退fl!°,4+32,°人力资源管理系统“)IFYN=6*——退出登录表单THISFORM.RELEASE*——清除事件循环ClearEVENTS*退出VisualFoxProQUITENDIF密码处理users表屮存放的用户名和密码都是非加密的。进行必要的加密处理后才能保证系统安全。加密操作中町以使用Bitxor函数:加密函数格式:BITX0R(nl,n2)\n功能:返回nl,n2两个数值烈数值按位进行异或运算的结呆。如果nl和n2不是整数,那么它们在位操作Z前,将转换成整数。函数比较nl和n2的每个对应位。如果一个数的某一位为0,并且另一个数相应位为1,那么操作结果的对应位等于1;否则等于0。加密函数格式说明:encode(nStr.nCode)nSA待加密的字符串nCode-加密的密钥返冋值:nCode対nStr每一字符位异或运算后结果。加密函数代码FUNCTIONEncode(sStr,nCode)*——声明需耍使用的本地变量LOCALsTmpStr,cTcmpChr,i*——sTempStr:用来保存昨时的编码或者解码后的字符出*——cTempChr:用来保存编码或者解码后的字符*——i:循环计数*——对变量赋初值sTempStr=""cTempChr="n*——如果未指定密钥IFnCode=0nCode=I84ENDIF*——对字符串的每个字符进行编码FORi=lTOLEN(ALETRIM(sStr))cTempChr=B!TXOR(ASC(SUBSTR(sStr,i,1)),nCode)sTempStr=sTempStr+CHR(cTempChr)ENDFOR*——返冋编码后的结果RETURNsTempStrENDFUNCBitxor函数的格式及功能是什么?①函数格式:BlTXOR(nl,n2)②功能:返冋nl,n2两个数值型数值按位进行界或运算的结果。文档界而类型有哪些?VFP允许创建单文档界血利多文档界面。单文档界面(SDI)由一个或多个独立窗口组成,都在桌面上独立显示。多文档界而(MDI)由单一主窗口组成,应用程序包含在主窗口或浮动在主窗口顶端。设计数据表人力资源管理系统屮用户管理使用用户组和用户2个表的双层管理机制,首先通过用户组设置权限,然后将用户归属某个组获取权限。在HRMData数据库中新建uUserGroup,^存放用户组信息;新建“Users”表存放用户信息。表结构如F:Users表结构Nu字段名类型宽度I用户名字符型20\n2密码字符型203姓名字符型204用户组字符型2表单init代码:*——表单进入“浏览”状态THISFORM.FormMode=”browse"THISFORM.SetMode*—刷新表单THISFORM.Refresh列表框userlist.ClickTHISFORM.RefreshIFEMPTY(ALLTRIM(THISFORM.txt用户名.Value))MESSAGEBOX(”用户名不能为空4&“人力资源管理系统“)THISFORM.txt川户名.SetFocusRETURNENDIF*——“新增”时密码不能为空IFEMPTY(ALLTRIM(THISFORM.txt密码.Value));.AND.EMPTY(ALLTRIM(THISFORM.txt确认密码.Value));.AND.THISFORM.FormMode!=”ncw“MESSAGEBOX(”密码不能为空”,48,”人力资源管理系统“)THISFORM.txt密码.SetFocusRETURNENDIF*——密码与确认密码要一•致IFALLTRIM(THlSFORM.txt密码.Value)!=ALLTRIMCTHISFORM.txt确认密码.Value)MESSAGEBOX(”密码与确认密码不一致”,48,”人力资源管理系统”)THISFORM.txt密码.SetFocusRETURNENDIF*——姓名不能为空IFEMPTY(ALLTRIM(THISFORM.txt姓名.Value))MESSAGEBOX(”姓名不能为空”,48,”人力资源管理系统“)THISFORM.txt姓名.SetFocusRETURNENDIF主程序main.prg中加入如下代码:\nPublicGotAuth[17J菜单设置在菜单设计器屮,每个菜单项项都可以设置选项,即单击菜单列选项钮,打开提示选项对话框,在“跳过”栏输入条件,多为如下格式:notGotAuth[l]ANDcUser!="adminn如何在菜单设计器中实现权限控制?在菜单设计器中,每个菜单项项都可以设置选项,即单击菜单列选项钮,打开提示选项对话框,在“跳过"栏输入条件,多为如下格式:notGotAuth[l]ANDcUser!="admin"的二个慕本组成部分及各部分的作用在VFP中,报表貝有数据源和布局两个基本组成部分。数据源通常是表、视图、查询或临时表,通过视图和査询能够进行数据的筛选、排序和分组,报表布局则定义了报农的打印格式。使用报表设计器,可以方便地设置报表数据源、更改报表布局,添加报表控件,设计表格线、分组报表、多栏报表及标签、名片等形式多样的报表,可修改现存的报表。报表设计器窗口组成标题带区:本次打印中,只在开头打印-•次。可以选择单独打印在一页,其他内容在新页打印:页标头:每页打印一次;组标头:打卬每组数据的标题;细节:按记录数循环打卬纽脚注:每组打印一次,用于统计每组记录数等;页脚注:每页打印一次,通常打印页号用;总结:在报表最后打印一次,通常用于打印数据的总计等内容。打卬报表打印页血的设置:打开报表设计器/菜单:文件/页面设置打印或预览报表的操作步骤及命令格式是什么?预览报表的打卬效果操作:菜单:显示/预览命令:ReportFormv报表文件名〉PreviewFor/Whilev条件〉打印报表操作:菜单“报表/运行报表”或菜单“文件/打印”命令:ReportForm<报表文件名〉For/WhileV条件〉主界而的类型:在VFPd«,主界面-•般有菜单式、表单式以及表单与菜单式。菜单式主界面程序:一般是指菜单作为程序的界血,通过将VFP窗口中原有的菜单隐藏,然后执行程序菜单,系统中所有功能由菜单来调用,另外菜单程序界面也可以加入工只栏。表单式主界而程序:进入程序后,表单上放置按钮,通过按钮调用系统提供的功能。表单与菜单式主界面程序:使用表单作为程序主界而,在表单川加载菜单、工具栏及状态栏。一般使用该类界而作为程序主界面。\n菜单可以使用户金而而清晰了解程序的所有功能。创建菜单的步骤:规划与设计菜单;创建菜单和子菜单;为菜单指定任务;生成菜单程序,测试运行菜单。菜单的设计原则1.按执行的任务组织菜单;2.定义简洁明了的菜单项;3.菜单项目不要过多;4.暂时未完成的菜单项目,应先规划好位置;5.通过定义快捷键提高操作速度。设置常规选项操作步骤:激活菜单设计器/菜单:显示/常规选项/勾选“顶层表单生成菜单程序操作步骤:激活菜单设计器/菜单:“菜单”/生成:MainMcnu.Mpr/生成表单的属性设置:ShowWindow=2-作为顶层表单在表单的Init中加入代码:DoMainMenu.Mprwiththis,.T.在表单的Destroy过程屮加入代码:Release(This.Name)Extended创建工具栏在VFP中,创建工具栏町以通过创建Toolbar类的子类方式完成。创建工具栏步骤:1.项目管理器/类/新建2.类名:MyToolbar,基类:Toolbar,存储于:MyTools3.类设计器中,加入10个MyCmd类对象,4个分隔符创建主表单VFP用表单作主界面,主要是提供背景,使用表单加载菜单、工貝栏和状态栏。程序,是指用户在启动应用程序系统时所执行的一个程序文件。主程序可以是表单、菜单或命令程序,通常使用命令程序作为主程序。主程序类型:程序文件(.p咚)、表单、菜单,一般使用.prg程序作为项目的主程序。设置主程序VFP项冃管理器中第1个建立的程序文件(,prg)>表单或菜单被自动设置为主程序。可以通过右击主程序文件名,在出现的菜单屮选择“设置为主程序"重设主程序。主程序文件名加粗显示。\n程序运行环境类别:程序运行环境包括数据环境、显示环境和操作环境。程序运行环境由一系列Set命令设置。设置数据环境SETEXACTONIOFF指定比较不同长度两个字符串时,VisualFoxPro使用的规则。SETDATE指定n期表达式和口期时间表达式的显示格式。AMERICANmm/dd/yyANSIyy.mm.ddMDYmm/dd/yyDMYdd/mm/yyYMDyy/mm/ddSETCENTURY确定MicrosoftVisualFoxPro是否显示日期表达式当前世纪部分并确定VisualFoxPro只有两位年份值的日期的解释方式。SETSTATUSBARONIOFF显示或移去图形状态栏。SETTALK决定VisualFoxPro是否显示命令结果。隐藏VFP窗口两种方法:一-种是使用代码,在主程序中添加如下代码:_Screen=.f.另一种方法是建立Config.fpw文件,加入一行:SCREEN=OFF项H连编运行时,可实现窗口的隐藏。事件处理VFP开始和结束事件处理的方法:VFP中开始事件处理可以使用ReadEvents命令,操作系统在程序中将控制权交给用户,开始处理用户键盘、鼠标等操作。退出系统吋使用ClearEvents结束爭件处理,将控制权交给系统,系统开始处理ReadEvents后而的命令。防止程序多次启动的方法冇两种:在VFP屮防止程序多次启动主要有捕捉错误和使用API函数两种方式。捕捉错误方式防止程序多次打开的工作原理:当一个表以独占方式打开以后,试图再次打开,会发生1705错误。在程序开始时创建一个空表,并且以独占方式打开,如果发牛1705错误,则说明表已经打开,程序已经运行。使川API函数方式防I上程序多次打开的工作原理:使用API函数FindWindow可以检测程序是否已经运行,该函数用來在窗口列表屮寻找符合指\n定条件的顶级窗口,包括隐藏窗口。该函数首先查找指定标题的窗口,然后对VFP主窗口赋值,在第2次运行时就会找到指定标题的窗口,给出提示,退出程序。主程序执行的操作步骤:清除系统屮的变量;防止程序多次启动;设置系统环境;声明全局变量;调用登录表单;开始事件处理;结束事件处理操作。主程序文件代码如下:main.prg*——清除变量CLEARCLEARALL*——避免多次运行程序*——声明API函数“FindWindow”DECLAREIntegerFindWindowINUSER32.DLLString;IpCIassName,StringlpWindowNamelpWindowName=H人力资源管理系统“*——寻找窗口标题IF.NOT.FindWindow(0,lpWindowName)==0二MESSAGEBOX(”程序已经运行了“,4&“人力资源管理系统“)QUITENDIF*——设置窗口标题—Screen.Caplion二lpWindowName*——系统环境设置SETDEBUGOFF&&禁止在运行时调试程序SETESCAPEOFF&&禁止运行的程序在按ESC键被中断SETTALKOFF&&关闭命令显示SETSAFETYOFF&&覆盖时不要确认SETSTATBAROFF&&将状态栏关闭SETSYSMENUOFF&&可关掉VFP系统菜单区域SETSYSMENUTO&&关闭系统菜单SETCENTURYON&&显示四位年代SETDATEYMD&&按照年月日的次序显示口期*声明全局变量*——全局变量cUser,用來保存系统中的登录用户PUBLICcUser*全局变量数组AuthName*——用来保存权限的名称PUBLICAirayAulhName[17]*——声明全局变量数组用來保存用户权限PUBLICGotAuthfl71*—调用登录表单DOFORMsplash*——进入事件处理READEVENTS*——退fH事件处理后的执行的操作QUIT测试调试程序在VFP开发过程中,测试与调试应用程序是极其重要的步骤,是涉及到程序功能能否完整\n实现的关键。程序开发步骤1•进行需求分析,设计分解功能模块;2.设计数据库,确定表、字段、表间关系、视图;3.创建项冃;4.创建数据库、表、关系和视图;5•设计用户界而和数据访问方法;1.各模块测试与调试;2.创建主控程序;3.整体测试与调试;9•编译与发布应用程序。错误类型及处理方法1.语法错误数据类型不匹配、拼写错误、引号不当、括•号不匹配、变量名冲突、循环、分支命令不匹配。处理:VFP—般可以检测出错误,并给出提示。2.逻辑错误打开不存在的表、超记录范围定位或读写、程序进入错误分支。处理:跟踪程序执行或插入临时显示语句检查。3.意外错误程序运行并境变化、文件找不到等。处理:在程序内部完成文件的检测等操作。设置错误处理在程序运行期间,总有意想不到的情况出现,只有语法错误是可以通过编译器发现并处理,逻辑错误和意外错误是编译器无法发现的,这种错误是不期望在程序中出现的。可以通过错误处理程序,编程处理错误。减少错谋的方法1•备份原始文件;2•检查介质完整性;1.隔离测试环境;2.将应用程序分割成单独T作模块;5•保护内存变量;6.不要対运行环境进行假设;7.逐步测试。调试程序在VFP中调试程序可以使用调试器。调试器功能:使用“跟踪”窗口查看止在执行的程序;使用“监视”窗口显示当前程序、过程或方法中町见的变量、数组、对象及对象成员,显示表达式及莫当前值,可在表达式上设置断点;使用“调用堆栈”显示止在执行的程序、过程、方法;使用“调试输;ir窗口显示程序屮指定调试的输出。连编程序确认程序运行无误后就对以编译应用程序,编译应用程序也训以作为系统格体测试的一部分。编译时VFP从主程序开始检查程序中各调用的程序、表单、菜单、工具栏和报表是否存在。\n发布程序需要的文件:1・可执行程序和数据库文件;2.VFP运行库文件(VFP6R.dll和VFP6RCHS.DLL);3.使用的外部库或COM组件文件。使用VFP建立企业工资管理系统。内容包插功能设计、数据库和表设计,自定义函数、多种方式显示数据、表单Z间的数据传递、数据缓冲、菜单和工具栏协调等。数据库设计金业工资管理系统包括部门信息、员工信息、系统管理等操作,使用的表较多,以下分模块说明。系统管理系统管理主要包括系统设置、用户管理、系统登录和修改密码等功能,主要涉及2个表:系统设置表(Syslnfo)和用户信息表(Users)o用户信息农(Users)\n字段名类型宽度用户名字符20密码字符20姓名字符20权限整型4民族名称、和政治面貌名称、个人所得税率等字段名类型宽度学历c20信息设置模块中包括学历名称、职务名称、1•学历名称2.职务名称字段名类型宽度职务名称c20员工管理员工管理模块数据表主要有个人信息和工资信息、部门信息表。1•部门信息字段名类型宽度部门编号C2部门名称C20AutoInc.prg*“AutoInc”函数*作用:使“000000XX”形式的编号自动加1*接收“0000XX”形式的字符出作为参数*字符串长度限制为10FUNCTIONautoinc(nCode)*——获取字符串长度nLen=Len(nCode)*——将?符型转换为数值型,即获取非0部分的数值nCode=VAL(nCode)*——非0部分数字加1nCode=nCode+1*——转换为字符熨nCode=ALLTRIM(STR(nCode))*——获取转换后的字符串的长度nLength=LEN(nCode)*——在数字Z前加上前置“o”nZero=,,000000000000"nCode=SUBSTR(nZero,1,nLen-nLength)+nCode*——返回结果\nRETURNnCodeENDFUNCDateToString.prg*uDateToString函数*将日期型数据转换为字符串*接收日期型变量作为参数FUNCTIONDateToString(dDate)*——默认返回空字符串sDate二”“*——如果参数非空而且为日期世IF.NOT.EMPTY(dDate).AND.VARTYPE(dDate)=*——分别获取其年、丿J、日字段nYear=YEAR(dDate)nMonth=MONTH(dDatc)nDay=DAY(dDate)*——组合数据sDateALLTRIM(STR(nYear))+,7,,+ALLTRIM(STR(nMonth))+,7,,+ALLTRIM(STR(nDay))sDate=M{A,,+sDate+"}”ENDIF*返冋值RETURNsDateENDFUNCEncode.prg*函数Encode*——作用:对输入的指定的字符串进行编码*——参数:sSti•:要编码或者解码的字符串*nCode:编码或者解码时使用的密钥FUNCTIONENCODE(sStr,nCode)*——声明需要使用的本地变量LOCALsTmpStr,cTempChr,i*——sTcmpStr:用来保存昨时的编码或者解码后的字符出*cTempChr:用來保存编码或者解码后的字符*——i:循环计数*——对变量赋初值sTempStr=,H,cTempChr=n"*——如果未指定密钥IFnCode=0nCode=237ENDIF*——对字符串的每个字符进行编码FORi=1TOLEN(ALETRIM(sStr))cTempChr=BlTXOR(ASC(SUBSTR(sStr,i,l)),nCode)sTempStr=sTempStr+CHR(cTempChr)ENDFOR\n*——返回编码后的结果RETURNsTempStrENDFUNCITaxComp.prg*——“ITaxComp”函数*——功能:根据个人所得税率表和系统信息表计算个*个人所得税额*参数:nNum,月收入总额*nBeg,个人所得税起征点,如果该参数为-1*则使用“Syslnfo”表的设置*——返冋值:个人所得税额FUNCTIONITaxComp(nNum,nBeg)*——如果不指定个人所得税起征点IFnBeg=-1*——获取免税工资noTax=0*——如果表“Syslnfo”没有打开IF!Used(”Syslnfo")*——打开表USESyslnfoSELECTSyslnfo*——获取个税起征点noTax=Syslnfo.个税起征点USEENDIF*——减去不用计税部分nNum=nNum-noTaxELSEnNum=nNum-nBegENDIF〜*——如果工资未到起征点IFnNum<0RETURN0ENDIF*——如果没有打开“个人所得税率”表IF!Used(uTaxRaten)USETaxRatcENDIF*——查找工资级别SELECTTaxRateLOCATEFORnNum>工资下限.AND.nNum<=工资上限IFFOUND()*——如果找到,计算税收ITaxNum=nNum*所得税率*0.01-速算扣除数ELSE*——如杲未找到,为-1ITaxNum=-1ENDIF*返回值RETURNITaxNumENDFUNC\n创建“输入新值”表单表单名:InputNew添加1个文本框,2个MyCmd类,属性其他农单。事件过程如下:InputNew.Init*——获収表单参数PARAMETERScString*——判断参数类型*——如果没有接收到参数IFVARType(cSlring)="L”*——显示空字符串sSlring=ELSE*—显示接收到的字符串sString=cStringENDIF*——显示字符出THISFORM.tValue.Value=sStringInputNcw.UnloadRETURNTHISFORM.gValueCmdOk.Click*——保存用户输入的值THISFORM.gValue=ALLTRIM(THISFORM.tValue.Value)*追出表单返冋値THISFORM.releaseCmdExit.ClickTHISFORM.RELEASE