vb程序教程设计课后答案

文章目录: 第一章 前言和软件安装 1.发展方向 1.1 学习方向 1.2 学习平台 1.3 计算机学习资源 1.4 记笔记 1.5 教程资源平台 1.6 代码管理保存 1.7 动漫游戏 2.教材大纲 3.简介 4.发展史 5.优缺点和应用场景 6.功能与特点 7.下载安装 第二章 窗体及其操作 1.新建工程和输入规范 2.熟悉开发环境(常用组件)

文章目录:

第一章 前言和软件安装

1.发展方向 

1.1 学习方向 

1.2 学习平台

1.3 计算机学习资源

1.4 记笔记

1.5 教程资源平台

1.6 代码管理保存

1.7 动漫游戏

2.教材大纲

3.简介

4.发展史

5.优缺点和应用场景

6.功能与特点

7.下载安装

第二章 窗体及其操作

1.新建工程和输入规范

2.熟悉开发环境(常用组件)

3.窗体设置

3.1 窗体添加移除

3.2 像素

3.3 窗体事件

3.4 窗体方法

3.5 移动窗体或控件

3.6 坐标设置

第三章 输入输出

1.打印——print 

2.数据输入——inputbox数据输入对话框

3.数据输出——msgbox消息框

4.打印机直接输出printer

5.窗体输出printform到打印机

第四章 语言基础

1.添加组件控件

2.属性

3.添加事件

4.颜色

5.数据类型

6.常量和变量

6.1 常量

6.2 变量

7.内部函数

8.运算符 

算术运算符

比较运算符(关系运算符)

逻辑运算符(布尔运算符)

字符串运算符

位运算符(了解)

运算符优先级

9.表达式

第五章 程序控制结构

1.流程图(了解) 

2.选择结构if select

if...then

if...then...else

if...then...elseif...then 

iif 

if语句的嵌套 

select case 

3.循环结构for while do

for...to 

for...each...in

while...wend

do...while...loop                do...loop...while

do...until...loop                 do...loop...until

4.其他结构控制语句

5.闲置循环与DoEvents语句(了解)

第六章 数组

1.定义 

2.静态数组和动态数组

3.数组的基本操作

4.控件数组

第七章 过程(sub子程序 function函数)

1.sub子程序过程

2.function函数过程

3.参数传送

4.optional可选参数与paramarray可变参数

第八章 菜单、工具栏与对话框设计

1.菜单编辑器 

2.对话框

第九章 多重窗体与MDI窗体程序设计

1.多窗口 

2.工程结构

第十章 文件操作

1.文件的打开open与关闭close

2.文件操作语句和函数

3.顺序文件(写print write、读input)

4.随机文件(写put、读get)

5.文件系统控件

6.文件基本操作

第十一章 VB数据库编程技术

1.相关概念 

2.数据控件

3.建立数据库并操作数据库

4.全代码操作(感兴趣了解)

第十二章 实战项目

“题库”小试牛刀

单项选择题(15题共60分,每题4分) 

填空题(5题共10分,每题2分) 

编程题(2题共30分,每题15分)


第一章 前言和软件安装

1.发展方向 

1.1 学习方向 

Web前端学习路线

Java学习路线 

嵌入式开发学习路线

如何知道企业的需求技术:去招聘软件看企业的要求

前端、后端、测试、运维、UI、网络安全、游戏开发.....

1.2 学习平台

程序员视频学习平台

1.3 计算机学习资源

计算机学习资源

1.4 记笔记

在线平台:程序员常用的博客平台 

私有(可分享):在线最好用的免费思维脑图、思维导图、笔记、流程图 

1.5 教程资源平台

IT计算机前后端相关专业——常用的学习教程及在线编程工具

1.6 代码管理保存

 常用开源软件开发平台和仓库(学生的福利)_代码仓库有哪些 开源

1.7 动漫游戏

AI聊天和AI绘画和AI视频

1.游戏策划:需要学习数字游戏宏观环境解析、数字游戏高级策划理论等

2.游戏原画:需要学习原画艺术基础、动物角色设定等

3.UI设计:需要学习UED概述、GUI设计基础等

4.场景制作:需要学习CG艺术基础、游戏场景道具等

5.角色制作:需要学习CG艺术基础、游戏道具等

6.特效制作:需要学习3Ds max游戏特效制作案例讲解等

7.游戏程序制作:需要学习游戏程序设计、算法与数据结构等



游戏引擎:Unity、Unreal Engine、Godot Engine.....

2.教材大纲

上课投屏演示 

第一章 VB入门(简介软件环境)

第二章 窗体及其操作

第三章 VB程序设计语言基础

第四章 数据输入输出

第五章 程序控制结构

第六章 VB常用标准控件

第七章 使用数组

第八章 过程(函数)

第九章 菜单、工具栏与对话框设计

第十章 多重窗体与MDI窗体程序设计

第十一章 文件操作

第十二章 VB数据库编程技术

3.简介

★Visual Basic简称为VB(视觉基础),是面向对象的程序设计语言

★是可视化的Basic,保留了Basic语言简单、易用的特点,又扩充了可视化设计工具

★可以轻松地设计出界面美观、使用方便、功能强大的应用程序

4.发展史

★VB语言的前身是1964年诞生的BASIC语言(基本BASIC) 

★以DOS为代表的字符界面操作系统下推出了各种版本的BASIC语言,如True BASIC、Quick BASIC、Turbo BASIC、QBASIC(结构化BASIC)

★以Windows为代表的图形界面操作系统下,微软公司相继推出了Visual Basic 1.0、2.0、直到6.0版(可视化BASIC) 

★为了满足网络应用程序的开发要求,微软公司又相继推出了Visual Basic.NET 2002、2005、2010等(网络化BASIC) 

5.优缺点和应用场景

优点
    1.易学易用:语法简单容易上手
    2.快速开发:可用快速创建图形画界面和数据访问应用程序
    3.面向对象:封装、继承、多态
    4.丰富的控件库:可用轻松创建各种图形化界面
    5.广泛应用:windows平台上的各种应用程序(办公软件 数据库应用程序 游戏等)


缺点
    1.性能较低,运行速度较慢:比其他编程语言
    2.不支持跨平台:只能运行在windows平台上面(限制了其应用范围)
    3.不适合大型项目:性能较低不适合开发大型项目
    4.代码可读性差:以为语法比较简单,不利于维护和升级
    5.缺乏严格的类型检查:容易出现类型错误


应用场景:
    1.windows桌面应用程序:VB最初就是作为windows桌面应用开发工具而出现的
            原因:VB可用直接调用windows api
    2.办公自动化:VB可以与office等办公软件深度集成,提供宏和自定义函数的支持,可以方便的实现自动化操作(自动化批量处理excel和word等)
    3.数据库应用快速开发:VB可以使用ADO来访问数据库
    4.web开发:asp就是基于VBScript脚本语言构建的

6.功能与特点

★可视化的界面设计工具
    设计界面的图形元素以“控件”工具的形式给出


★面向对象的程序设计方法
    采用“对象+消息”设计模式,将一个复杂问题分解为一个个对象


★事件驱动的编程机制
    程序的执行通过在对象上触发“事件”驱动运行


★结构化的程序设计语言
    编写事件过程代码仍然采用结构化程序设计方法

7.下载安装

这里软件安装可能会很慢因为是比较老的东西了 

找到SETUP.EXE鼠标右键管理员运行(不然可能报错哟!获取更高的权限)



安装如果出现卡顿和无响应
    1.等待(因为显示无响应可能是假死状态)
    2.可以查看任务管理器进程状态(ctrl+alt+delete)和电脑最近安装软件(Microsoft下面)是否有VB来解决
       如果安装了就可以结束任务,打开VB中文版软件就是
    3.重启电脑可能是查住了,重启可能进入下一步安装

Visual Basic 6.0(VB6.0)最详细安装教程                        点我直接获取软件 验证码6za8

报错

问题:vb Automation错误 定义的应用程序或对象错误

解决:将vb.exe右键属性,在兼容性栏,勾选以兼容模式运行[Windows XP (Service Pack 3)],以管理员方式运行即可解决

第二章 窗体及其操作

1.新建工程和输入规范

点击标准exe格式
设计VB应用程序的基本步骤如下:
    1.设计用户界面

    2.对象属性设置

    3.编写程序代码

    4.运行调试、改错、运行程序生成可执行文件   
        
    5.保存程序文件
        第一种:文件——>保存工程——>保存的路径(先保存窗体frm 再保存工程vbp)
        第二种:工程资源管理器中——>鼠标选中工程——>右键——>保存工程

    6.生成可执行程序
        exe(脱离vb环境):文件——>生成显示exe——>选中位置并命名

    7.打包:外接程序——>外接程序管理器——>打包和展开向导——>打包




VB代码输入规则
    1.VB代码不区分字母的大小写
        VB对程序代码进行自动转换:关键字、函数名、对象名、属性、方法等,首字母大写其余字母小写
        若关键字由多个单词组成,每个单词首字母大写。用户命名的标识符以首次定义为准

    2.语句书写自由
        一行上可以书写多句语句,语句间用冒号“:”分隔
        单行语句可分多行书写,在本行后加续行符:空格和下划线
            若一条语句在一行中写不完,可分成多行写,行尾加空格和下划线“ _”来进行连接

    3.注释(方便阅读,对程序的说明,不会被运行和执行)
        单引号':会显示绿色
        rem + 说明:放在新的一行,不能和代码同行

    4.注意缩进:方便查看

    5.后面没有结束的符号,但是有代码标记end

    6.标点符号应该为英文

    7.一条语句长度不应该超过1023个字符

    8.赋值
        对象.属性 = <表达式>
        目标操作符 = 源操作符
            [let]变量 = 值
            两边的类型必须相同

    9.对象命名规则
        对象名=前缀+自定义名称( cmd_B) 

    10.控制语句
        暂停语句:stop
        结束语句:end(可以关闭窗体)

2.熟悉开发环境(常用组件)

前端布局扩展

指针:数据指向

PictureBox:可以设置背景和插入图片

Label:标签

TextBox:文本框
    multiline:显示多行

Frame:框架

CommandButton:命令按钮
    default = true等价于回车键
    style=1按钮里面可以添加图片
    downpicture按钮按下显示图片

CheckBox:复选框

OptionButton:单选按钮

ComboBox:下拉组合框
    style
    list内容

ListBox:列表框
    list显示内容
    对象.text
    对象.additem 内容
    对象.clear
    对象.removeitem (me.对象.listindex)
    sorted排序

HScrollBar:滚动条(水平)
    Label1.Caption = "滚动条值为:" & HScroll1.Value

VScrollBar:滚动条(垂直)

Timer:时钟监听,定时器
    me.caption=time

DriveListBox:下拉磁盘(驱动器列表框、盘符列表控件)

DirListBox:当前磁盘盘符文件(文件夹列表控件)

FileListBox:文件列表框

Shape:形状
    BackStyle:
        0——透明的
        1——不透明的
    Shape:
        0——长方形        Rectangle
        1——正方形        Square
        2——椭圆          Oval
        3——圆            Circle
        4——圆角长方形    Rounded Rectangle
        5——圆角正方形    Rounded Square

Line:线

Image:图片
    loadpicture("C:\image\666.gif")

Data:数据

OLE:对象链接与嵌入

3.窗体设置

3.1 窗体添加移除

添加
    方法一:工程——>添加窗体
    方法二:在右侧工程中——>鼠标右键添加

移除
    方法一:工程——>移除
    方法二:在右侧工程中——>鼠标右键移除

3.2 像素

工具——>选项——>通用

1像素 = 15缇(和榜、英寸也有关系)

3.3 窗体事件

Click:单击
DblClick:双击

KeyDown:按下按键
KeyUp:松开按键
KeyPress:按下并松开按键

MouseDown:按下鼠标按键
MouseUp:释放鼠标按键
MouseMove:鼠标移动
    MousePointer:鼠标光标形状    0——15
    MouseIcon:鼠标形状

Load:载入
    me.image1.picture=loadpicture()
Unload:卸载

Activate:活动
Deactivate:非活动



DragDrop:拖放
DragOver:拖动
    dragmode:拖放的模式       0手动  1自动
    dragicon:移动对象的图标
    对象.drag:是否允许拖动    1是    2否

    me.image1.move x,y
    me.image1.picture=loadpicture("路径")
    
    me.image1.picture=nothing

GotFocus:获得焦点
    me.text1.setfous
LostFocus:失去焦点

Paint:绘画

3.4 窗体方法

显示:Show
隐藏:Hide
    对象名.Show
    对象名.AutoRedraw=true

设置焦点:SetFocus

清除:Cls

画圆:Circle

画线:Line

3.5 移动窗体或控件

对象名.Move 左[,上,宽,高]

3.6 坐标设置

返回下一次输出的位置
    CurrentX方法
    CurrentY方法


返回字符串的高度和宽度
    对象名.TextHeight(字符串)
    对象名.TextWidth(字符串)

第三章 输入输出

1.打印——print 

1.print
        [对象名].Print [表达式][,|;]
            逗号:标准输出格式(分区 输出)
            分号/空格:紧凑输出格式
        字符串和变量之间有连字符:Print "x=" & x
        空一行:print
    
        举例
            Print 111,222
            Print 111;222
            Print 111 222
            Print "a ="; 1
            print "a="&1
            Print a = 1


2.安装给出的格数输出Format:输出的前面没有空格
  format(数值表达式,格式字符串)
            #         数字,不前后补0        
                        print format(55.6789,"##.##")             55.68
            0         数字,在前后补0
                        print format(55.6789,"##.0")              55.7
            .         小数点
                          print format(12.345,"##.##")            保留两位小数
            ,        千位分隔符
                        print format(56789.40,"##,###.00")        56,789.40
            %         百分比
                        print format(0.001,"00.0%")               0.1%
            $         美元符号
            +、-      正负号
            E+、E-    指数符号
                         print format(55555555,"#.00E+00")        5.56E+07
 

3.方法
    Cls清除Print方法显示的文本
        对象名.Cls
    Move
        [对象.]Move 左边距离,上边距离,对象宽度,对象高度
    
4.空格
    Tab空格函数:将光标移到参数N指定的位置开始输出
        Tab(n)
            左边算
    Spc跳过n个空格
        Spc(n)
            之间来算
    Space$(n)返回n个空格
        可以参与运算

5.不换行显示的
    print "不换行";

2.数据输入——inputbox数据输入对话框

inputbox(prompt,[tiltle],[default],[xpos,ypos],[helpfile,context])
    prompt:字符串提示信息
    tiltle:标题
    default:默认信息
    xpos,ypos:坐标位置
    helpfile:帮助文件 
    context:帮助目录号

    举例
        Dim tmp As String
        tmp = InputBox("请输入信息", "输入", "我是默认信息", 100, 100)

3.数据输出——msgbox消息框

    msgbox(msg,[type],[title],[helpfile,context])
    msg:提示信息
    type:种类
        vbokcancel:确认或取消(默认是确定按钮)
        vbexclamation:警告图标提示
        vbquestion:问号图标提示
        vbyesnocancel:是 否 取消
    title:标题
    helpfile:帮助文件 
    context:帮助目录号

    返回值
        1    vbok    vbyes
        2    vbcancel
        3    终止

    举例
        Dim tmp As String
        tmp = MsgBox("你好", vbExclamation, "标题")


msgbox "信息"

4.打印机直接输出printer

结束语句:printer.enddoc
          end等价于esc

清除:对象.cls

页码:printer.page

换页:printer.newpage

换行:print chr(13)
     
回车+换行
    dim NL as string
    NL = chr(10) + chr(13)  
    Print NL  

5.窗体输出printform到打印机

在窗体上面显示,在把窗体上面的内容送到打印机去打印 

[窗体].printform

第四章 语言基础

1.添加组件控件

种类:
    1.内部控件(标准控件):左侧可用直接使用,不能够删除
        拖动、双击、复制
        按shift+方向键设置宽度高度
        按shift+ctrl+单击可以选择多个控件、画范围也可以选择多个
        按ctrl+方向键可设置移动方向

        对齐:选中多个对象——>鼠标放上面工具栏空白处——>鼠标单击右键——>窗体编辑器——>弹出编辑器点开下拉列表选择对齐方式

    2.ActiveX控件
        工程——>部件——>控件——>添加自己需要的

    3.可插入对象:在代码中创建或引入一个已存在的对象实例
        工程——>部件——>可插入对象——>添加自己需要的

2.属性

很多属性可以直接在对象图形化界面里面直接设置 

里面有很多属性:大家需要熟悉
    Name:名称

    Font:字体
        fontname = "宋体"    “黑体”    “幼圆”
        fontsize=16:字体大小
        fontbold=true:加粗
        fontitalic=true:斜体
        fontstrikethru=true:删除线
        fontunderline=true:下划线
        fonttransparent=true:透明字体

    Caption:标题
    
    Height:高
    Width:宽
    
    顶端:Top
    左边:Left

    Backcolor:颜色

    Picture:图像

    BackStyle:是否透明

    BorderStyle:窗体边框
        0无边框;1有边框
        Fixed Single:固定单边框(想要修改大小要设置属性 maxbutton minbutton为true)
        Sizeble:可调节边框
        Fixed Dialog:固定对话框
        Fixed   Toolwindows:工具窗口,不能改变尺寸
        Sizeble Toolwindows:工具窗口,能改变尺寸

    Visible:可见否
    Enable :可用否

    AutoSize:自动适应文本框大小
    WordWrap:自动换行(要设置显示的范围)
    passwordchar:*加密显示
    sellength:显示选中的长度

    Alignment:文本对齐
        0:Left左对齐
        1:Right右对齐
        2:Center文本居中 对齐

    MultiLine:多行显示

    ControlBox:控制框

    Icon:图标

    MousePointer:鼠标指针
    Moveable:可移动

    StartUpPosition:窗口启动位置
        0——手工
        1——所有者中心
        2——屏幕中心
    WindowState:窗口状态
        0——正常状态
        1——最小化窗口
        2——最大化窗口

    AutoRedraw:自动重画(如果要打印东西,一定要勾选上)

    换行
        print
        print vbcrlf

    setfocus设置焦点
    getfocus活得焦点
    lostfocus失去焦点

    time:时间    
    date:日期

3.添加事件

双击对象或组件可以弹出代码输入窗口:左侧显示的是添加的组件;右侧是方法(点击就会自动构建)

第一步:组件双击/右侧工程打开代码窗口

第二步:对象名(窗体/组件).属性
        操作那个就设置那个!

4.颜色

第一种:调色板


第二种:常用颜色​&H蓝色+绿色+红色&
    黑色:&H0&    
    白色:&H00FFFFFF&


第三种:对象浏览器里面有封装好的颜色可以直接调用:vbRed vbblue vbgreen

5.数据类型

                                                                                        基本数据类型
类  型关键字类型符前缀长  度取  值  范  围
字节型Bytebyt1个字节0~255
逻辑型Booleanbln2个字节

True        -1

False       0

整型Integer%int2个字节

-32768~32767

public kk%

=public kk as Integer

长整型Long&lng4个字节-2147483648~2147483647
单精度 浮点型Single!sng4个字节绝对值在1.401298*10-45~3.402823× 1038之间
对象型objectobj4个字节任何对象引用
双精度 浮点型Double#dbl8个字节绝对值在4.94065645841247×10-324~ 1.79769313486232×10-308之间
货币型Currency@cur8个字节-922337203685477.5808~ 922337203685477.5807
日期型Datedtm8个字节

100年1月1日~9999年12月31日

  Dim dt As Date
  dt = #9/1/2023 12:12:12 PM#
  Print dt

字符串型String$str2个字节

可存储字符串的长度取决于变量类型

dim a as string                a=liuxinlei        print a        liuxinlei

dim b as string * 5           b=liuxinlei        print b        liuxi

变体型Variantvnt可变

dim vt as variant

vt = 123

vt = "liuxilei"

vt = #9/1/2023 12:12:12 PM#

Byte	    字节型	    a,b,c,男,女


Boolean	    逻辑型	    是true  否false


Integer	    整型	    1,2,100,1000


Long	    长整型	    一百亿


Single	    单精度 	    1.1	1.22	1.333


Double	    双精度	    1.1111111111111111


Currency	货币型	    了解


object	    对象型	    万物皆可对象  工具箱	  form


Date	    日期型	    年月日时分秒


String	    字符串型	print ""	一连串信息


Variant    	变体型	    万能的类型

1.基本数据类型
    数值型
        整数
            整型    %    integer:占用2个字节    -32768到32767
            长整型  &    long   :占用4个字节    -2147483648到2147483647
        浮点数(符号+指数+尾数)
            单精度  !    E      :以4个字节(32位)存储,可精确到小数点后7位
            双精度  #    D      :以8个字节(64位)存储,可精确到小数点后15/16位
    字符串型        $
            变长    
            定长
    货币型          @    currency    存储空间8个字节
    日期时间:书写时用“#”括起来
    变体     variant存储所以数据类型:如果一个变量没有声明类型,那么默认就是变体类型
            字符变体:存储空间为原长度加22个字节
            数值变体:存储空间为16个字节

2.自定义数据类型:工程——>添加模块——>打开
    private/public Type 数据类型名
        数据元素名 as 类型
        ....
    End Type
    
    举例
            type stu
                stname as string *10
                num as integer
                age as integer
                addr as string *20
            end type

    最前面加上:option explicit(变量首先声明才可以使用)

    使用
        dim 取名 as 数据类型名
        取名.数据元素名 = 赋值
        
    

3.枚举数据类型
    public enum Day {
        SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
    }
    Day day = Day.SUNDAY;

6.常量和变量

6.1 常量

常量:值不会发生改变的量是对应的一块内存地址,不允许给常量进行赋值

表示:多个表达式之间用逗号“,”分开
    Const 常量名 = 表达式


类型划分
    系统内部常量:应用程序和空间来提供的
        视图——>对象浏览器

    自定义常量
        文字常量
            字符串常量:可以是双引号或回车以外的任意ASC11字符
            数值常量:整型、长整型、货币型、浮点数
        符号常量:用定义的符号来代替数值或字符串


范围划分
    局部常量:函数范围之内
    模块级常量:整个窗体(在模块开始的最前面声明)
    公用常量:所有的窗体,所有的函数都可以使用
        窗体——>添加——>添加模块

举例 

const pi as double = 3.1415926
me.command1.caption = pi



公用常量
    public const bool as boolean = false

6.2 变量

变量:程序运行过程中会发生改变的量,内存分配的一块命名空间

变量声明:工具——>选项——>勾选要求变量声明
          就会自动加上”option explicit“

命令规则
    只能由字母、数字和下划线组成
    长度不能超过255个字符
    第一个字符必须是英文字符
    不区分大小写
    不能使用保留字

表示(多个逗号分隔):Declare 变量名 as 类型
    Declare
        自动变量Dim:使用了之后会恢复默认值
        静态变量Static:在不退出的情况下,会保留原来的值,局部
        Public:共有的
        Private:私有的
        Redim:重新定义数组的大小


变量的作用域(作用范围)
            名称                     作用域         声明位置                声明语句
    局部变量(过程级变量):         过程            过程中                Dim/Static
        普通局部变量:开始到结束就会终止
            Dim a As Integer
            a = a + 1
            Print a
        静态局部变量:整个程序运行期间,可以叠加(不停叠加)
            static a As Integer
            a = a + 1
            Print a
    模块变量(模块级变量):         窗体/标准模块    模块的声明部分         Dim/Private
        工程——>添加模块——>打开
        窗体最上面加上:option explicit
    全局变量(全场变量/公用变量)  :整个应用程序     标准模块的声明部分     Public/Global
        工程——>添加模块——>打开
        窗体最上面加上:option explicit
    


模块
    窗体模块
        用户界面窗体
        具体代码:通用代码+窗体代码+窗体中控件代码
    标准模块:不属于具体的窗体或控件,存放一些公共的代码
        使用dim private定义
    类模块:即包含代码又包含数据

多个模块可以声明以下
    比如有module1 和module2,并且同时有变量a
    如果想使用module1中的a,必须声明,不然会报错
    Module1.a = 666

举例

局部
    Private Sub Form_Load()
        Dim i As Integer
        i = 100
    End Sub

    Private Sub Command1_Click()
        Print i
    End Sub


窗体模块
    Private j As Integer
    Private Sub Form_Load()
        Dim i As Integer
        j = 100
    End Sub

    Private Sub Command1_Click()
        Print j
    End Sub


全局
    Option Explicit
    Public k As Integer

    Private Sub Form_Load()
        k = 100
    End Sub

    Private Sub Command1_Click()    
        Print k
    End Sub

7.内部函数

ASCII码

C语言——ASCII 码表及分类

编码
    UniCode大字符编码:1个英文和一个汉字均占用2个字节,2个字节为一个字符
    ANSI编码:1个英文占用1个字节,而一个汉字占用2个字节
    

ASCII码转换
    Asc(s):返回字符串首字母的ASCII码值
    Chr(n):返回N对应的字符

函数声明

工具——>选项——>勾选要求变量声明——>确定——>退出软件再进入

内部函数

Vb常用内部函数

类型
    数学函数
        sin(x)    cos(x)    tan(x)    cot(x)
        atn(x)反正切    abs(x)返回一个绝对值
        sgn(x)符号判断判断正负    sqr(x)开平方根 
        exp(x)指数   
        isnumeric(x)检测变量是否为数字或数字字符串
    转换函数
        取整函数:视图——>立即窗口(可以直接输入函数和指令:多个用冒号":"分隔)
            Int(x):返回不大于自变量X的最大整数                    (小于等于_向下取整)
                cint(x):四舍五入
                ccur(x):把x的值转换为货币类型值
                cdbl(x):双精度
                csng(x):单精度
                clng(x):长整型
                cvar(x):变体
            Fix(x):返回值为自变量X的整数部分                      (向下取整)
            hex(x):十进制转十六进制
            oct(x):十进制转换为八进制
            Asc("x"):把字符转换为ascll码
            chr(x):把数字转换成字符
            str(x):把值转换成字符串
    字符串函数
        转换字符串格式:StrConv
            Dim a As String
            a = StrConv("123", 1)
            Print a
        求字符串长度:Len(s)
            Dim a As String
            a = "wenxuan"
            Print (Len(a))
        查看占用字节:LenB
            Dim n As Integer
            n = LenB("Hello world")
            Print n
        删除空白字符串
            删除左侧:LTrim $(s)
                Dim a As String
                a = " wenxuan"
                Print (Len(LTrim(a)))
            删除右侧:RTrim $(s)
            删除两边:Trim $(s)
        字符串截图函数
            左侧N个字符Left(s,n)
                Dim a As String
                a = "123456789"
                Print Left(a, 5)
            右侧N个字符Right(s,n)
            中间N个字符Mid(s,开始位置,n个)
        String    生成由N个同一字符组成的字符串
              print string(10,"*")
        Space     生成由N个空格组成的字符串
              print space(5)
        大小写转换
            小转大:UCase(s)
                Dim a As String
                a = "aBCDef"
                Print UCase(a)
            大转小:Lcase(s)
        查找匹配字符串:返回首个字符的位置,是区分大小写的
            在s1中查找s2:InStr(开始查找的位置可以不写,s1,s2,[类型])
                类型
                    为0:区分大小写
                    为1:不区分大小写
                    为2:基于数据库中的信息进行比较
            查找成功,返回第一个字符所在的位置
            查找失败,返回0

                Dim a As String
                a = "aBCDef"
                Print InStr(a, "BC")
        插入字符串语句
            mid(字符串,位置,[插入字符个数可以省略]) = "(插入的内容)"
            插入的地方要留好位置,不然会被替换

            Dim a As String
            a = "aBCDef     "
            Mid(a, 7) = "(GH)"
            Print a
    时间/日期函数
        now()       day(now())    weekday("2023-9-1")    
        month(x)    year(x)       hour(now)                Minute(Now)    second(x) 

        Print Now()    
        Print Year(Now)   
    随机函数
        rnd()
        随机种子randomize

        Randomize
        Print Rnd * 100 + 1
    shell函数执行操作系统的命令行命令
        Dim RetVal
        RetVal = Shell("calc.exe", 1)
        
        Dim val
        val =shell("c\program files\vb6.exe",1)
       


一般格式
    函数名 ([参数1,参数2,参数3])

8.运算符 

算术运算符

运  算运 算 符表达式示例
^A ^ 2
取负-- A
乘法*A * B
浮点除法/A / B
整数除法\A \ B
取模/取余ModA Mod B
加法+A + B
减法-A - B

    Print 3 ^ 3
    
    Print -3
    Print 3
    
    Print 3 * 4
    Print 12.3 / 3
    Print 12.3 \ 3
    
    Print 15 Mod 4
    
    Print 1 + 3
    Print 3 - 1

比较运算符(关系运算符)

返回true和false
运算符测试关系表达式例子
=相等

A=B

Print 3 = 5
Print 3 = 3

<>或><不等

A<>B   

Print 3 <> 5
Print 3 <> 5    '><

<小于

A<B

Print 3 < 1

>大于

A>B

Print 3 > 5

<=小于等于

A<=B

Print 3 <= 3

>=大于等于

A>=B

Print 3 >= 3

Like比较样式Dim a As String
a = "aBBBa" Like "a*a"
Print a
Is比较对象变量 Private Sub Command1_Click()
    Dim a As Object
    Set a = Me
    MsgBox "a 是按钮引用 = " & (a Is Command1)
    MsgBox "a 是窗体引用 = " & (a Is Form1)
    Set a = Nothing
    MsgBox "a 是“空对象” = " & (a Is Nothing)
End Sub

逻辑运算符(布尔运算符)

返回true和false
运算运算符说明
Not

取反

Print Not (1 < 2)

And

两结果都为真即为真,否则为假

Print True And True

Or或        

满足一个结果为真即为真

x=1 < 2 Or 3 > 6    

Xor异或

两结果不同为真

x=1 < 2 Xor 3 > 6    

x=1 < 2 Xor 3 < 6    

Eqv等价

两结果相同为真

x=1 < 2 Eqv 3 > 6    

Imp蕴含

真Imp假 = 假;其他为真

真里面有假

x=1 < 2 Imp 3 > 6

Private Sub Form_Load()
    Print 1 = 3
    Print Not (1 = 3)
    Print   '两个都为true就为true
    Print 1 = 3 And 3 > 1   'false true
    Print 5 > 2 And 3 < 1   'true  false
    Print 5 > 7 And 3 < 1   'fasle fasle
    Print 5 > 2 And 3 < 7   'true  true
    Print   '一个都为true就为true
    Print 1 = 3 Or 3 > 1   'false true
    Print 5 > 2 Or 3 < 1   'true  false
    Print 5 > 7 Or 3 < 1   'false false
    Print 5 > 2 Or 3 < 7   'true  true
    Print   '两个都一样就为false
    Print 1 = 3 Xor 3 > 1   'false true
    Print 5 > 2 Xor 3 < 1   'true  false
    Print 5 > 7 Xor 3 < 1   'false false
    Print 5 > 2 Xor 3 < 7   'true  true
    Print   '两个都一样就为true
    Print 1 = 3 Eqv 3 > 1   'false true
    Print 5 > 2 Eqv 3 < 1   'true  false
    Print 5 > 7 Eqv 3 < 1   'false false
    Print 5 > 2 Eqv 3 < 7   'true  true
    Print   '第一个为true,第二个为false就为false
    Print 1 = 3 Imp 3 > 1   'false true
    Print 5 > 2 Imp 3 < 1   'true  false
    Print 5 > 7 Imp 3 < 1   'false false
    Print 5 > 2 Imp 3 < 7   'true  true
End Sub

字符串运算符

                                                                                              连接两个字符串
+print "100" + 100                200
&print "ABC" & 100                ABC100

位运算符(了解)

&两个位都为1时,结果才为1
|两个位都为0时,结果才为0
^异或两个位相同为0,相异为1
~取反0变1,1变0
<<左移各二进位全部左移若干位,高位丢弃,低位补0
>>右移各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)

A = 60 而 B = 13


A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A  = 1100 0011
A << 2 结果为:240, 也就是:1111 0000
A >> 2 结果为:15 , 也就是:0000 1111

运算符优先级

                                                                                        算术运算符的优先级

                                                函数运算——>算术运算——>关系/比较运算——>逻辑/布尔运算——>位运算
运算符意  义
sqr........函数运算
( )括号
++-- 等一元运算符
^幂(乘方)
* , /乘,浮点数除
\整除
Mod取余
+ , -加,减
 ><==!=>=<= 等比较运算符
 &&(逻辑与)、||(逻辑或)、!(逻辑非)等逻辑运算符

 &(按位与)、|(按位或)、^(按位异或)、

&#126;(按位非)、<<(左移)、>>(带符号右移)等

位运算符
 ?:三元运算符
=+=-=*=/=、等赋值运算符

9.表达式

算术表达式
    n = 1+2


字符串表达式
    str1 = "liu" + "xinlei"


逻辑表达式
    a = not true

关系表达式
    a = 2>3


规则
    1.乘除必须写
    2.没有大括号,只有小括号
    3.最好一条语句一行

第五章 程序控制结构

1.流程图(了解) 

                                                                                                        流程图
 图形符号名  称含  义
起止框表示一个算法的开始和结束
输入、输出框表示数据的输入和输出操作。框中给出输入或输出的数据内容
处理框表示数据的处理操作。框中给出所进行的处理
判断框

表示判断操作,具有两个出口。框中给出判断条件,

若条件成立,则在出口处标注“是”或“Y”

否则,则标注“否”或“N”

特定过程表示一个特定的过程,例如函数
流程线表示程序的处理流向,用来连接各个图形符号
​​​​​​

2.选择结构if select

if...then

if...then语句
    if <表达式> then
        [语句组]
    end if

举例
    Dim i As Integer
    i = 80
    If i > 60 Then
        Print ("你是老年人")
    End If

if...then...else

if...then...else语句
    if <表达式> then
        [语句组1]
    else
        [语句组2]
    end if


举例
    Dim j As Integer
    j = 20
    If j >= 65 Then
        Print ("你可以退休了")
    Else
        Print ("你不能退休还要继续工作!")
    End If


例子:猜数字游戏
    Dim a As Variant
    a = InputBox("请输入一个数:")
    If a = Text1.Text Then
        MsgBox ("恭喜你,猜对了!")
    Else
        MsgBox ("抱歉,猜错了!")
    End If


例子:切换颜色
    Private Sub Command1_Click()
        Dim color, i As Variant

        If Form1.BackColor = vbRed Then
            Form1.BackColor = vbGreen
        ElseIf Form1.BackColor = vbGreen Then
            Form1.BackColor = vbBlue
        ElseIf Form1.BackColor = vbBlue Then
            Form1.BackColor = vbRed
        End If
    End Sub

    Private Sub Form_Load()
        Form1.BackColor = vbRed
    End Sub

if...then...elseif...then 

if...then...elseif语句
    if <表达式1> then
        [语句组1]
    elseif <表达式2> then
        [语句组2]
    elseif <表达式3> then
        [语句组3]
    ...
    else
        [语句组]
    end if


举例
    Dim k As Single
    k = 98
    If 90 <= k Then
        Print ("你的成绩 优秀")
    ElseIf 80 <= k Then
        Print ("你的成绩 良好")
    ElseIf 70 <= k Then
        Print ("你的成绩 还行")
    ElseIf 60 <= k Then
        Print ("你的成绩 属于及格范围")
    Else
        Print ("你的成绩 不及格")
    End If

iif 

iif函数
    iif(<表达式>,<值或表达式1>,<值或表达式2>)
                    真            假
    和三元表达式和if...then...else语句等价


举例
    Dim a As String
    a = IIf(3 > 5, "为真", "为假")
    Print a

举例
    Dim m As Integer
    Dim n As String
    m = 20
    n = IIf(m >= 65, "你可以退休了", "你不能退休还要继续工作!")
    Print n

if语句的嵌套 

例子1 

Private Sub Form_Load()
    'if then
        'if then elseif else
    'else
        'if then elseif else

    Dim sex As String       '性别
    sex = "男"
    Dim work As Integer     '多少岁
    work = "69"
    
    If sex = "男" Then
        Print ("男性的退休年龄为65岁")
        If work > 100 Then
            Print ("男性的退休金为 10000元")
        ElseIf work >= 90 Then
            Print ("男性的退休金为 9000元")
        ElseIf work >= 80 Then
            Print ("男性的退休金为 8000元")
        ElseIf work >= 70 Then
            Print ("男性的退休金为 7000元")
        Else
            Print ("男性的退休金为 6000元")
        End If
    Else
        Print ("女性的退休年龄为60岁")
                Print ("女性的退休年龄为65岁")
        If work > 100 Then
            Print ("女性的退休金为 11000元")
        ElseIf work >= 90 Then
            Print ("女性的退休金为 9100元")
        ElseIf work >= 80 Then
            Print ("女性的退休金为 8100元")
        ElseIf work >= 70 Then
            Print ("女性的退休金为 7100元")
        Else
            Print ("女性的退休金为 6100元")
        End If
    End If
    
End Sub

例子2 

一元二次方程
ax*x+bx+c=0
        val()字符变成数字
        a=0          不是二次方程
        b^2-4ac=0    有两个相等的实根
        b^2-4ac>0    有两个不相等的实根
        b^2-4ac<0    有两个复数根
        [-b ± sqr(b^2-4ac)]/2a
        实部p = -b / (2 * a)
        虚部q = Sqr(Abs(d)) / (2 * a)

    
Private Sub Form_Load()
 Dim a, b, c, d, e, f As Double
        Dim tmp1, tmp2, p, q As Double
    
        a = Val(InputBox("a"))
        b = Val(InputBox("b"))
        c = Val(InputBox("c"))
    
        d = b ^ 2 - 4 * a * c
        
        tmp1 = -b + Sqr(d)
        tmp2 = -b - Sqr(d)
        
        e = tmp1 / (2 * a)
        f = tmp2 / (2 * a)
 
    
        If a = 0 Then
  
            Print "不是二次方程"
        Else
              
            If d = 0 Then
                Print "有两个相等的实根" & f
            ElseIf d > 0 Then
                Print "有两个不相等的实根"
                Print e; ";"; f
            ElseIf d < 0 Then
            
                q = Sqr(Abs(d)) / (2 * a)
            
                Print "有两个复数根"
                Print p & " + "; q & "i"
                Print p & " - "; q & "i"
            End If
        End If
    
End Sub

 例子3

’嵌套:长辈年龄不同  给不同年龄段小辈  发不同的红包

Private Sub Form_Load()
    dim sex as string
    sex = "女"      '性别
    dim age as integer
    age = 35        '长辈年龄
    dim man as integer
    man = 18        '小辈年龄

    If sex = "男" Then
        Print ("你是男生!")
        If age >= 80 Then
            Print ("你是祖祖辈的")
            If man >= 25 Then
                Print ("你的红包为520元")
            ElseIf man >= 20 Then
                Print ("你的红包为1200元")
            ElseIf man >= 15 Then
                Print ("你的红包为1700元")
            ElseIf man >= 10 Then
                Print ("你的红包为2200元")
            ElseIf man >= 5 Then
                Print ("你的红包为2700元")
            Else
                Print ("你的红包为3200元")
            End If
        ElseIf age >= 50 Then
            Print ("你是爷爷辈的")
            If man >= 25 Then
                Print ("你的红包为510元")
            ElseIf man >= 20 Then
                Print ("你的红包为1100元")
            ElseIf man >= 15 Then
                Print ("你的红包为1600元")
            ElseIf man >= 10 Then
                Print ("你的红包为2100元")
            ElseIf man >= 5 Then
                Print ("你的红包为2600元")
            Else
                Print ("你的红包为3100元")
            End If
        ElseIf age >= 30 Then
            Print ("你是叔叔辈的")
            If man >= 25 Then
                Print ("你的红包为500元")
            ElseIf man >= 20 Then
                Print ("你的红包为1000元")
            ElseIf man >= 15 Then
                Print ("你的红包为1500元")
            ElseIf man >= 10 Then
                Print ("你的红包为2000元")
            ElseIf man >= 5 Then
                Print ("你的红包为2500元")
            Else
                Print ("你的红包为3000元")
            End If
        Else
            Print ("你是小辈,可以不发红包")
        End If
    Else
        Print ("你是女生!")
        If age >= 80 Then
            Print ("你是祖祖辈的")
            If man >= 25 Then
                Print ("你的红包为520元")
            ElseIf man >= 20 Then
                Print ("你的红包为1200元")
            ElseIf man >= 15 Then
                Print ("你的红包为1700元")
            ElseIf man >= 10 Then
                Print ("你的红包为2200元")
            ElseIf man >= 5 Then
                Print ("你的红包为2700元")
            Else
                Print ("你的红包为3200元")
            End If
        ElseIf age >= 50 Then
            Print ("你是奶奶辈的")
            If man >= 25 Then
                Print ("你的红包为510元")
            ElseIf man >= 20 Then
                Print ("你的红包为1100元")
            ElseIf man >= 15 Then
                Print ("你的红包为1600元")
            ElseIf man >= 10 Then
                Print ("你的红包为2100元")
            ElseIf man >= 5 Then
                Print ("你的红包为2600元")
            Else
                Print ("你的红包为3100元")
            End If
        ElseIf age >= 30 Then
            Print ("你是阿姨辈的")
            If man >= 25 Then
                Print ("你的红包为500元")
            ElseIf man >= 20 Then
                Print ("你的红包为1000元")
            ElseIf man >= 15 Then
                Print ("你的红包为1500元")
            ElseIf man >= 10 Then
                Print ("你的红包为2000元")
            ElseIf man >= 5 Then
                Print ("你的红包为2500元")
            Else
                Print ("你的红包为3000元")
            End If
        Else
            Print ("你是小辈,可以不发红包")
        End If
    End If
End Sub

例子4

Private Sub Form_Load()
    '根据不同的年份,不同的省份,确定不同的医保缴纳费用
    yearnum = "2021" '今年的年份
    adr = "重庆市" '你的省份

    If adr = "四川省" Then
        Print ("你是四川人")
        If yearnum = "2023" Then
            Print ("你2023年应该缴纳国家医保费用为:380元")
        ElseIf yearnum = "2022" Then
            Print ("你2022年应该缴纳国家医保费用为:350元")
        ElseIf yearnum = "2021" Then
            Print ("你2023年应该缴纳国家医保费用为:320元")
        Else
            Print ("你应该缴纳国家医保费用为:200元")
        End If
    ElseIf adr = "北京" Then
        Print ("你是北京人")
        If yearnum = "2023" Then
            Print ("你2023年应该缴纳国家医保费用为:480元")
        ElseIf yearnum = "2022" Then
            Print ("你2022年应该缴纳国家医保费用为:450元")
        ElseIf yearnum = "2021" Then
            Print ("你2023年应该缴纳国家医保费用为:420元")
        Else
            Print ("你应该缴纳国家医保费用为:300元")
        End If
    ElseIf adr = "重庆市" Then
        Print ("你是重庆人")
        If yearnum = "2023" Then
            Print ("你2023年应该缴纳国家医保费用为:580元")
        ElseIf yearnum = "2022" Then
            Print ("你2022年应该缴纳国家医保费用为:550元")
        ElseIf yearnum = "2021" Then
            Print ("你2023年应该缴纳国家医保费用为:520元")
        Else
            Print ("你应该缴纳国家医保费用为:500元")
        End If
    Else
        Print ("请询问本地医保局!")
    End If
End Sub

例子5

Private Sub Form_Load()
    num = "N"                 '车牌号
    jingdian = "竹海"         '景点
    
    If num = "M" Then
        Print ("你是老家资阳的")
        If jingdian = "半月山大佛" Then
            Print ("这个景点在雁江区")
        ElseIf jingdian = "安岳石刻" Then
            Print ("这个景点在安岳县")
        Else
            Print ("请询问当地人")
        End If
    ElseIf num = "P" Then
        Print ("你是老家南充的")
        If jingdian = "西华师范大学" Then
            Print ("这个景点在顺庆区")
        ElseIf jingdian = "南充职业技术学院" Then
            Print ("这个景点在高坪区")
        Else
            Print ("请询问当地人")
        End If
    ElseIf num = "A" Then
        Print ("你是老家成都的")
        If jingdian = "青城山" Then
            Print ("这个景点在都江堰")
        ElseIf jingdian = "西岭雪山" Then
            Print ("这个景点在大邑县")
        ElseIf jingdian = "四川大学" Then
            Print ("这个景点在武侯区")
        Else
            Print ("请询问当地人")
        End If
    ElseIf num = "N" Then
        Print ("你是老家宜宾的")
        If jingdian = "石海" Then
            Print ("这个景点在兴文县")
        ElseIf jingdian = "竹海" Then
            Print ("这个景点在翠屏区")
        Else
            Print ("请询问当地人")
        End If
    Else
        Print ("你是其他地方的人!")
    End If
End Sub

例子6

Private Sub Form_Load()
    sex = "女"
    play = "妲己"
    If sex = "男" Then
        Print ("你是男生")
        If play = "鲁班" Then
            Print ("你玩的是射手")
        ElseIf play = "李白" Then
            Print ("你玩的打野")
        ElseIf play = "亚瑟" Then
            Print ("你玩的战士")
        Else
            Print ("请查看英雄说明!")
        End If
    Else
        Print ("你是女生")
        If play = "妲己" Then
            Print ("你玩的是中路")
        ElseIf play = "花木兰" Then
            Print ("你玩的打野")
        ElseIf play = "虞姬" Then
            Print ("你玩的是射手")
        Else
            Print ("请查看英雄说明!")
        End If
    End If
End Sub

select case 

select case语句
    select case <表达式>
        [case<值1>]                    case is<=100        case 90 to 100
            [<语句组1>]
        [case<值2>]
            [<语句组2>]
        ...
        [case<值n>]
            [<语句组n>]
        [case else]
            [<语句组>]
    end select




    Dim num As Integer
    num = Val(InputBox("请输入班级号:"))
    
    Select Case num
        Case 1
            Print "计应1班"
        Case 2
            Print "计应2班"
        Case 3
            Print "计应3班"
        Case 4
            Print "计应4班"
        Case 5
            Print "计应5班"
        Case 6
            Print "计应6班"
        Case Else
            Print "动漫游戏班"
    End Select

3.循环结构for while do

for...to 

for...to语句
    for <变量>=<初始开始值> to <结束的值> [step<步长>]
         [语句组]
         [exit for]
    next [变量]



例子1
       Dim i, a As Integer
       a = 10

       For i = 0 To a Step 2
          Print i
          MsgBox ("执行过程 : " & i)
       Next


例子2
Private Sub Form_Load()
    For i = 1 To 9 Step 1
    Print
        For j = 1 To i Step 1
            Print i & "*" & j & "="; (i * j) & "  ";
        Next j
    Next i
End Sub


例子3
Private Sub Form_Load()
    For i = 9 To 1 Step -1
    Print
        For j = 1 To i Step 1
            Print i & "*" & j & "="; (i * j) & "  ";
        Next j
    Next i
End Sub


例子4
Private Sub Form_Load()
    'i是公鸡(5元/只)    j是母鸡(3元/只)     k是小鸡(3只1元)
    '100元  100只鸡
    For i = 1 To 20 Step 1
    Print
        For j = 1 To 33 Step 1
            For k = 3 To 300 Step 3
                'a鸡的个数
                a = i + j + k
                'b花的钱数
                b = i * 5 + j * 3 + k / 3
                If a = 100 And b = 100 Then
                    Print i; " "; j; " "; k
                End If
            Next k
        Next j
    Next i
End Sub

九九乘法表

Private Sub Form_Load()
    '定义变量
    Dim i, j As Integer
    '行
    For i = 1 To 9 Step 1
    Print   '这个print是用来换行的
        '列:列数=行数
        For j = 1 To i Step 1        '这里的step 1可以省略
            '打印输出
            '下面两种方法任选其一
                'Print i & "*" & j & "="; (i * j) & "  ";
                Print i; "*"; j; "="; (i * j); "  ";
        Next j  '这个j可以省略
    Next i      '这个i可以省略
End Sub

直角三角形星号图案(六行六列)

Option Explicit     '这个可以省略

Private Sub Form_Load()
    Dim i, j As Integer
    
    '下面的Step 1可以省略
    For i = 1 To 6 Step 1
    Print   '用来换行 不能省略
        For j = 1 To i Step 1
            Print (" * ");
        Next j      '这个j可以省略
    Next i          '这个i可以省略
End Sub

打印金字塔

Option Explicit

Private Sub Form_Load()
    Dim rows, i, j As Integer
    rows = 5

    '行
    For i = 1 To rows
    Print
    Print
        '列:从左往右打印
        
        ' 打印空格
        For j = rows - i To 0 Step -1
            Print ("   ");
        Next

        ' 打印星号
        For j = 1 To (2 * i - 1)
            Print (" * ");
        Next

    Next
End Sub

for...each...in

for each...in语句
    for each <变量> in [数组或集合]
         [语句组]
         [exit for]
    next [变量]

    举例
        Dim fruitnames, fruits, x As Variant
        fruits = Array("苹果", "橙子", "樱桃")
   
        For Each x In fruits
            print x
        Next

while...wend

while...wend循环
    while <表达式>
        [语句组]
    wend

    举例
        Dim Counter:
        Counter = 10

        While Counter < 15
            Counter = Counter + 1
            Print Counter
        Wend

do...while...loop                do...loop...while

while型 do...loop语句
    do  [while<表达式>]
        [语句组]
        [exit do]
    loop

        举例
            Dim i As Integer
            Do While i < 3
                i = i + 1
                Print i
            Loop



    do 
         [语句组]
         [exit do]
    loop [while<表达式>]

do...until...loop                 do...loop...until

until型 do...loop语句
    do  [until<表达式>]
        [语句组]
        [exit do]
    loop



    do 
         [语句组]
         [exit do]
    loop [until<表达式>]



例子
    Dim a As Integer
    a = 1
    Do Until a > 3
        a = a + 1
        Print a
    Loop

4.其他结构控制语句

goto语句
    goto <行号|行标签>

    举例
        goto d
        print "aaaa"
        d:
        print "dddd"



exit语句
    exit for
    exit do
    exit sub过程
    exit function
    exit property声明属性的名称和用于存储和检索属性值的属性过程



end语句
    结束程序



with语句:简化对同一对象的多次引用
    with <对象>
         [<语句组>]
    end with

    举例
        with form1
            .caption = "666"
            .width = 111
            .height = 222
            .autoredraw = true
        end with

5.闲置循环与DoEvents语句(了解)

doevents语句:在程序中执行时,让操作系统处理其他事件
    Dim i As Integer
    For i = 1 To 1000000
        ' 执行一些操作...
        ' 在这里插入 DoEvents 以允许其他事件发生
        DoEvents
        ' 继续执行其他操作...
    Next i
闲置循环
    应用程序处于闲置状态,用一个循环执行其他的操作
    但是会占用全部的CPU时间,不允许再来执行其他的事件过程,使系统处于无线循环中,没有任何反应


DoEvents语句
    特点
        可以把控制权交给周围的环境使用,然后再回到原来的语句继续执行,可以做其他的操作
        可作为语句 也可作为函数:但是效果是一样的

    语法
        函数:返回一个窗体号    
            x=DoEvents()
        语句    
            DoEvents

    举例
        dim i,j as long
        for i=1 to 2000
            doevents

            for j=1 to 1000
            next j

            cls
            print i
        next i

第六章 数组

1.定义 

VB数组里面里面的内容类型可以不同

默认下标是0开始
    想要1开始:option base 1

默认数据类型是variant
s(n1,n2,n3....) Integer


数组定义
    第一种:Dim 私有数组名(n1,n2,n3....) as 类型  
        Dim name(1, 2, 3, 4) As Integer   

        Dim name(5) As Integer

        Dim arr1() 

        Dim arr2(5)
        arr2(0) = "1"            'Number as String
        arr2(1) = "VBScript"     'String
        arr2(2) = 100            'Number
        arr2(3) = 2.45           'Decimal Number
        arr2(4) = #10/7/2013#    'Date
        arr2(5) = #12:45:00 PM#  'Time        
        Print arr2(3)

        Dim arr3
        arr3 = Array("apple","Orange","Grapes")

        'Dim arr4
        'Dim arr4()
        'Dim arr4(2)      这里会报错,原因就是原本会默认为数组的值为2
        Dim arr4() As Variant
        arr4 = Array("apple", 1, "n")        '注意n必须用双引号


    第二种:Dim 私有数组名(0 to n) as 类型
        Dim name(1 To 4) As Integer

        Dim name1(0 To 4) As Integer
        name1(0) = 0
        name1(1) = 1
        name1(2) = 2
        name1(3) = 3
        name1(4) = 4
        Print name1(3)


    第三种:redim只能用于过程中,不能用于标准模块或者窗体模块里面
        dim a() as integer
        dim i as integer
        i=inputbox("请输入一个数:")
        redim a(i)                        '用于重新定义数组的大小


    第四种:static只能用于过程中,不能用于标准模块或者窗体模块里面
        Static Arr(3 to 5) As Variant

        Static Num As Variant
        Num=Array(1,2,3,4,5,6)


    第五种:public用在标准模块中,用于定义全局的数组
        public Arr(3 to 5)  As Variant



数组清除
    erase 数组名
        静态数组:清除就是默认为0
        动态数组:一清除就没有了不存在了

2.静态数组和动态数组

静态数组:编译时开辟的内存
    数值 常数 符号 常量作为下标定位    
        dim a(6) as integer


动态数组:运行时开辟的内存
    变量作为下标定位
        dim a() as integer
        dim i as integer
        i=inputbox("请输入一个数:")
        redim a(i)
        a(0) = 1
        Print a(0)
    保留之前的数据preserve
        dim size as integer
        size=inputbox("请输入一个数:")
        redim test(size) as integer
        test(0) = 128    
        print test(0)    
        redim preserve test(size + 1) 
        print test(0)

3.数组的基本操作

一维二维直接进行赋值


for each...next语句:允许你遍历一个集合或数组中的每一个元素,并对每个元素执行特定的操作
    for each 成员 in 数组
        循环体
    next 成员


    举例
        Dim numbers, i
        numbers = Array(1, 2, 3, 4, 5)
        For Each i In numbers
            Print i
        Next


       Dim arr(2, 3) As Variant
       arr(0, 0) = "Apple"
       arr(0, 1) = "Orange"
       arr(0, 2) = "Grapes"
       arr(0, 3) = "pineapple"
       arr(1, 0) = "cucumber"
       arr(1, 1) = "beans"
       arr(1, 2) = "carrot"
       arr(1, 3) = "tomato"
       arr(2, 0) = "potato"
       arr(2, 1) = "sandwitch"
       arr(2, 2) = "coffee"
       arr(2, 3) = "nuts"

       MsgBox ("当前位置 0,1 : " & arr(0, 1))
       MsgBox ("当前位置 2,2 : " & arr(2, 2))
'冒泡排序:把一个无序的数组排成一个有序的数组
'依次进行比较,把最大的数冗余到最后面,从而实现一个有序的数组
Option Explicit

Dim number(1 To 10) As Integer
Dim i, j, t As Integer


Private Sub Form_Load()
    For i = 1 To 10
        number(i) = InputBox("请输入1个数字:")
        Print number(i);
    Next i
    For i = 10 To 2 Step -1
        For j = 1 To i - 1
            If number(j) > number(j + 1) Then
                t = number(j)
                number(j) = number(j + 1)
                number(j + 1) = t
            End If
        Next j
    Next i
    
    Print "冒泡排序后的数组为:"
    For i = 1 To 10
        Print number(i);
    Next i
End Sub

4.控件数组

针对控件的 
    第一种 拖动:添加多个同类型控件,且它们的命名名称要一样,Index依次排序
    第二种 复制:这种就是通过index属性区分的

举例:按一次按钮添加一个单选按钮

Private Sub Command1_Click()
    Static MaxIdx
    
    If MaxIdx = 0 Then MaxIdx = 1
        MaxIdx = MaxIdx + 1

    If MaxIdx > 7 Then Exit Sub
    
    Load OptButton(MaxIdx)
    OptButton(MaxIdx).Caption = "option" & MaxIdx
    OptButton(MaxIdx).Top = OptButton(MaxIdx - 1).Top + 360
    OptButton(MaxIdx).Visible = True
End Sub



按钮:Command1
单选按钮:OptButton
    index=1

第七章 过程(sub子程序 function函数

    添加模块:工程——>添加模块——>打开
    添加过程:工具——>添加过程——>子过程/函数

当然也可以自己手写 

1.sub子程序过程

不返回值 

创建sub过程
    [static][private][public] sub 过程名[(参数列表)]
        [语句块]
        [exit sub]
        [语句块]
    end sub

    static: 静态 值保持不变,会自动初始化
    private:私有 本模块的过程访问
    public: 公有 任意地方


调用sub过程
    第一种:没有参数
            过程名
    第二种:call 过程名(参数)
    第三种:过程名 参数


通用过程与事件过程(了解)
    事件过程:电脑的事件
    通用过程:自定义的

    通用过程:可以放在窗体模块中,也可以放在标准模块中
              如果在其他窗体或标准模块中也有,调用必须前面加上窗体
                call form1.过程名(参数)
    使用:基本上就是在事件过程中调用通用过程

举例

举例:求1~100的和
    Option Explicit

    Private Sub Form_Load()
    
        Dim sum As Long
        Dim i As Long
        
        sum = 0
        For i = 1 To 100
            sum = sum + i
        Next i
        
        Print sum
    End Sub


举例:不同窗口调用求和
     form1
        Option Explicit

        Public Sub sum(a As Integer, b As Integer)
            Print a + b
        End Sub

        Private Sub Form_Load()
            Form2.Visible = True
            Form2.test
    
            Call sum(5, 6)
            sum 6, 6
        End Sub

     form2
        Option Explicit

        Public Sub test()
            Call Form1.sum(5, 8)
        End Sub


举例:求任意范围里面可以被某一个数整除的所有数的和
方法一
    Option Explicit     '这一个可以不写

    '下面的Integer可以换成(Long、Variant)
    '下面的Public可以换成(Static、Private、不写)

    Public Function sumtest(a As Integer, b As Integer, c As Integer)   '函数过程
        '下面也可以这样写   Dim sum,i As Integer
        Dim sum As Integer
        Dim i As Integer
    
        sum = 0
    
        For i = a To b
            If i Mod c = 0 Then
                sum = sum + i
            End If
        Next i              '这里的i可以省略
    
        sumtest = sum       '函数过程   返回值
    End Function

    Private Sub Form_Load()
        '函数过程  调用
         Print sumtest(1, 100, 2)
         Print sumtest(5, 150, 5)
    End Sub

方法二
    Option Explicit     '这一个可以不写

    '下面的Integer可以换成(Long、Variant)
    '下面的Public可以换成(Static、Private、不写)

    Public Sub sumtest(a As Integer, b As Integer, c As Integer)    '子程序过程
        '下面也可以这样写   Dim sum,i As Integer
        Dim sum As Integer
        Dim i As Integer
    
        sum = 0
    
        For i = a To b
            If i Mod c = 0 Then
                sum = sum + i
            End If
        Next i              '这里的i可以省略
    
        Print sum       '子程序过程   返回值
    End Sub

    Private Sub Form_Load()
        '子程序过程  调用
         Call sumtest(1, 100, 2)
         Call sumtest(5, 150, 5)
     
         sumtest 1, 100, 2
         sumtest 5, 150, 5
    End Sub

 举例:求任何范围内数的和

方法一:函数过程 

Option Explicit     '这一个可以不写

'下面的Integer可以换成(Long、Variant)
'下面的Public可以换成(Static、Private、不写)

Public Function sumtest(a As Integer, b As Integer)    '函数过程
    '下面也可以这样写   Dim sum,i As Integer
    Dim sum As Integer
    Dim i As Integer
    
    sum = 0
    
    For i = a To b
        sum = sum + i
    Next i              '这里的i可以省略
    
    sumtest = sum       '函数过程   返回值
End Function

Private Sub Form_Load()
    '函数过程  调用
     Print sumtest(1, 100)
     Print sumtest(5, 150)
End Sub

 

方法二:子程序过程

Option Explicit     '这一个可以不写

'下面的Integer可以换成(Long、Variant)
'下面的Public可以换成(Static、Private、不写)

Public Sub sumtest(a As Integer, b As Integer)    '子程序过程
    '下面也可以这样写   Dim sum,i As Integer
    Dim sum As Integer
    Dim i As Integer
    
    sum = 0
    
    For i = a To b
        sum = sum + i
    Next i              '这里的i可以省略
    
    Print sum       '子程序过程   返回值
End Sub

Private Sub Form_Load()
    '子程序过程  调用
     Call sumtest(1, 100)
     Call sumtest(5, 150)
     
     sumtest 1, 100
     sumtest 5, 150
End Sub

 

2.function函数过程

要返回值,通常出现在表达式中 

建立function过程
    [static][private][public] function 过程名 [(参数列表)] [as 类型]
        [语句块]
        [过程名=表达式]
    end function

    返回类型:默认是变体类型Variant


调用function过程:有返回值哦要接收一下(用print 进行输出)
    print 过程名(参数)

举例

举例:区别sub子程序过程 和 function函数过程
    '绿色的部分代表sub子程序过程
    Option Explicit

    'Public Sub sumtest(a As Integer, b As Integer)
    Public Function sumtest(a As Integer, b As Integer)
        Dim sum, i As Long

        sum = 0
    
        For i = 1 To a
            If i Mod b = 0 Then
                sum = sum + i
            End If
        Next i

        sumtest = sum
        'Print sum

    End Function
    'End sub

    Private Sub Form_Load()
        Print sumtest(10, 2)

        'Call sumtest(10, 2)
        'sumtest 10,2
    End Sub



举例:最大公约数
    Option Explicit

    Dim c As Integer

    Public Function gcd(x As Integer, y As Integer)
        Do While y <> 0
            c = x Mod y
            x = y
            y = c
        Loop
        gcd = x
    End Function

    Private Sub Form_Load()
        Print gcd(50, 100)
    End Sub


举例:求最小公倍数
    Option Explicit
    
    Public Function GBS(a As Integer, b As Integer)
        Dim i, c, d As Integer
        
        '最大公约数
        For i = 1 To a
            If i <= b Then
                If a Mod i = 0 And b Mod i = 0 Then
                    c = i
                End If
            End If
        Next i
        
        '最小公倍数=两个数乘积/最大公约数
        d = (a * b) / c
        
        GBS = d
    End Function

    Private Sub Form_Load()
        Print GBS(2, 3)
    End Sub

3.参数传送

参数前面的定义
    引用(传地址):也是默认的,可以改变函数里面的值
        参数前面加上:byref

    传值:传送实参的值,不可以改变函数里面的值
        参数前面加上:ByVal (By Value)
1.形参与实参
    形参:sub function过程定义中出现的变量名
    实参:调用sub function过程时所传送过去的常数、变量、表达式、数组

    传送参数
        第一种 传值(ByVal):按照位置传送(位置必须相互匹配)
            call test(a%,b!,"test")
        第二种 传址(ByRef):按照指名传送(位置可以不一一对应)
            call test(p1:=a%,p3:="test",p2:=b!)

        举例
                Option Explicit

                Public Sub sum(a As Integer, b As Integer, Optional c As Integer)
                    Print a + b + c
                End Sub

                Private Sub Form_Load()
    
                    Call sum(5, 6)
                    Call sum(a:=5, b:=6, c:=7)
                    Call sum(a:=5, c:=7, b:=6)
                    sum 6, 6
                End Sub




2.数组参数的传递:采用的是引用方式传递
    举例:找最大数
        Option Explicit

        Dim c As Integer

        Private Sub Form_Load()
            Dim arr(2) As Integer
            Dim intmax As Integer
        
            arr(0) = 6
            arr(1) = 4
            arr(2) = 5

            intmax = findmax(arr())
            Print intmax
        End Sub

        Function findmax(a() As Integer) As Integer
            Dim start As Integer
            Dim finish As Integer
            Dim i, max As Integer

            start = LBound(a)     '下标索引号,最小
            finish = UBound(a)    '上标索引号,最大

            max = a(start)

            For i = start To finish
                If a(i) > max Then max = a(i)
            Next i

            findmax = max
        End Function



3.对象参数的传递
    3.1 窗体参数
        设置默认启动窗体
            工程——>过程1——>通用——>启动对象

        举例:窗口设置(大小 举例 显示隐藏...)
            private sub form_load()
                formset form1
                formset form2
                formset form3
                formset form4
            end sub

            sub formset (formname as form)
                formname.left=1000
                formname.top=2000
                formname.width=3000
                formname.height=3000
            end sub

            private sub form_click()
                form1.hide
                form2.show
                '以此内推,在下一个窗口定义  form2.hide form3.show
            end sub
    
    3.2 控件参数
        传控件:改变控件的属性

        举例:添加textBox组件(text1  text2)
        Option Explicit

        Private Sub Form_Click()
            '传参
            Fontout Me.Text1, Me.Text2
        End Sub

        Sub Fontout(Test1Control As Control, Test2Control As Control)
            '定义test1样式
            Test1Control.FontSize = 18
            Test1Control.FontName = "幼圆"
            Test1Control.FontItalic = True
            Test1Control.FontBold = True
            Test1Control.Text = "VB"
            '再次添加样式下划线
            If TypeOf Test1Control Is TextBox Then
                Test1Control.FontUnderline = True
            End If
            '下面是test2对比
            Test2Control.FontSize = 24
            Test2Control.FontName = "黑体"
            Test2Control.FontItalic = False
        End Sub

4.optional可选参数与paramarray可变参数

optional可选参数:必须是变体型
    optional 参数名

    举例:相互相乘_标记了的个数可省略
        Option Explicit

        Private Sub Form_Load()
            sum 1, 4
            sum 1, 2
            sum 1, 2, 3
        End Sub

        Sub sum(a As Integer, b As Integer, Optional c As Integer)
            Print a * b * c
        End Sub


paramarray可变参数
    sub 过程名(paramarray 数组名)


    举例:数组里面内容相互相乘_标记个数可变
        Option Explicit

        Private Sub Form_Load()
            m 1
            m 1, 2
            m 1, 2, 3
        End Sub


        Sub m(ParamArray nums())
            Dim n As Integer
            Dim x As Variant

            n = 1
            For Each x In nums
                n = n * x
            Next x
    
            Print n
        End Sub

第八章 菜单、工具栏与对话框设计

1.菜单编辑器 

打开方式
        第一种:工具栏第三个
        第二种:窗口设计器中——>鼠标右键——>菜单编辑器

分类
    下拉式菜单:自己添加
        自定义快捷键:标题后面输入  (&字母)——必须打开一级菜单才会生效
            举例:双击编辑代码
                        文件file
                        日期(&D)
                        - line
                        时间(&T)
                        编辑

                        Option Explicit

                        Private Sub date_Click()
                            Me.Caption = Now
                        End Sub

                        Private Sub time_Click()
                            Me.Caption = Hour(Now)
                        End Sub

        菜单项的增减
            加载:load
            删除:unload
            索引:mnucounter
                举例
                        编辑bianji
                            增加add
                            删除del
                            -
                            appname    索引0
            
                        Option Explicit
                        Dim mnucounter As Integer   '下标定义

                        Private Sub add_Click()
                            Dim temp As String
                            temp = InputBox("请输入程序的名字", "增加")
                            mnucounter = mnucounter + 1         '名称:appname  索引:0
                            Load appname(mnucounter)    '增加
                            appname(mnucounter).Caption = temp
                            appname(mnucounter).Visible = True
                        End Sub


                        Private Sub del_Click()
                            Dim delnum As Integer
                            delnum = InputBox("请选择需要删除的第几条信息", "删除")
                            If delnum > mnucounter Or delnum < 1 Then
                                MsgBox ("你输出的需要有误!")
                            End If
                            Unload appname(delnum)  '删除
                            mnucounter = mnucounter - 1
                        End Sub
                

    弹出式菜单
        举例
            标题:字体格式化popFormat
                加粗:popBold
                下划线:popItalic

            '按钮鼠标按下
            Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
                If Button = 2 Then             '1左键    2右键
                    PopupMenu popFormat        '主菜单项名称 弹出样式
                End If
            End Sub

            Private Sub popBold_Click()
                Me.Command1.FontBold = True
            End Sub

            Private Sub popItalic_Click()
                Me.Command1.FontUnderline = True
            End Sub

2.对话框

对话框:显示和获取信息与用户进行交流


分类
    1.预定义对话框
        输入框:inpubox
        信息/消息框:msgbox


    2.自定义对话框
        其实就是放按钮,页面之间的跳转


    3.通用对话框CommonDialog:是一种控件
        加通用对话框
            工具栏——>工程——>部件——>勾选Microsoft Common Dialog Control 6.0——>确定
        操作(需要用到通用对话框)
            me.CommonDialog1.Action = num
                num=0:无任何动作
                num=1:打开文件对话框,可以选择一个文件
                num=2:另存文件
                num=3:颜色对话框
                num=4:字体(需要安装字体)
                num=5:打印
                num=6:帮助
        举例
            Private Sub Form_Load()
                Me.CommonDialog1.Action = 1
            End Sub


    4.文件对话框(需要用到通用对话框)
        操作
            me.CommonDialog1.ShowOpen 打开文件
            me.CommonDialog1.ShowSave 保存文件                                
            me.CommonDialog1.ShowHelp 帮助
            me.CommonDialog1.FileName 文件名包含的路径
            me.CommonDialog1.DialogTitle="对话框标题"
            me.CommonDialog1.InitDir="c:\"    设置路径,默认是程序所在的路径
            me.CommonDialog1.Filter="JPG文件|*.jpg|BMP文件|*.bmp|GIF文件|*.gif|所有文件|*.*"
            me.CommonDialog1.FilterIndex=默认是1    设置默认索引号
        属性
            flags标志(看后面的图表分类说明)
            cancelerror:在点击取消时候,是否显示报错
            DialogTiltle:对话框的标题
            FileName:设置或返回要打开或保存的文件的路径及文件名
            FileTitle:设置对话框中所选择的文件名(不包括路径)
            Filter:设置对话框中显示的文件类型
            DefaultEXT:默认的文件类型,即扩展名
            FilterIndex:指定默认的过滤器
            InitDir:指定对话框中显示的起始目录。如果没有设置InitDir属性,则显示当前目录
        举例
            Private Sub Form_Load()
                Me.CommonDialog1.Filter = "JPG文件|*.jpg|BMP文件|*.bmp|GIF文件|*.gif|所有文件|*.*"
                Me.CommonDialog1.FilterIndex = 2   '默认显示
                Me.CommonDialog1.DialogTitle = "打开文件"
                Me.CommonDialog1.ShowOpen
                Me.Image1.Picture = LoadPicture(Me.CommonDialog1.FileName)     'stretch自动拉伸true    Image1工具
            End Sub


    5.其他对话框(需要用到通用对话框)
        5.1 颜色对话框
            me.CommonDialog1.ShowColor颜色
            me.CommonDialog1.flags = num
                num=1:首次打开选中我们之前选中的颜色
                num=2:打开一个完整的对话框,还会显示一个用户自定义的颜色窗口可以添加颜色
                num=4:禁用”规定自定义颜色“按钮
                num=8:添加显示一个帮助按钮
            举例
                Private Sub Form_Load()
                    Me.CommonDialog1.ShowColor
                    Me.BackColor = Me.CommonDialog1.Color
                End Sub

        5.2 字体对话框
            me.CommonDialog1.ShowFont 字体
            查看是否显示字体:控制面板——>外观和个性化——>字体——>进入查看
            me.CommonDialog1.flags = num
                num=1:只显示屏幕的字体
                num=2:列出与电脑相连打印机的字体
                num=3:列出打印机和屏幕的字体
                num=4:添加显示一个帮助按钮
            me.text1.fontname=me.CommonDialog1.filename
            me.text1.fontsize=me.CommonDialog1.fontize
            me.text1.fontbold=me.CommonDialog1.fontbold
            me.text1.fontitalic=me.CommonDialog1.fontitalic
            me.text1.fontunderline=me.CommonDialog1.fontunderline
            me.text1.fontstrikethru=me.CommonDialog1.fontstrikethru
            举例
                Private Sub Form_Load()  
                    Me.CommonDialog1.Flags = 3
                    Me.CommonDialog1.ShowFont
                    Me.Text1.FontName = Me.CommonDialog1.FontName
                    Me.Text1.FontSize = Me.CommonDialog1.FontSize
                    Me.Text1.FontBold = Me.CommonDialog1.FontBold
                    Me.Text1.FontItalic = Me.CommonDialog1.FontItalic
                    Me.Text1.FontUnderline = Me.CommonDialog1.FontUnderline
                    Me.Text1.FontStrikethru = Me.CommonDialog1.FontStrikethru
                End Sub

        5.3 打印对话框

            me.CommonDialog1.copies=5    打印份数
            me.CommonDialog1.flags=num
                num=1:返回所有页
                num=2:页选项状态
                    me.CommonDialog1.frompage = 1
                    me.CommonDialog1.topage = 10
            me.CommonDialog1.ShowPrinter 打印
            PrintDialogButtonText:显示“打印”、“取消”和“帮助”按钮的文本
            PrintDialogPageCount:在“页码范围”框中用户输入页码的数目
            PrintDialogPrinterSettings:用户选择的打印机设置
            PrintDialogPrinterName:用户选择的打印机名称
            PrintDialogCollate:用户指定的分页顺序
            PrintDialogPrintToFile:用户是否选择将打印输出保存到文件
            举例
                Private Sub Form_Load()
                    Me.CommonDialog1.Copies = 5
                    Me.CommonDialog1.Flags = 1
                    Me.CommonDialog1.ShowPrinter
                End Sub

                                                                                          文件对话框flag                                                                                                                               

Flags属性可以使用3种形式:即符号常量、十六进制整数和十进制整数

Flags属性允许设置多个值,这可以通过以下两种方法实现:
    ① 如果使用符号常量,则将各值之间用“Or”运算符连接
    ② 如果使用数值,则将需要设置的属性值相加

符号常量

十六进制整数 

十进制整数

作用

cdlOFNReadOnly

&H1&

1

在对话框中显示“只读检查”复选框

cdlOFNOverwritePrompt

&H2&

2

如果用已经存在的文件名保存文件

消息框,则询问用户是否覆盖该文件

cdlOFNHideReadOnly

&H4&

4

隐藏只读方式复选框

cdlOFNShowHelp

&H10&

16

对话框增加显示一个帮助按钮

cdlOFNNoValidate

&H100&

256

允许在文件名中有非法字符

cdlOFNAllowMultiselect

&H200&

512

允许用户选择多个文件,所选择的文件名存放在FileName中,各文件名之间用空格隔开

cdlOFNPathMustExist

&H800&

2048

只允许输入有效的路径,若输入非法路径,则显示警告

cdlOFNCreatePrompt

&H2000&

8192

如文件不存在,询问是否要建立新文件

第九章 多重窗体与MDI窗体程序设计

1.多窗口 

建立多重窗体应用程序
    设置默认启动窗体:工程——>工程属性——>启动对象

    load 窗体名称
    unload 窗体名称

    窗体名称.Show
        Show 1:模态    当前窗体打开不关闭,不能操作其他的窗体
        默认是非模态
        举例
            Form1.Show 0
            Form2.Show 1

    窗体名称.Hide

    窗体名称.Visible = false/true
    

多重窗体程序的执行和保存
    和单窗体一样

2.工程结构

模块操作     
     举例
           模块
                Option Explicit
                Sub showmessage(str As String)
                    MsgBox str & "good"
                End Sub
           窗体
                Option Explicit
                Private Sub Command1_Click()        'Command1
                    showmessage (Me.Text1.Text)     'Text1
                End Sub
      举例
           模块
                Option Explicit
                Public i As Integer
           窗体
                Option Explicit
                Private Sub Command1_Click()        'Command1
                    i = 1000
                    Me.Caption = i
                End Sub


标准/全局模块
    特点
        里面的东西可以在任意窗口调用
        多个模块里面的内容不能重复的去写

    添加标准模块:工程——>鼠标右键——>添加——>添加模块——>打开

    全局变量声明放在标准模块的首部

    内容
       sub showmessage(str as string)    '子过程
           msgbox str & "你好!"
       end sub

        '添加Text1
       Private Sub Form_Load()
           showmessage (Me.Text1.Text)       '调用
       End Sub


窗体模块
    声明
        其他窗体不能使用form1
            dim a as integer
        其他窗体可以使用form2
            Private Sub Form_Load()
                Form1.a = 100
                Print Form1.a
            End Sub
    通用过程(自定义)
        Option Explicit
        Private Sub Command1_Click()        'Command1
            Form1.msg
        End Sub

        Public Sub msg()
            MsgBox Me.Caption
        End Sub
    事件过程
        click
        ...



sub main过程(相当于主函数  必须定义在模块中)
    特点
        是在标准模块中建立的,不能放在任何的窗体里面
        一个工程中只能有一个sub main过程

    想看效果 设置启动对象:工程——>工程属性——>启动对象——>sub main

    语法
        sub main()
            MsgBox ("你好啊,我sub main过程")
            MsgBox ("我相当于主函数 从上往下执行")
            form1.show
        end sub

第十章 文件操作

1.文件的打开open与关闭close

文件的种类
    数据的性质来分
        程序文件:可以存放由计算机执行的程序(原文件 可执行文件exe frm vbp vbg...)
        数据文件:用来存放普通的数据的(程序来存取管理)
    存取数据的方式和机构来分
        顺序文件:一个接一个的存放,只知道第一个记录存放的位置
            优点:占用空间少,容易使用
            确定:维护困难
        随机/直接存取文件:可以根据需要访问文件中的任何记录
            优点:数据存取较为灵活方便,速度较快,容易修改
            确定:占用空间较大
    编码方式来分
        ASCLL码二/文本文件:可以用自处理软件来建立和修改,必须按照纯文本格式来保存
        二进制文件:二进制的方式保存,占用空间较小


文件的打开(建立)
    Open 文件名称 [For 模式][Access 访问方式存取类型][lock 锁定模式] as [#]文件号 [len=记录长度]
        For 模式
            输出:For output 内存输出到外设(没有会自动创建)
            输入:For input  外设输出到内存
            追加:For append 指定顺序输出方式,文件指针被定位在文件的末位,写入就追加在后面
            随机:For Random 默认的,用Get和Put语句对该文件中任何一个记录位置上的信息进行读写操作
            二进制方式:For Binary,用Get和Put语句对该文件中任何一个字节位置上的信息进行读写操作
        Access 访问方式
            只读:Access read
            只写:Access write
            读写:Access read write
        lock 锁定模式
            lock shared:其他进程可对此文件进行任何读写操作
            lock read:不允许其他进程读此文件
            lock write:不允许其他进程写此文件
            lock Read Write:不允许其他进程对此文件进行任何操作
        #文件号(编号)
            是一个1~511的整数,用于表示这个文件
            打开文件的文件号与一个具体的文件相关联,其他输入输出语句或函数将通过文件号来操作文件
        len=记录长度
            是一个整型数,长度不能超过32767
            对顺序文件来说,它是指内存缓冲区分配的字符个数
            对随机文件来说,它是文件中单个记录的长度
            对于二进制文件来说,将忽略Len子句


文件的关闭
    Close [#文件号1] [#文件号2]……



举例
    Option Explicit

    Private Sub Command1_Click()
        Open "c:\liu.txt" For Append Access Read Write Lock Read As #1  '运行,鼠标去打开文件,显示另—个程序正在使用此文件,进程无法访问
    End Sub

    Private Sub Command2_Click()
        Close #1
    End Sub

2.文件操作语句和函数

文件指针:在文件中定位到特定的字节位置
    语句
        Seek #文件号,位置
        
        Seek #1, "g:\a.txt"
    函数
        Seek(文件号)

其他语句和函数
    FreeFile函数:自动产生没有使用过的文件号
        举例
            Option Explicit

            Private Sub Command1_Click()
                'a.txt   b.txt   c.txt
                Open "g:\a.txt" For Input As #1
                Open "g:\b.txt" For Input As #2
    
    
                Dim filenum As Integer
                filenum = FreeFile
                Open "g:\c.txt" For Input As filenum
                MsgBox filenum
    
                Close
            End Sub

    Loc函数:返回打开的文件内的当前可读/写位置
        Loc(文件号)    
        Print Loc(1)

    Lof函数:返回给已打开文件分配的字节数
        Lof(文件号)
        Print LOF(1)

    EOF函数:是否是结束结尾状态
        EOF(文件号)
        返回:false true

3.顺序文件(写print write、读input)

写操作:内存中的数据,写到屏幕上
    print #文件号,表达式表
        也可以用分号隔开,是紧凑格式

        举例
            Option Explicit

            Private Sub Command1_Click()
                Dim sname, stel, sadd As String
                Open "f:\tel.dat" For Output As #1
    
                sname = InputBox("请输入姓名", "输入数据")
                stel = InputBox("请输入电话号码", "输入数据")
                sadd = InputBox("请输入地址", "输入数据")
    
                Print #1, sname, stel, sadd
                Close #1
            End Sub


    write #文件号,表达式表
        数据在磁盘中以紧凑的格式存放
        字符串用双引号引起来的
        
        举例
            模块【后面都会用到】
                Option Explicit
                Type stu
                    stname As String * 10
                    num As Integer
                    age As Integer
                    addr As String * 20
                End Type
            窗体
                Option Explicit

                Private Sub Command1_Click()
                    Dim n, i As Integer
    
                    Static stud() As stu
                    Open "c:\stulist" For Output As #1
                    n = InputBox("请输入用户的数量:")
                    ReDim stud(n) As stu
                    For i = 1 To n
                        stud(i).stname = InputBox("姓名")
                        stud(i).num = InputBox("学号")
                        stud(i).age = InputBox("年龄")
                        stud(i).addr = InputBox("地址")
    
                        Write #1, stud(i).stname, stud(i).num, stud(i).age, stud(i).addr
                    Next i
    
                    Close #1
                End Sub

读操作
    input #文件号,表达式表
        举例
            Option Explicit

            Private Sub Command1_Click()
                Dim n, i As Integer
                Static stud() As stu
                Open "c:\stulist" For Input As #1
                n = InputBox("请输入用户的数量:")
                ReDim stud(n) As stu
                Print "name"; Tab(10); "num"; Tab(20); "age"; Tab(30); "address"
                Print
                For i = 1 To n
                    Input #1, stud(i).stname, stud(i).num, stud(i).age, stud(i).addr
                    Print stud(i).stname; Tab(10); stud(i).num; Tab(20); stud(i).age; Tab(30); stud(i).addr
                Next i
                Close #1
            End Sub


    line input #文件号,字符串变量
        举例
            Option Explicit

            Private Sub Command1_Click()
                'multline属性=true多行显示
                Dim whole, aspect As String
                Open "f:\1.txt" For Input As #1
                Do While Not EOF(1)
                    Line Input #1, aspect
                    whole = whole & aspect & Chr(13) & Chr(10)
                Loop
                Me.Text1.Text = whole
                Close #1
            End Sub

4.随机文件(写put、读get)

随机文件的特点
    1.随机文件的记录长度是定长
    2.每个记录又划分为若干个字段,每个字段长度等于相应变量的长度
    3.各变量/数据项按一定的格式来植入相应的字段
    4.打开随机文件,既可以读又可以写
    5.以记录为单位进行操作的
    6.记录:记录的类型、要处理文件的记录


随机文件的打开与读写操作
    写操作
        1.定义数据类型
            dim recordval as recordtype
            private type recordtype
                emname as string*10
                unit as string*20
                salary as integer
            end type 
        2.打开随机文件
            open "文件名称" for random as #文件号 len=记录长度
            举例
                open "c:\1.dat" for random as #1 len=len(recordval)
        3.写入随机文件
            put #文件号,[记录号],变量
            举例
                recordval.emname=inputbox("姓名") 
                recordval.unit=inputbox("公司") 
                recordval.salary =inputbox("工资") 
                put #1,,recordval 
        4.关闭文件
            close #文件号
            举例
                close #1

        举例
            模块
                Option Explicit
                Type recordtype
                    emname As String * 10
                    unit As String * 20
                    salary As Integer
                End Type
            窗体
                Option Explicit

                Private Sub Command1_Click()
                    Dim recordval As recordtype
    
                    Open "c:\1.dat" For Random As #1 Len = Len(recordval)
    
                    recordval.emname = InputBox("姓名")
                    recordval.unit = InputBox("公司")
                    recordval.salary = InputBox("工资")
                    Put #1, , recordval
    
                    Close #1

                End Sub



    读取随机文件
        get #文件号,[记录号],变量
            举例
                Option Explicit

                Private Sub Command1_Click()
                    Dim recordval As recordtype
                    Open "c:\1.dat" For Random As #1 Len = Len(recordval)
                    Get #1, , recordval
                    Print recordval.emname
                    Print recordval.unit
                    Print recordval.salary
                    Close #1
                End Sub

5.文件系统控件

驱动器列表框DriveListBox
    Private Sub Form_Load()
        Me.Caption = Me.Drive1.Drive
    End Sub




目录列表框DirListBox
    Me.Dir1.Path = Me.Drive1.Drive



文件列表框FileListBox
        me.file1.path = me.dir1.path

        me.file1.pattern = "*.exe"            显示相应类型的文件

6.文件基本操作

删除文件(kill语句)
    举例
        kill "c:\1.txt"

    举例
        Private Sub Form_Load()
            '加通用对话框:工程——部件——microsoft common dialog control 6.0
            Me.commondialog1.showopen
            If MsgBox("确定要删除" & Me.commondialog1.FileName & "文件吗", vbYesNo, "删除文件") = vbYes Then
                Kill Me.commondialog1.FileName
            End If
        End Sub

    

拷贝文件(filecopy语句)
    filecopy 源文件名,目标文件名

    举例
        filecopy "c:\1.txt","d:\2.txt"


文件(目录)重命名(name语句)
    name 源文件名 as 新文件名
    
    举例
        name "c:\1.txt" as "c:\3.txt"
        name "c:\1.txt" as "d:\3.txt"

第十一章 VB数据库编程技术

MySQL数据库(安装配置 语句语法使用 项目中操作MySQL)

习题:数据库操作习题二——35道题、数据库操作习题三(50道题-含答案)

1.相关概念 

1.数据库的概念:数据库是一系列组织有序的信息集合


2.数据库的组成
    表:由记录、字段组成(学号 性别 年龄 性别)
            ------------------------------------------------------ 
                    字段/属性1(学号)主键        字段/属性2(姓名)
            记录/元组1        1                         张三
            记录/元组2        2                         李四
            ------------------------------------------------------
                        学号     外键          课程        成绩
                         1                      VB         100 
                         2                     数据库      100 
            ------------------------------------------------------
    关系
        一对一:班级    班长
        一对多:班级    学生
        多对多:学生    课程


3.数据的组织
    主键:用于唯一标识数据库表中每一条记录的字段,它必须具有唯一性和不可更改性
        举例:id是主键
    外键:用于建立数据库表之间关系的字段,它关联了当前表中的数据和其他表中的数据
        举例:假设有两个表,一个是student表,另一个是class表
              一个班级有多个学生,一个学生属于一个班级
              为了表达这种一对多的关系,需要在student表中加入一列class_id,它的值与class表的某条记录相对应
        主表class表、从表student表


4.类型
    关系数据库:以关系模型为基础来组织和存储数据的数据库
            数据表由行和列组成,每一行代表一个实体的数据记录,每一列代表一个实体的属性
    非关系型数据库(NoSQL):是指不基于关系模型的数据库
            是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题    


5.范式:是数据库设计中的一种规范,用于减少数据冗余、提高数据独立性和完整性
    特点
        不存在重复的元组(记录)
        非主键值都与主键有关
        非主键值相互独立        路程=速度*时间
    六种范式
        第一范式(1NF)
        第二范式(2NF)
        第三范式(3NF)
        巴斯-科德范式(BCNF)
        第四范式(4NF)
        第五范式(5NF,又称完美范式

2.数据控件

属性
    DatabaseName:数据源名称的位置
    Connect:指明连接数据库的类型(Access)
    RecordSource:指定表
    RecordSetType:记录集
        Table:表示数据库中的一张表,可添加、修改等
        Dynaset:动态集,一张或多张表,也可修改
        Snapshot:快照,可对多表,但不可修改


方法
    Move移动
        MoveFirst:使记录集中的第一条记录成为当前记录
        MoveLast:使记录集中的最后一条记录成为当前记录
            data1.recordset.movelast
            data1.caption="当前的记录一共有:" & data1.recordset.recordcount
        MoveNext:下移一条记录,即使下一条记录成为当前记录
        MovePrevious:上移一条记录,即使上一条记录成为当前记录
    Refresh刷新
        Datal. Refresh
    AddNew、Delete、Update、Edit
        添加记录
            with data1.recordset
                    .addnew
                    .fields("表名sno")=”1“
                    .fields("表名cno")=”VB“
                    .fields("表名score")=70
                    .update
            end with
        删除记录
            data1.recordset.delete
    Seek:数据表对象. Seek comparison, 关键字1, 关键字2…
        查找满足条件的记录,使用Seek方法之前必须打开表的索引,要查找的内容必须为索引字段
        当找到与其匹配的第1条记录时,记录指针就定位到该记录,并使之成为当前记录
    Find
        FindFirst〈条件字符串〉:在记录集中查找满足条件的第一条记录
            Datal. Recordset. FindFirst "出版社代码='0002'"
        FindLast 〈条件字符串〉:在记录集中查找满足条件的最后一条记录
        FindNext〈条件字符串〉:从当前记录开始查找满足条件的下一条记录
        FindPrevious〈条件字符串〉:从当前记录开始查找满足条件的上一条记录


关联控件
    DataSource数据源
    DataField字段

3.建立数据库并操作数据库

实战项目:VB结合数据库实现-登录注册增删改查刷新_vb数据库增删改查

建立数据库
    外接程序——>可视化数据管理器——>文件——>新建——>Microsoft Access——>Version 7.0MDB
    ——>取名——>保存——>鼠标右键——>新建表——>生成表


对记录进行增删改查
    选中表——>打开——>操作——>更新


连接数据库
    data控件——>属性设置
                   ——>connect——>access
                   ——>databasename需要连接数据库的名称——>选择我们自己建立的数据库
                   ——>recordsettype——>1-dynaset
                   ——>recordsource记录源——>选择一张表


控件与数据库关联起来
    属性 数据——>datasource——>数据控件data1
    属性 数据——>datafield——>选择一张表        

4.全代码操作(感兴趣了解)

accessdatabaseengine下载64位 


'先要生成表users:username password sex;再设计布局窗口

'工程—>引用—>micrpspft activex data object6.1


'声明并创建连接对象
Dim conn As New ADODB.Connection
'数据集 声明连接对象类型
Dim rs As ADODB.Recordset
Dim sql$


Private Sub Command1_Click()
show

If conn.State = 0 Then
    conn.ConnectionString = "Provider=Microsoft.jet.OLEDB.4.0;Data Source=G:\test\test.mdb;Persist Security Info=False"  '连接数据库的驱动字符串
    conn.Open                   '打开数据库
End If
    'mdb数据库
        'a.udl选择连接类型  没有就安装accessdatabaseengine下载64位
        '选择:提供程序—>microsoft office 12.0;连接输入源的mdb;确定;复制地址到上面去
        'ACE改为jet    12.0改为4.0        mdb

    'accdb数据库    和版本有关,最好用专业版的
        'ACE           12.0               accdb
        'microsoft access database
        '其他操作和上面一样连接的时候要关闭一下database文件


'sql插入语句
sql = "insert into [users]([username],[password],[sex]) values('& text1.text &','text2.text','combol.text')"
'sql = "insert into [users]([username],[password],[sex]) values('a','666','男')"

'sql查询语句
sql = "select *from [users]"

'创建数据集对象的连接
Set rs = New ADODB.Recordset
'录入信息
rs.Open sql, conn, adOpenKeyset, adLockBatchOptimistic

Dim i%
Do While Not rs.EOF
    '输出一行记录
    i = 0
    Do While i <= 2
        '将每一列记录输出
        Print rs(i).Name & ":" & rs(i).Value
        i = i + 1
    Loop
    
    Print
    '将指针往下移动一行
    rs.MoveNext
Loop
End Sub

第十二章 实战项目

实战项目:VB龟兔赛跑游戏+猜数字游戏

实战项目:VB结合数据库实现-登录注册增删改查刷新

实战项目:VB实现小鸟快跑小游戏

“题库”小试牛刀

单项选择题(15题共60分,每题4分) 

1.Visual Basic程序设计语言属于_____。                          
A.面向过程的语言	 				B.面向对象的语言	 	
C.面向问题的语言	 				D.面向机器的语言

2.在VB中,_____关键字用于声明一个变量?
A.Var	 							B.Variable	    
C.Dim	 							D.Const

3.当运行程序时,系统自动执行启动窗体的_____。
A.Click单击事件过程		 					
B.Unload卸载事件过程	 
C.Gotfocus获取焦点事件过程	 				
D.Load加载事件过程

4.在VB中,_____符号用于为变量赋值?
A.=				B.=:			C.:=			D.===

5.表达式 Int(Rnd*71)+10 产生的随机整数范围是_____。
A.(10,80)								B.(10,81)
C.[10,80] 								D.[10,81]

6.设变量 x = 4,y = -1,a = 7,b = -8,下面表达式_____的值为“假”。
A.x+a <= b-y							B.x>0 AND y<0
C.a=b OR x>y							D.nx+y>a+b AND NOT (y < b)

7.在VB中,下面那个数据类型是整型_____?
A.Boolean		B.Long			C.Integer		D.Variant

8.在VB中,下面那个数据类型是变体型_____?
A.Boolean		B.Long			C.Integer		D.Variant

9.在VB中,不等于使用的符号是_____?
A.!=			B.≠			C.><			D.<>或><

10.数组的下标是从_____开始的?
A.None			B.Null			C.0				D.1

11.在要使 Form1窗体的标题栏显示"欢迎使用 VB",以下_____语句是正确的。
A.=“欢迎使用 VB” 					B.='欢迎使用 VB'	 	
C.=欢迎使用 VB	 					D.="欢迎使用 VB"

12.若要使命令按钮不可以操作,要对_____属性进行设置。
A.EnabIed		 					B.Visible	 	
C.Backcolor 						D.Caption

13.若是在窗体上已经创办了一个文本框对象Text1,可以经过_____事件获得输入键值的 ASCII码。
A.Change	 							B.LostFocus	    
C.KeyPress	 							D.GotFocus

14.下面_____是合法的变量名。
A.X_yz	 								B.123ab	 
C.integer	 							D.X-Y

15.以下关系表达式中,其值为False的是_____。
A."AbC">"ABC"							B. " 女 ">" 男 "	
C."BASIC"=UCase("basic)					D."123"<"23"

16.在VB中,或用的什么符号_____?
A.Not			B.And			C.Or			D.Xor

17.在VB中,异或用的什么符号_____?
A.Not			B.And			C.Or			D.Xor

18.在VB中,与用的什么符号_____?
A.Not			B.And			C.Or			D.Xor

19.在代码中引用一个控件时,应使用控件的_____属性。
A.Caption		B.Name			C.Text			D.Index

20.在VB中,打印输出用的_____关键字?
A.Print			B.InputBox		C.MsgBox		D.Printer

21.在Visual Basic程序设计中,构成对象的三要素是_____。
A.属性、控件和方法	 				B.属性、事件和方法	 	
C.控件、过程和模块	 				D.窗体、控件和过程

22.在Visual Basic程序设计中,注释可以用_____符号。
A.中文单引号‘		 				B.英文单引号’	 	
C.中文斜杠/	 						D.中文井号#

23.下列赋值语句_____是有效的。
A.sum = sum-sum							B.x+2 = x+2		
C.x+y = sum								D.last = y/0

24.指令“ Circle (1000, 1000),500,8,-6,-3”将绘制_____。
A.画圆			B.椭圆			C.圆弧			D.扇形

25.67890属于_____类型数据。
A.整型			B.单精度浮点数	C.货币型		D.长整型

26.以下的控件或方法具有输入和输出双重功能的为_____。
A.Print 		B.Textbox		C.Optionbutton	D.Checkbox

27.在VB中,多重判断用什么语句_____?
A.if...then...end if
B.if...then...else...end if
C.if...then...elseif...then...else...end if
D.iif

28.下面循环结构语句正确的是_____?
A.for...to...next
B.for...each...next...in
C.loop...do...while
D.not...until...

29.当用户按下并且释放一个键后会触发 KeyPress 、 KeyUp 和 KeyDown 事件,这三个事件发生的序次是_____。 
A.KeyPress 、 KeyDown 、 KeyUp			
B.KeyDown 、 KeyUp、 KeyPress		
C.KeyDown 、 KeyPress 、 KeyUp		
D.没有规律

填空题(5题共10分,每题2分) 

大小写都可以,VB可以自适应修改 

1.当输出为Print(1+2)时,输出结果为_____。

2.当输出为Print(4+5)时,输出结果为_____。

3.要强制显式声明变量,使用_____语句完成。

4.在VB中,使用_____关键字来创建一个子程序过程。

5.在VB中,使用_____关键字来创建一个函数过程。

6.在VB中,使用_____关键字来声明一个全局级变量。

7.在VB中,使用_____关键字来声明一个静态变量。

8.在VB中,使用_____关键字来调用一个函数。

9.在VB中,声明变量使用_____语句。

编程题(2题共30分,每题15分)

注意:在窗体加载里面调用
    Private Sub Form_Load( )
   
    End Sub


代码书写大小写都可以,VB可以自适应修改
变量名、函数名可以学生自定义

下面是几道大题

1.我们学习了程序控制结构,现在通过for循环结构实现九九乘法表(提示:双重for循环) 


2.我们学习了程序控制结构,现在通过for循环结构实现六行六列的直角三角形星号图案(提示:双重for循环)


3.在过程这一章节,我们学习了过程,通过使用sub子程序过程或function函数过程实现任意范围里面可以被某一个数整除的所有数的和。
(求:1~100里面被2整除的和,5~150里面被5整除的和)   


4.在过程这一章节,我们学习了过程,通过使用sub子程序过程或function函数过程实现任意范围的求和。(求:1~100的求和,5~150的求和)

 评分标准

评分标准:
    代码写在Form_Load里面(2分)
    有缩进(1分)
    定义了变量(2分)
    for循环写正确(2分)
    写了双重for循环(6分)
    有Print输出(1分)
    输出格式正确(1分)
    写了sub/function过程(6分)
    有调用并调用正确(2分)
知秋君
上一篇 2024-07-29 07:02
下一篇 2024-07-28 22:36

相关推荐