正文内容
VFP基础教程 第二章 VFP语言基础
来源:开心麻花
作者:开心麻花
2025-09-19
1

VFP基础教程 第二章 VFP语言基础(精选7篇)

VFP基础教程 第二章 VFP语言基础 第1篇

2.1 程序设计概述

1. 程序设计方法简介

设计方法

主要概念

设计过程

程序执行方式

结构化程序设计 功能模块(即过程、自定义函数) 编制各个功能模块,再用主程序将它们串起来 将应用程序分解成若干功能模块,通过各模块的相互调用来完成整个执行过程,是过程驱动的,

面向对象程序设计 类、对象、属性、事件、方法 设计类、子类、对象(设计外观、设置属性、为事件编写方法程序) 将应用程序分解成具有特定属性的对象,通过调用各对象的不同方法来完成相关事件,是事件驱动的。

2.数据类型

VFP 包含下列数据类型:

通用的数据类型 字符型

Character

货币型

Currency

日期型

Date

日期时间型

DateTime

逻辑型

Logical

数值型

Numeric

仅用于字段的数据类型 双精度型

Double

浮点型

Float

整型

Integer

通用型

General

备注型

Memo

3. 数据容器

VFP中用来存储数据的容器有:常量、变量、数组、记录和对象。

(1) 常量(constants):

一个在操作过程中保持不变的数值或字符串。

常用的常量类型

常量类型

数值型常量

字符型常量

逻辑型常量

日期型常量

表示方式

-25.36

“abc”,“123”,“中国”

.T. .F.

{^/07/10}

(2)变量(variables):

是内存中的一个存储单元的位置,其中的内容可以变化,但标识该存储位置的名称(即变量名)不变。

变量的命名习惯: 类型变量代号

如:cStud 、nCj 、dCsrq ——

分别代表一个字符型、数值型、日期型的变量名

变量的赋值方式: 1) 用 STORE 命令 如:STORE “王兰” TO cStud

2) 用赋值操作符 = 如:cStud = “王兰”

变量的作用域: 即变量起使用的有效范围,

变量作用域

定义作用域的关键字

特点

局部变量

local variable(本地变量)

LOCAL 只能在一个函数或过程中被访问,其他过程或函数不能访问此变量的数据。当其所属程序停止运行时,局部变量将被释放。

私有变量

private variable

PRIVATE 私有变量在 VFP 中是默认的,不需要特殊的关键字定义。但是,如果在更高一级例程(routine)中已经有同名变量,可以用PRIVATE 关键字予以声明,以限定其范围。当定义此变量的例程结束时,此变量也被相应释放。可使用私有变量在被调用的函数中共享数据。

公共变量

public variable

PUBLIC 可用于所有过程和函数,而不限于定义该变量的过程和函数。可使用全局变量在多个过程或函数之间共享数据,在命令窗口中创建的任何变量自动具有全局属性。

变量的访问:

当变量和字段同名时,字段有优先被访问权。要在变量名前加 m. 或 m ->以示区别,如 m.cStud

(3)数组(array):

是存储在一个变量中由单个变量名引用的有序数据集合。在 VFP中,一个数组中的数据不必是同一种数据类型。常用的有一维数组,二维数组。

数组元素的标识:通过一个数值下标来引用,如 AA[2],AA[2,3]

数组类型的声明:

私有数组 ——用DECLARE 或 DIMENSION定义

全局数组 ——用PUBLIC命定义

局部数组 ——用LOCAL定义

数组元素的赋值:

用赋值语句: 如 AA=45

用SCATTER从当前记录中取特定字段的值赋给数组:

如: scatter fields xh, xm, xb to aa

(数组长度、类型自动与所给字段相同)

用 COPY TO ARRAY从当前记录中取所有字段的值赋给数组:

如: copy to array aa

(数组长度、类型自动与表中全部字段相同)

把数组中的数据传给当前表中的当前记录:

gather from 数组名 [fields 字段名表]

用数组向当前表添加记录:

append from array 数组名 [for 条件] [[fields 字段名表]

(用二维数组可以同时添加多条记录)

数组处理的常用函数:

排序SORT,搜索ASCAN(),删除ADEL(),插入AINS()

(4) 记录:

表中的一行,由字段组成。

(5) 对象:

对象是类的一个实例,类是对拥有数据和一定行为特征的对象集合的描述。VFP对象可以是表单、表单集、控件。

VFP基础教程 第二章 VFP语言基础 第2篇

在实际应用中,可以将查询结果用表单的列表框控件显示出来。例如,显示职工的编号,姓名及工资的信息

步骤:

1.新建表单,添加三个标签,caption属性分别设为“编号”,“姓名”,“工资”.再添加一个列表框控件list1,

2.将列表框控件list1的rowsourcetype属性设为3(即可用Sql语句选择数据项),再将其rowsource属性设为“select 编号,姓名,工资 from 职工档案”.另外,将list1的columncount属性设为3

3.保存并运行表单。

二。 视图:前面介绍的查询可以很方便的从表中检索出所需的数据,但不能修改所查出的数据。如果既要查询又要修改数据,可以使用视图。视图是数据库的一部分,与数据库表有很多相似的地方。视图是一个虚表,其中存放的是数据库表的定义。在大多数场合下,视图的作用等同于表,数据库表的特性,比如给字段设置标题等, 同样适用于视图。在VFP中,有两种类型的视图:本地视图和远程视图。本地视图能够更新存放在本地计算机上的表,远程视图能够更新存放在远程服务器上的表。

三。创建本地视图:

1.使用命令方式:可以用下列命令直接创建视图:

格式:create sql view 视图名 as select_sql语句

例如,创建视图zgda,选择“职工档案”表的全部信息,命令如下:

create sql zgda as select * from 职工档案

也可以使用已有的select_sql语句来创建视图,只要把select_sql语句存入一个变量,然后用宏替换在create sql view命令中调用即可

例如,上面创建视图的命令,可以改成下列的格式:

x=“select * from 职工档案”

create sql view zgda as &x

2.使用“视图设计器”创建视图的步骤如下

(1)启动“视图设计器”

(2)添加表或视图

(3)建立表间的关联

(4)选择字段

(5)筛选记录

(6)排序记录

(7)设置更新条件,

“视图设计器”的窗口与“查询设计器”窗口相类似,这里不再介绍。

四。使用“视图设计器”创建视图:

1.启动“视图设计器”:

(1)在项目管理器中选择“全部”或“数据”选项卡,选择“本地视图”,单击“新建”按钮,单出“新建本地视图”对话框,如图62

(2)在“新建本地视图”对话框中单击“新建视图”按钮,进入“视图设计器”窗口,与“查询设计器”窗口相比较,除了多了个“更新条件”选项卡之外,其他都是相同的。

2.添加表:步骤如下

(1)打开“视图设计器”窗口后,弹出“添加表或视图”对话框

(2)在该对话框中,选中要添加的表,单周“添加”

3.其余操作同查询

4.设置更新条件:在“更新条件”选项卡中,选中“发送SQL更新”复选框,并设置更新字段,即可使用视图更新基表中的数据

五。视图的使用:

1.视图的打开:

视图不作为单独的文件存在,是数据库的一部分。要打开视图,必须先打开数据库,格式如下:

open database 数据库名

use 视图名

browse

2.显示视图的结构:

如只需要打开视图并显示其结构,而不必下载数据时,可使用带nodata子句的use命令。对于远程视图,这个选项更有用。格式如下:

use 视图名 nodata

browse

3.关闭视图:公关闭视图,用下列命令:

select 视图名

use

关闭数据库中所有表和视图,用下列命令:

close tables

关闭数据库,则库中的表和视图也一起关闭:

VFP语言学习难点初探 第3篇

1 VFP知识几个难点

1.1 字符串比较

1.1.1 VFP中字符型数据进行比较

系统对字符串中的字符按从左到右的序对应进行比较,一旦发现两个对应字不同,则按它们的排序序列比较出两个符串的大小。在VFP中字符的排序序列有三种:1)machine(机器):西文字符按ASC值排序,中文的一级汉字按拼音次序排。2)PinYin(拼音):中文按拼音次序序,西文字符大写字母大于小写字母。3)Stroke(笔画):中、西文都按笔画多少排序。在中文VFP中,字符默认的排序序列为PinYin(拼音)。而其它许多高级语言按ASCII码来比较的。故在VF中默认情况下大写字母大于小小字母。“A”是大于“a”字符,要改变字符排序序列,可选用工具菜单/选项命令进行设置。

1.1.2 字符串精确比较

字符比较结果还受精确比较开关影响,可用SET EXCACT ON/OFF命令来打开或关闭。在默认情况下,比较两个字符串是否相等,VFP采用的不精确比较。当在不精确比较状态时,只要两个字符串满足下面两个条件结果就相等:一是两个字符串最左边的字符相同;二是第一个字符串长度大于或等于第二个的长度。根据规则可知:?"郑老师"="郑老",结果为.T.;而?"郑老"="郑老师",结果为.F.。同时要注意特别情况:空串“”包含于任何字符串中,且长度为0,所以?"ab"=""结果为.T.;?""="ab"结果为.F.。

1.1.3 字符串的模糊比较问题

字符串的模糊比较可用like()函数、$运算符、AT()函数等方法来解决。如姓名中含有“小”可以写成:“小”$姓名或AT(“小”,姓名>0来实现。而LIKE函的格式LIKE(cExpression1,cExpression2),其中cExpression1中可以包含通配符*和?。问号(?)可与任何单个字符相匹配,星号(*)可与任意数目的字符相匹配。只有在c Expression1与c Expression2中的字符逐个匹配的情况下,LIKE()函数才返回“真”(.T.)。如?like(“郑*”,姓名)是判断是否姓郑。但在SQL语句中的like运算符不能用在一般命令的for条件中,而通配符变为_和%,判断是否姓郑可写成:姓名like“郑%”。

1.2 变量的作用域问题

在VFP程序设计中,同一个变量名由于作用域不同变量有不同的作用域和生存期,因涉及的知识点比较多,使用的环境和场合也比较复杂,这对于初学者往往是一个不容易理解。的作用归纳起来,大致有三个方面:

1.2.1 变量的作用域

变量的作用域可用变LOCAL、PRIVATE、PUBUC命令强制规定作用域。LOCAL用于定义局部变量,局部变量只在本模块中有效;当建立它的模块程序运行结束时,局部变量自动释放。全局变量和局部变量初值为逻辑假。局部变量要先建立后使用。PRIVATE用于定义私有变量,变量的作用域为本模块中以及下级模块中有效;PUBUC用于定义全局变量,在本次程序运行期间,变量在所有模块中都有效。当大范围变量和小范围变量同名时,在小范围内,小范围变量优先。没经过申明的变量,约定为私有变量。下面的例子是来说明它们之间的关系。

在主程序中,k1,k2没经过说明,那么它是私有类型变量,在本模块及下级模块中有效,所以在子过程SUB中有效,但在SUB过程中重新显示定义K1,那么相当于定义了一个作用范围更小的小范围变量,它将屏蔽主程序中的K1的值,所以在SUB过程中输出为:30,40;而回到主程序输出为:10,40。

1.2.2 参数传递

考试中要求学生掌握的过程主要有Sub过程和Function过程。Sub过程不返回值,Function过程必须由函数名返回一个值。在调用过程时,主调过程的实参以一定的形式传递给被调过程的形参,完成实参与形参的结合,然后执行被调过程体。经过被调过程的处理,又将所得结果返回给主调过程。在VFP中,参数的传递有传值和传址两种形式。

1)传值方式

当调用一个过程时,将实参的值复制给形参,实参与形参断开联系。过程调用结束时,形参占用的存储单元被释放,因此对形参的任何操作都不会影响到实参。传值方式是“单向”的,形参的值不能返回给实参。

2)传地址方式

如果实参是常量或一般形式的表达式,系统会计算出实参的值,并把它们赋值给相应的形参变量。这种情形称为按值传递。如果实参是变量,那么传递的将不是变量的值,而是变量的地址。在模块程序中对形参变量值的改变,同样是对实参变量值的改变。这叫按引用传递。下面的例子是来说明它们之间的关系。

这个例子在主过程调用过程中的两个实参(A)和B,由于B是简单变量时,VFP在分配形参Y时和实参B共用内存单元(传地址),所以在子过程PP的变化将影响实参变量B,而形参X,由于实参不是简单变量,在分配形参时另外分配内存单元,所以A和X只是单向传值,没有关联,因此在主程序中输出为3,15。

1.2.3 内存变量和字段变量同名时

字段变量的类型是在建立表文件的结构时确定的,一旦定义了字段变量的类型,那么赋值的数据类与变量类型一致,由于改变时不能用运算"="和store语句直接赋值。内存变量是用内存单元存储的变量,它的类型与之比较就有一定的随意性,它只能保存最后一次更新的值。当内存变量和字段变量同名是,字段变量优先。但用"="和store语句改变的变量例外,如下例子:

设职员表已在当前工作区打开,当前记录的“姓名”字段值为“张三”;字段宽度为4,执行如下命令:

姓名=姓名+"你好"

?姓名

结果:“张三”,并不是“张三你好”因为当存在字段变量“姓名”时,字段变量优选,所以输出的是字段变量“姓名”的值,而字段变量不能使用“=”来改变其值,所以,姓名=姓名+“你好”语句改变的是内存变量“姓名”为字段变量姓名的值“张三"+"你好”,结果是“张三你好”,可用?m.姓名来输出内存变量的值。

2 结束语

VFP在学习过程中所遇到的难点不仅仅涉及到这些。本文的目的是通过对上述知识点难点的介绍,起到举一反三的效果,从而提高同学们学习这门语言的信心,增强在学习过程中解决问题的方法。

参考文献

[1]匡松,刘容.余平.Visual FoxPro面向对象程序设计[M].成都:西南交通大学出版社,2006.

[2]王瑛.数据库管理系统VFP的教学探索[J].天水师范学院学报,2005,(5).

VFP基础教程 第二章 VFP语言基础 第4篇

VFP基础教程 第二章 VFP语言基础 第5篇

(三)任课教师:黄平

贵州天力电脑技工学校

2012年10月贵州高等教育自学考试VFP应用基础模拟试卷

(三)一、选择题(本大题共18小题,每小题2分,共36分)。

1、语句DIME TT(4,5)定义的数组元素的个数是(B)

A、30B、20C、9D、45

2、设A=(1*2+3)

B=1*2+3 C=“1*2+3”

正确的表达式为(A)

A、A+BB、A+CC、B+CD、A+B+C

3、函数DATE(),TIME()类型分别是(C)A、D,DB、D,TC、D,CD、C,D4、当前记录号为3,将第六号记录设置为当前记录命令是(B)A、skip +6B、skip +3C、skip –6D、skip –

35、下列关于物理删除和逻辑删除表记录的说法,正确的是(D)A、物理删除表记录的命令是DELETE,逻辑删除表记录的命令是PACK B、逻辑删除表记录的命令ZAP,物理删除表记录的命令是PACK

C、物理删除只是在记录旁坐删除标记,可以恢复记录;逻辑删除是真正从表中删除记录,不能再恢复。

D、逻辑删除只是在记录旁坐删除标记,可以恢复记录;物理删除是真正从表中删除记录,不能再恢复。

6、下列叙述中正确的是(D)

A、当前记录为首记录时,EOF()为.T..eof()为.f.B、当前记录为首记录时,EOF()为.F..eof()为.T.C、当前记录为首记录时,EOF()为.T..eof()为.T.D、存在EOF(),BOF()同时为F 的情况

7、以下命令正确是(D)A、LOCA 出生日期 =10/10/1998 B、LOCA FOR 出生日期=10/10/1998 C、LOCAT for 出生日期=1998-10-10 D、LOCA FOR 出生日期={^1998-10-10}

8、关于属性,正确的是(B)

A、只是对象的内部特征B、是对象的固有特性

C、是对象的外部特征D、属性是对象的固有的方法

9、表单程序中,关于编写事件代码,错误的描述是(A)A、就是编写.PRG程序,文件名为事件名 B、将代码写入该对象的该事件过程中 C、可以从父类中继承

—本试卷共4页,当前是第1页—

D、属性窗口的代码卡片中选择该对象的事件双击,再打开的事件代码窗口中输入代码

10、在面向对象程序设计中,对象所具有的特性不包括(C)A、继承性B、封装性C、完整性D、多态性

11、关系数据库管理系统的三种基本运算是(A)A、选择,投影,联接B、自制,剪切与粘贴 C、录入,修改与删除D、统计,分类与替换

12、关系数据库管理系统所管理的关系是(B)A、一个DBF文件B、若干个二维表 C、若干个DBF 文件D、以上说法都不对

13、在SELECT 语句中,(B)子句后可能带有HAVING短语 A、ORDERB、GROUPC、WHERED、SELSCT14、在SELECT 语句中,如果要对输出的记录进行排序,应选择使用(A)项。A、ORDERB、GROUPC、HAVINGD、TOP

15、在下列函数中,函数值为数值的是(A)A、AT(‘人民’,‘中华人民共和国‘)B、CTOD(’01/01/96‘)C、BOF()D、SUBS(DTOC(DATE()),7)

16、向项目中添加表单,应该使用项目管理器的(D)A、代码选项卡 B、类选项卡 C、数据选项卡D、文档选项卡

17、常见的数据模型有(C)

A、大型、中型和小型B、西文、中文和兼容 C、层次、网状和关系D、数据、图形和多媒体

18、顺序执行下列命令之后,屏幕显示的结果是(B)STORE “Visual FoxPro” to tt ?UPPER(RIGHT(TT,3))

A、VISUAL FOXPROB、PROC、ProD、VIS

二、填空题(本大题共20小题,每小题2分,共40分)。

19、表达式STUFF(“GOODBOY”,5,3,“GIRL”)的运算结果是____GOODGIRL____ 20、在VISUAL FOXPRO中,参照完整性规则包括更新规则、删除规则和___插入___规则

21、在VISUAL FOXPRO中,CTREATE DATABASE命令创建一个扩展名为___.dbc___的数据库文件。

22、在VISUALFOXPRO中,建立索引的作用之一是提高____查询____速度

23、我们把表中的行称为___元组___,列称为字段。

24、设N1=20,N2=“N1”,则?&N2+N1的结果是___40___

25、在VFP中视图可以分为本地视图和___远程视图___

26、程序文件默认的扩展名为_____.prg_____

—本试卷共4页,当前是第2页—

VFP教程 七、 表单设计 第6篇

1.名词解释

表单:

即用户与计算机进行交流的一种屏幕界面,用于数据的显示、输入、修改,

VFP教程 七、 表单设计

。该界面可以自行设计和定义,是一种容器类,可包括多个控件(或称对象)。

表单集:

可包含一张或多张表单的容器。

数据环境:

在打开或修改一个表单或报表时需要打开的全部表、视图和关系。它以窗口形式(类似于数据库设计器)反映出与表单有关的表、视图、表之间关系等内容。可以用数据环境设计器来创建和修改表单的数据环境。

2.表单设计界面

主要包括: 表单向导、表单设计器、 表单设计器工具栏、 表单控件工具栏、 属性窗口

3.表单设计中常用的属性、事件与方法介绍

属性、事件、方法

说明

默认值

AlwaysOnTop属性控制表单是否总是处在其他打开窗口之上假(.F.)AutoCenter属性控制表单初始化时是否让表单自动地在Visual FoxPro主窗口中居中假(.F.)BackColor属性决定表单窗口的颜色255,255,255BorderStyle属性决定表单是否有边框,若有边框,是单线边框、双线边框,还是系统边框,

电脑资料

VFP基础教程 第二章 VFP语言基础 第7篇

在开发应用程序时,首先应进行系统环境规划,规划中要考虑的因素有:应用程序所面向的用户及其可能需要的各种操作、数据库规模、系统工作平台(单用户或是网络)、程序要处理的数据类型(是本地数据还是远程数据)等,

VFP教程 十一、 应用程序开发

。规划完成之后,即可利用项目管理器来进行每一步开发,它可以帮助管理开发过程中的所有文件,并最终连编成应用程序。应用程序的开发步骤大致如下图所示:

1. 数据库结构设计

2. 系统功能模块设计

3. 菜单设计

4. 用户界面设计

5. 查询设计

6. 报表设计

7. 系统维护设计

8. 系统模块调试

9. 用项目管理器连编成应用程序

11.2 优化应用程序的技巧

1. 优化表和索引

(1) 如果没有启用记录或表缓冲,应该使用INSERT-SQL命令(因索引只需更新一次),而不要使用APPEND BLANK 命令后再使用REPLACE;

(2) 当需要将大量记录追加到索引过的表中时,应先取消或关闭索引,在数据追加完毕,再重建索引,这样速度会快些;

(3) 在SQL语句中要尽量避免函数调用;

(4) 如果需要经常使用某种索引顺序,应周期性使用此索引对表进行排序,提高表的性能;

(5) 在多用户环境中,使用CDX 索引文件比 IDX 索引文件快。

2. 使用Rushmore 技术加速数据访问

使用 Rushmore 技术可以显著地提高查询的速度,

电脑资料

Rushmore 是一种从表中快速地选取记录集的技术,它可将查询响应时间从数小时或数分钟降低到数秒。访问单表时,使用 FOR 子句,访问多表时,使用SELECT-SQL 查询,可自动隐含地使用该技术。

(1)访问单个表中的数据,使用一个FOR子句;

(2)访问多个表中的数据,使用SELECT-SQL、DELETE-SQL、UPDATE-SQL命令。

3. 优化表单和控件

(1) 使用数据环境;

(2)在表单集里限制表单数目;

(3)在页框中动态加载页面控件;

(4)动态绑定控件与数据;

(5)当必须对屏幕进行多处更改时,延迟屏幕刷新;

(6)在经常使用的方法程序中减少代码。

4. 提高VFP程序性能的一般技巧

(1)数据要选择正确的数据类型

(2)避免重复打开文件,需要打开多个文件时,将它们分配给不同的工作区,需要时使用SELECT命令选择工作区;

(3)尽量使用FOR…ENDFOR循环,而不要使用DO WHILE…ENDDO循环,因为FOR循环较快;

(4)从多个字段复制数据时,用SCATTER TO ARRAY 比用SCATTER MEMVER快;

(5)为了有效的使用内存,避免在需要对象之前就创建它们,当不要该对象时应及时清除它;

(6)尽量将输出发送到顶层窗口,速度快些;

(7)使用SET TALK OFF命令取消状态显示,可节省屏幕顶端更新时间;

(8)将SET DOHISTORY 设置为OFF,避免当运行程序时每次都更新命令窗口;

(9)使用名称表达式代替宏替换,因为名称表达式更快;

(10)有效地引用对象属性:

·优化对属性的重复引用,可将属性值保存到一个变量中,再进行更改,在完成时一次性的设置属性;

相关文章
2024中考体育考试安全预案

2024中考体育考试安全预案

2024中考体育考试安全预案(精选13篇)2024中考体育考试安全预案 第1篇清涧分部2014年初中毕业学业理科实验操作、体育考试安全工作预案为...

1
2025-09-19
2024国培总结

2024国培总结

2024国培总结(精选9篇)2024国培总结 第1篇2017教师国培学习总结当今社会,教事业迅猛发展,各类培训数不胜数,而“国培”对于我们教育发...

1
2025-09-19
2024年单位与单位的新年联欢会主持稿及串词

2024年单位与单位的新年联欢会主持稿及串词

2024年单位与单位的新年联欢会主持稿及串词(精选5篇)2024年单位与单位的新年联欢会主持稿及串词 第1篇2018年单位与单位的新年联欢会主持...

1
2025-09-19
2024年上海市崇明县中考一模语文试题及答案

2024年上海市崇明县中考一模语文试题及答案

2024年上海市崇明县中考一模语文试题及答案(精选6篇)2024年上海市崇明县中考一模语文试题及答案 第1篇2017年崇明区初三一模语文试题(一...

1
2025-09-19
2010—2011学年度第一学期六年级语文教学计划

2010—2011学年度第一学期六年级语文教学计划

2010—2011学年度第一学期六年级语文教学计划(精选13篇)2010—2011学年度第一学期六年级语文教学计划 第1篇2010—2011学年下学期六年级...

1
2025-09-19
2011《农业农村工作知识》高频考点

2011《农业农村工作知识》高频考点

2011《农业农村工作知识》高频考点(精选12篇)2011《农业农村工作知识》高频考点 第1篇2011公考备考:《农业农村工作知识》高频考点2011-0...

1
2025-09-19
以案促改主持词

以案促改主持词

以案促改主持词(精选4篇)以案促改主持词 第1篇主持词同志们:根据市委要求,今天我们在这里召开“××局开展案件剖析做好以案促改工作动...

1
2025-09-19
2024致自己的励志说说

2024致自己的励志说说

2024致自己的励志说说(精选5篇)2024致自己的励志说说 第1篇人生,说到底,活的是心情。人活得累,是因为能左右你心情的东西太多。以下是...

1
2025-09-19
付费阅读
确认删除?
回到顶部