此科目答案未上传,可以右侧扫码联系客服或者加HAA600,获取最新资料
《VisualBasic程序设计》形考任务一答案
请同学选择《第1章》-《实战演练》“实验1欢迎程序”或《第2章》-《实战演练》“实验2计时秒表程序”的其中之一,在VB集成开发环境中认真完成实验。
实验完成后,将调试好的程序保存在以“姓名+实验名称”命名的文件夹下,并将该文件夹压缩成.rar或者.zip格式进行提交。本次实验满分15分,提交后需要辅导教师批阅打分。
实验目的
1学会VB(VisualBasic)6.0的安装,掌握启动与退出VB6.0的方法。
2熟悉VB集成开发环境,掌握工具栏、工具栏、属性窗口、工程资源管理器窗口、代码编辑器窗口的使用。
3掌握建立、编辑和运行一个简单的VB应用程序的全过程。
实验内容
本实验将要开发一个“欢迎”程序。程序运行界面如图1.15所示,完成的功能是:单击“显示”按钮,在文本框内显示“欢迎学习VisualBasic程序设计”字样。
图1.15欢迎程序运行界面
实验步骤
1界面设计
(1)启动VisualBasic6.0,在出现的“新建工程”对话框中,单击“打开”按钮,进入VB集成开发环境,出现Form1的窗体,如图1.16所示。
图1.16“Form1”窗体
(2)在Form1窗体上添加控件。用鼠标单击工具箱中的文本框按钮,然后在Form1窗体上用鼠标拖曳,或者直接双击工具箱中的文本框按钮,在Form1窗体上形成一个默认名为Text1的按钮对象,用同样方法将工具箱中的命令按钮添加到Form1窗体上,调整好位置,如图1.17所示。
图1.17在窗体上添加控件
(3)设置窗体的属性。单击Form1窗体,在属性窗口列表的左栏中选择Caption属性,并将右栏中的属性值改为“欢迎”,窗体效果如图1.18所示。
图1.18设置了Form1属性后的窗体
(4)设置控件的属性。在窗体上单击Command1按钮控件,在属性列表的左栏中选择Caption属性,并将右栏中的属性值改为“显示”。单击文本框控件,在属性列表的左栏中找到Text属性,将其值Text1删除。更改了属性值之后的应用程序界面如图1.19所示。
图1.19设置属性后的应用程序界面
2代码设计
双击窗体上的Command1按钮,可在代码编辑器窗口中自动建立起Command1_Click事件的代码框架。在Command1_Click事件过程中添加代码:Text1.Text="欢迎学习VisualBasic程序设计",如图1.20所示。
图1.20Command1_Click事件的代码
注意:
代码顶部的OptionExplicit语句用于要求对程序中的变量进行显示声明。要使该语句自动生成,可从“工具”菜单中选择“选项”,在弹出的“选项”对话框中,将编辑器选项卡中“要求变量声明”前的复选框选中即可。
3保存和运行工程
单击工具栏上的“保存”按钮,将窗体、工程分别以hy.frm、hy.vbp保存在磁盘上预先建立好的文件夹中。单击工具栏中的“启动”按钮,再单击运行界面上的“显示”按钮,在文本框中显示“欢迎学习VisualBasic程序设计”,如图1.15所示。
4生成可执行文件
从“文件”菜单中选择生成hy.exe,在“生成工程”对话框中,单击“保存”按钮。该文件可以脱离VB环境,在操作系统下单独运行。
VisualBasic程序设计形考任务二答案
请同学选择课程《第3章》-《实战演练》“实验3冒泡排序程序”,在VB集成开发环境中认真完成实验。
实验完成后,将调试好的程序保存在以“姓名+实验名称”命名的文件夹下,并将该文件夹压缩成.rar或者.zip格式进行提交。本次实验满分15分,提交后需要辅导教师批阅打分。
实验目的
1理解冒泡排序算法。
2掌握循环、分支结构的使用方法。
3掌握断点设置、监视跟踪等调试方法,深入分析该程序的运行过程、值的变化情况。
实验内容
本实验开发一个“冒泡排序”程序,并通过这个程序,巩固一下第2章所学的程序调试方法。这个程序的运行逻辑是:首先用户在Text1中输入一个整数,单击“添加到初始序列中”按钮后将该整数添加到“初始序列”List1中,如此多次后,再单击“排序”按钮,在List2中显示排序结果,我们期望的运行结果如图3.10所示。
图3.10期望的程序运行结果
实验步骤
1界面设计
(1)首先请同学们参照图3.11完成排序程序的界面设计。
图3.11排序程序的界面设计
2编写事件代码
“添加到初始序列中”按钮的Click事件:
PrivateSubCommand1_Click()
List1.AddItemText.Text
EndSub
“排序”按钮的Click事件;
PrivateSubCommand2_Click()
Dimi,jAsInteger
'定义数组,以List1的项目个数为数组维数
DimstrList(List1.ListCount)AsInteger
'定义中间临时变量,用于数据交换
DimstrTmpAsInteger
'将List1中的项目导入到strList数组中
Fori=0ToList1.ListCount
strList(i)=List1.List(i)
Nexti
'按“冒泡”算法完成排序工作
Fori=0ToUBound(strList)
Forj=i+1ToUBound(strList)
IfstrList(i)>strList(j)Then
strTmp=strList(i)
strList(i)=strList(j)
strList(j)=strTmp
EndIf
Nextj
Nexti
'将排序结果输出到List2中
Fori=0ToUBound(strList)
List2.AddItemstrList(i)
Nexti
EndSub
3运行程序并调试程序语法错误
(1)运行程序,在Text1文本框中输入一个整数,比如1,然后单击“添加到初始序列中”按钮,此时会出现如图3.12所示的错误提示。
[i图3.12实时错误
(2)单击“调试”按钮,进入中断模式,VB编译器将自动标识出引发错误的语句行,如图3.13所示窗体。
图3.13自动定位引发错误的语句行
(3)分析错误原因,很容易发现该行语句的正确写法应该是:
List1.AddItemText1.Text
(4)修改错误后,按F5键继续执行程序,将出现如图3.14所示界面。
图3.14排序程序运行界面
(5)依次输入整数序列21、9、8、6后,将出现如图3.15所示界面。
图3.15输入初始序列后的界面
(6)单击“排序”按钮后,又出现如图3.16所示的运行错误。
图3.16编译错误
(7)单击“确定”按钮后,再次进入中断模式,编译器以加重显示的形式指出了引发错误的位置,如图3.17所示。
图3.17以加重显示的形式定位错误
(8)分析如图3.16所示的错误提示“要求常数表达式”后,发现引用错误的原因是不能用变量作为数组的下标,即下列数组声明语句不符合VB语法约定:
DimstrList(List1.ListCount)AsInteger
为此我们作如下选择,即采用动态数组声明的方法。
DimstrList()AsInteger
ReDimstrList(List1.ListCount)AsInteger
(9)选择完成后,按F5键继续执行,又会出现如图3.18所示的错误提示。
图3.18类型不匹配错误提示
(10)单击“调试”按钮后,错误定位如图3.19所示。
图3.19类型不匹配错误定位
(11)分析错误原因发现,我们将数组strList()声明为Integer数据类型,而List1.List()表示的是字符型数据,VB无法进行自动类型转换,因此我们只能通过Val函数进行转换:
strList(i)=Val(List1.List(i))
(12)按F5键继续,程序成功运行,出现如图3.20所示界面。这说明语法错误已基本排除了。但是观察运行结果,发现“排序结果”序列中多出了一个数值0。这种结果并不是我们期望的。
图3.20有问题的运行结果
(13)关闭程序,重新运行,仍然出现图3.20的问题,这说明程序中存在逻辑问题,需要进一步调试。
4设置断点,分析逻辑错误
逻辑错误是最难定位的,对于那些逻辑稍微复杂的程序,常常需要花费大量的时间和精力查找分析。一般要用到设置断点、单步执行和立即调试窗等工具或技术。
(1)单击如图3.21所示位置,设置断点。
图3.21设置断点
(2)按F5键运行程序并输入一组整数,比如5、4、3、2。单击“排序”按钮后,程序将进入中断模式,出现如图3.22所示界面。
图3.22程序遇到断点
(3)在VB集成环境的“立即”窗口中,使用“?”打印strList数组的上界和相关的值,如图3.23所示。当然也可以使用Print、Debug.Print命令,它们等效于“?”。
[图3.23在“立即”窗中观察变量的值
(4)仔细分析不难发现,List1.ListCount的最大值是4,说明数字序列中共有4个数,即5、4、3、2。但是List1.List()的下标是从0开始的,下标最大值应该为3,即:
List1.ListCount–1
为此,我们需要选择strList()数组的上界和循环次数。
'个性数组声明
ReDimstrList(List1.ListCount-1)AsInteger
'修改循环次数
Fori=0ToList1.ListCount-1
strList(i)=Val(List1.List(i))
Nexti
(5)修改后的完整代码及运行结果如图3.24、图3.25[并排这两个图]所示。
图3.24修改后的代码
图3.25最终的运行结果
5程序的进一步完善
这个程序经过调试能够正常运行了,但还是存在一些不足,比如我们可以在Text1中输入非整数、字符和汉字等。另外,当重新单击“排序”按钮后,数字序列会被重复添加到List2中。上述情况下,应用程序并不会报错,但这与我们的设计要求是不相符的,因此需要进一步完善程序功能,主要有以下两种措施,这些知识将在后续章节介绍。请同学们先提前思考一下。
(1)通过Keypress事件控制Text1控件的输入,使它只能接收数字。
(2)在“排序”按钮的Click事件中加入List2.Clear语句。
VisualBasic程序设计形考任务三答案
请同学选择课程《第4章》-《实战演练》“实验4菜单设计”或《第5章》-《实战演练》“实验5鼠标MouseMove事件应用”的其中之一,在VB集成开发环境中认真完成实验。
实验完成后,将调试好的程序保存在以“姓名+实验名称”命名的文件夹下,并将该文件夹压缩成.rar或者.zip格式进行提交。本次实验满分15分,提交后需要辅导教师批阅打分。
实验目的
1掌握菜单编辑器的使用方法。
2掌握下拉式菜单的制作。
实验内容
本实验主要开发一个如图4.21所示的菜单系统。在菜单栏中有“插入”和“颜色”两个菜单,其中“插入”菜单中包含“符号”“图片”“文本框”和“文件”4个菜单项,“文本框”子菜单又包含“横排”和“竖排”两个选项。“颜色”菜单中包含“红色”“蓝色”和“绿色”3个子菜单。

图4.21简单菜单设计
程序的运行逻辑是:若文本框中没有文本,“颜色”菜单中的各项均为灰色显示,表示当前不可用。当用户向文本框中输入了文字后,单击“颜色”菜单中相应的选项可以改变文本框中文字的颜色。
实验步骤
1界面设计
(1)启动VB进入VisualBasic6.0集成开发环境。单击工程菜单下的“菜单编辑器”命令,打开菜单编辑器对话框,如图4.22所示。
图4.22菜单编辑器
(2)在标题框中输入“插入(&I)”,在名称框中输入Insert,这样就创建了“插入”菜单。各菜单控件设置如表4.3所示。
表4.3菜单控件设置
菜单层次 | 标题(Caption) | 名称(Name) | 快捷键设置 |
顶层 | 插入(&I) | Insert | |
一级 | 符号(&S) | Symbol | |
一级 | 图片(&P) | Picture | |
一级 | 文本框(&X) | Text | |
二级 | 横排(&H) | Horizon | |
二级 | 竖排(&V) | Vertical | |
一级 | ? | Sep | |
一级 | 文件(&L) | Document | |
顶层 | 颜色 | Color | |
一级 | 红色(&R) | Red | |
一级 | 蓝色(&B) | Blue | |
一级 | 绿色(&G) | Green |
(3)单击按钮,再单击按钮(条形光标的左端出现了“…”),在标题框中输入“符号(&S)”,在名称框中输入Symbol,即创建了“插入”菜单的一级子菜单:“符号”。
(4)单击[按钮,在标题框中输入“图片(&P)”,在名称框中输入Picture,创建了“插入”菜单的子菜单:“图片”。按照同样方法创建“文本框”子菜单。
(5)单击按钮,再单击按钮,在标题框中输入“横排(&H)”,在名称框中输入Horizon,即创建了“文本框”的下一级菜单:“横排”。用同样方法创建“文本框”的另一个子菜单:“竖排”。
(6)单击按钮,再单击按钮,在标题框中输入“?”,在名称框中输入Sep,创建了分隔条。
(7)单击按钮,在标题框中输入“文件”,在名称框中输入File,创建一级子菜单“文件”。
(8)单击按钮,再单击按钮,在标题框中输入“颜色”,在名称框中输入Color,创建了顶级菜单“颜色”。
(9)仿照上面的步骤,创建“颜色”菜单的一级子菜单:“红色”“蓝色”和“绿色”。创建了各菜单项的菜单编辑器如图4.23所示。
[i图4.23创建了各菜单项后的菜单编辑器
(10)单击菜单编辑器上的“确定”按钮,生成了如图4.24所示的菜单栏。
图4.24菜单设计窗体界面
(11)在Form1窗体上添加文本框Text1,并将文本框的Text属性值清空,将ScrollBars属性设置为3?both,将MultiLine设置为True。
2代码设计
单击工程资源管理器窗口中的“查看代码”按钮,打开代码编辑器窗口,编写如下程序代码:
PrivateSubColor_Click()
IfText1.Text=""Then
Red.Enabled=False
Blue.Enabled=False
Green.Enabled=False
Else
Red.Enabled=True
Blue.Enabled=True
Green.Enabled=True
EndIf
EndSub
PrivateSubRed_Click()
Text1.ForeColor=vbRed
EndSub
PrivateSubBlue_Click()
Text1.ForeColor=vbBlue
EndSub
PrivateSubGreen_Click()
Text1.ForeColor=vbGreen
EndSub
3保存和运行工程
单击工具栏上的“保存”按钮,分别以CDSJ(1).frm和CDSJ(1).vbp保存窗体文件和工程文件。单击工具栏中的“启动”按钮运行程序,在文本框中输入文字,检验效果。
如果程序出现运行错误或者未达到预期效果,则请同学们根据第2章学习的程序调试方法,找找原因并改正。
VisualBasic程序设计形考任务四答案
请同学选择课程《第6章》-《实战演练》“实验6word文件显示程序”或《第7章》-《实战演练》“实验7绘制图形程序”或《第8章》-《实战演练》“实验8网络下载程序”的其中之一,在VB集成开发环境中认真完成实验。
实验完成后,将调试好的程序保存在以“姓名+实验名称”命名的文件夹下,并将该文件夹压缩成.rar或者.zip格式进行提交。本次实验满分15分,提交后需要辅导教师批阅打分。
实验目的
1掌握建立图形坐标系的方法。
2掌握VB图形控件和图形方法以及常见几何图形的绘制方法。
实验内容
我们上网浏览一些精彩的网页时,会经常看到一串五颜六色的字符或漂亮的图片尾随着鼠标不断移动。在VB程序中要实现这一功能非常容易,只需要一个MouseMove事件就可以了,本实验就是要学习这种编程技巧。
实验步骤
1实验步骤
新建标准EXE工程,将默认窗体Form1的Caption属性改为“绘制三角函数图形”,在窗体上添加3个命令按钮Command1、Command2和Command3,将其Caption属性分别改为“建立坐标系”“y=Sin(x)”和“y=Cos(x)”,并按图7.18调整好位置。
2编写代码
双击窗体上的“建立坐标系”按钮,进入代码编辑器窗口,在代码编辑区的Command1_Click()中添加代码:
'绘制坐标轴和坐标刻度
PrivateSubCommand1_Click()
Cls
Form1.Scale(-8,2)-(8,-2)????'用Scale方法定义坐标系
Line(-7.5,0)-(7.5,0)????'用Line方法画X轴
Line(0,1.7)-(0,-1.7)????'画Line方法画Y轴
CurrentX=7.6:CurrentY=0.1:Print"X"????'标识X轴
CurrentY=0.5:CurrentY=1.8:Print"Y"????'标识X轴
Fori=-7To7
Line(i,0)-(i,0.1)????'在X轴上标记坐标刻度
CurrentX=i-0.2:CurrentY=-0.1:PrintI????'在X轴上输出数字标识
Nexti
Fori=-1To1
Ifi<>0Then
CurrentX=-0.7:CurrentY=i+0.1:PrintI????'在Y轴上输出数字标识
Line(0.5,i)-(0,i)????'在Y轴上标记坐标刻度
EndIf
Nexti
EndSub
'绘制正弦曲线
PrivateSubCommand2_Click()
CurrentX=-6.283:CurrentY=0????'曲线的起点坐标
Fori=-6.283To6.283Step0.01
x=i:y=Sin(i)
Line-(x,y)????'用Line方法绘制正弦曲线
Nexti
CurrentX=2.5:CurrentY=1:Print"y=Sin(x)"????'输出y=Sin(x)
EndSub
PrivateSubCommand3_Click()????'绘制余弦曲线
DrawWidth=2????'设置线宽
CurrentX=-6.283:CurrentY=1
Fori=-6.283To6.283Step0.01
x=i:y=Cos(i)
Line-(x,y)????'绘制余弦曲线
Nexti
CurrentX=-7:CurrentY=1.2:Print"y=Cos(x)"????'输出y=Cos(x)
EndSub
运行程序,并单击“建立坐标系”按钮,即绘制出坐标系,然后单击“y=Sin(x)”“y=Cos(x)”按钮,分别绘制出正弦、余弦曲线。
VisualBasic程序设计形考任务五答案
请同学选择课程《第9章》-《实战演练》“实验9进销存管理信息系统”,在VB集成开发环境中认真完成实验。
实验完成后,将调试好的程序保存在以“姓名+实验名称”命名的文件夹下,并将该文件夹压缩成.rar或者.zip格式进行提交。本次实验满分40分,提交后需要辅导教师批阅打分。
实验目的
1掌握利用SQL语句,通过ADO数据对象管理数据库的方法。
2理解数据库实用程序的框架体系。
3了解数据报表的制作方法。
实验内容
本实验主要开发一个“进销存”管理系统。要求同学们首先在SQLServer上创建名为“进销存”的数据库,并在该数据库上创建“物资台账”“物资入库”“物资出库”3张表。然后编写一个简单“进销存”数据库管理系统,它具有数据增加(Insert)、删除(Delete)、修改(Update)和查询(Select)功能,并能将查询结果在计算屏幕和打印机上输出。
实验步骤
1创建数据库
在进行本实验之前,请同学们先根据表9.4、表9.5、表9.6在SQLServer上创建“进销存”数据库。如果你不具备SQLServer实验环境,也可以在Access数据库上完成创建工作。无论采用哪种数据库,程序设计过程和代码基本相同。
表9.4物资台账表结构
字段名 | 类型 | 长度 | 备注 |
物资编码 | Char | 4 | 1.主关键字为“物资编码” 2.在主关键字上创建聚集唯一索引 3.“物资编码”由4位组成,其中第1位使用英文字母表示物资类别,后3位使用数字表示流水号。物资类别如下:A表示钢笔类,B表示橡皮类 |
物资名称 | Varchar | 10 | |
计量单位 | Char | 2 | |
单价 | Money | 8 | |
期初库存 | Numeric | 9 |
表9.5物资入库表结构
字段名 | 类型 | 长度 | 备注 |
物资编码 | Char | 4 | 在主关键字“物资编码”上创建聚集不唯一索引 |
入库时间 | Datetime | 8 | |
入库数量 | Numeric | 9 |
表9.6物资出库表结构
字段名 | 类型 | 长度 | 备注 |
物资编码 | Char | 4 | 在主关键字“物资编码”上创建聚集不唯一索引 |
出库时间 | Datetime | 8 | |
出库数量 | Numeric | 9 |
同学们既可以利用SQLServer企业管理器,通过图形化界面完成数据库创建工作,也可以直接在SQLServer查询分析器中运行以下语句:
--创建“进销存”数据库容器
CREATEDATABASE进销存
GO
USE进销存
GO
--创建物资台账表
CREATETABLE物资台账(
物资编码char(4)NOTNULL,
物资名称varchar(10)NOTNULL,
计量单位char(2)NOTNULL,
单价moneyNOTNULL,
期初库存numeric(18,0)NOTNULL
)ON[PRIMARY]
GO
--创建物资入库表
CREATETABLE物资入库(
物资编码char(4)NOTNULL,
入库时间datetimeNOTNULL,
入库数量numeric(18,0)NOTNULL
)ON[PRIMARY]
GO
--创建物资出库表
CREATETABLE物资出库(
物资编码char(4)NULL,
出库时间datetimeNOTNULL,
出库数量numeric(18,0)NOTNULL
)ON[PRIMARY]
GO
2根据业务逻辑书写SQL语句
由于拟开发的应用程序具有对数据表的增加、删除、修改和查询4项基本功能,因此请同学们首先在实验报告上写出相应的SQL语句,比如:
--向物资台账表中新增数据
INSERTINTO物资台账(物资编码,物资名称,计量单位,单价,期初库存)
VALUES('A001','英雄牌钢笔','只',2.5,50)
--修改物资台账表中现有数据
UPDATE物资台账SET单价=3,期初库存=60
WHERE物资编码='A001'
--删除物资台账表中现有数据
DELETEFROM物资台账
WHERE物资编码='A001'
--查询物资台账表中现有数据
SELECT*FROM物资台账
WHERE物资编码='A001'
--(其他略,请同学们自己完成)
3程序界面设计
(1)创建工程。新建一“标准EXE”工程,工程名为“进销存管理信息系统”。通过“工程-部件”或“工程-引用”菜单项添加ADO数据对象、工具条、MSFlexGrid等相关对象或控件,并按以下要求创建窗体,所有窗体的StartUpPosition属性均设置为:2?屏幕中心。
(2)创建主窗体(frmMain)。如图9.33所示,运用菜单技术、工具条技术创建窗体。窗体名frmMain,其他控件保留默认名称。
图9.33主窗体(frmMain)运行界面
(3)创建“物资台账管理”窗体(frm台账)。如图9.34所示,使用图片(PictureBox)、表格(MSFlexGrid)、命令按钮(CommandButton)控件,添加并设计“新增记录”窗体。窗体名为“frm台账”,所有控件保留默认名称。
图9.34“物资台账管理”窗体(frm台账)设计界面
(4)创建“物资台账数据增加”窗体(frmAdd台账)。如图9.35所示,使用标签、文本框、组合框、命令按钮控件,添加并创建“物资台账数据增加”窗体。窗体名为“frmAdd台账”。其中Text1为控件数组,Text1(4)控件的Enable属性为False。另外,在Combo1控件的List属性中输入一些常用的计量单位,比如“台”“个”“只”等,其他控件保留默认名称和设置。
图9.35“物资台账数据增加”窗体(frmAdd台账)设计界面
(5)创建“物资台账数据修改”窗体(frmUpdate台账)。如图9.36所示,使用标签、组合框、命令按钮控件,添加并创建“物资台账数据修改”窗体。窗体名为“frmUpdate修改”。其中Text1为控件数组,Text1(0)和Text1(4)(物资编码和期初金额)控件的Enable属性设置为False,其他控件保留默认名称和设置。
图9.36“物资台账数据修改”窗体(frmUpdate台账)运行界面
(6)创建“物资台账数据查询”窗体(frmQuery台账)。如图9.37所示,使用标签、组合框、命令按钮控件,添加并创建“物资台账数据查询”窗体。窗体名为“frmQuery台账”。其中Text1为控件数组,ComboBox控件的Style属性为2?DropdownList。
图9.37“物资台账数据查询”窗体(frmQuery台账)设计界面
(7)创建“物资台账报表”窗体(frmReport台账)。通过“工程-添加DataReport”菜单项添加报表窗体,命名为“frmReport台账”。按下列步骤完成设计工作(如图9.38所示):
图9.38“物资台账”报表窗体设计界面
①在报表标头、页标头部分添加rptLabel控件,并修改它们的Caption属性。
②在细节部分添加rptTextBox控件,并修改它们的DataField属性。
③添加rptLine控件。
(8)按上述(3)~(7)步的方法创建“物资入库管理”“物资出库管理”界面。
4代码设计
(1)添加Module模块,编写Main过程:
'声明全局对象变量ADOcn,用于创建与数据库的连接
PublicADOcnAsConnection
'声明全局变量strQuery1用于存储查询条件
PubicstrQuery1AsString
PublicSubMain()
'定义数据库连接字符串
DimstrSQLServerAsString
'用于连接SQLServer数据库,其中:
'Server为服务器名称
'UserID为登录账号,Password为登录口令
'Database为具体的数据库名
'请根据具体的实验环境修改这些参数
strSQLServer="Provider=SQLOLEDB;Server=bigdog;Us_
erID=sa;Password=sa;Database=进销存"
'连接SQLServer数据库
ADOcn.OpenstrSQLServer
'显示主窗体
frmMain.Show
EndSub
将Main过程设为工程启动对象。
(2)FrmMain窗体主要代码。该窗体的代码主要用于调度其他各窗体,起串接作用。
PrivateSubToolbar1_ButtonClick(ByValButtonAsMSComctlLib.But_ton)
SelectCaseButton
Case"物资台账管理"
frm台账.Show1
Case"物资入库管理"
frm入库.Show1
Case"物资出库管理"
frm出库.Show1
Case"退出系统"
UnloadMe'或者使用End命令
EndSelect
EndSub
(3)“frm台账”窗体代码。
“通用”部分声明一个Sub过程,用于在MSFlexGrid中显示记录。
PrivateSubDisplayGrid()
'声明变量
DimstrGridAsString
DimiAsInteger
DimADOrsAsNewRecordset
ADOrs.ActiveConnection=ADOcn
'打开物资台账
IfstrQuery1<>""Then
ADOrs.Open"Select*From物资台账Where"+strQuery1+"OrderBy物资编码"
Else
ADOrs.Open"Select*From物资台账orderby物资编码"
EndIf
'设置MSFlexGrid控件的表头
MSFlexGrid1.Clear
MSFlexGrid1.Rows=0
MSFlexGrid1.Cols=6
strGrid="物资编码"+vbTab+"物资名称"+vbTab+"计量单位"+vbTab
strGrid=strGrid+"单价"+vbTab+"期初库存"+vbTab+"期初金额"
i=0
'在第i行增加一列
MSFlexGrid1.AddItemstrGrid,i
i=i+1
'通过循环显示表中所有记录
DoWhileNotADOrs.EOF
strGrid=ADOrs("物资编码")+vbTab+ADOrs("物资名称")+vbTab+ADOrs("计量单位")
strGrid=strGrid+vbTab+Str(ADOrs("单价"))+vbTab+Str(ADOrs("期初库存"))
strGrid=strGrid+vbTab+Str(ADOrs("单价")*ADOrs("期初库存"))
MSFlexGrid1.AddItemstrGrid,i
ADOrs.MoveNext'指针下移一条记录
i=i+1
Loop
MSFlexGrid1.Rows=i+1
MSFlexGrid1.FixedRows=1
MSFlexGrid1.FixedCols=1
EndSub
PrivateSubForm_Load()
'设置查询条件变量的初值
strQuery1=""
'显示物资台账记录
DisplayGrid
EndSub
PrivateSubCommand1_Click()
'调用增加记录窗体
FrmAdd台账.Show1
DisplayGrid
EndSub
PrivateSubCommand2_Click()
'删除一条记录
DimstrSQLAsString
DimiAsInteger
'取当前光标所在行
i=MSFlexGrid1.Row
'取当前行的第0列单元值,即物资编码列
IfMSFlexGrid1.TextMatrix(i,0)=""Then
MsgBox"请先选择一个记录!",vbQuestion+vbOKOnly,"信息提示"
ExitSub
EndIf
strSQL="DeleteFrom物资台账"
strSQL=strSQL+"Where物资编码='"+MSFlexGrid1.TextMatr_
ix(i,0)+"'"
IfMsgBox("是否要删除?",vbQuestion+vbOKCancel,"信息提示")=vbOKThen
ADOcn.ExecutestrSQL'执行删除操作
EndIf
'重新显示
DisplayGrid
EndSub
PrivateSubCommand3_Click()
'调用修改记录窗体
DimiAsInteger
i=MSFlexGrid1.Row
IfMSFlexGrid1.TextMatrix(i,0)=""Then
MsgBox"请先选择一个记录!",vbQuestion+vbOKOnly,"信息提示"
ExitSub
EndIf
'对frmUpdate台账窗体赋值
WithfrmUpdate台账
.Text1(0)=MSFlexGrid1.TextMatrix(i,0)
.Text1(1)=MSFlexGrid1.TextMatrix(i,1)
.Combo1.Text=MSFlexGrid1.TextMatrix(i,2)
.Text1(2)=MSFlexGrid1.TextMatrix(i,3)
.Text1(3)=MSFlexGrid1.TextMatrix(i,4)
.Show1
EndWith
'修改完后重新显示
DisplayGrid
EndSub
PrivateSubCommand4_Click()
'调用设置查询条件窗体
FrmQuery查询.Show1
'设置完查询条件后重新显示记录
DisplayGrid
EndSub
PrivateSubCommand5_Click()
'调用打印报表窗体
DimADOrsAsNewRecordset
ADOrs.ActiveConnection=ADOcn
IfstrQuery1<>""Then
ADOrs.Open"Select*From物资台账Where"+strQuery1+"OrderBy物资编码"
Else
ADOrs.Open"Select*From物资台账OrderBy物资编码"
EndIf
'设置报表窗体的DataSource和DataMember属性
SetfrmReport台账.DataSource=ADOrs.DataSource
FrmReport台账.DataMember=ADOrs.DataMember
FrmReport台账.Show1
EndSub
PrivateSubCommand6_Click()
'退出本窗体
UnloadMe
EndSub
(4)“frmAdd台账”窗体代码。
PrivateSubCommand1_Click()
DimstrSQLAsString
DimADOrsAsNewRecordset
SetADOrs.ActiveConnection=ADOcn
'首先查询主关键字“物资编码”是否重复
ADOrs.Open"Select物资编码From物资台账Where物资编码='"+Text1(0)+"'"
IfNotADOrs.EOFThen
MsgBox"物资编码已存在,请重新输入",vbQuestion+vbOKOnly,"信息提示"
ExitSub'退出本过程
EndIf
'增加一条新记录
strSQL="InsertInto物资台账(物资编码,物资名称,计量单位,单价,期初库存)"
strSQL=strSQL+"Values('"+Text1(0)+"','"+Text1(1)+"','"+Combo1.Text+"',"
strSQL=strSQL+Text1(2)+","+Text1(3)+")"
ADOcn.ExecutestrSQL
MsgBox"增加成功,请继续!",vbQuestion+vbOKOnly,"信息提示"
EndSub
PrivateSubCommand2_Click()
'退出本窗体
UnloadMe
EndSub
PrivateSubForm_Load()
'赋初值
Text1(0)=""
Text1(1)=""
Text1(2)="0"
Text1(3)="0"
Combo1.ListIndex=0
EndSub
PrivateSubText1_Change(IndexAsInteger)
'当“单价”和“期初库存”值发生变化时,自动计算“期初金额”
IfIndex=2OrIndex=3Then
Text1(4)=Trim(Str(Val(Text1(2))*Val(Text1(3))))
EndIf
EndSub
PrivateSubText1_KeyPress(IndexAsInteger,KeyAsciiAsInteger)
'将用户输入的回车键转换为Tab键,使焦点自动下移
IfKeyAscii=13Then
SendKeys"{Tab}"
EndIf
'对于“单价”和“期初库存”文本框只允许输入数字、小数点和退格键
IfIndex=2OrIndex=3Then
IfNot((Chr(KeyAscii)>="0"AndChr(KeyAscii)<="9")_OrChr(KeyAscii)="."OrKeyAscii=8)Then
KeyAscii=0
EndIf
EndIf
EndSub
(5)“frmUpdate台账”窗体代码。主要代码是:
PrivateSubCommand1_Click()
DimstrSQLAsString
strSQL="Update物资台账Set物资名称='"+Text1(1)+"',"
strSQL=strSQL+"计量单位='"+Combo1.Text+"',"
strSQL=strSQL+"单价="+Text1(2)+","
strSQL=strSQL+"期初库存="+Text1(3)
strSQL=strSQL+"Where物资编码='"+Text1(0)+"'"
ADOcn.ExecutestrSQL
UnloadMe
EndSub
(6)“frmQuery台账”窗体代码。
PrivateSubCommand1_Click()
'拼写查询条件字符串
Dimstr1,str2AsString
str1=""
str2=""
IfText1(0)<>""Then
str1="物资编码"+Combo1.Text+"'"+Text1(0)+"'"
EndIf
IfText1(1)<>""Then
str1="物资名称"+Combo2.Text+"'"+Text1(1)+"'"
EndIf
Ifstr1=""Andstr2=""Then
strQuery1=""
ElseIfstr1=""Andstr2<>""Then
strQuery1=str2
ElseIfstr1<>""Andstr2=""Then
strQuery1=str1
Else
strQuery1=str1+"And"+str2
EndIf
UnloadMe
EndSub
PrivateSubCommand2_Click()
'退出本窗体
UnloadMe
EndSub
PrivateSubForm_Load()
'对窗体对象赋初值
Combo1.Clear
Combo1.AddItem"="
Combo1.AddItem">="
Combo1.AddItem">"
Combo1.AddItem"<"
Combo1.AddItem"<="
Combo1.AddItem"<>"
Combo2.Clear
Combo2.AddItem"="
Combo2.AddItem">="
Combo2.AddItem">"
Combo2.AddItem"<"
Combo2.AddItem"<="
Combo2.AddItem"<>"
Text1(0).Text=""
Text1(1).Text=""
EndSub

网友评论