VisualFoxpro程学设计教程(第二版)第六章资料PPT课件_第1页
VisualFoxpro程学设计教程(第二版)第六章资料PPT课件_第2页
VisualFoxpro程学设计教程(第二版)第六章资料PPT课件_第3页
VisualFoxpro程学设计教程(第二版)第六章资料PPT课件_第4页
VisualFoxpro程学设计教程(第二版)第六章资料PPT课件_第5页
已阅读5页,还剩123页未读 继续免费阅读

下载本文档

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

文档简介

.,1,封面,.,2,程序设计基础,程序文件程序的基本结构过程及其调用,.,3,人机交互方式交互式方式是通过在命令窗口中输入命令或通过选择菜单项来实现各种操作,适用于解决一些较为简单的问题。程序方式要处理复杂的问题,就应采取程序方式。,VFP的工作方式,.,4,6.1程序文件,.,5,程序由能够完成指定任务的一系列命令组成,这些命令被保存在程序文件中。程序文件又称为命令文件,其扩展名为PRG。程序文件中既可包含能在命令窗口执行的VFP命令,也可包含一些程序控制语句(如IF语句、循环语句)。,6.1.1程序文件,.,6,程序文件既可通过VFP内置的文本编辑器来建立和修改,也可通过其他文本编辑器(如记事本)来编辑。程序一旦建立,可以多次执行,也可被其他的程序、表单、菜单等调用。执行程序时,系统会自动地按一定的顺序来执行程序中的命令。,程序的概念,.,7,菜单方式,6.1.2程序文件的建立和修改,.,8,选择“文件”菜单的“打开”命令,打开“打开”对话框。在“打开”对话框中,在“查找范围”下拉列表中定位到程序文件所在的文件夹,在“文件类型”下拉列表中选择“程序”,文件列表中显示出此文件夹下的程序文件。双击要打开的程序文件,或者选择它,再单击“确定”按钮,即可打开程序文件的编辑窗口。,修改程序,.,9,MODIFYCOMMAND|?,当程序文件是一个新文件名时,系统将创建一个新的程序文件,并打开其编辑窗口。当程序文件是一个已经存在的文件时,系统将打开该程序文件的编辑窗口,供用户修改。,命令方式,.,10,在项目管理器中建立和修改程序,.,11,在程序中,每条命令都以回车键结束,一行只能写一条命令。若命令需分行书写,应在上一行终了时输入续行符“;”。在程序中可插入注释,以提高程序的可读性。注释行以单词“NOTE”或符号“*”开头,它仅在编辑程序时显示,不会在运行程序时执行。在语句末尾也可添加注释,这种注释以符号“&”开头。,程序书写规则,.,12,6.1.3程序的运行,.,13,在程序处于打开状态时运行程序,如果程序已在编辑窗口被打开,单击常用工具栏的“运行”按钮,或在“程序”菜单中选择“执行程序名.prg”命令,可执行此程序。,.,14,通过菜单执行程序文件,.,15,DO,通过命令执行程序文件,由于DO命令默认是运行PRG程序。若用户要运行程序文件,则只需指定主文件名,不需指定扩展名,.,16,通过项目管理器执行程序文件,在项目管理器中,选择“代码”选项卡中“程序”选项下的程序名,单击“运行”按钮可以运行该程序文件。,.,17,当VFP执行PRG源程序文件时,系统将自动对其编译,产生相应的FXP文件。系统实际执行的是FXP目标文件。在执行程序的过程中,系统会自动地按一定的顺序逐条来执行程序中的命令。,中止程序的运行,.,18,如果程序有错,或在执行过程中用户按了ESC键中止程序,系统会打开“程序错误”对话框。,中止程序的运行,系统将取消此次程序的执行,系统将暂停程序的运行,返回到命令窗口用户可以在执行其他的操作后,选择“程序”菜单的“继续执行”命令或在命令窗口中执行“RESUME”命令,从程序的中止处继续运行程序,当用户选择“忽略”时,系统将忽略程序错误,继续执行程序,.,19,6.1.4输入命令,在VFP中,应用程序的输入/输出界面通常采用表单、报表等形式。但在编写小程序时,仍然常使用传统的输入命令。,.,20,ACCEPTTO,程序中执行到该语句时,在主窗口显示用户设置的提示信息,等待用户从键盘输入数据。用户输入数据后,按回车键,系统将接收到的数据作为字符串赋值给内存变量,再继续往下执行程序。,字符串接收命令,.,21,是一个字符型表达式。执行此命令时,该表达式的内容作为提示信息,显示在屏幕上。若缺省此项,则不显示提示信息。由于此命令接收到的任何数据都会作为字符串。用户在输入数据时,不需要输入字符串定界符。若用户不输入任何数据,直接按回车键,则系统会将对内存变量赋值为空串。,字符串接收命令,.,22,USE图书&打开图书表ACCEPT请输入要查询的条形码totxm&接收用户要查询的条形码LOCATEFOR条形码=txm&根据用户的输入查找记录DISPLAY条形码,书名,售价,作者&显示图书记录的相关信息USE&关闭数据表RETURN,例题,在图书表中,根据用户输入的条形码,查找书籍的条形码、书名、售价、作者信息。,.,23,INPUTTO,该命令与ACCEPT命令类似,但该命令可接收用户输入的多种数据类型的表达式。用户可输入数值型、字符型、日期型或逻辑型表达式。系统先计算表达式的值,然后将值赋给指定的内存变量。内存变量的类型由表达式的数据类型决定。当用户输入字符型、日期型或逻辑型常量时,应加上相应的定界符。,表达式输入命令,.,24,WAITTOWINDOWAT,TIMEOUT,该命令与ACCEPT命令类似,但该命令只能接收用户输入的一个字符。,单个字符接收命令,.,25,若缺省,执行此命令时,屏幕上显示“按任意键继续。”若指定TO短语,执行此命令时,用户按任意键,不需按回车键,该键作为一个字符被接收到指定的内存变量中。若用户不输入任何数据,直接按回车键,或单击鼠标,系统会将对内存变量赋值为空串。若不指定TO短语,此语句的功能为暂停程序的执行,显示提示信息。用户按任意键,或单击鼠标,将继续执行程序。,单个字符接收命令,.,26,若指定WINDOW短语,将显示一个窗口显示提示信息。通常,窗口显示在屏幕的右上角。若用AT,短语,可指定窗口的位置。TIMEOUT短语,用来设置等待用户输入的时间,以秒为单位。如果在指定的时间内用户未输入任何字符,系统将自动执行后面的命令。,单个字符接收命令,.,27,例如,用户要在程序执行过程中查看数值型变量A的值,要求结果显示在10行30列位置的窗口中,显示5秒钟后继续执行程序,则语句为WAIT“变量A的值为”+STR(A)WINDOWAT10,30TIMEOUT5又例如,用户要在程序执行过程中接收一个字符,将此值存储在变量B中。则语句为WAIT“请输入一个字符”TOB,单个字符接收命令,.,28,6.1.5其他命令,.,29,在程序的结尾,通常执行以下命令,以结束程序的运行。当然,如果省略这些命令,也可以终止程序。,RETURN,结束当前程序的执行,返回到调用它的上级程序,若无上级程序,则返回到命令窗口,结束程序运行命令,.,30,CANCEL,终止程序运行,清除所有的私有变量,返回命令窗口,QUIT,退出VisualFoxPro系统,返回到Windows。,结束程序运行命令,.,31,CLEAR,清除主屏幕窗口上的所有信息。,清屏命令,.,32,CLOSEALL,关闭所有已打开的各类文件,并将当前工作区设为1号工作区。,关闭文件命令,.,33,CLEARALL,可以关闭文件,还可以清除所有用户定义的内存变量。,关闭文件命令,.,34,SETTALKON/OFF,许多命令在执行时会返回一些执行状态的信息这些信息通常会显示在窗口或状态栏中开启或关闭人机会话,设置环境参数命令,.,35,SETDEFAULTTO,设置默认的文件路径,设置环境参数命令,.,36,6.2程序的基本结构,.,37,结构化程序设计是根据给定的任务,设计、编写和调试出完成该任务的过程。结构化程序设计的基本思想是采用“自顶向下,逐步求精”的程序设计方法和“单入口单出口”的控制结构。,程序的基本结构,.,38,自顶向下、逐步求精的程序设计方法是从问题本身开始,经过逐步细化,将解决问题的步骤分解为由基本程序结构模块组成的结构化程序框图。,程序的基本结构,.,39,“单入口单出口”的思想认为:一个复杂的程序,如果它仅是由顺序、选择和循环三种基本程序结构通过组合、嵌套构成,那么这个一定只有一个唯一的入口和出口。据此,就很容易编写出结构良好、易于调试的程序。,程序的基本结构,.,40,顺序结构程序是最简单的程序结构,先执行A操作,再执行B操作,依次执行各条语句。,6.2.1顺序结构,.,41,6.2.2选择结构,选择结构是在程序执行时,根据不同的条件,选择执行不同的程序语句。VFP的分支结构程序可以分为简单分支(IF-ENDIF)、选择分支(IF-ELSE-ENDIF)以及多路分支(DOCASE-ENDCASE)三种不同的程序,.,42,IFENDIF,ENDIF的下一条语句,简单选择语句,如果条件成立,即的值为真,则执行语句序列,然后再执行ENDIF后面的语句。否则,直接执行ENDIF后面的语句。,.,43,某地的计程车收费规则为:不超过2公里时,一律收取6元。超过部分每公里加收1.8元。编程根据行车里程计算应付车费。,INPUT请输入里程数TOx&接收要计算的行车里程y=6&将车费赋值为6元IFx2&判断x是否超过2公里y=6+(x-2)*1.8&重新计算车费ENDIF?里程数为,x,车费为,y&显示里程和车费RETURN&返回命令窗口,例题:简单选择语句,.,44,IFELSEENDIF,双分支选择语句,如果条件成立,即的值为真,则执行语句序列1,然后执行ENDIF后面的语句。否则,执行语句序列2的语句,再执行ENDIF后面的语句。,.,45,ENDIF的下一条语句,双分支选择语句,.,46,某地的计程车收费规则为:不超过2公里时,一律收取6元。超过部分每公里加收1.8元。编程根据行车里程计算应付车费。,INPUT请输入里程数TOx&接收要计算的行车里程IFx=2&判断x是否超过2公里y=6&将车费赋值为6元ELSEy=6+(x-2)*1.8&将车费赋值为6元加超出的部分ENDIF?里程数为,x,车费为,y&显示里程和车费RETURN&返回命令窗口,例题:双分支选择语句,.,47,在图书表中,根据用户输入的条形码查找书籍。如果找到,则显示书籍的条形码、书名、售价、作者信息;如果没有找到,显示查无此书。,USE图书&打开图书表ACCEPT请输入要查询的条形码totxm&接收用户要查询的条形码LOCATEFOR条形码=txm&根据用户的输入查找记录IFFOUND()&判断是否找到了输入条码DISPLAY条形码,书名,售价,作者&显示图书记录的相关信息ELSE?查无此书&显示没有这本书ENDIFUSE&关闭数据表RETURN&返回命令窗口,例题:双分支选择语句,.,48,嵌套选择语句,在解决一些复杂问题时,需要将多个选择结构语句结合起来使用。也就是说,在选择结构的中,允许包括另一个合法的选择结构,形成选择的嵌套。对于嵌套选择结构的程序而言,每一个IF必须和一个ENDIF配对。为了使程序易于阅读,内外层选择结构层次分明,通常按缩进格式来书写。,.,49,某商场采取打折的方法进行促销,购物金额在300元以上,按九五折优惠;购物金额在500元以上,按九折优惠;购物金额在1000元以上,按八五折优惠。编写程序,根据用户的购物金额,计算其优惠额及实际付款金额,例题:嵌套选择语句,.,50,INPUT请输入购物金额TOje&接收要计算的购物金额IFje=300&判断金额是否超过300元yh=0&没有优惠ELSEIFje=500yh=je*0.05&优惠额为5%ELSEIFje=1000&判断金额是否超过1000元yh=je*0.1&优惠额为10%ELSEyh=je*0.15&优惠额为15%ENDIFENDIFENDIF?优惠额为,yh,实际付款为,je-yh&显示优惠额和实际付款RETURN&返回命令窗口,例题:嵌套选择语句,.,51,DOCASECASECASECASEOTHERWISEENDCASE,多路分支,.,52,系统自上而下依次对各个CASE语句的条件进行判断。若某个的值为真,则执行该语句下的语句序列。然后,不管其他CASE语句的条件是否成立,转去执行ENDCASE后的语句。若所有的值都不为真,又有OTHERWISE子句,则执行OTHERWISE后的语句序列,再转去执行ENDCASE后的语句。若所有的值都不为真,又没有OTHERWISE子句,则直接执行ENDCASE后的语句。,多路分支,.,53,ENDCASE的下一条语句,多路分支流程图,.,54,INPUT请输入购物金额TOje&接收要计算的购物金额DOCASECASEje=300&判断金额是否超过300元yh=0&没有优惠CASEje=500&判断金额是否超过500元yh=je*0.05&优惠额为5%CASEjeINT(SQRT(n)&退出循环后,判断i是否大于内层循环的终值?n&说明没有发生i整除n的情况,即n是素数s=s+n&使求和变量s的值增加nENDIFENDFOR?素数的和为,sRETURN&返回命令窗口,例题,.,82,编程输出乘法九九表,例题:多重循环,.,83,s=0&设置求和变量s的初值为0FORi=1TO9&外层循环变量i从1到9FORj=1toi&内层循环变量j从1到i?,str(i,1)+str(j,1)+=+str(i*j,2)&在本行显示数学式ij=i与j的乘积ENDFOR?&换行输出ENDFOR,例题:多重循环,.,84,输入9个数值,建立一个三行三列的数组,求出每行元素的最大值,并输出。,例题:多重循环,.,85,DIMEa(3,3),m(3)&定义三行三列的a数组,用来保存各行最大值的m数组FORi=1TO3FORj=1TO3INPUT请输入+STR(i,1)+行+STR(j,1)+列的元素TOa(i,j)ENDFORENDFOR*上述语句为对二维数组的各个元素逐一赋值FORi=1TO3&外层循环变量i从2到3m(i)=a(i,1)&设m(i)初值为i行的第一列的数组元素FORj=2TO3&内层循环变量j从2到3IFm(i)0&判断该读者未还图书的本数是否大于0?姓名,电话,电话号码,总计,c,本&显示该读者的姓名,电话号码,未还图书的本数ENDIFENDSCAN&外层循环结束USE&关闭读者表SELE2&选择借阅表为当前表USE&关闭借阅表RETURN&返回命令窗口,例题:多重循环程序,.,88,6.3多模块程序设计,.,89,结构化程序设计的基本思想是将一个复杂的规模较大的程序系统划分为若干个功能相关又相对独立的一个个较小的模块。这样,既有利于程序的编写和开发,也有利于程序的维护和扩充。此外,在程序设计中,如果某个功能的程序段需要多次重复使用的话,也要把这样的程序段独立出来成为一个模块,当系统中任何地方要用到该功能时,只要调用相应的模块即可,而不必再重复编写。,多模块程序设计,.,90,求组合数:Cm=n!(m-n)!,INPUTm=TOmINPUTn=TOnt=1FORi=1TOmt=t*iENDFORa=tt=1FORi=1TOnt=t*iENDFORb=tt=1FORi=1TOm-nt=t*iENDFORc=t?”组合数为”,a/(b*c),n,m!,例题,.,91,由于公式中出现了3个阶乘,所以程序中计算阶乘的程序段重复出现三次。为了简化程序,我们可以把计算阶乘的功能定义为一个模块。在VFP中,模块可以是一个子程序,也可以是一个过程。子程序就是将模块建成一个独立的命令文件,当其他程序中需要用到该模块的功能,可以通过DO命令来调用此子程序。由于每调用一个子程序就要打开一个文件,减慢了程序运行的速度。为此,可以通过定义过程实现模块功能,而一个程序文件中可存放多个过程。,多模块程序设计,.,92,6.3.1过程的定义和使用,.,93,PROCEDURE|FUNCTIONRETURNENDPROC|ENDFUNC,定义过程,.,94,PROCDURE或FUNCTION命令表示过程的开始,并对过程命名。过程名必须以字母或下划线开头,可包含字母、数字和下划线。ENDPROC或ENDFUNC命令表示过程的结束。如果缺省,过程结束于下一个过程的开始处或文件结尾处。RETURN命令表示过程的返回。如果缺省RETURN命令,则在过程的结束处将自动执行一条隐含的RETURN命令。若RETURN带,则过程将返回表达式的值。若不带表达式,过程返回一个逻辑真(.T.)。,定义过程,.,95,过程可以保存在程序文件中,放置在程序文件正常代码的后面。一个程序文件中可以存放多个过程。,定义过程,.,96,当主程序中要用到过程所定义的功能,可以用下列两种格式调用过程。,调用过程,DO,(),.,97,当系统运行到程序中调用过程的命令时,便从过程的第一条语句开始执行,执行中只要碰到RETURN语句,控制返回到主程序,从主程序中调用过程的下一条语句处继续执行。使用第二种格式调用过程时,该过程将返回一个值,可以作为函数出现在主程序的表达式中。,调用过程,.,98,使用过程的方式求组合数,INPUTm=TOmINPUTn=TOnk=ma=jc()k=nb=jc()k=m-nc=jc()?a/(b*c)RETURNPROCjct=1FORi=1TOkt=t*iENDFORRETURNtENDP,例题,.,99,一个应用程序往往需要用到多个过程,用户可将多个过程的定义存放在一个程序文件中,该文件被称为过程文件。,过程文件,.,100,PROCEDURERETURNENDPROCPROCEDURERETURNENDPROC。PROCEDURERETURNENDPROC,过程文件,.,101,由于过程文件也是一个扩展名为prg的程序文件,其建立和编辑的方法和其他的程序文件相同。当主程序中要用到过程文件中所定义的过程时,首先要在主程序中通过SETPROCEDURETO命令打开过程文件。此后,主程序可以调用过程文件中的任一过程。当不再需要调用过程时,应该在主程序中使用命令CLOSEPROCEDURE或SETPROCEDURETO关闭过程文件。,过程文件,.,102,在调用过程时,往往需要将一些数据从主程序传送到被调用的过程中,或将过程运行的结果上传到主程序中。为此,在定义过程时,可以用PARAMETER语句来定义参数。PARAMETER必须是过程的第一个语句。在PARAMETER中所说明的变量,称其为形参。,6.3.2参数传递,.,103,当主程序中调用过程时,可以用DOWITH或过程名()进行参数传递。在调用语句中的参数,称其为实参。实参和形参的个数、类型必须一一对应。实参可为常量、变量、表达式。若实参为变量,必须在调用前赋予初值。,参数传递,.,104,使用带参数的过程实现求组合数,INPUTm=TOmINPUTn=TOn?jc(m)/(jc(n)*jc(m-n)RETURNPROCjcPARAMETERkt=1FORi=1TOkt=t*iENDFORRETURNtENDP,例题,以m为实参,m的值传送给k调用结束后,t的值通过过程名传回到主程序,以n为实参,n的值传送给k过程的值为n的阶乘,以m-n为实参,过程的值为m-n的阶乘,.,105,当实参是常量或表达式时,采取值传递,即实参的值传给形参,过程中形参变化的结果不传给实参。若采取DOWITH格式调用过程,当实参是变量时,采取的是地址传递,即过程中形参变化的结果将传给实参。或者说,对形参的操作实际上相当于在对实参所对应的变量进行。如果将作为实参的变量加上括号,则采取值传递,过程中形参变化的结果不传给实参。,参数传递,.,106,若采取过程名()格式调用过程,在进行参数传递时,默认是采取值传递方式。使用命令SETUDFPARMSTOVALUE|REFERENCE可改变参数传递方式。SETUDFPARMSTOVALUE为按值传递,SETUDFPARMSTOREFERENCE为按参数传递。形参变量是局部变量。当控制返回到主程序后,形参变量即被清除。,参数传递,.,107,参数传递举例,x=15y=7DOsubWITHx,(y)?x,y?sub(x,y),x,yRETURNPROCsubPARAMETERSa,ba=a+bb=aRETURNa+bENDP,例题,x是地址传递,y是值传递返回主程序后,x的值变为22,y的值仍为7,x,y均为值传递。返回主程序后,x和y的值不变。显示结果58,22,7,.,108,6.3.3变量的作用域,多模块程序中,在一个模块中定义的变量在其他模块中不一定能够使用。不同的变量有不同的作用域,即每个变量有其发挥作用的有效范围。根据变量作用域不同,变量分为全局变量、局部变量和私有变量。,.,109,全局变量也称为公共变量,是在任何语句和各个程序模块中都有效的内存变量。,PUBLIC,定义全局内存变量,全局内存变量,.,110,全局变量应先定义后赋值,不能在赋值一个变量后再将其定义为全局变量。全局变量在定义以后,默认的初值是逻辑假.F定义全局变量的程序运行结束后,全局变量并未被释放,仍然可以在其他程序中使用。只有在执行CLEARMEMORY、RELEASE等命令或退出VFP后,全局变量才被释放。在命令窗口所建立的内存变量,默认为全局变量。,全局内存变量,.,111,在程序中所有未经说明而直接建立的内存变量都是私有变量。私有变量可以在创建它的模块及其调用的下层模块中使用。一旦建立它的模块程序运行结束,这些私有变量将被清除。也就是说,在下层模块定义的私有变量,无法在其上层模块中使用。,私有变量,.,112,局部变量只能在建立它的模块中使用,不能在上层或下层模块中使用。当建立它的模块程序运行结束,局部变量被释放。LOCAL命令定义的变量是局部变量,并赋予其初值为逻辑值假.F.。同样,局部变量也要先定义后使用。,局部变量,.,113,LOCALaSTORE10TOa,b?执行过程前a,b的值,a,bDOp1?执行过程后a,b的值,a,b?c=,cPROCp1STORE20toa,b?执行过程时a,b的值,a,bPUBLICcc=30ENDPROC,例题:变量作用域,显示结果1010,显示结果1020,显示结果2020,.,114,由于一个大型的程序可能由多人开发,在下级子程序中可能会无意地改变上级程序中的私有变量。为了避免这种情况,可以在过程中使用PRIVATE。该命令并不建立变量,而是用来隐藏在上层程序中可能已经存在的内存变量,使得这些变量在当前模块程序中暂时无效。这样,这些变量名可以用来命名在当前模块或其下属模块中需要的私有变量,并且不会改变上层模块中同名变量的取值。一旦当前模块程序运行结束返回上层模块,那些被隐藏的内存变量就恢复原有的取值。,隐藏变量,.,115,LOCALaSTORE10TOa,b?执行过程前a,b的值,a,bDOp1?执行过程后a,b的值,a,b?c=,cPROCp1PRIVATEa,bSTORE20toa,b?执行过程时a,b的值,a,bPUBLICcc=30ENDPROC,例题:变量作用域,显示结果1010,显示结果1010,显示结果2020,.,116,6.3.4存储过程,存储过程是保存在数据库文件中的过程,属于数据库对象的一部分。它可以被数据库中的对象调用,例如,可作为数据表字段的默认值和有效性规则。,.,117,存储过程,单击数据库设计器工具栏的“编辑存储过程”按钮,.,118,PROCEDUREnewtxm()SELEMAX(条形码)FROM图书INTOARRAYltxmlntxm=ALLTRIM(STR(VAL(RIGHT(ltxm(1),7)+1)RETUP+REPLICATE(0,7-LEN(lntxm)+lntxmENDPROC,例题:存储过程,建立一个存储过程,获得一个条形码。该条形码以字母P开头,后7位数字为当前图书表中书籍编号的最大值加一,.,119,例题:存储过程,设置为默认值,.,120,一个三位正整数等于它的各位数字的立方和,该数称为水仙花数。显示所有的水仙花数,FORm=100TO999m1=&求出m的百位数m2=&求出m的十位数m3=m-m1*100-m2*10&求出m的个位数IFm=m1*m1*m1+m2*m

温馨提示

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

评论

0/150

提交评论