VB程序设计基础教程_第1页
VB程序设计基础教程_第2页
VB程序设计基础教程_第3页
VB程序设计基础教程_第4页
VB程序设计基础教程_第5页
已阅读5页,还剩352页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

参考书书名:VisualBasic程序设计简明教程〔6.0版〕作

者:龚沛曾陆慰民杨志强出版社:高等教育出版社3/25/2024VisualBasic程序设计第一章VisualBasic入门第二章VisualBasic的代码编程根底第三章VisualBasic的过程、函数和方法第四章创立用户界面第五章菜单设计与多文档界面第六章文件管理与操作3/25/2024第一章 VisualBasic入门1.1程序和程序设计语言1.2类、对象、属性、方法与事件1.3VisualBasic简介1.4VisualBasic根底1.5VisualBasic应用程序的结构3/25/2024第二章 VisualBasic的代码编程根底2.1代码根底2.2数据类型及运算2.3顺序结构程序设计2.4选择结构程序设计2.5循环结构程序设计2.6数组3/25/2024第三章VisualBasic的过程、函数和方法3.1Sub过程3.2Function过程3.3参数传递3.4递归过程3.5变量、过程的作用域3/25/2024第四章 创立用户界面4.1VisualBasic的窗体4.2VisualBasic的控件4.3常用标准控件4.4常用的绘图方法4.5键盘与鼠标事件过程4.6多重窗体程序设计4.7对话框3/25/2024第五章 菜单设计与多文档界面5.1菜单的根本概念5.2菜单编辑器简介5.3设计菜单栏5.4设计弹出式菜单5.5多文档界面应用程序3/25/2024第六章 文件管理与操作6.1文件系统的根本概念6.2FSO对象模型(略)6.3文件系统控件6.4用传统的文件I/O语句和函数处理文件3/25/20241.1程序和程序设计语言

人们想用计算机解决一个问题,必须事先设计好计算机处理信息的步骤,把这些步骤用计算机能够识别的指令编写出来并送入计算机执行,计算机才能按照人的意图完成指定的工作。我们把计算机能执行的指令序列称为程序,而编写程序的过程称为程序设计。3/25/20241.1程序和程序设计语言计算机程序:计算机为完成一个特定任务而执行的一系列指令集合计算机程序设计语言:人与计算机之间进行通信的工具,是一组记号和一些用以组合这些记号的规那么程序设计语言低级语言——面向特定的计算机而设计的语言机器语言汇编语言高级语言面向过程的语言面向对象的语言〔OOP〕3/25/2024低级语言机器语言(面向机器的语言)可以被计算机直接理解和执行、难记忆、不直观、难理解、开发周期长、对用户要求高、程序可移植性差汇编语言比机器语言更易于理解、编制与修改,但不同指令集的CPU的汇编语言也不尽相同,需要汇编成机器语言才能被计算机直接执行高级语言面向过程语言(FORTRAN、C、PASCAL、BASIC)可移植性好、语句功能强、编程效率高、解放了程序员,需要详细描述解题过程面向对象语言(C++、JAVA、VisualBasic、VC++)把要处理的数据和处理数据的算法“封装”在一起,用于抽象地描述现实世界的对象。代码可重用性高、编程效率高、执行过程与面向过程的应用程序不同——事件驱动,每次执行的顺序可能不同3/25/2024高级语言程序的执行解释执行优点:方便调试缺点:速度不快、不能脱离编译环境编译执行优点:可执行文件能脱离编译环境,独立运行,执行效率高注:VisualBasic是在调试时采用解释执行,设计完毕后可以把它编译成可执行文件3/25/20241.2VisualBasic简介特点VisualBasic用于网页设计的Vbscript用于流行软件的二次开发的嵌入式VisualBasic语言VisualBasicForApplication(VBA)版本简介学习版专业版企业版3/25/2024安装〔典型安装、自定义安装〕MicrosoftWindowsNT95和更高版本,或MicrosoftWindowsNTWorkstation4.0或更高版本486DX/66MHZ或更高的处理器,或任何运行于MicrosoftWindowsNTWorkstation的Alpha处理器CD-ROMMicrosoftWindows支持的VGA或分辨率更高的监视器16MBRAMforwindows95,32MBRAMforwindowsNTWorkstation鼠标或其他定点设备MSDN3/25/20241.3VisualBasic根底启动VB方法一:通过开始菜单方法二:使用“资源管理器”方法三:桌面快捷方式VB的IDE3/25/20241.4 类、对象、属性、方法与事件类——对象的模板,是对象的归纳与总结。即把同属一个类的对象所具有的共同特征的描述提取出来,作为一个概念来研究工具箱上的所有控件对象——实际存在的东西,是类的具体表现,即类的实例化与现实世界不同在于:在面向对象程序设计中是先有类才有对象例:被拖动到窗体上的控件3/25/2024属性——一个对象具有的静态特征同属于一个类的对象具有相同的属性,但每个对象属性值可能不同例:方法——一个对象具有的动态特征,它是指对象所具有的动作和行为例:对象.方法[参数列表]例如:form1.print“你好!” form1.cls3/25/2024事件:对象能够识别并做出反响的外部刺激,用来传递信息当人受到该事件刺激时就会作出反响,在应用程序中我们称之为事件过程例:Sub对象名_事件过程名[〔参数列表〕]…..(事件过程代码〕EndSub例如:Subcommand1_Click()command1.Visible=FalseEndSub3/25/20241.5VB应用程序开发过程创立VB应用程序的五个主要步骤:新建一个工程创立应用程序界面设置属性编写代码保存工程→进行编译与运行应用程序,生成exe可执行程序3/25/20241.5.1新建工程方法一:翻开vb,默认就已经有一个工程方法二:文件→新建工程3/25/20241.5.2创立应用程序界面控件的画法方法一:鼠标拖动方法二:双击鼠标注意鼠标与CTRL键的配合使用控件的选择改变控件大小移动控件使用鼠标通过“属性”窗口锁定控件格式菜单窗体编辑器Ctrl键微调控件的复制和删除3/25/2024设置窗体和控件的属性属性窗口的翻开视图——属性窗口工具栏上的属性窗口按钮设计窗体上右键——选择“属性窗口”属性窗口的三个元素对象框排序选项卡属性列表3/25/2024设置属性的几个步骤〔设计模式下〕选择对象鼠标选择属性对象框列表中选择修改属性对于定义的属性值设置下拉列表框双击列表项在程序的代码中通过赋值实现,其格式为:对象名.属性=属性值例如:command1.Caption=“显示”3/25/2024例:设计如右界面Form注意Name属性、Capion属性以及窗体名称的区别!TextboxLabelCommand3/25/2024编写事件过程翻开代码编辑器双击要编写代码的窗体和控件工程管理窗口中单击“查看代码按钮”选项——编辑器——缺省为整个模块查阅左下角的“过程查看”按钮典型的时间序列启动应用程序,装载和显示窗体窗体或控件接收有用户引发或系统或代码间接引发的事件假设相应的事件存在代码那么执行代码等待下一次事件3/25/2024保存、编译、创立exe文件保存运行应用程序F5“启动”按钮运行——启动创立exe可执行文件3/25/20241.6VisualBasic应用程序的结构一个VB应用程序中各主要文件的结构关系如以下图:3/25/2024注意窗体名与窗体文件名的区别保存时出现的两次保存对话框如何翻开一个已存在的应用程序工程资源管理窗口窗体模块(.frm)类模块(.cls)标准模块(.bas)3/25/20242.1代码根底在代码中添加注释‘我是注释将单行语句分成多行使用续行符:空格加下划线例:Print_“你好!”在同一行内续行符后不能加注释将单个语句合并到同一行使用冒号分开例:Text1.text=“hello”:I=9:cmd.caption=“确定”在VB编写代码过程中无大小写区分,但必须使用半角符号3/25/20242.2数据类型及计算根本数据类型数据类型宽度(字节)取值范围Byte(字节型)1(8位)0~255间的无符号数(非负)Integer%(整型)2(16位)-32768~32767Long&(长整型)4(32位)-2147483648~2147483647Single!(单精度浮点型)4(32位)符号位1位,指数8位,23位尾数-3.402823*1038~3.402823*1038Double#(双精度浮点型)8(64位)符号位1位,指数11位,52位尾数-1.79769313486232*10308~1.79769313486232*103083/25/2024Boolean(逻辑型、布尔型)2(16位)TRUE/FALSECurrency@(货币型)8(64位)-922337203685477.5808~922337203685477.5808String$(字符型)使用双引号定长字符串型最多不能超过65536(216)个字符变长字符串型最多不能超过20亿(231)个字符Date#(日期型)8使用“#”将日期时间文字括起来如:#2007/03/20#Object(对象型)4Variant(变体型)根据需要分配3/25/2024一、字符串型〔String〕字符串包括除双引号和回车以外可打印的所有字符,双引号作为字符串的定界符号。例:“1234”,“张三”,“”注意字符串中空格是有效字符。二、数值型VB中的数值型数据分为整型和实型两大类。1.整型整型数是不带小数点和指数符号的数。包括整型、长整型和字节型整数3/25/2024〔1〕整型〔Integer,类型符%〕整型数用两个字节存储,取值范围是-32768到+32767。例:15,-345,654%都是整数型。而45678%那么会发生溢出错误。〔2〕长整型〔Long,类型符&〕长整型用4个字节存储,取值范围是-2147483648到+2147483647。例:123456,45678&都是长整数型。〔3〕字节型〔Byte〕用一个字节存储,取值范围是0到255。3/25/20242.实型实型数据主要分为单精度、双精度和货币型3种。〔1〕单精度浮点数〔Single,类型符!〕单精度数用4个字节存储,有7位有效数字,取值范围1.401298E-45<|x|<3.402823E+38。例:3.14!,2.718282。(2)Double〔双精度,类型符#〕3/25/2024〔3〕货币型〔Currency,类型符@〕货币型数据主要用来表示货币值,用8个字节存储,货币型是定点数,精确到小数点后面第4位,第五位四舍五入。整数局部最多15位。例如:3.56@、65.123456@都是货币型。三、逻辑型〔Boolean〕 逻辑型数据只有两个:逻辑真True和逻辑假False,用2个字节存储。当把逻辑值转化为数值型时,False为0,True为-1。3/25/2024四、日期型〔Date〕日期型数据用8个字节来存储,日期范围从公元100年1月1日到9999年12月31日,可以用#括起来放置日期和时间,允许用各种表示日期和时间的格式。日期可以用“/”、“,”、“-”分隔开,可以是年、月、日,也可以是月、日、年的顺序。时间必须用“:”分隔,顺序是:时、分、秒。例:#1999-08-1110:25:00pm#、#08/23/99#、#03-25-7520:30:00#、#98,7,18#等都是有效的日期型数据。在VB中会自动转换成mm/dd/yy〔月/日/年〕的形式。3/25/2024五、变体型〔Variant〕 变体型也称为可变类型,它是一种特殊的数据类型。它的类型可以是前面表达的数值型、日期型、字符型等,完全取决于程序的需要。从而增加了VB数据处理的灵活性。3/25/2024六、自定义数据类型[Public/Private]Type自定义数据类型名 元素名一 As 已有的数据类型 元素名二 As 已有的数据类型 ……EndType自定义数据类型中元素的类型必须使用“As数据类型”来显示声明自定义数据类型中的元素为字符串时必须是定长字符串,格式:String*常数3/25/2024例:PrivateTypeTeacher intNum As Integer strName As String*8 stu(50) As StudentEndType3/25/2024七、枚举类型[Public/Private]Enum自定义数据类型名 元素名1[=元素值] 元素名2[=元素值] ……EndEnum例:PrivateEnumColor red=1 orange=2 green cyan=5 blue amethyst EndEnum 返回第一个元素值默认为0,元素值为任何长整型数3/25/2024变量变量:在程序执行过程中,值会改变的量。在内存中有一定大小的存储空间,VB中执行应用程序期间,用来临时存储数据。它包括名字和数据类型命名规那么:只能以字母开头,由数字、字母和下划线组成不能包括标点符号<=255个字符不能与关键字重复在同一个作用域中,变量名不能重复2a a_3 integer a~4对变量起名字建议使用前缀如:gstrUserName3/25/2024声明变量:VB中变量不被声明也可以使用,未声明的变量是Variant。但很容易出错,为了防止,就要强制声明强制声明变量方法:在模块的声明段加上:optionexplicit3/25/2024变量的显示声明Dim/Static局部变量名As类型名DimStatic静态变量Dim/Private模块变量名As类型名Public/Global全局变量名As类型名例DimblnChoiceAsBooleanPublicaasLongPrivatetasStringDimgstr$DimIasinteger,jasSingle过程级窗体/标准模块级标准模块级3/25/2024变量的作用域局部变量又称过程级变量,在过程中声明,且只能在这个过程中使用,可以在一个过程中的任何位置声明过程级变量。Dim关键字的特点是当所有过程执行完毕,变量就会消失,释放所占的内存。下次使用重新分配。Static关键字声明的是静态变量,只有在过程被第一次执行时分配内存空间,执行结束后占用的内存仍保存,直到下一次时变量值仍存在。3/25/2024标准模块级变量是指在声明变量的这个模块中的所有过程都可以使用的变量。声明模块级变量要在模块开始的通用声明段中全局变量是指在所有模块中都可以使用的变量,要在模块开头的声明段中声明。3/25/2024隐式声明P26对于局部变量可以使用隐式声明例:I%=234J$=“234”变量的赋值:使用“=”例1:dimmynameasstring myname=“Mike”X%=2203/25/2024使用print方法显示变量的值:I=9S=“你好!”PrintI?s思考:下面的x与y的值在单击两次命令按钮后会等于多少?Privatesubcommand1_click()DimxasintegerStaticyasintegerx=x+1y=y+1X=789Printx,yEndsub3/25/2024变体变量可以存储除定长字符串与自定义类型之外的任何系统定义类型的数据DimvasvariantV=214V=“hello”是VB默认类型的变量类型DimvDimint1,int2,int3AsInteger可以引用对象三个特殊的值EmptyNull——数据未知或不确定Error3/25/2024对象变量定义:Dim变量名AsObject/Control/对象变量名Object——所有对象Control——所有控件对象变量名——某种类型的对象型变量赋值:Set对象变量=对象名对象被声明为特定类型的对象时只能引用该类型的变量例:Dimobj3AsTextBox Setobj3=cmdok对象型变量在声明之后赋制之前值为Nothing例2.43/25/2024枚举类型的变量是一个模块级、长整型变量例2.5例数据类型的转换出现情况赋值变量赋值:x%=30.5〔取整数局部〕属性赋值:Form1.Caption=123方法、过程的调用表达式的计算3/25/2024隐式转换〔不同类型变量赋值或运算〕一般规那么:运算结果类型一般与表示范围大、精度高的数据保持一致数值之间的转换整型→浮点型j!=3浮点型→整型:小数局部“四舍五入”I%=2.6〔注意:假设为2.5那么取整数局部〕字符串与数值类型的转换假设字符串中有非数字字符〔包括空格和空串〕那么显示“类型不匹配”错误3/25/2024逻辑型与数值型的转换False→0,True→-10→Flase,非0→True逻辑型与字符串型的转换true→”true”,false→”false”“true”→True,”false”→False(字符串不区分大小写)日期时间型转换为字符串型:按日期的短格式转换为相应的字符串日期时间型转换为数值型数据:日期局部〔整数局部〕:1899/12/31-日期值〔天数〕时间局部〔小数局部〕:时间/243/25/2024显式转换转换函数将表达式转换成转换函数将表达式转换成Cbool()BooleanCLng()LongCbyte()ByteCSng()SingleCcur()CurrencyCStr()StringCdate()DateCvar()variantCDbl()DoubleCVErr()ErrorCint()IntegerCdec()Decimal3/25/20242.3常量直接常量整型、长整型与字节型〔末尾加&表示长整型常量〕十进制 如:183八进制:以&O开头 如:&O73十六进制:以&H开头 如:&HA7C浮点型浮点数形式如整数局部或小数局部为0,可省略0但不可省略小数点 如:.34 15. 38.28指数形式:men或mEn(m与n都不可省略) 如:8E9 -.5e-83/25/2024字符串型常量如:“I’mgoodatprogramming.”用两个连续的双引号表示一个双引号表示如下文字:他说:“我是程序员。”逻辑型常量:True/False日期时间型常量# 如:#3/7/200513:00:38#“他说:”“我是程序员。“””3/25/2024符号常量有数据类型和常量名几种声明方法过程级:Const常量名[As类型名]=表达式模块级:[Private]Const常量名[As类型名]=表达式全局常量〔在标准模块中声明〕PublicConst常量名[As类型名]=表达式例:ConstPIAsSingle=3.1415926不能在窗体模块和类模块中声明全局常量“=”右端的表达式可以使用不包括函数的表达式或其他常量来赋值3/25/20242.4常用内部函数立即窗口Ctrl+G视图—立即窗口转换函数取整函数函数功能例Int(x)求不大于自变量的整数Int(-4.67)Int(4.67)Fix(x)去掉小数部分,取整Fix(-4.67)Fix(4.67)Round(x)四舍五入,取整Round(-4.67)Round(4.67)3/25/2024数制转换函数Hex$(x)Oct$(x)类型转换函数Asc(字符串)例:PRINTASC(“A”)——显示65Chr$(表达式)Val(字符串)转换过程中遇到字母停止转换例:?Val(“12”+”30”)?Val(“12+30”) ?val(“34ab2”) ?Val(“34e3”)Str$(数值表达式)——1230——12——34——340003/25/2024数学函数三角函数Sin(x)、Cos(x)、Tan(x)、Atn(x)绝对值函数Abs(x)符号函数Sgn(x)平方根函数Sqr(x)指数和对数函数Exp(x),log(x)请表示公式:Sqr(exp(3)*abs(sin(5.121)))3/25/2024日期和时间函数日期函数Day(标记变量)、Weekday(标记变量)、Month(标记变量)、Year(标记变量)标记变量为VB提供的内部变量Now〔variant类型〕当Now为双精度浮点数时,整数局部为1899/12/31到现在所经过的天数,小数局部为从当天0点起所经过的毫秒数Year取值范围为1753~2078Weekday为1~7,1代表星期天Date$函数/语句Date$=日期字符串,字串格式可以为:“dd-mm-yy”,”dd-mm-yyyy”,”dd/mm/yy”,”dd/mm/yyyy”3/25/2024时间函数Hour(标记变量)、Minute(标记变量)、Second(标记变量)Time$函数/语句日期/时间数值转化函数DateValue(日期字符串)字串格式有:dd-mm-yy,dd-mm-yyyy,dd/mm/yy,dd/mm/yyyyTimeValue(时间字符串)日期/时间运算函数DateSerial(年,月,日)TimeSerial(时,分,秒)3/25/2024随机数函数随机数函数Rnd(x)产生一个0~1之间的单精度随机数当x<0时,每次产生的随机数相同当x=0时,产生的随机数与上次相同当x>0和省略时,获得随机系列的下一个随机数产生N~M范围内的随机数:Int(Rnd*(M-N+1))+N例如:产生一个1~6的随机数:INT(Rnd*6)+1Randomize[(x)]:初始化随机数,用以保证每次产生不同的随机数序列3/25/2024字符串函数Ltrm$(c)去掉字符串左边空白字符Ltrm(“A”)”A”Rtrm$(c)去掉字符串右边空白字符Rtrm(“A”)”A”Left$(c,n)取字符串左边的n个字符Left(“ask”,2)“as”Right$(c,n)取字符串右边的n个字符Right(“ask”,2)“sk”Mid$(c,p,n)从p位置开始取字符串的n个字符Mid(“while”,2,4)“hile”Len(c)字符串的长度Len(“while”)5String$(n,c)返回c中首字符组成的n个字符串String(2,“abc”)“aa”String$(n,ASCII)返回c中首字符组成的n个字符串String(3,66)“BBB”3/25/2024InStr(3,“Doityourself”,”you”)7在c1中从n1开始查找c2,省略n1从头开始找找不到为0C1长度为0,返回0C1为Null,返回NullC2长度为0,返回首字符位置C2为Null,返回Null首字符位置>c2位置,返回0InStr([n1,]c1,c2)Lcase(“mY”)“my”把大写转换为小写Lcase$(c)Ucase(“mY”)“MY”把小写转换为大写Ucase$(c)Space(3)“”返回n个空格Space$(n)3/25/20242.3顺序结构程序设计赋值语句使用“=”完成变量的赋值和设定属性操作变量名/属性名=值〔可以为数值、表达式或 属性值〕例:intNum=10Text1.Text=“你好!”str1=Text1.TextInt2=34+8思考:如何将两个变量a和b内的内容互换3/25/2024运算符和表达式算术运算符算术运算的操作数是数值型,结果也是数值型mod运算结果正负号与第一个操作数相同运算速度:加减>乘除>乘方运算符意义形式说明^指数运算A^B-负号-A*乘A*B/除法运算A/B10/3=3.3333333333333\整除运算A\B只能用于整数运算,若有小数则四舍五入转换为整数。绝对值小于0.5的数不能作为被除数Mod求余(模)运算AModB+加法运算A+B还可做字符串连接符(&)-减法运算A-B高低3/25/2024关系运算符——结果为逻辑型数据运算符例结果<23<3False<=“23”<=“3”True>“ABCDE”>”ABR”Fasle>=“bc”>=“大小”False=“abc”=“abr”False<>“abc”<>”ABC”True以上运算符优先级相同,假设同时出现,那么从左到右依次结合运算8<>5>9 <=> (8<>5)>9关系运算符的优先级低于算术运算符5>9+4 <=> 5>(9+4)3/25/2024关系运算的规那么如下:〔1〕当两个操作式均为数值型,按数值大小比较。〔2〕字符串比较,那么按字符的ASCII码值从左到右一一比较,直到出现不同的字符为止.。例:"ABCDE">"ABRA" 结果为False〔3〕数值型与可转换为数值型的数据比较,如:29>"189",按数值比较,结果为False。〔4〕数值型与不能转换成数值型的字符型比较,如:77>"sdcd",不能比较,系统出错。3/25/2024逻辑运算符——结果为逻辑型3/25/2024逻辑运算“真值表”ABAANDBAORBNOTAAImpBAEqvBAXorBTTTTFTTFTFFTFFFTFTFTTTFTFFFFTTTF3/25/2024表达式的书写中需注意的问题〔1〕运算符不能相邻。例a+-b是错误的。〔2〕乘号不能省略。例x乘以y应写成:x*y〔3〕括号必须成对出现,均使用圆括号。〔4〕表达式从左到右在同一基准并排书写,不能出现上下标〔5〕要注意各种运算符的优先级别,为保持运算顺序,在写VB表达式时需要适当添加括号〔〕。如:

(b-sqr(b*b-4*a*c))/(2*a)(a+b)/(a-b)3/25/2024表达式的执行顺序一般情况下为从左到右,但如果有优先级高的运算符那么优先运算,接下来为较高的运算符,最后才是优先级最低的运算符当运算符不止一种时:算术运算>=字符运算>关系运算>=逻辑运算可以用括号改变优先顺序,强令表达式的某些局部优先运行。括号内的运算总是优先于括号外的运算。对于多重括号,总是由内到外。例:3+5*2-14mod3 5+34<14-6ornot“a”<“A”and14Mod2 5+34<14-6andnot“a”<“A”or14Mod2 5+34<14-6ornot“A”<“a”and14Mod3 3/25/2024例一:性别为“男”、年龄小于40岁、职称为副教授以上(教授或副教授)性别=“男”and年龄<40and(duty=“副教授”orduty=“教授”)例二:润年(能被4整除并且不能被100整除或者这个数能被400整除)(YearMod4=0andYearMod100<>0)or(YearMod400=0)例三:请表示:10≤X<20 X>=10AndX<203/25/2024数据输出Print方法输出 [对象名.]Print[输出列表]对象包括:窗体、图片框、打印机和立即窗口Print语句每执行一次就自动换行输出列表可为数值表达式或字符串。对于表达式,先计算后输出,输出后自动换行。输出列表可以用分隔符〔逗号、分号或空格〕将表达式隔开:逗号:以14个字符位置为单位把一个输出行分为假设干个区段,逗号后的表达式在下一个区段输出分号或空格:按紧凑输出格式输出数据3/25/2024与Print方法有关的函数Tab(n):光标移到n指定的位置例:PrintTab(10);”ac”当n比行宽大时显示位置为nMod行宽;当n<1〔最左边的行号〕,输出位置移到第一列例2.8Spc(n):光标跳过n个空格与Tab(n)函数类似,区别Space$(n)产生n个空格字符串3/25/2024Formate$(数值表达式[,格式字符串])按“格式字符串”指定格式输出“数值表达式”可以对数值或日期格式化Print语句没有赋值功能,不能在输出数据时对变量赋值printa=4Print“a=4”例:Print“23-12=”;Print23-12Print“★”;“☆”;“◆”Print3/25/2024Format函数例如

①数值格式化

Format(8315.4,“00000.00”) 08315.40

Format(8315.4,“#####.##”) 8315.4

Format(8315.4,“##,##0.00”) 8,315.40

Format(315.4,“$##0.00”) $315.40

②日期和时间格式化

Format(Now,“m/d/yyyy”) 2/22/2004

Format(Now,“ddd,mmdd,yy”) Sun,0222,04

Format(Now,“d-mmm”) 22-Feb

Format(Now,“mmmm-yy”) February-04

Format(Now,“hh:mmAM/PM”) 04:18PM 3/25/2024使用Text控件输出例:Dimint1asintegerint1=39text1.text=str(int1)Text1.text=“你好”数据输入InputBox函数功能:翻开一个对话框,等待用户键入内容。当用户单击“确定”按钮或按回车键时,函数返回输入的值,单击取消按钮时,返回空字符串。3/25/2024语法:InputBox(提示[,标题][,默认值][,x座标][,y座标][,帮助文件][,主题])Text1.text=InputBox("请输入信息","信息输入框","Mike“)3/25/2024例1:uName=InputBox(“你叫什么?”,“输入姓名”,“无名氏”)例2:dimstrSasString*40,strNameasString*40

strS=“请输入你的姓名”+Chr(13)+Chr(10)+”然后单击确定”

strName=InputBox(strS,”输入框”,,100,100)text1.text=strname利用TEXT控件输入例:dimint1asintegerint1=cint(text1.text)Printint13/25/2024MsgBox语句功能:弹出一个对话框用来提示用户语法:MsgBoxprompt[,buttons][,title]buttons参见书P56MsgBox"我是提示信息!",vbOKOnly+vbCritical,"我是标题"3/25/2024MsgBox函数功能:在对话框中显示消息,等待用户单击按钮,并返回一个Integer类型的数告诉用户单击哪一个按钮语法:变量%=MsgBox(提示[,按钮][,标题])注意:带()的Msgbox〔即msgbox函数〕是有返回值的,需要赋值给变量;而不带()的msgbox〔即msgbox语句〕无返回值,不需要赋值给变量,用于显示较简单的信息返回值参见书P573/25/2024DimIasIntegerI=MsgBox(“我是提示信息!”,vbYesNoCancel+vbQuestion,“我是标题”)变量I的值就是用户单击的那个按钮的值——假设用户单击了“是”按钮,那么I的值即为6;假设用户单击了“否”按钮,那么I的值即为7;假设用户单击了“取消”按钮,那么I的值即为23/25/2024例:I=msgbox(“您的名字叫张三?”,vbyesno+32,”姓名提示”)ifI=6then?“欢送张三!”else?“您不是张三!”Endif3/25/2024字形字体类型FontName一般格式:[窗体名.]/[控件名.]/Printer.FontName[“=字体类型名”]字体大小FontSize[=点数]默认的最小点数为9粗体FontBold[=Boolean]如:Form1.FontBold=True斜体FontItalic[=Boolean]删除线FontStrikethru[=Boolean]加下划线FontUnderline[=Boolean]重叠显示FontTransParent[=Boolean]3/25/2024打印机输出直接输出:Printer.Print[输出列表]打印机对象的Page属性功能:设置页号打印机对象的NewPage属性功能:强制打印机跳到下一页打印打印机对象的EndDoc属性功能:结束文件打印窗体输出:[窗体名.]PrintForm功能:将窗体显示的信息输出到打印机上3/25/2024顺序结构程序思考题⑴银行存款的本利计算公式:P=P(1+R)n其中P为本息,P为本金,R为年利率,N为存款年限。说明:要求所以变量的值用inputbox函数来获得,最后的结果使用msgbox语句〔或者print方法〕显示输出。(2)三边求三角面积公式:其中A、B、C为三边长度,S为三边长度和的一半。说明:要求所以变量的值使用三个文本框来获得。最后的结果也用文本框显示提示:需要使用三个文本框,一个命令按钮3/25/20242.3选择结构程序设计

在程序设计中经常遇到这类问题,它需要根据不同的情况采用不同的处理方法。例如,一元二次方程的求根问题,要根据判别式小于零或大于等于零的情况,采用不同的数学表达式进行计算。对于这类问题,如果用顺序结构编程,显然力不从心。必须借助选择结构。本章主要介绍实现选择结构的语句。包括:行If语句、块If语句、ElseIf语句、SelectCase语句,以及选择结构在程序设计中的应用。3/25/2024块If格式:If条件then语句块1[Else语句块2]EndIf3/25/2024说明: 〔1〕“条件”一般为关系表达式或逻辑表达式。 通常把关系表达式或逻辑表达式的值为真时,称为条件满足;值为假时,称为条件不满足。反之亦然。 〔2〕语句块1、语句块2分别是“条件”满足或不满足时,处理方法的描述,可以是假设干个语句。 〔3〕If…Then、Else、EndIf是VB的保存字。功能: 块If首先判断“条件”,其值为真时,执行语句块1;为假时执行语句块2。当缺省[Else…]中的内容时,该选择结构只对条件满足的情况进行处理。执行过程如以下图所示。3/25/20243/25/2024思考以下程序运行后的最后结果是多少?DimaasInteger,basIntegera=1b=3Ifa<bThena=4Elsea=-1EndIfPrinta3/25/2024【例1】火车站行李费的收费标准是50kg以内〔包括50kg〕0.20元/kg,超过局部0.50元/kg。编写程序,要求根据输入的任意重量,计算出应付的行李费。根据题意计算公式如下:3/25/20243/25/20243/25/2024程序代码如下:'"计算"按钮代码PrivateSubCommand1_Click〔〕Dimweightassingle,payassingle’获得文本框1中输入内容weight=Text1.TextIfweight>50Thenpay=〔weight-50〕*0.5+50*0.2Elsepay=weight*0.2EndIf’使文本框2显示应付款Text2.Text=payEndSub3/25/2024PrivateSubCommand2_Click〔〕Text1.Text=""Text2.Text=""EndSubPrivateSubCommand3_Click〔〕EndEndSub3/25/2024块If的嵌套

所谓块If语句的嵌套,就是在语句块1或语句块2中又包含块If语句。If<表达式1>then

if<表达式11>then ……

endif……endif 在使用这种条件的嵌套时要注意:有一个Else必然有一个If与之对应,并且配对的If是与它前面最近的一个未配对的If语句。嵌套不可以交叉

3/25/2024【例2】任意输入3个数,按照从大到小的顺序输出。程序运行界面如以下图:

3/25/2024算法分析:排序的根本方法,就是比较大小,然后根据比较的结果分别加以处理。本例把3个数分别放在A,B,C中,处理过程为:假设A<B为真,交换A,B的值;否那么不做处理。这样就保证了A≥B;然后再用C去比较。具体流程以下图所示:3/25/20243/25/2024属性设置表3/25/2024程序代码如下:‘"排序"按钮代码PrivateSubCommand1_Click〔〕DimaAsSingle,cAsSingle,bAsSingle,tasSinglea=Text1.Textb=Text2.Textc=Text3.Text'三个文本框的数据赋值给变量Ifa<bThent=aa=bb=t 'a<b时交换a、b的值EndIf '保证A>B3/25/2024Ifc>aThen '用C去比较Text4.Text=c 'C>A成立,C最大Text5.Text=aText6.Text=bElseIfc<bThenText4.Text=a'C<B成立,C最小Text5.Text=bText6.Text=cElseText4.Text=a'C处于中间Text5.Text=cText6.Text=bEndIfEndIfEndSub3/25/2024ElseIf语句格式:If条件1then语句块1ElseIf条件2then语句块2……[Else语句块n+1]EndIf3/25/2024功能: 〔1〕依次判断条件,如果找到一个满足的条件,那么执行其下面的语句块,然后跳过EndIf,执行后面的程序。 〔2〕如果所列出的条件都不满足,那么执行Else语句后面的语句块;如果所列出的条件都不满足,又没有Else子句,那么直接跳过EndIf,不执行任何语句块。 ElseIf结构的执行过程如以下图所示。3/25/2024ElseIf结构执行过程3/25/2024【例3】输入一个学生的一门课分数x〔百分制〕,当x≥90时,输出“优秀”;当80≤x<90时,输出“良好”;当70≤x<80时,输出“中”;当60≤x<70时,输出“及格”,当x<60时,输出“不及格”。 算法分析:本例适合用多路分支结构来解决。运行界面如以下图所示。3/25/20243/25/2024属性设置表3/25/2024程序代码如下:'"鉴定"按钮代码PrivateSubCommand1_Click〔〕Dimscore!score=Text1.TextIfscore>=90ThenText2.Text="优秀"ElseIfscore>=80andscore<90ThenText2.Text="良好"ElseIfscore>=70andscore<80ThenText2.Text="中"3/25/2024ElseIfscore>=60andscore<70ThenText2.Text="及格"ElseText2.Text="不及格"EndIfEndSub

'“退出”按钮代码PrivateSubCommand2_Click〔〕EndEndSub3/25/2024‘“鉴定”按钮代码的条件判断还可写成如下:PrivateSubCommand1_Click〔〕Dimscore!score=Text1.TextIfscore>=90ThenText2.Text="优秀"ElseIfscore>=80ThenText2.Text="良好"ElseIfscore>=70ThenText2.Text="中"3/25/2024ElseIfscore>=60ThenText2.Text="及格"ElseText2.Text="不及格"EndIfEndSub

3/25/2024ElseIf语句,实际完成的是块If的嵌套,它和块If嵌套的格式上有很大区别,ElseIf结构只有一对If和EndIf语句。另外应注意:【ElseIf】和【ElseIf】的区别。3/25/2024行If语句格式:If条件then语句1[Else语句2] 功能:当条件满足时,执行语句1;条件不满足时,执行语句2。 从行If的格式和功能不难看出,行If语句是一种简单的分支结构,只是把一个简单的块If结构写在一行中,减少了语句行,省略了“EndIf”的书写。行If完全可以用块If代替。3/25/2024【例4.4】任意输入3个数,找出其中的最大值。3/25/2024属性设置表3/25/2024程序代码如下:PrivateSubCommand1_Click〔〕DimaAsSingle,bAsSingle,cAsSingle,maxAsSinglea=Val(Text1.Text)b=Val(Text2.Text)c=Val(Text3.Text)max=aIfb>maxThenmax=bIfc>maxThenmax=cText4.Text=maxEndSubIfb>maxthenMax=bEndifIfc>maxthenMax=cEndif3/25/2024Bad!请判断下面程序段的嵌套情况

Ifscore>60ThenIfflag=1Thenx=x+5Elsex=x+10EndIfElseIfflag=1Thenx=x-5ElseIfflag=0Thenx=x-10EndIfIfscore<=60Thenx=x+20EndIfGood!Ifscore>60ThenIfflag=1Thenx=x+5Elsex=x+10EndIfElseIfflag=1Thenx=x-5ElseIfflag=0Thenx=x-10EndIfIfscore<=60Thenx=x+20EndIf3/25/2024Iif函数语法为:Iif(表达式1,表达式2,表达式3〕当表达式1为TRUE时,返回表达式2的值,否那么返回表达式3的值GOTO语句GOTOLINE例子见书663/25/2024SelectCase语句当对一个表达式的不同取值情况作不同处理时,用ElseIf语句程序结构显得较为杂乱,而用SelectCase语句将使程序的结构更清晰,SelectCase语句又称为情况语句。3/25/2024格式:SelectCase测试表达式Case表达式列表1语句块1Case表达式列表2语句块2…Case表达式列表n语句块n[CaseElse语句块n+1]EndSelect3/25/2024功能:根据“测试表达式”的值,选择第一个符合条件的语句块执行。 SelectCase语句的执行过程是:先求“测试表达式”的值,然后顺序测试该值符合哪一个Case子句中情况,如果找到了,那么执行该Case子句下面的语句块,然后执行EndSelect下面的语句;如果没找到,那么执行CaseElse下面的语句块,然后执行EndSelect下面的语句。3/25/2024说明:“测试表达式”可以是数值型或字符串型表达式;“表达式列表”形式有以下3种:〔1〕一个表达式或用逗号隔开的假设干表达式如:Case6或:Case1,3,5,7〔2〕表达式1To表达式2 如:Case1To10〔3〕Is关系运算符表达式如:CaseIs>=803/25/2024【例4.5】把例4.3中“鉴定”按钮的代码用SelectCase语句改写。PrivateSubCommand1_Click〔〕Dimscore!score=Text1.TextSelectCasescoreCaseIs>=90Text2.Text="优秀"3/25/2024CaseIs>=80Text2.Text="良好"CaseIs>=70Text2.Text="中"CaseIs>=60Text2.Text="及格"CaseElseText2.Text="不及格"EndSelectEndSub3/25/2024ONGOTO语句见书683/25/2024选择结构程序思考题2.模仿“幸运52”节目中猜某商品价格的方式,设计一个猜数字游戏。按“开始”按钮开始游戏,用户将猜到“数字”输入到输入框内,然后按“回车”键或点击“判定”按钮确认。软件应根据输入的“数据”进行判断,并〔用Textbox控件〕显示提示结果:“高了!”、“低了!”和“已经很接近答案了,努力啊!”。3.模拟掷筛子游戏,产生1~6的随机数,根据筛子的点数决定中奖情况4.设计一个密码输入界面,要求有密码验证功能1.计算分段函数Y=x≠0x=03/25/20242.4循环结构程序设计在实际工作中,常遇到一些操作过程不太复杂,但又需要反复进行相同处理的问题,比方,在窗体上打印一百条相同的字符串,这个问题的解决逻辑上并不复杂,但如果单纯用顺序结构来处理,那将得到一个非常乏味且冗长的程序:3/25/2024Print“你好“Print"你好“Print"你好“Print"你好“Print"你好“Print"你好“……Print"你好“Print"你好“100次3/25/2024由上面的例子不难看出,程序其实就是在反复执行语句:Print"你好",程序当然非常简单易懂,但缺乏最根本的编程技巧。要想方便地解决这类问题,最好的方法就是用循环语句。 所谓循环就是重复地执行一组语句。 我们用循环语句解决上面的问题,程序非常简短:Fori=1To100Print"你好“Nexti3/25/2024上述程序段便是一个循环语句,在循环过程中第2句被反复执行了100次,从而打印出最终的图形。 通过上面的比照可知,循环结构非常适合于解决处理的过程相同、处理的数据相关,但处理的具体值不同的问题。我们把能够处理这类问题的语句称为循环语句。 VB提供了三种不同风格的循环语句,它们分别是: 〔1〕While…Wend语句; 〔2〕For…Next语句; 〔3〕Do…Loop语句。 我们将对这3种循环语句逐一介绍。3/25/2024循环:同一个程序段重复执行假设干次当型循环当条件表达式为True时执行循环,为False时退出循环关键字为while直到型循环执行循环,直到条件表达式的值为True时才结束循环关键字为until条件循环体FalseTrue条件循环体FalseTrue3/25/2024循环语句必须包含的三局部内容循环初始条件终止条件循环体用If语句和GoTo语句实现循环见书72语句和Wend实现循环早期Basic语言语法:While条件 语句块〔循环体〕Wend 3/25/2024结合下面的程序段,我们做进一步的说明:x=1Whilex<5Printx,x=x+1Wend该程序段的执行结果是:1234循环的初始条件循环的终止条件循环体3/25/2024思考:如果令第一条语句:“x=1”改为x=5,会出现什么情况?如果把第二句的“x<5”改为“x<10”,“x>0”以及”x>1”结果又都如何?如果删去x=x+1这一条语句结果会如何?x=1Whilex<5Printx,x=x+1Wend3/25/2024While循环的几点说明While循环语句本身不能修改循环条件,所以必须在While…Wend语句的循环体内设置相应语句,使得整个循环趋于结束,以防止死循环。While循环语句先对条件进行判断,然后才决定是否执行循环体。如果开始条件就不成立,那么循环体一次也不执行。【例1】求1+2+3……+103/25/2024程序如下:PrivateSubForm_Click〔〕DimIAsInteger,sAsIntegerI=0s=0WhileI<10I=I+1s=s+IWendPrint"1+2+3……+10的结果是:";sEndSub思考:如果把这两行代码对调,是否也能得到希望的结果?3/25/2024用For…Next语句实现循环For计数器变量=初始值To终止值[Step增量] 循环体 [ExitFor]Next[计数器变量]说明循环变量:亦称为循环控制变量,必须为数值型。初值、终值:都是数值型,可以是数值表达式。增量:循环变量的增量,是一个数值表达式。一般来说,增量为正,初始值应小于终止值;假设为负,初始值应大于终止值。步长不能是0。如果步长是1,Step1可略去不写。循环体:在For语句和Next语句之间的语句序列。Next后面的循环变量与For语句中的循环变量必须相同。执行过程3/25/20243/25/2024这里所说的“超过”有两种含义,即大于或小于。当步长为正值时,循环变量大于终值为“超过”;当步长为负值时,循环变量小于终值为“超过”。Int2=0Forint1=1to10step–1int2=int2+1Next‘以上循环体执行次数为0次!我们通过分析下面的程序来进一步理解For语句的执行过程。3/25/2024Forn=1To10Step3Printn,Nextn具体执行情况如下:第几次循环 n 与终值比较 执行循环体否 1 1 <10 执行 2 4 <10 执行 3 7 <10 执行 4 10 =10 执行 5 13 >10 停止执行 上面程序的执行结果为:147103/25/2024循环次数:Int(〔终值-初值〕/步长+1)如判断下面程序段执行次数:1、Int2=0Forint1=1to–2step–1int2=int2+1next2、Int2=0Forint1=1to10step1exitforint2=int2+1next3/25/2024例:使用for循环语句在窗体上打印如以下图形3/25/2024PrivateSubForm_Click()PrintTab(10);"※"ForI=0To6PrintTab(10);"※";Spc(2*I);"※"NextIPrintTab(10);"※※※※※※※※※"EndSub3/25/2024思考:如果上述图形到下个儿〔如以下图所示〕,上述的代码应该如何修改?3/25/2024PrivateSubForm_Click()PrintTab(10);"※※※※※※※※※"ForI=6To0Step-1PrintTab(10);"※";Spc(2*I);"※"NextIPrintTab(10);"※"EndSub3/25/20242.4.4Do…Loop语句实现循环当型循环形式Do[While条件] 语句块〔循环体〕 LoopDo 语句块〔循环体〕 Loop例2.23将数字反转ExitDoDoWhileTrue语句块〔循环体〕LoopDo语句块〔循环体〕LoopWhile条件思考:如果要把计算的结果值从文本框(textbox)中输出应该如何修改程序?3/25/2024例:把While和Wend计算1~100之间数的总和的代码改为求所有奇数的总和,并用do-while语句实现PrivateSubForm_Click()DimIAsInteger,sAsIntegerI=0s=0dowhileI<100I=I+1IfIMod2<>0Thens=s+IEndIfLoopPrint"1~100的奇数和是:";sEndSub3/25/2024直到型循环DoUntil条件 语句块〔循环体〕 LoopDo 语句块〔循环体〕 LoopUntil条件例2.24计算n的阶乘注意:使用For实现的循环,循环的次数事先,而doloop(while或until)实现的循环次数事先未知3/25/2024例:求两自然数m,n的最大公约数。设计思想:〔1〕m除以n得到余数r;〔2〕假设r=0,那么n为要求的最大公约数,算法结束;否那么执行〔3〕;〔3〕n→m,r→n,再转到〔1〕执行。 程序如下:PrivateSubcommand1_Click〔〕Dimm%,n%,r%,m1%,n1%m1=Val〔Text1.Text〕 n1=Val〔Text2.Text〕3/25/2024m=iif(m1>n1,m1,n1)n=iif(n1<m1,n1,m1)r=mModnDoUntilr=0m=nn=rr=mModnLoopPrint"它们的最大公约数是";nEndSubDimm%,n%,r%,temp%M=val(text1.text)N=val(text2.text)Ifm<nthentemp=mm=nn=tempEndif……3/25/20243/25/2024循环的嵌套循环的嵌套是指一个循环体内完整地包括了另一个循环。一重循环套一重为二重循环,如果二重循环的内循环中又包含一个循环,那么称为三重循环,依此类推。三重以上的可称为多重循环。〔循环语句还可以与条件语句的嵌套〕注意:使用几个For循环嵌套时要注意使用不同的变量名For循环和Do可以混合嵌套,但是各循环间不得交叉。下例是非法的循环嵌套。ForI…ForJ……NextINextJ就和我们一层层的包裹东西是一样的!3/25/2024DoFor DoLoopNextLoop二重循环三重循环正确的循环为:3/25/2024Do ForI=1to10… …forI=1to10 Do … … ExitDo ExitfornextI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论