大学程序设计——数据表基本操作_第1页
大学程序设计——数据表基本操作_第2页
大学程序设计——数据表基本操作_第3页
大学程序设计——数据表基本操作_第4页
大学程序设计——数据表基本操作_第5页
已阅读5页,还剩156页未读 继续免费阅读

下载本文档

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

文档简介

1、第4章 数据表基本操作,数据表的建立 数据表操作命令 数据表的排序与索引 数据表的查询与统计 数据表之间的操作,数据表分为自由表和数据库表两种。自由表是指单独存在的,未包含在任何数据库中的表;数据库表则是从属于某个数据库的数据表,并且通常还与该数据库中的其他数据表有一定的联系 数据表的扩展名为.DBF,若数据表中备注型或通用型字段,则产生一个同名的.FPT文件,文件命名与其它文件命名相同 数据表文件由表结构和记录(内容)组成,4.1 数据表的建立,4.1.1 表结构的建立与修改,问题 建表工具是什么? 怎样打开工具? 建表的步骤? 如何修改表结构? 如何打开表文件?,1. 表结构的建立,建表工

2、具 表设计器 打开工具的方法,新建表时会打开该工具 菜单方法 命令方式, CREATE,表结构的建立过程 “文件”“新建”选“表”,按“确定” 在“表设计器”中输入 (1)字段名 (2)字段类型 (3)字段宽度 (4)NULL值 建完之后,按”确定”,请先确认自己的工作目录 字段名 由英文字母、中文字、数字和下划线组成,不能含空格,且必须以汉字或字母开头,自由表的字段名至多10个字符,数据库表至多128个字符 字段数最多255个,注意事项,类型 13种类型:字符型、数值型、货币型、日期型、日期时间型、逻辑型、备注型、通用型、整型、浮点型、双精度型、二进制字符型与二进制备注型,注意事项,字段宽度

3、 除字符型、二进制字符型、数值型和浮点型外,其它9种字段宽度是固定不变的,小数点占一位,数值型与浮点型不得超过20,有效位为16位,小数位数不超过9位,注意事项,如果表结构中包含有“备注型”或“通用型”字段,则创建两个文件,扩展文件名为:dbf与fpt;否则,只创建一个dbf文件,方法一:“文件”打开”, 或按”打开”按钮. 选择文件类型(.dbf) 文件名 方法二:USE 表名 建议用此方法打开表文件 注意:打开与显示不同,状态栏上显示表是否打开。,2. 打开表文件,修改表结构的过程 打开表文件 “显示”“表设计器” (1)修改字段属性 (2)插入字段 (3)删除字段 (4)调整字段位置,3

4、.表结构的修改,问题 手工追加多条记录的菜单命令是什么? 手工追加多条记录的窗口命令是什么? 追加一条记录的菜单命令是什么? 如何输入备注型与通用型数据?,4.1.2 表记录数据的输入,输入多条数据 菜单命令 显示浏览显示追加方式 窗口命令 Append 追加单条记录 显示浏览表追加新记录 从其它文件中追加 显示浏览表追加记录,如何输入数据 一般字段的输入 日期型输入格式:mm/dd/yy,用set date to ymd, set century on 备注字段的输入 备注窗口打开:双击(或Ctrl+Pgdn) 备注窗口关闭:关闭(或ctrl+W)保存,Esc(Ctrl+Q)放弃,Memo表

5、示有数据,通用字段的输入 通用窗口打开:双击(或Ctrl+Pgdn) “编辑”+“插入对象”(“选择性粘贴”) 通用窗口关闭:关闭(或ctrl+W)保存,Esc(Ctrl+Q)放弃,Gen表示有数据,如何浏览数据? 浏览方式如何切换? 如何修改数据?,4.1.3 表数据的浏览与维护,浏览数据 打开表文件显示浏览 两种浏览方式切换 显示浏览 显示编辑 在浏览窗口修改记录 删除记录 显示浏览表删除记录(彻底删除),4.2 数据表操作命令,4.2.1 表结构操作命令 建表结构的命令? 打开表的命令?关闭表的命令? 显示表结构的命令? 修改表结构的命令? 复制表结构的优点与命令? 如何复制表结构与记录

6、?,创建表结构命令 格式:CREATE / ? 功能:新建一个Visual FoxPro数据表 文件名可以包含盘符与路径 CREATE = CREATE ?,这时会弹出创建对话框 如:CREATE XSCJ,打开数据表命令 格式:USE 功能:打开指定的数据表或关闭数据表 表打开时,记录指针指向首记录 表打开同时,自动打开相应备注文件(FPT) 当缺省,关闭当前工作区中的表文件 如:USE ZGDA,关闭数据表命令 格式1:CLOSE DATABASES 关闭数据库与表文件 格式2:CLOSE ALL 关闭所有文件 格式3:CLEAR ALL 关闭所有文件,清除内存 格式4:QUIT 关闭所有

7、文件,退出VFP,显示表结构命令 格式1:LIST STRUCTURE 格式2:DISPLAY STRUCTURE 注意:DISPLAY是分屏显示,如: USE ZGDA DISP STRU LIST STRU,修改表结构命令 格式:MODIFY STRUCTURE 功能:打开“表设计器”窗口,显示并修改当前数据表的结构 注意:系统自动备份原数据表文件,其扩展文件名变化:.dbf.bak,.fpt.tbk 如:USE ZGDA MODI STRU,复制表结构命令 格式:COPY STRUCTURE TO FIELDS 功能:对当前数据表结构进行复制,形成一个指定名称的新表结构。,例1 创建新表

8、zgbak.dbf,使其结构与zgda.dbf一样 use zgda copy stru to zgbak use zgbak list stru use,复制数据表命令 格式:COPY TO FOR WHILE FIELDS TYPE 功能:对当前数据表中指定范围内符合条件的记录进行复制,形成一个指定名称的新数据表。 注意:(1)缺少所短语时,新文件是和原表文件完全相同的表文件 (2)选择TYPE短语时,新文件的类型与TYPE所指定的文件类型一致,例2 由表zgda创建表nanzgfile保存男职工的记录,创建文本文件nvzgfile保存女职工的记录 USE ZGDA COPY TO NAN

9、ZGFILE FOR 性别=男“ COPY TO NVZGFILE FOR 性别=“女“ TYPE SDF USE NANZGFILE LIST !NOTEPAD NVZGFILE USE,4.2.2 追加与插入记录命令 如何手工追加记录? 如何从其它文件中追加记录到当前表文件? 如何插入一条空记录?,追加记录命令 格式:APPEND BLANK 功能:在当前数据表的末尾增加新记录 注意:缺省BLANK,弹出记录编辑窗口,这时等价菜单命令:“显示”“追加方式”。APPEND BLANK类似于菜单命令:“表”“追加新记录”,从其他表追加记录命令 格式:APPEND FROM FOR WHILE

10、FIELDS TYPE 功能:将指定表文件中指定范围内符合条件的记录自动添加到当前数据表的末尾 注意:若由TYPE指定类型,则从指定类型的文件添加,常见的有txt,xls等,否则为表文件。 等价于菜单命令:“表”“追加记录”,例3 创建nanzg与nvzg表,并分别从nanzgfile.dbf与nvzgfile.txt追加数据 use zgda copy stru to nanzg use nanzg append from nanzgfile brow last,use zgda copy stru to nvzg use nvzg append from nvzgfile type sdf

11、 brow last use,注意: copy structure toappend from等价于copy to,3. 插入记录命令 格式:INSERT BLANK BEFORE 功能:在当前数据表指定的位置上插入一条新记录。 注意:选BLANK时,插入空记录,否则,弹出记录编辑窗口;选BEFORE时,在当前记录前插入,否则,在当前记录后插入。 如:USE NANZG GO 3 INSERT BLANK,4.2.3 记录指针移动命令 怎样移动记录指针? 相对移动与绝对移动有什么不同? 其它命令会移动记录指针吗?,记录指针的绝对移动 格式1:GOTO 功能:将记录指针移到第条记录。 格式2:G

12、OTO TOP 功能:将记录指针移到当前表的第一条记录。 格式3:GOTO BOTTOM 功能:将记录指针移到当前表最后一条记录。,记录指针的相对移动 格式:SKIP 功能:相对于当前记录,记录指针向上或向下移动若干条记录。 说明:当的值为正数时,向下移动条记录;当的值负数时,向上移动条记录;缺省时,默认向下移动一条记录。 当expN有小数时, 只取整数部分, go 1.9与go 1等价, skip 2.5与skip 2等价,关于记录指针的问题 如果记录指针指向文件的开头, 则bof()为.T., 否则为.F. 如果记录指针指向文件的结尾, 则eof()为.T.,否则为.F. Recno()返

13、回记录号, 即记录指针指向记录的序号,如recno()为3, 表示第3条记录的开头,第2条记录的结尾. Reccount()计算表文件的记录个数. 简写为recc() 表文件刚打开时, recno()为1, 但并不是表文件的开头,第一条记录不是表文件的开头, 但在文件的开头时, 记录号还是为1. 换言之, recno()为1并不一定在文件开头, bof()可能为.t.,也可能为.f., 但bof()为.t.时, recno()一定为1 当指向最后一条记录时, 并不是文件的结尾.若文件总共有14条记录, 当recno()为14时, 表示指向第14记录的前面, 若recno()为15时,表示在14

14、条记录的后面, 此时, eof()为.t. 当go 1或go top后, 再skip -1, 记录不会减1,但bof()的值变为.t., 当go bottom 或go recc()后, 再skip 或skip 1, 记录号会加1, 且eof()的值变为.t.,Use zgda ?reccount() ?recno() Go 5 ?recno() Go top ?recno() ?bof() Skip 5 Recno(),Skip与go命令不能超过记录的范围. Use zgda Skip -3 ?recno() Skip 6 ?recno() Go bottom ?recno() ?eof()

15、Skip 1 ?recno() ?eof(),4.2.4 显示记录命令 如何在主窗口中显示记录 显示记录与浏览记录有什么差别?,显示记录命令 格式1:LIST FOR WHILE FIELDS OFF TO PRINT 格式2:DISPLAY FOR WHILE FIELDS OFF TO PRINT 功能:输出指定范围内满足条件的各个记录的有关内容。 注意:LIST的缺省范围为ALL,DISPLAY的缺省范围为当前记录, 但有条件短语时, 默认范围为ALL. 选OFF,不输出记录号,例4 (1)显示zgda中男职工记录的编号与姓名 (2)第8条记录的编号与姓名 use zgda list 编

16、号,姓名 for 性别=男 或 disp 编号,姓名 for 性别=男 或 list for 性别=男 fiel 编号,姓名 go 8 disp 编号,姓名 或 list record 8 或 disp record 8 思考: list 8是什么意思? Disp 8呢?,4.2.5 删除记录命令 怎样逻辑删除? 即delete命令使用. 物理删除(pack)与逻辑删除的不同. 恢复逻辑删除数据的命令是什么? Recall的使用. Zap的意义?,1.逻辑删除记录命令 格式: DELETE FOR WHILE 功能:对指定范围内满足条件的记录打上删除标志(逻辑删除)。 注意:(1)缺省范围与条

17、件选项时,仅对当前记录删除;(2)SET DELETED ON 可以屏蔽删除记录, 即不显示;(3)用测试函数deleted()可以显示当前记录是否有删除标志,例5 创建zgda表的备份文件zgbak,然后把zgbak中年龄大于等于45岁的记录打上删除标志,最后彻底删除 use zgda copy to zgbak use zgbak dele for 年龄=45 brow list set deleted on unique compact disp all 编号,姓名 tag zcgzsy unique descending list 编号,姓名 xbcsrqsy candidate li

18、st 编号,姓名 use,索引文件的建立,例11 (1)对zgda表中的所有性别为男的记录,用基本工资的降序序建立一个索引标识为nangzsy,索引类型为普通索引的复合索引,且索引文件名为gz.cdx (2)对zgda表中的所有记录按基本工资的升序,若基本工资相同再按出生日期的升序建立一个索引标识名为gzrqsy,索引类型为普通索引的复合索引,且文件名为gz.cdx,索引文件的建立,(1)对zgda表中的所有性别为男的记录,用基本工资的降序序建立一个索引标识为nangzsy,索引类型为普通索引的复合索引,且索引文件名为gz.cdx use zgda index on 基本工资 tag nang

19、zsy of gz for 性别=男 descending list 编号,姓名 问题: 索引关键字、文件名、标识是什么?,索引文件的建立,(2)对zgda表中的所有记录按基本工资的升序,若基本工资相同再按出生日期的升序建立一个索引标识名为gzrqsy,索引类型为普通索引的复合索引,且文件名为gz.cdx use zgda index on str(基本工资,7,2)+dtoc(出生日期,1); tag gzrqsy of gz list 编号,姓名 use,索引文件的建立,4.3.4 索引文件的打开与关闭 如何打开索引文件 怎样指定索引 哪些记录移动命令是针对于索引文件的 如何使用索引文件

20、打开索引文件 指定索引,索引文件的打开与关闭,索引文件的打开 格式1:USE INDEX 功能:在打开指定数据表的同时,打开与之相关的一系列索引文件。 格式2:SET INDEX TO 功能:在数据表已打开的情况下,打开与之相关的一系列索引文件。,索引文件的打开与关闭,注意:(1)若中第一个单索引文件,则该单索引文件起作用; 中有多个索引文件,但第一个不是单索引文件,则都不起作用 (2) 中有多个索引文件,则按下列顺序排列索引项:单索引文件结构复合索引文件非结构复合索引,索引文件的打开与关闭,例12 (1)打开zgda时,打开单索引文件csrqsy、xbxmsy、非结构复合索引zg.cdx (

21、2)先打开zgda,再打开单索引文件csrqsy、xbxmsy、非结构复合索引zg.cdx (3)如何打开结构复合索引zgda.cdx呢?,索引文件的打开与关闭,(1)打开zgda时,打开单索引文件csrqsy、xbxmsy、非结构复合索引zg.cdx use zgda index csrqsy,xbxmsy,gz list 姓名,出生日期,索引文件的打开与关闭,先打开zgda,再打开单索引文件csrqsy、xbxmsy、非结构复合索引zg.cdx use zgda set index to zg,csrqsy,xbxmsy list 性别,姓名 问题: 如果复合索引文件中有多个索引, 那么哪

22、个索引发生作用呢? 如何指定哪个索引发生作用呢?,索引文件的打开与关闭,指定主控索引项 格式1:SET ORDER TO ASCENDING | DECENDING 格式2:SET ORDER TO ASCENDING | DECENDING 格式3:SET ORDER TO TAG ASCENDING | DECENDING 功能:指定主控索引文件或主控标识, 单索引文件的索引标识与文件名是相同的.,索引打开与关闭,(1)set order to 或set order to 0命令使当前的主控索引失效 (2)不管原索引是升序还是降序,均可以用ASCENDING和DESCENDING对数据表进

23、行重新处理 (3)INDEX ON 姓名 TO xm INDEX ON 出生日期 TAG csrq OF zg,索引的建立与关闭,SET INDEX TO xm SET INDEX TO 姓名 SET INDEX TO csrq SET INDEX TO zg SET ORDER TO xm SET ORDER TO TAG xm SET ORDER TO 出生日期 SET ORDER TO TAG csrq SET ORDER TO csrq SET ORDER TO zg,索引建立与关闭,Inde on 姓名 to xm Inde on 出生日期; tag csrq of zg 并且zg、

24、xm已经打开,例13 执行use zgda index csrqsy, xbxmsy, gz后,回答下面问题,其中gz包含索引nangzsy与gzrqsy,结构复合索引包含zcgzsy与xbcsrqsy两索引,csrqsy与xbxmsy是单索引文件 (1)显示记录的姓名与编号,把主控索引指向第二项,显示记录的姓名与编号 (2)取消主控索引 (3)打开csrqsy.idx,然后显示数据 (4)打开gz.cdx,并把主控索引指向gzrqsy,索引打开与关闭,(1)显示记录的姓名与编号,把主控索引指向第二项,显示记录的姓名与编号 List 编号,姓名 Set order to 2 List 编号,姓

25、名,索引打开与关闭,(2)取消主控索引 Set order to,索引打开与关闭,(3) 打开csrqsy.idx,然后显示数据 Set index to csrqsy Disp all 姓名,出生日期,索引打开与关闭,(4) 打开gz.cdx,并把主控索引指向gzrqsy Set index to gz List 编号,姓名 Set order to gzrqsy List 姓名,基本工资,出生日期 use,索引打开与关闭,索引项起作用时记录指针的移动 当某个索引项起作用时,记录指针实际上是在该索引项对应的索引表上进行移动,但当明确指定移动到某号记录时例外。 如:go top 指向索引表的第

26、一条记录 go bottom 指向索引表的最后一条记录 skip 指向索引表的下一条记录 go 3 指向表文件的第三条记录 问题: go top = go 1 ?,索引打开与关闭S1,例14 打开表文件zgda.dbf,设置主控索引为zcgzsy,并移动记录指针观察结果 use zgda set order to zcgzsy desending go top ?recn() skip 2 ?recn() go bottom ?recn() go 5 ?recn(),索引文件的关闭 格式1:CLOSE INDEXES 格式2:SET INDEX TO 功能:关闭当前工作区内除了结构复合索引文件

27、之外的所有索引文件。,索引打开与关闭,索引文件的更新 格式:REINDEX (1)打开了的索引文件,当记录更新时记录会自动更新 (2)未打开的索引文件(单索引文件、非结构索引文件)不会自动更新,须用reindex更新,4.4 数据表的查询与统计,查找 条件查找:Locate for 常量查找:Find 表达式查找:seek 统计 求和:sum 求平均:average 统计个数:count,数据表的查询与统计,一般计算:calculate 分类汇总:total on 工作区 选择工作区:select 表间更新:update onfromreplace 物理连接:join withtofor 逻辑

28、连接:set relation tointo,数据表的查询,条件查询命令 格式:LOCATE FOR 功能:查找符合指定条件的第一条记录,并将记录指针指向该记录。 (1)找到时,指针定在第一条满足条件的记录处,且Found函数返回真值 (2)指定范围时,只范围内查找,格式:CONTINUE 功能:按最近一次LOCATE命令的条件在后续记录中继续查找。 注意: 只有Locate之后才能用Continue命令,数据表的查询,例15 在zgda中查找职称为高工的男职工,并判断是否找到,若找到显示记录与记录号。 use zgda loca for 职称=高工 and 性别=男 ?found() ?re

29、cno() list 姓名,职称,性别,数据表的查询,例16 在zgda中找1972出生的职工,并显示其记录 use zgda loca for year(出生日期)=1972 ?found() list 姓名,出生日期,数据表的查询,常量查询命令 格式:FIND / 功能:快速查找索引关键字值和所指定的或相匹配的首记录。,数据表的查询,(1)必须建立索引文件,并且打开相应的索引文件,指定主控索引 (2)只能字符串或常数进行查找,字串常量可不用定界符 (3)用Found函数可以判断是否找到,skip命令可作继续查找 (4)与Set exact on/off有关 索引表达式只能为数值型或字符型?

30、,数据表的查询,例17 在zgda中用find命令进行查找姓李的, 姓张的以及张立功 use zgda copy to zgtmp use zgtmp index on 姓名 to xm set index to xm.idx find 李 set exact on,数据表的查询,find 张 ?found() find 张立功 disp xm=张立功 find xm +str(pjgz,7,2) 例22 统计zgda中的年龄平均值,并显示之,数据表的统计,3记录个数统计命令 格式:COUNT FOR WHILE TO 功能:统计指定范围内满足条件的记录个数。 缺少范围和条件子句时,为所有记录

31、个数(ALL),其计算值等于reccount()的值,数据表的统计,例23 统计zgda中的记录个数 use zgda count to jls ?jls ?jls=reccount(),数据表的统计,例24 统计zgda中的基本工资超过1000的人数及所占比例 use zgda count to for 基本工资1000 to jbgz ?”基本工资超过1000元的人数”+str(jbgz,2,0) ?”所占比例:”; +str(100*jbgz/reccount(),5,2)+”%”,数据表的统计,4专用计算命令 格式:CALCULATE FOR WHILE TO 功能:对指定范围内满足条

32、件的记录分别计算指定的各个表达式的值。 注意:(1)表达式为:sum()、avg()、cnt()、max()、min()、npv()、std()、var() (2)默认范围为ALL,数据表的统计,例25 计算zgda中男职工的平均年龄、总基本工资、平均基本工资 use zgda calculate avg(年龄),avg(基本工资),sum(基本工资) for 性别=男 to pjnl,pjgz,gzzh ?”平均年龄:”+str(pjnl,5,2) ?”平均基本工资:”+str(pjgz,7,2) ?”基本工资总和:”+str(gzzh,8,2),数据表的统计,5记录分类求和命令 格式:TO

33、TAL ON TO FORWHILE FIELDS 功能:对当前数据表中指定的数值型字段进行分类求和,并形成汇总数据表。 (1)应按关键字排序或索引,关键字是分类的标准 (2)Fields 指定求和的数值型字段,否则对全部数值型字段 (3)非数值型字段不参与求和,但同类关键字的首记录的值写入分类汇总产生的数据表中,数据表的统计,例26 在zgda表中,分按职称与性别进行分类汇总,产生分类汇总表分别为zchz,xbhz use zgda index on 职称 tag zc index on 性别 tag xb set order to zc total on 职称 to zchz fields

34、 基本工资,数据表的统计,set order to sb total on 性别 to xbhz fields 基本工资 use zchz brow use xbhz brow use,数据表的统计,4.5 数据表之间的操作,Visual Foxpro能将内存分成几个区,即工作区,工作区可以用编号表示,如1,2,3,前10个工作区也可以用AJ来表示 允许开辟32767个工作区 每个工作区只能打开一个表文件,当几个表同时进行操作时,必须打开多外工作区 注意:从资源管理器中用鼠标双击可造成同一个文件在多个工作区中打开,4.5 数据表之间的操作,4.5.1 工作区的选择 1工作区选择命令 格式:SE

35、LECT 功能:选择某个内存工作区作为当前工作区。 (1)若打开表时使用别名,则该别名为数据表的简称,同时也可以指代该工作区 (2)Select 0表示选择最小的工作区 (3)显示当前工作区号:?select(),如:select 1 不指定random,则只用别名表的第一条记录更新主表的第一条 主表与别名表都建索引(主控),则用别名表中相同关键字段值修改主表相同关键字的第一条记录,例27 如下两表(zg、zj),zg,zj,数据表之间的操作,Sele 1 Use zg Use zj in b update on 姓名 from b replace 基本工资 with 基本工资+b.增加工资,

36、数据表之间的操作,Index on 姓名 to xm update on 姓名 from b replace 基本工资 with 基本工资+b.增加工资 random,数据表之间的操作,数据表之间的操作,例28 把zjgz表中增加工资加到zgda中编号相同记录的基本工资中 Sele 2 Use zjgz Sele 1 Use zgda update on 编号 from b replace 基本工资 with 基本工资+b.增加工资 List Close all,4.5.3 表间的物理连接 怎样完整地看到员工的工资情况?,ZGDA,ZGGZ,数据表之间的操作,4.5.3 表间的物理连接 格式:

37、JOIN WITH TO FOR FIELDS 功能:把主表文件与表文件中符合条件的对应记录,按给定的字段顺序横向连接起来,生成一个新数据表。,数据表之间的操作,注意: (1)for条件是必选的,是联结的依据 (2)执行方式是先搜索主表,然后在别名表中找相应的记录,组成新的记录,直到别名表搜索完成,主表记录指针再下移一条 (3)新表的字段由fields短语指定 (4)备注字段不能作为连接的依据,数据表之间的操作,根据姓名相等, 由ZG连到ZJ生成XX, 那么XX表有多小条记录,ZG,ZJ,数据表之间的操作,例29 把zgda.dbf与zggz.dbf用编号连接起来生成gzb表, 新表由编号,姓名,基本工资,奖励工资,应发工资,实发工资构成 Sele 1 Use zgda Use zggz in 2 Join with b to gzb for

温馨提示

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

评论

0/150

提交评论