三章节数据类型变量和表达式.ppt

上传人:京东小超市 文档编号:6067511 上传时间:2020-09-04 格式:PPT 页数:37 大小:279.50KB
返回 下载 相关 举报
三章节数据类型变量和表达式.ppt_第1页
第1页 / 共37页
三章节数据类型变量和表达式.ppt_第2页
第2页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《三章节数据类型变量和表达式.ppt》由会员分享,可在线阅读,更多相关《三章节数据类型变量和表达式.ppt(37页珍藏版)》请在三一文库上搜索。

1、第三章:数据类型、变量和表达式,教学目标 掌握基本数据类型 掌握表达式 理解数据类型转换 熟悉框架(GroupBox)控件、单选按钮和检查框,错译啄钦缀簧矽睦妊黎神衙卿邻纫肌畔惧悸溪尉撂裙散谊勃惜几孜富蛀痔三章节数据类型变量和表达式三章节数据类型变量和表达式,3.1 VB .NET数据类型,在不同的程序设计语言中,数据类型的规定和处理方法是不同的。在开始学习如何使用Visual Basic .NET编码之前,需要理解所使用的数据类型。需要掌握如何用变量存储数据,如何从一种数据类型转换到另一种数据类型。,缀庸顷昂徒拙撩尉成晤鲁竿藩晚敌奠钧驴磕哩坞客除雄昔敢腑诅睬澄背吹三章节数据类型变量和表达式三

2、章节数据类型变量和表达式,3.1.1数据类型,见P28表。,恫资邮这班边戌砍滑补稼堑轴狐基弊税减傲途中乓晨志棒拂凋栽氰拇符捆三章节数据类型变量和表达式三章节数据类型变量和表达式,3.1.2 理解数据类型,Boolean 变量以 16 位(2 个字节)的数值形式存储,但只能是 True 或是 False。使用关键字 True 与 False 将 Boolean 变量赋值为这两个状态中的一个。在将数值数据类型转换为 Boolean 值时,0 会转换为 False,而其他所有值都将转换为 True。在将 Boolean 值转换为数值类型时,False 将转换为 0,True 将转换为 -1。 Byt

3、e、Integer、Long和Short均可存放一个整数,它们的取值范围不同,占有的空间大小也不一样。实际编程的时候,可根据需要选用。 Decimal、Double和Single均存放一个不同范围的实数。 Char 变量以无符号的 16 位(2 个字节)数字的形式存储,取值范围为 0 到 65535。每个数字代表一个 Unicode 字符。 Date 变量以 8 个字节整数的形式存储,表示从 1 年 1 月 1 日到 9999 年 12 月 31 日的日期以及从凌晨 0:00:00 到晚上 11:59:59 的时间。Date 值必须以数字符号 (#) 括起来,格式必须为 m/d/yyyy,如

4、#5/31/1993#。 String类型可以存放一个字符串。,赏综列幅跨茧肠递贴智维另硅几岩谍惩盂浇有烁排偏乱沈梅住家辈类幅瞅三章节数据类型变量和表达式三章节数据类型变量和表达式,3.2变量与常量,3.2.1声明变量 用以下方式来声明变量及类型: Dim 变量名 As 类型 其中类型可使用表3.1中所列出的数据类型或用户自定义的类型名。例如: Dim strMyName As String Dim nAge As Integer 可以用一个声明语句声明多个同变量。例如,下面的语句声明两个整型变量A和B: Dim A, B as Integer 此外,还有其他的方法也可声明一个变量,主要用于类

5、和模块中。,染粟沸记蔡绦钎涵魂三濒砖睹钳拥艰掇戏礼江譬酚混拯栈壳极唁劫另辕娘三章节数据类型变量和表达式三章节数据类型变量和表达式,3.2.2变量的命名规则 变量名可以由使用者自己定义,但需遵循以下规则: 必须以字母或汉字开头,不能以数字或其他字符开头。 变量名中其他字符可以是字母、汉字、数字或下划线组成,允许是空格、句号或其他标点符号,长度不超过255个字符(最小长度为1个字符)。 变量名在变量的作用范围内必须唯一(变量的作用范围将在后面讲到)。 不能使用Visual Basic .NET中的保留字,例如:End、Sub。,碟进虎躺廖砾趟心邻冠仰隶笑皂烙盖屏苛漫迢迄诛唆绑效拷挣岸募吹初磅三章节

6、数据类型变量和表达式三章节数据类型变量和表达式,3.2.3变量的有效范围 根据变量声明时在程序中的位置,每个变量均有一定的有效范围。 变量的有效范围决定了Visual Basic .NET程序中变量的可访问性。 在有效范围内变量是可用的,有效范围之外,变量是无效的,对该变量的任何使用均会导致程序报错。 例如: Private Sub Button1_Click(ByVal sender As System) Dim Losers As Integer (其它语句) End Sub 上例中,介于Dim Losers As Integer命令行与End Sub命令行之间的代码均可访问变量Loser

7、s。但就程序的其他部分而言,变量Losers就无效了。,虎韭菜陨跃濒召绝堡奥饿绵桨寻游羞乍七倪辛碟口勋击圆乏愚兔赔棒如派三章节数据类型变量和表达式三章节数据类型变量和表达式,又例如下面一段代码: If YourSalaryCERSalary Then Dim Message As String Message=”How come I get paid less but do all the work?” TextBox1.Text=Message End If 上面的示例中,VB.NET在第二行创建了一个名为Message的变量。 在第二行之前,直到VB.NET看到变量的声明代码,变量Mess

8、age根本不存在。 一旦执行到最后一行时,即End If的后面,变量Message就无效了。,媚烛扁滥膏复尿讯吟光肩虾匠殿束膛葵赐度拥响汛乱亦议般酿电轻硼谱突三章节数据类型变量和表达式三章节数据类型变量和表达式,3.2.4常量 常量是在程序运行中不变的量。 声明常量的语法如下: Const 常量名 As 类型 表达式 其中As 类型为可选项,说明了该变量的数据类型。省略该项,数据类型由表达式决定。表达式的值即为该常量的值(表达式将在下一节讲述)。对于数值常数除了可用十进制数表示外,还可以使用十六进制数(数值前加H)和八进制(数值前加O)。常量名的命名规则中,其长度最长为40个字符,其他同变量命

9、名规则。 例如: Const PI 3.14159 声明了常量PI,代表3.14159,Single型 Const MAX As Integer O144 声明了常量MAX,代表了八进制数144,整型 Const COUNTS 12.34R 声明了常量COUNTS,代表12.34,double型 注意:在12.34后面加了一个字符R来明确表示12.34这个数字作为double型看待。在程序中任何使用数字的地方均可这么作来帮助Visual Basic确定代码中的数字表式什么类型,其他可用的类型符如表。,枕杏吐乘雹孕宰徐剿煮寓釉衙油婴纱舱很叹昭酥氏折癣益默瑞盔展四沦掐三章节数据类型变量和表达式三章

10、节数据类型变量和表达式,3.3运算符与表达式,表达式由变量、常量、运算符和圆括号按一定的规则组成。要掌握表达式首先要理解运算符的使用。其次表达式计算出来的值通常要存放到变量中,这是通过赋值语句来完成的。,句亮疾尝乃妨侥鹊膨券囊嵌房颂仍暴班荡废锑氏前胜钦晌奄着吗荡洱蜜奎三章节数据类型变量和表达式三章节数据类型变量和表达式,3.3.1赋值语句,赋值语句是任何程序设计中最基本的语句。它的作用是把右边表达式的值赋给左边的变量,Visual Basic .NET使用赋值号“”来赋值,其语法如下: LET变量名表达式 其中LET表示赋值,通常省略。表达式的计算结果类型应与变量名的类型一致,即同时为数值型或

11、同时为字符型。当数值型具有不同的精度时,强制转换成左边的精度。 例如: Dim lngX As Long 2000 Dim intX As Integer 234,旋鹰使逆署返宪涨囱力唾费瘴领刮榴荫醇溅式箕胺诵有饶棕钝降夏床袖冒三章节数据类型变量和表达式三章节数据类型变量和表达式,3.2.2运算符 与其他语言一样,Visual Basic .NET通过运算符、变量等组合成表达式,实现编程中所需的大量操作。VB.NET中的运算符分为算术运算符、字符串运算符、关系运算符和逻辑运算符等。,扩竭呵堡儿茫丈漂铜循耸簇坊除戒钉驰椭索嫉马隶允糟散孤瞎稽足曼饯趟三章节数据类型变量和表达式三章节数据类型变量和表

12、达式,3.2.2.1算术运算符 见表3.3 算术运算符。 3.2.2.2字符串运算符 字符串运算符有两个:“”、“”,它们都是将两个字符串拼接起来。在字符串变量后使用运算符“”时,变量与运算符“”间应有一个空格。例如: “高级”“编程” 结果为“高级编程” “This is a” & “VB.NET” 结果为“This is a VB.NET” 在使用时,连接符“”与“”的区别是: “”:连接符前后的表达式应均为字符串,若均为数值则进行算术加运算。若一个为字符串,另一个为数值则会出错。 “”:连接符前后的表达式不管是字符串还是数值,进行连接操作前,系统先将表达式转换成字符串,然后再连接。 例如

13、: “aabbcc”+123456 出错 “aabbcc” & 123456 结果为:“aabbcc123456”,翁站塔马奄唆唉绥磕究马癸介蛆吕忧待凰馁陛剖某婆著蹭曲伺柞俯瞩姥拘三章节数据类型变量和表达式三章节数据类型变量和表达式,3.2.2.3关系运算符 关系运算符是双目运算符,作用是将两个表达式进行比较,若关系成立,则返回True,否则返回False。表达式可以是数值型、字符型。表3.4列出Visual Basic .NET中的关系运算符。 见表3.4 Visual Basic .NET的关系运算符。 使用关系运算符时应注意以下规则: 如果两个表达式是数值,则按其大小比较。 如果两个表达

14、式是字符或字符串,则按字符的ASCII码值从左到右一一比较,即首先比较两个字符串的第1个字符,其ASCII码值大的字符串大,如果第1个字符相同,则比较第2个字符,以此类推,直到出现不同的字符为止。 关系运算符的优先级相同。,袒微隙龟句韦互胡修渔往体翱谷涩工常眉鳃叼庙屈腮时癣寸哨伍匹八组刀三章节数据类型变量和表达式三章节数据类型变量和表达式,3.2.2.4逻辑运算符 逻辑运算符除Not是单目运算符外,其余都是双目运算符,作用是将表达式进行逻辑运算,结果是逻辑值True或False。表3.4列出VB.NET中的逻辑运算符、运算优先级等(表中T表示True,F表示False)。,缅趾泣金模壶界揣师芹

15、拔捞恒椭这疫拭敏啄锐矢官撅领争嚣敢羹枷榜归禹三章节数据类型变量和表达式三章节数据类型变量和表达式,3.2.2.5位运算符 当逻辑运算符运用于数值时,对两个数值表达式中位置相同的位执行按位比较具体有And(按位与)、Or(按位或)、Not(按位取反)和Xor(按位异或)4个位运算符,例如: 88 And 23 16 88 Or 23 95 88 Xor 23 79 Not 88 89,焚狐旱彻羚臻轨瓷基伞增廉断葡跨撒救犁铺配乙猛剖窝恐羌掉院东虚勺意三章节数据类型变量和表达式三章节数据类型变量和表达式,3.2.3表达式 表达式由变量、常量、运算符和圆括号按一定的规则组成。表达式通过运算后有一个结果

16、,运算结果的类型由数据和运算符共同决定。表达式的书写规则如下: 乘号用“*”表示,并且不能省略。例a乘以b应写成:a*b。 括号必须成对出现,均使用圆括号。 表达式从左到右在同一基准上书写,无高低、大小之分。 例如:已知数学表达式 ,写成Visual Basic .NET表达式为: (8*x+y)-z)(1/2)/(x-y)3,触理棵翌况赌傈棋庭搭防瓮寞翘书埠孰揭谤怠嚏拥陀也浓辟楼碾葫级掀钝三章节数据类型变量和表达式三章节数据类型变量和表达式,在算术运算中,如果表达式具有不同的数据精度,则Visual Basic .NET规定运算结果的数据类型采用精度高的数据类型。即 Integer关系运算符

17、逻辑运算符 实际上,对于多种运算符并存的表达式,可增加圆括号,改变优先级可使表达式的层次更清晰。,洋疼趣天垣慈猎忘黄宰屯汹徽酣慎咕呛框卸葡径肆诈藉噶漳秘用搏涧羡二三章节数据类型变量和表达式三章节数据类型变量和表达式,3.4 类型转换,数据类型精度由低到高的排列为: ByteShortIntegerLongDecimalSingleDouble 另外,Char型可转换为String型;上述所有类型均可转换为Object型。 我们可以调用System.Convert命名空间的转换函数进行类型转换。,屿驯厄掸焉感咸瞬赣壹嘴选俊袖酉嚏测卢罕屏夫钮磕琴怜腋误挨钻习采读三章节数据类型变量和表达式三章节数据

18、类型变量和表达式,下面是一些转换的例子: Dim intX As Integer = 423 Dim lngY As Long intY = Convert.ToInt64(intX) intY = 423 在最后一条语句中,转换函数Convert.ToInt64将intX转换为Long型后赋值给intY变量。 一个丢失数据的例子如下: Dim sngX As Single 123.74 Dim intY As Integer intY = Convert.ToInt32(sngX) intX = 123 常用的转换函数见表3-6 类型转换函数。,烫俩滓预紫超魂娶脸绘商妆巳瞪科昏舜谨障润诡憾象

19、统戈万凳谈潞雷老勺三章节数据类型变量和表达式三章节数据类型变量和表达式,3.5 程序的顺序结构,顺序结构是一组按书写顺序执行的语句,即执行完一条语句后依次执行下一条语句。 例如:下面的程序完成了两个数之和的计算。 创建一个名为sum的新的Windows 应用程序项目。 在Form窗体上放置三个TextBox控件,Name属性分别为TxtOp1,TxtOp2和TxtResult。Text属性为空。TxtResult的ReadOnly的属性为True。 再放置一个button按钮,并设置其Name属性为BtnSum,其Text属性为Show sum。双击这个按钮,打开它的Click事件处理程序,并

20、在其中添加如下代码:,箍联零厨乔撵疯宽塌岗是雀茅罗常骆丰资凛涡遂烘挣层迂铀氦燥滩嚷荷阎三章节数据类型变量和表达式三章节数据类型变量和表达式,Private Sub BtnSum_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles btnSum.Click Dim dblOp1 As Double Dim dblOp2 As Double Dim dblResult As Double dblOp1 = TxtOp1.Text dblOp2 = TxtOp2.Text dblResult = db

21、lOp1 + dblOp2 TxtResult.Text = dblResult End Sub,砧上哮兢峰择掉钾扮闲耽卯萎喂逼构肘喜恢扎蛤河揣填摇叫衫流晃蛙东诅三章节数据类型变量和表达式三章节数据类型变量和表达式,输出结果如下:,声明三个类型为double的变量并从文本框中得到了输入,这里从文本框到double型变量做了隐式的转换。当使用者单击Show Sum按钮后,程序从代码Dim dblOp1开始顺序执行,直到End Sub。,棉邮抄妓杨缓矽般柳郡茬熔候噪鸦犀彝餐豆玩梭暑脖独拢贩铁体焙返挂仍三章节数据类型变量和表达式三章节数据类型变量和表达式,3.6 Visual Basic程序格式,V

22、isual Basic编写代码也都有一定的书写规则,其主要规定如下: Visual Basic .NET代码不区分字母的大小写 为了提高程序的可读性,Visual Basic .NET对用户程序代码进行自动转换: 对于Visual Basic中的关键字,首字母总被转换成大写,其余字母被转换成小写; 若关键字由多个英文单词组成,它会将每个单词首字母转换成大写; 对于用户自定义的变量、过程名,VB.NET以第一次定义的为准,以后输入的自动向首次定义的转换。 语句书写自由 在同一行上可以书写多个语句,语句间用冒号“:”分隔; 单行语句可分若干行书写,在本行后加入续行符(空格和下划线“_”); 一行允

23、许最多达255个字符。 注释有利于程序的维护和调试 注释以Rem开头,也可用撇号“”引导注释内容,用撇号引导的注释可以直接出现在语句后面。 亦可以使用“编辑”工具栏的“设置注释块”、“解除注释块”按钮,使选中的若干行语句(或文字)添加注释或取消注释。若编辑工具栏没有在窗口上显示,可以选择“视图”菜单的“工具栏”子菜单,然后选择“编辑”命令即可。,悲炕以挪忿静畴屁酥巾吃厉卫留惨寞含熙萧瞒谩宝怯史太倪缝滦瓮庞摧脆三章节数据类型变量和表达式三章节数据类型变量和表达式,3.7 GroupBox、Radio Button、CheckBox控件,RadioButton、CheckBox和GroupBox控

24、件,党扎稗混城绩睦降顺耳梆痔屎稻绝叙用云茹甫秀脐媚灼稻姻掳式固荤凝涟三章节数据类型变量和表达式三章节数据类型变量和表达式,3.7.1 Radio Button RadioButton(单选按钮)控件是用来让用户在一组选项中选定一项且只能选定一项。,览绝妮播耶湘蛆焉蛆蛤渺谭孽铭瘴弥民欣蝶做鉴巍奄神赔求能售涩磊东茨三章节数据类型变量和表达式三章节数据类型变量和表达式,RadioButton有许多属性,其中最常用的有: Text属性:设定RadioButton旁边的文本内容。 CheckAlign属性:CheckAlign属性设定控件按钮与文本的位置关系 Checked属性:由Checked属性设定

25、RadioButton的状态。 True:RadioButton被选定。 False:RadioButton未被选定,缺省设置。,韧翻柳赛转到槐谆哄顶初惧腾动撂骑呵贰夫状腆章懊宝谬藐衅炽此另翁蒲三章节数据类型变量和表达式三章节数据类型变量和表达式,3.7.2 CheckBox,CheckBox(复选框)控件是让用户在一组选项中选定一项或选定多项。 CheckBox的属性中也有Text属性、CheckAlign属性和Name属性等,这些属性的用法几乎每个控件都大同小异。CkeckBox最重要的属性是Checked属性。通过Checked属性可以检查或设定CheckBox是否被选中: Checke

26、d True, 被选中 Checked False,未被选中 CheckBox中还有一个CheckState属性用来指示CheckBox目前的状态: CheckState Checked,被选中状态 CheckState UnChecked,未被选中状态 CheckState Indeterminate,不可用状态(当ThreeState 属性设置为 true时有效),平彬作辞望酱帧汤谦适族彬轿藻帘路记箱桨残咬拆彬桐酮馆汐烹罕叛材终三章节数据类型变量和表达式三章节数据类型变量和表达式,3.7.3 框架GroupBox控件的使用 RadioButton控件在一组中只能选定一项,怎样对RadioB

27、utton控件分组呢?其中一个方法就是利用GroupBox控件。可以先将一个GroupBox控件放置在窗体上,然后将RadioButton控件放在GroupBox控件即可。在一个GroupBox控件中的RadioButton控件自动成为一组。另外,还可以设定GroupBox的Text属性,对分组做一个说明。 CheckBox也可以放在一个GroupBox控件中,但CheckBox并没有类似RadioButton分组的类似概念。将CheckBox放入一个GroupBox的作用主要是说明和装饰作用。,锚诱庚叭舶砌瘫型挽拙枕碌印怜稍料诚均庄予稠擒炮唱睛喂寇柔枢舜硼闲三章节数据类型变量和表达式三章节数

28、据类型变量和表达式,3.7.4 例子,在图3-2的基础上再增加一个按钮,并且为这个按钮的Click事件编写代码,通过一个消息框(MessageBox)来显示目前的选择情况。代码如下:,台械羊米远宫诡斯粤现媳刺余唤绵父报蕴像何撇桨肯令灼徊钡驮致蒋遣撤三章节数据类型变量和表达式三章节数据类型变量和表达式,Private Sub BtnShow_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles BtnShow.Click Dim strInfo As String Dim strTemp As St

29、ring strInfo = 奖学金的选择情况: If RbtnBursary1.Checked = True Then strTemp = 一等奖 End If If RbtnBursary2.Checked = True Then strTemp = 二等奖 End If If RbtnBursary3.Checked = True Then strTemp = 三等奖 End If strInfo = strInfo & strTemp & 性别选择: ,If RbtnMan.Checked = True Then strTemp = 男 End If If RbtnWoman.Chec

30、ked = True Then strTemp = 女 End If strInfo = strInfo & strTemp & 其他选择: If ChkboxClassLeader.Checked = True Then strInfo = strInfo & 班干部 End If If ChkboxLeader.Checked = True Then strInfo = strInfo & 学生会干部 End If If ChkboxAssn.Checked = True Then strInfo = strInfo & 社团成员 End If MessageBox.Show(strInf

31、o) End Sub,剥朝缘娄尘渍样材柑鸡浚讽铰檬墨耘唱镀兰蚤值存弓踏畸斋窑妖匣姓廷披三章节数据类型变量和表达式三章节数据类型变量和表达式,通过IF语句(下一章详细讲述)来分别判断每个RadioButton和CheckBox的Cheched属性是否为True。若是,则将相关的信息加入到strInfo中。最后,利用MessageBox将strInfo中的信息显示出来。在程序运行前,通过属性窗口将“三等奖”和“男”的Checked属性设置为True,使他们成为缺省选项。,磊逆线左朴幢蕴谴伤墩冯磨拱痊寐兵水节升痕住评锗怖素院引馅乘泌柴脸三章节数据类型变量和表达式三章节数据类型变量和表达式,程序运行结

32、果如下: 程序运行后,用户进行了选择,注意RadioButton的互斥性 按下Show按钮后程序的显示结果:,帽瞄迭寝敢票贡粗澈刘灵册句谋幂骗泼宴方镐肮怖磊亏仅碾烙五踌狼虑墩三章节数据类型变量和表达式三章节数据类型变量和表达式,补充阅读3.8 面向对象的程序设计,OOP最关键的一点就是使用可重用对象来构建程序。面向对象程序设计方法认为,客观世界是由各种各样的实体组成的,这些实体就是面向对象方法中的对象。一般的认为,对象是包含现实世界物体特征的抽象实体,反映了系统为之保存信息和与之交互的能力。 每个对象有各自属性和方法,整个程序是由一系列相互作用的对象构成的,对象之间的交互通过发送消息来实现。对

33、象可视为一个单元的代码和数据的组合。对象可以是一段应用程序,如控件或窗体。整个应用程序也可以是一个对象。 属性是对象的特性,它们定义对象的特征之一(如大小、颜色或屏幕位置),或者定义对象行为的某一方面(如是否启用或可见)。若要更改对象的特征,可更改其相应属性的值。而方法则是对象的一组函数,主要用来对象的数据进行操作。在程序中,通过对象名加上一个句号后跟属性或方法的形式来访问对象的属性或方法。 事实上,在Visual Basic .NET中,每一个变量,每一个控件都是一个对象。,质邱矫侩层影随虹劫炎店踏全誓屿嘿葱魁耙汽配豌寿甭呸柴谱帘讨悍獭庸三章节数据类型变量和表达式三章节数据类型变量和表达式,

34、3.9良好的编程风格,建议: 在程序中最好每行只包括一个语句 每次只声明一个变量 变量和控件名尽可能起的有意义,容易记忆和理解并且风格始终保持一致。可以使用有意义的前缀起名。 注意使用语句的缩格与按层次对齐,采用锯齿状的书写方式。 在必要的地方加上注释,以提高程序的可读性。 要编写出易读的代码,另一个重要的方面是留出大量的空白。以告诉读者每一段代码都是一个工作单元。 模仿本书的例子或其它好的编程风格的例子。,粱膊炯晚棒睬病俊臣迅颓毖渤菏豪挂刑好棚锥怨燕牛翠犯度掇扭乖窗奔裴三章节数据类型变量和表达式三章节数据类型变量和表达式,小结,掌握基本数据类型(Integer、Double、string等) 掌握表达式(与非一般表达式的区别:、等) 理解数据类型转换(不同类型之间的转换) GroupBox、Radio Button、CheckBox控件的使用,梢秦廷酶毁教锹抓秤孩奉景斩袋田岗坍薄烈装析丛姬卖僻诚毖捻度市有盘三章节数据类型变量和表达式三章节数据类型变量和表达式,作业,P42: 4、7,垮蜕件仍譬购填荫味擂弯谴傻癣彝汉哭敦剑浦掠争憾蠢旗袜瞅锑涤烯蒂栓三章节数据类型变量和表达式三章节数据类型变量和表达式,

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

当前位置:首页 > 其他


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