文章目录:
第一章 前言和软件安装
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.数据类型
基本数据类型 | |||||
类 型 | 关键字 | 类型符 | 前缀 | 长 度 | 取 值 范 围 |
字节型 | Byte | 无 | byt | 1个字节 | 0~255 |
逻辑型 | Boolean | 无 | bln | 2个字节 | True -1 或 False 0 |
整型 | Integer | % | int | 2个字节 | -32768~32767 public kk% =public kk as Integer |
长整型 | Long | & | lng | 4个字节 | -2147483648~2147483647 |
单精度 浮点型 | Single | ! | sng | 4个字节 | 绝对值在1.401298*10-45~3.402823× 1038之间 |
对象型 | object | 无 | obj | 4个字节 | 任何对象引用 |
双精度 浮点型 | Double | # | dbl | 8个字节 | 绝对值在4.94065645841247×10-324~ 1.79769313486232×10-308之间 |
货币型 | Currency | @ | cur | 8个字节 | -922337203685477.5808~ 922337203685477.5807 |
日期型 | Date | 无 | dtm | 8个字节 | 100年1月1日~9999年12月31日 Dim dt As Date |
字符串型 | String | $ | str | 2个字节 | 可存储字符串的长度取决于变量类型 dim a as string a=liuxinlei print a liuxinlei dim b as string * 5 b=liuxinlei print b liuxi |
变体型 | Variant | 无 | vnt | 可变 | 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 |
取模/取余 | Mod | A 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 |
<>或>< | 不等 | A<>B 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 | 取余 |
+ , - | 加,减 |
> 、< 、== 、!= 、>= 、<= 等 | 比较运算符 |
&& (逻辑与)、|| (逻辑或)、! (逻辑非)等 | 逻辑运算符 |
| 位运算符 |
?: | 三元运算符 |
= 、+= 、-= 、*= 、/= 、等 | 赋值运算符 |
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分)