第2章VisualBasic语言基础.ppt

上传人:本田雅阁 文档编号:2252354 上传时间:2019-03-11 格式:PPT 页数:58 大小:661.51KB
返回 下载 相关 举报
第2章VisualBasic语言基础.ppt_第1页
第1页 / 共58页
第2章VisualBasic语言基础.ppt_第2页
第2页 / 共58页
第2章VisualBasic语言基础.ppt_第3页
第3页 / 共58页
亲,该文档总共58页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第2章VisualBasic语言基础.ppt》由会员分享,可在线阅读,更多相关《第2章VisualBasic语言基础.ppt(58页珍藏版)》请在三一文库上搜索。

1、第2章 Visual Basic语言基础,掌握各种常用数据类型的数据在内存中的存放形式,了解自定义数据类型。 理解变量和常量的概念、掌握其定义和使用。 掌握VB的 运算符和表达式的使用; 掌握常用内部函数的使用。,本章内容及要求:,2.1 Visual Basic语言字符集及编码规则,2.1.1 Visual Basic的字符集,大小写英文字母AZ和az; 数字0一9和27个专用字符,2.1.2 编码规则与约定,(一)编码规则 1VB代码中不区分字母的大小写。 2.语句书写比较自由。 在同一行上可以书写多条语句,语句间要用冒号“:”分隔。 若一个语句行不能写下全部语句,或在特别需要时,可以换行

2、。换行时需在本行后加入续行符,即1个空格加下划线“_”。 一行最多允许255个字符。 3注释以Rem开头,也可以使用单引号“”,注释内容可直接出现在语句的后面。,2.1 Visual Basic语言字符集及编码规则,例如: This is a VB REM This is a VB 4.在程序转向时需用到标号,标号是以字母开始而以冒号结束的字符串。 (二) 约定 1为了提高程序的可读性,对于VB中的关键字其首字母大写,其余字母小写 2. 注释有利于程序的维护和调试 3. 通常不使用行号 4对象名命名约定:每个对象的名字由3个小写字母组成的前缀(指明对象的类型)和表示该对象作用的缩写字母组成 。

3、,2.2 数据类型,2.2.1 Visual Basic的标准数据类型,1. 整型数是不带小数点和E指数的数。 例如:123,0,-24,19800等。 整型(Integer) 整数分为 长整型(Long) 2. 实数是带小数点和E指数的数。常用于表示数值较大或较小的数字。 例如:12.3,-24.,1.98E04,等。 单精度浮点数(Single) 实数分为 双精度浮点数(Double) 3. 货币型(Currency)数据以8个字节来存放,它支持小数点后面4位和小数点前面15位,是一个精确的定点数据类型,适用于货币运算。 4. 字节型( Byte )的数据类型表示(0255)无符号的数,常

4、用于访问二进制文件、图形和声音文件等。 5. 字符型( String )的数据类型只存放文本,是用双引号括起来的一串字符。 6. 布尔型( Boolean )数据。其值只有两个:真(True)和假(False),经常被用来表示逻辑判断的结果。任何时候只有两种状态的数据,如“True/False”、“Yes/No”、“On/Off”等,都可以表示为Boolean型,在Visual Basic中0表示False,非0表示True。,基本数据类型介绍,7. 日期型(Date )数据用来表示日期和时间,用8个字节存放。可以表示多种格式的日期和时间。在程序使用时,日期类型必需用“#”括起来。 8.对象(

5、Object)型数据用来表示应用程序中或其他某些应用程序中的对象。可以用Set语句指定一个被声明为Object的变量去引用应用程序所识别的任何实际对象。例如: Dim objDb As Object Set objDb=OpenDatabase(“d:VbBiblio.mdb”) 9.Variant类型的数据能够表示所有系统定义的数据类型,当把它们赋予Variant型时,不必在这些数据的类型间进行转换,Visual Basic会自动完成任何必要的转换。Variant数据类型还包含三种特定值:Empty、Null、Error。 Empty值用于确定是否已将一个值赋予所创建的变量。赋值之前,Var

6、iant变量具有空值(Empty)。用IsEmpty函数可以测定一个变量建立后是否被赋过值。 Null值常用于数据库应用程序,表示求未知或丢失为空的数据。用IsNull函数可以判断一个Variant变量的值是否为Null。 Error值是指已发生过程中的错误状态。,说明: 对VB中的数据的学习,需要掌握以下几点 1、数据的类型 2、数据在内存中能够的存储形式及占用的字节数 3、数据的取值范围 4、数据能参与的运算 5、数据的有效范围及生成周期。,例题,实例2-1: 数据类型举例 Private Sub Form_Click() Dim smallno As Long Dim bigno As

7、Long smallno = 1000 * 1000第一行 bigno = 1000 * 100000第二行 Print smallno Print bigno End Sub,Smallno和bigno都是长整型,且bigno大于Smallno,但结果第一行溢出了,为什么了?答案是VB作运算时,先运算再转换类型,1000 * 1000为整型整型,结果还是整型,将Smallno转换为整型,结果1000000超出了整型的范围(3276832767),而第二行1000 * 100000为整型长整型,结果为长整数,所以没有问题。 修改方法:smallno = 1000 * 1000改成smallno

8、 = CLng(1000) * 1000或smallno = 1000 * 1000& 第一行使用类型转换函数或者类型声明字符将1000强制转换为Long 注意:可以用VarType函数检测数据类型,实例22 VarType()函数举例 Private Sub Form_Click() Font.Size = 20 IntVar = 459: StrVar = “Hello World“: DateVar = #9/9/2011#: BlnVar = True MyCheck1 = VarType(IntVar) 返回2 MyCheck2 = VarType(DateVar) 返回7 MyCh

9、eck3 = VarType(StrVar) 返回8 MyCheck4 = VarType(BlnVar) 返回11 Print MyCheck1, MyCheck2, MyCheck3, MyCheck4 Print StrVar Print “ hello; world “ End Sub,字符串中有双引号则用连续 的2个双引号来表示。,2.2.2 用户自定义类型,可以把不同类型的变量组合起来创建用户定义的类型 。在模块级别中使用,用于定义包含一个或多个元素的用户自定义的数据类型。 使用形式: Type 自定义类型名 元素名 (下标) As 类型名 元素名 (下标) As 类型名 . .

10、. End Type 说明 元素名:表示自定义数据类型中的一个成员。 类型名:为标准类型。,2.2 数据类型,Type Student Xh As String Xm As String Xb As String Nl As Integer Score As Single End Type,例如: 对于一个学生的“学号”、“姓名”、“性别”、“年龄”、“入学成绩”等数据,为了处理数据的方便,常常需要把这些数据定义成一个新的数据类型(如Student类型)。,2.2 数据类型,对于定义好的类型, 就可以在变量声明时 使用该类型。 如Dim s1 as Student,补充:枚举类型 1、枚举的概

11、念 所谓枚举是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围。 2、声明枚举型的格式如下: Private | Public Enum 类型名称 成员名 = 常量表达式 成员名 = 常量表达式 End Enum 在缺省的情况下,在枚举中的第一个常数被初始化为0,其后的常数为比其前面的常数加1的数值。,Public Enum Days Sun Mon Tue Wed Thu Fri Sat End Enum,Private Sub Form_Click() Print “Sat=“; Days.Sat Dim day As Days 定义枚举类型的变量 day = Fri 枚举类型的

12、赋值 Print “Fri=“; day Print “Sun=“; Days.Sun End Sub,2.3 常量和变量,2.3.1 常 量 在程序运行过程中,其值不能被改变的量称为常量。在VB中有三类常量: 普通常量 符号常量 系统常量。 常量的定义格式为: private/public const 常量名 AS 类型名表达式或值 private/public涉及到有效范围,类型名就是前面一节的数据类型。如:,一、普通常量 1 整型常量 (1)整型(Integer):表示-32768至32767之间的整数 例如:10 110 20 (2)长整型(Long): 表示-2,147,483,64

13、8至2,147,483,647之间的整数 例如:长整型常数的书写: 23&,通常我们说的整型常量指的是十进制整数,但VB中可以使用八进制和十六进制形式的整型常数,因此整型常数有如下三种形式:,1)十进制整数。如125,0,-89。 2)八进制整数。以&或&O(字母O)开头的整数是八进制整数,如&O25表示八进制整数25,即(25)8 ,等于十进制数21。 3)十六进制。以&H开头的整数是十六进制整数,如&H25表示十六进制整数25,即(25)16 ,等于十进制数37。VB中的颜色数据常常用十六进制整数表示。,2.3 常量和变量,2、实型常量 1)单精度实型(Single):有效数为7位 2)双

14、精度实型(Double):有效数为15位 常量的表示: 1)十进制小数形式。它是由正负号(+,-)、数字(09)和小数点(.)或类型符号(!、#)组成,即n.n,n!或n#,其中n是09的数字。 例如0.123、.123、123.0、123!、123#等 2)指数形式。 nEm 或 n.nEm, nDm 或 n.nDm 例:1.25E+3 和 1.25D+3相当于1250.0 或者1.25103。,2.3 常量和变量,3、字符串常量 在VB中字符串常量是用双引号“”括起的一串字符,可以是所有西文字符和汉字、标点符号等; 例如“ABC“,“abcdefg“,“123“,“0“,“VB程序设计“等

15、。 说明: (1)“表示空字符串,而“ “表示有一个空格的字符串; (2)若字符串中有双引号,例如ABD“XYZ,则用连续两个双引号表示,即: “ABD“XYZ“ 4、逻辑(Boolean)数据类型 只有两个值True,或False。将逻辑数据转换成整型时:True为-1,False为0;其它数据转换成逻辑数据时:非0为True, 0为False。,2.3 常量和变量,5、日期常量 日期(Date)型数据按8字节的浮点数来存储,表示日期范围从公元100年1月1日9999年12月31日,而时间范围从0:00:0023:59:59。 一种在字面上可被认作日期和时间的字符,只要用号码符“#”括起来,

16、都可以作为日期型数值常量。 例:#09/02/99#、#January 4,1989#,#2002-5-4 14:30:00 PM#都是合法的日期型常量。,2.3 常量和变量,二、符号常量 在程序中,某个常量多次被使用,则可以使用一个符号来代替该常量,这样不仅在书写上方便,而且有效地改进了程序的可读性和可维护性。 VB中使用关键字Const 声明符号常量。其格式如下: Const 常量名 As 类型 =常数表达式 或:Const 常量名 类型符号=常数表达式 例如: Const PI As Double=3.1415926535 等价于: Const PI#=3.1415926535,2.3

17、常量和变量,例如,要将文本框Text1的前景颜色设置为红色,可以使用下面的语句: Text1.ForeColor=vbRed 这里的vbRed就是系统常量。这比直接使用16进制数来设置要直观得多。,三、系统常量 VB系统提供的应用程序和控件的系统定义常数。它们存放于系统的对象库中,在“对象浏览器”中的 Visual Basic(VB) 和 Visual Basic for applications(VBA)对象库中列举了 Visual Basic 的常数,2.3 常量和变量,在程序运行过程中,其值可以改变的量称为变量。 一.变量的命名规则 1. 以字母或汉字开头,后可跟字母、数字或下划线组成.

18、 3. 变量名最长为255个字符; 3. VB中不区分变量名的大小写,不能使用VB中的关键字; 4.字符之间必须并排书写,不能出现上下标 以下符是合法的变量名: a, x, x3, BOOK_1, sum5,张3 以下标识符是非法的: 3s 以数字开头 s*T 出现非法字符* -3x 以减号开头 bowy-1 出现非法字符-(减号) if 使用了VB的关键字,2.3.2 变 量,二.变量声明 1.用Dim语句显式声明变量 形式:Dim 变量名 AS 类型 Dim 变量名类型符 例: Dim ab As integer , sum As single 等价于 Dim ab%, sum!,2.3

19、常量和变量,2.隐式声明 Visual Basic允许用户在编写应用程序时,不声明变量而直接使用,系统临时为新变量分配存储空间并使用,这就是隐式声明。所有隐式声明的变量都是Variant数据类型。Visual Basic根据程序中赋予变量的值来自动调整变量的类型。 3.强制显式声明Option Explicit语句 良好的编程习惯都应该是“先声明变量,后使用变量”,这样做可以提高程序的效率,同时也使程序易于调试。Visual Basic 中可以强制显式声明,可以在窗体模块、标准模块和类模块的通用声明段中加入语句: Option Explicit,2.3 常量和变量,例题2-3,Private

20、Sub Command1_Click() Dim i As Integer Dim sum As Integer Sum = 0 For i = 1 To 50 Sum = Sum + i Next i Print Sum End Sub,如果把两行声明注释掉 Dim i As Integer Dim sum As Integer 程序运行没有任何问题,如果sum错写成sm,即语句sum = sum + i写成sm = sum + i程序执行结果如何?(没有任何提示!) 要解决这个问题就应该使用强制显式声明,要求编译器进行检查,遇到没有声明的变量就停下来。加Option Explicit语句。

21、,强制显式声明Option Explicit语句 良好的编程习惯都应该是“先声明变量,后使用变量”,这样做可以提高程序的效率,同时也使程序易于调试。Visual Basic 中可以强制显式声明,可以在窗体模块、标准模块和类模块的通用声明段中加入语句: Option Explicit 你可以不必每次都手动加入Option Explicit,使用菜单:工具/选项,在对话框中单击“编辑器”选项卡,复选“要求变量声明”选项,这样重新打开VB即可自动插入Option Explicit 语句。,例题24,常量与变量的使用 在text1中输入高,text2中输入半径,单击计算按钮,在label2中显示底面积

22、,在label4中显示体积,在label5中显示一个日期常数,窗体的标题显示字符串常量“你好”。,Private Sub Command1_Click() Const pi = 3.1415 定义符号常量 Dim r As Single, h As Single 定义变量 h = Val(Text1.Text) 从文本框text1输入高 r = Val(Text2.Text) 从文本框text2输入半径 Label2.Caption = pi * r 2 计算底面积,显示在label2中 Label4.Caption = 1 / 3 * pi * r 2 * h 计算体积,显示在label4中

23、 Label5.Caption = #9/4/2009 2:50:00 PM# 日期常量,显示在label5中 Label6.Caption = Now 当前时间,显示在label6中 Form1.Caption = “你好!“ 字符串常量 End Sub 用这些格式的日期来替换标签5的内容: #09/02/99#、#January 4,1989#,#2002-5-4 14:30:00,2.4 运算符和表达式,例:5+2*10 mod 10 9 / 3 +2 2 结果是:11,(ia=3),3.4.1. 算术运算符与算术表达式,1. 算术运算符,优先级:(指数运算 )(取负 -)(乘 *、除

24、/)(整除 )(求余 Mod)(加 +、减 -),2. 算术表达式 (书写中需注意的问题) (1)运算符不能相邻。例a+*b是错误的。 (2)乘号不能省略。例x 乘以y 应写成:x*y (3)括号必须成对出现,均使用圆括号。 (4)表达式从左到右在同一基准并排书写,不能出现上下标 (5)要注意各种运算符的优先级别,为保持运算顺序,在写VB表达式时需要适当添加括号(),若用到库函数必须按库函要求书写。 如:,2.4 运算符和表达式,(b-sqr(b*b-4*a*c)/(2*a),(a+b)/(a-b),3.4.2. 字符串运算符与字符串表达式 字符串运算符有: 、+ 。 功能是字符串连接 例如:

25、 “ABCD“ + “EFGHI“ 结果为:ABCDEFGHI “ VB ” & “程序设计教程” 结果为:VB程序设计教程 说明:当连接符两旁的操作量都为字符串时,上述两个连接符等价。它们的区别是: +(连接运算):两个操作数均应为字符串类型; &(连接运算):两个操作数既可为字符型也可为数值型,当是数值型时,系统自动先将其转换为数字字符,然后进行连接操作。,2.4 运算符和表达式,例: “100“ + 123 结果为 223 “100“ + “123“ 结果为 100123 “Abc“ + 123 出错 “100“ & 123 结果为 100123 100 & 123 结果为 100123

26、 “Abc“ & “123“ 结果为 Abc123 “Abc“ & 123 结果为 Abc123,注意:使用运算符“&”时,变量与运算符“&”之间应加一个空格。这是因为符号“&”还是长整型的类型定义符,如果变量与符号“&”接在一起,VB系统先把它作为类型定义符处理,因而就会出现语法错误。,2.4 运算符和表达式,3.4.3 关系运算符与关系表达式,比较两个运算量之间的关系,关系表达式的运算结果为逻辑量。若关系成立,结果为True,若关系不成立,结果为False。 VB中的关系运算符如下表所示。,2.4 运算符和表达式,关系运算的规则如下: (1)当两个操作式均为数值型,按数值大小比较。 (2)

27、日期类型数据比较先后,早日期小于晚日期。 (3)字符串比较,则按字符的ASCII码值从左到右一一比较,直到出现不同的字符为止。,(4)数值型与可转换为数值型的数据比较, 如:29“189“ ,按数值比较,结果为False。 (5)数值型与不能转换成数值型的字符型比较, 如:77“ sdcd“ ,不能比较,系统出错。 (6)“Like”运算符是VB6.0新增加的。 其使用格式为:str1 Like str2 (7)Is运算符是对象引用的比较,并非将对象或对象的值进行比较,而是确定两个对象引用是否是相同的对象。,2.4 运算符和表达式,3.4.4 逻辑运算符与逻辑表达式 逻辑运算符:Not,And

28、,Or Xor Eqv Imp,2.4 运算符和表达式,说 明: (1)逻辑运算符的优先级不相同,Not(逻辑非)最高,但它低于关系运算,Imp(逻辑蕴含)最低。 (2)VB中常用的逻辑运算符是Not、And和Or。它们用于将多个关系表达式进行逻辑判断。 例如:数学上表示某个数在某个区域时用表达式: 10X=10 And X20 (3)参与逻辑运算的量一般都应是逻辑型数据,若为数值型数据,则以数值的二进制逐位进行逻辑运算。 用人单位招聘秘书:年龄小于40岁,女性,学历专科或本科:年龄=39 性别=“女” 学历=“专科” 学历=“本科”,2.4 运算符和表达式,3.4.5 日期型表达式 日期型数

29、据是一种特殊的数值型数据,只能有下面3种情况: 1两个日期型数据可以相减: DateB-DateA 结果是一个数值型整数(两个日期相差的天数)。 例如:#05/08/2002# - #05/01/2002# 其结果为数值:7 2.一个日期型数据(DateA)与一数值数据(N)可作加法运算:DateA+N 其结果仍是一个日期型数据。 3.一个日期型数据(DateA)与一数值数据(N)可作减法运算: DateA-N 其结果仍是一个日期型数据。 例如:#05/08/2002# - 7,2.4 运算符和表达式,3.4.6 运算符的执行顺序,表达式中出现了多种不同类型的运算符时,其运算符优先级如下: 算

30、术运算符=字符运算符关系运算符逻辑运算,说明: 1当一个表达式中出现多种运算符时,首先进行算术运算符,接着处理字符串连接运算符,然后处理比较运算符,最后处理逻辑运算符. 3.可以用括号改变优先顺序,强令表达式的某些部分优先运行。括号内的运算总是优先于括号外的运算。对于多重括号,总是由内到外。,2.4 运算符和表达式,VB提供了上百种内部函数(库函数),要求掌握这些常用函数的功能及使用。 调用方法: 函数名(参数列表) 有参函数 函数名 无参函数 说明: (1) 使用库函数要注意参数的个数及其参数的数据类型 (2) 要注意函数的定义域(自变量或参数的取值范围) 例如: sqr(x) 要求: x=

31、0 (3) 要注意函数的值域。 如:exp(23773) 的值就超出实数在计算机中的表示 范围。,2.5 常用内部函数,1. 字符串操作函数 (1)删除空格函数 Ltrim(x) 返回删除字符串x前导空格符后的字符串。 Rtrim(x) 返回删除字符串x尾部空格符后的字符串。 Trim(x):返回删除前导和尾随空格符后的字符串。 (2)取子串函数 Left(x,n):返回字符串x前n个字符所组成的字符串。 Right(x,n):返回字符串x后n个字符所组成的字符串。 Mid(x,m,n):返回字符串x从第m个字符起的n个字符所组成的字符串。,2.5 常用内部函数,1. 字符串操作函数 (3)L

32、en(x):返回字符串x的长度,如果x不是字符串,则返回x所占存储空间的字节数。 (4)Lcase(x)和Ucase(x):分别返回以小写字母、大写字母组成的字符串。 (5)Space(n):返回由n个空格字符组成的字符串。 (6)Instr(x,y):字符串查找函数,返回字符串y在字符串x中首次出现的位置。如果y不是x的子串,即y没有出现在x中,则返回值为0。,2.5 常用内部函数,2.数学函数 常用的数学函数有: Abs(N) Cos(N) Sin(N) Exp(N) Log(N) Sqr(N) Sgn(N) 说明: (1) 在三角函数中的自变量是以弧度为单位。 如:sin300 sin(

33、3.14159/180*30),2.5 常用内部函数,(2)Abs(x):返回x的绝对值。 (3)Exp(x):返回e的指定次幂,即ex。 (4)Log(x):返回x的自然对数。 (5)符号函数Sgn(x),根据x值的符号返回一个整数(-1、0或1)。 1 x 0 Sgn(x)= 0 x = 0 - 1 x 0,如果x0则出错。,2.5 常用内部函数,3. 转换函数 说明:(1)要区别两个取整函数int()和fix() Fix(N)为截断取整,即去掉小数后的数。 Int(N)不大于N的最大整数。 N0与int(N) 相同,当N0时, int(N) 与fix(N) -1相等。 例如: Fix(9

34、.59) =9, Int(9.59) =9 Fix(-9.59) =-9, Int(-9.59) =-10 思考:如何实现四舍五入取整? (2)Chr和Asc函数 (3)Val和Str函数 注意: Val( )函数只将最前面的数字字符转换为数值。,2.5 常用内部函数,例题2-5,4. 日期、时间函数 (1)Date:返回系统当前日期。 (2)Time:返回系统当前时间。 (3)Minute(Now)、Minute(Time):返回系统当前时间“hh:mm:ss”中的mm(分)值。 (4)Second(Now)、Second(Time):返回系统当前时间“hh:mm:ss”中的ss(秒)值。,

35、2.5 常用内部函数,5. 随机函数Rnd与Randomize语句 (1)随机函数Rnd Rnd函数可以不要参数,其括号也省略。返回0 1(包括0,但不包括1)之间的双精度随机数。若要产生1100的随机整数,则可通过下面的表达式来实现: Int(Rnd*100)+1 包括1和100 Int(Rnd*99)+1 包括1,但不包括100 产生N,M区间的随机数的Visual Basic表达式:(包括N和M) Int(Rnd *(M-N+1)+N,2.5 常用内部函数,(2)Randomize语句 该语句的作用是初始化VB的随机函数发生器(为其赋初值),可使Rnd产生相同序列的随机数。 Random

36、ize 语句使用形式:Randomize Seed 其中:Seed是随机数生成器的种子值,若省略,系统将计时器返回的值作为新的种子值。一般地,要得到a,b之间的随机整数,可用公式“Int(Rnd*(b-a+1)+a”。 例:当单击按钮时产生20个10,99之间的随机整数。 Private Sub Command1_Click() Randomize For i = 1 To 20 Print Int(Rnd * 90 + 10); Next i Print End Sub,2.5 常用内部函数,实例2-5 随机函数rnd的使用,单击命令按钮1生成10个1-100之间的随机数,在文本框1中显示它

37、们的平均数。结果如图所示。,Private Sub Command1_Click() Dim x As Integer Dim i As Integer Dim sum As Integer Dim pj As Double sum = 0 Print “计算它们的平均分“; For i = 1 To 10 Print Int(Rnd * 100 + 1); x = Int(Rnd * 100 + 1) sum = sum + x Next I Print pj = sum / 10 Text1.Text = pj End Sub,Private Sub Form_Load() Form1.C

38、aption = “成绩计算器“ Command1.Caption = “生成随机成绩“ End Sub,使用随机数函数产生三位正整数,使用Mid函数取其中间的数。 【案例说明】: 本实例希望随机产生三位正整数,三位正整数的取值范围介于111到999之间;当得到一个三位正整数以后,要取出中间的数,例如546,中间的数就是4。 【案例技术】: 可以使用语句Int(n -m + 1)* Rnd +m)得到介于m和n之间的随机整数(其中mn),然后再使用Mid函数就能取得中间的数字。,Private Sub Command1_Click() Dim x As Integer, y As Integer Randomize x = Int(999 - 111 + 1) * Rnd + 111) y = Mid(x, 2, 1) Print “三位随机数是“ & x, “其中间数是“ & y End Sub,

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

当前位置:首页 > 其他


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