国开学习网电大VisualBasic程序设计形考任务五答案

Open

【本人姓名】实验9进销存管理信息系统.zip

下载:318 次
简介:[下载后请重命名添加本人姓名]]
【上面答案为下列试题答案,请核对试题后再购买下载】
请同学选择课程【第9章】-【实战演练】“实验9 进销存管理信息系统”,在VB集成开发环境中认真完成实验。
实验完成后,将调试好的程序保存在以“姓名+实验名称”命名的文件夹下,并将该文件夹压缩成.rar或者.zip格式进行提交。 本次实验满分40分,提交后需要辅导教师批阅打分。
实验目的

1掌握利用SQL语句,通过ADO数据对象管理数据库的方法。

2理解数据库实用程序的框架体系。

3了解数据报表的制作方法。

实验内容

本实验主要开发一个“进销存”管理系统。要求同学们首先在SQL Server上创建名为“进销存”的数据库,并在该数据库上创建“物资台账”“物资入库”“物资出库”3张表。然后编写一个简单“进销存”数据库管理系统,它具有数据增加(Insert)、删除(Delete)、修改(Update)和查询(Select)功能,并能将查询结果在计算屏幕和打印机上输出。

实验步骤

1创建数据库

在进行本实验之前,请同学们先根据表9.4、表9.5、表9.6在SQL Server上创建“进销存”数据库。如果你不具备SQL Server实验环境,也可以在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

同学们既可以利用SQL Server企业管理器,通过图形化界面完成数据库创建工作,也可以直接在SQL Server查询分析器中运行以下语句:

--创建“进销存”数据库容器

CREATE DATABASE 进销存

GO

USE 进销存

GO

--创建物资台账表

CREATE TABLE 物资台账 (

物资编码 char (4) NOT NULL ,

物资名称 varchar (10) NOT NULL ,

计量单位char (2) NOT NULL ,

单价 money NOT NULL ,

期初库存 numeric (18, 0) NOT NULL

) ON [PRIMARY]

GO

--创建物资入库表

CREATE TABLE 物资入库 (

物资编码 char (4) NOT NULL ,

入库时间 datetime NOT NULL ,

入库数量 numeric(18, 0) NOT NULL

) ON [PRIMARY]

GO

--创建物资出库表

CREATE TABLE 物资出库 (

物资编码 char (4) NULL ,

出库时间 datetime NOT NULL ,

出库数量 numeric(18, 0) NOT NULL

) ON [PRIMARY]

GO

2根据业务逻辑书写SQL语句

由于拟开发的应用程序具有对数据表的增加、删除、修改和查询4项基本功能,因此请同学们首先在实验报告上写出相应的SQL语句,比如:

--向物资台账表中新增数据

INSERT INTO 物资台账(物资编码,物资名称,计量单位,单价,期初库存)

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?Dropdown List。

图9.37 “物资台账数据查询”窗体(frmQuery台账)设计界面

(7)创建“物资台账报表”窗体(frmReport台账)。通过“工程-添加DataReport”菜单项添加报表窗体,命名为“frmReport台账”。按下列步骤完成设计工作(如图9.38所示):

图9.38 “物资台账”报表窗体设计界面

①在报表标头、页标头部分添加rptLabel控件,并修改它们的Caption属性。

②在细节部分添加rptTextBox控件,并修改它们的DataField属性。

③添加rptLine控件。

(8)按上述(3)~(7)步的方法创建“物资入库管理”“物资出库管理”界面。

4代码设计

(1)添加Module模块,编写Main过程:

'声明全局对象变量ADOcn,用于创建与数据库的连接

Public ADOcn As Connection

'声明全局变量strQuery1用于存储查询条件

Pubic strQuery1 As String

Public Sub Main()

'定义数据库连接字符串

Dim strSQLServer As String

'用于连接SQL Server数据库,其中:

'Server为服务器名称

'User ID为登录账号,Password为登录口令

'Database为具体的数据库名

'请根据具体的实验环境修改这些参数

strSQLServer = "Provider=SQLOLEDB;Server=bigdog;Us_

er ID=sa;Password=sa;Database=进销存"

'连接SQL Server数据库

ADOcn.Open strSQLServer

'显示主窗体

frmMain.Show

End Sub

将Main过程设为工程启动对象。

(2)FrmMain窗体主要代码。该窗体的代码主要用于调度其他各窗体,起串接作用。

Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.But_ton)

Select Case Button

Case "物资台账管理"

frm台账.Show 1

Case "物资入库管理"

frm入库.Show 1

Case "物资出库管理"

frm出库.Show 1

Case "退出系统"

Unload Me '或者使用End命令

End Select

End Sub

(3)“frm台账”窗体代码。

“通用”部分声明一个Sub过程,用于在MSFlexGrid中显示记录。

Private Sub DisplayGrid()

'声明变量

Dim strGrid As String

Dim i As Integer

Dim ADOrs As New Recordset

ADOrs.ActiveConnection = ADOcn

'打开物资台账

If strQuery1 <> "" Then

ADOrs.Open "Select * From 物资台账 Where " + strQuery1 + " Order By 物资编码"

Else

ADOrs.Open "Select * From 物资台账 order by 物资编码"

End If

'设置MSFlexGrid控件的表头

MSFlexGrid1.Clear

MSFlexGrid1.Rows = 0

MSFlexGrid1.Cols = 6

strGrid = "物资编码" + vbTab + "物资名称" + vbTab + "计量单位" + vbTab

strGrid = strGrid + "单价" + vbTab + "期初库存" + vbTab + "期初金额"

i = 0

'在第i行增加一列

MSFlexGrid1.AddItem strGrid, i

i = i + 1

'通过循环显示表中所有记录

Do While Not ADOrs.EOF

strGrid = ADOrs("物资编码") + vbTab + ADOrs("物资名称") + vbTab + ADOrs("计量单位")

strGrid = strGrid + vbTab + Str(ADOrs("单价")) + vbTab + Str(ADOrs("期初库存"))

strGrid = strGrid + vbTab + Str(ADOrs("单价") * ADOrs("期初库存"))

MSFlexGrid1.AddItem strGrid, i

ADOrs.MoveNext '指针下移一条记录

i = i + 1

Loop

MSFlexGrid1.Rows = i + 1

MSFlexGrid1.FixedRows = 1

MSFlexGrid1.FixedCols = 1

End Sub

Private Sub Form_Load()

'设置查询条件变量的初值

strQuery1 = ""

'显示物资台账记录

DisplayGrid

End Sub

Private Sub Command1_Click()

'调用增加记录窗体

FrmAdd台账.Show 1

DisplayGrid

End Sub

Private Sub Command2_Click()

'删除一条记录

Dim strSQL As String

Dim i As Integer

'取当前光标所在行

i = MSFlexGrid1.Row

'取当前行的第0列单元值,即物资编码列

If MSFlexGrid1.TextMatrix(i, 0) = "" Then

MsgBox "请先选择一个记录!", vbQuestion + vbOKOnly, "信息提示"

Exit Sub

End If

strSQL = "Delete From 物资台账"

strSQL = strSQL + " Where 物资编码='" + MSFlexGrid1.TextMatr _

ix(i, 0) + "'"

If MsgBox("是否要删除?", vbQuestion + vbOKCancel, "信息提示") = vbOK Then

ADOcn.Execute strSQL '执行删除操作

End If

'重新显示

DisplayGrid

End Sub

Private Sub Command3_Click()

'调用修改记录窗体

Dim i As Integer

i = MSFlexGrid1.Row

If MSFlexGrid1.TextMatrix(i, 0) = "" Then

MsgBox "请先选择一个记录!", vbQuestion + vbOKOnly, "信息提示"

Exit Sub

End If

'对frmUpdate台账窗体赋值

With frmUpdate台账

.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)

.Show 1

End With

'修改完后重新显示

DisplayGrid

End Sub

Private Sub Command4_Click()

'调用设置查询条件窗体

FrmQuery查询.Show 1

'设置完查询条件后重新显示记录

DisplayGrid

End Sub

Private Sub Command5_Click()

'调用打印报表窗体

Dim ADOrs As New Recordset

ADOrs.ActiveConnection = ADOcn

If strQuery1 <> "" Then

ADOrs.Open "Select * From 物资台账 Where " + strQuery1 +"Order By 物资编码"

Else

ADOrs.Open "Select * From 物资台账 Order By 物资编码"

End If

'设置报表窗体的DataSource和DataMember属性

Set frmReport台账.DataSource = ADOrs.DataSource

FrmReport台账.DataMember = ADOrs.DataMember

FrmReport台账.Show 1

End Sub

Private Sub Command6_Click()

'退出本窗体

Unload Me

End Sub

(4)“frmAdd台账”窗体代码。

Private Sub Command1_Click()

Dim strSQL As String

Dim ADOrs As New Recordset

Set ADOrs.ActiveConnection = ADOcn

'首先查询主关键字“物资编码”是否重复

ADOrs.Open "Select 物资编码 From 物资台账 Where 物资编码='" + Text1(0) + "'"

If Not ADOrs.EOF Then

MsgBox "物资编码已存在,请重新输入", vbQuestion + vbOKOnly, "信息提示"

Exit Sub '退出本过程

End If

'增加一条新记录

strSQL = "Insert Into 物资台账(物资编码,物资名称,计量单位,单价,期初库存) "

strSQL = strSQL + " Values('" + Text1(0) + "','" + Text1(1) + "','" + Combo1.Text + "',"

strSQL = strSQL + Text1(2) + "," + Text1(3) + ")"

ADOcn.Execute strSQL

MsgBox "增加成功,请继续!", vbQuestion + vbOKOnly, "信息提示"

End Sub

Private Sub Command2_Click()

'退出本窗体

Unload Me

End Sub

Private Sub Form_Load()

'赋初值

Text1(0) = ""

Text1(1) = ""

Text1(2) = "0"

Text1(3) = "0"

Combo1.ListIndex = 0

End Sub

Private Sub Text1_Change(Index As Integer)

'当“单价”和“期初库存”值发生变化时,自动计算“期初金额”

If Index = 2 Or Index = 3 Then

Text1(4) = Trim(Str(Val(Text1(2)) * Val(Text1(3))))

End If

End Sub

Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)

'将用户输入的回车键转换为Tab键,使焦点自动下移

If KeyAscii = 13 Then

SendKeys "{Tab}"

End If

'对于“单价”和“期初库存”文本框只允许输入数字、小数点和退格键

If Index = 2 Or Index = 3 Then

If Not ((Chr(KeyAscii) >= "0" And Chr(KeyAscii) <= "9") _Or Chr(KeyAscii) = "." Or KeyAscii = 8) Then

KeyAscii = 0

End If

End If

End Sub

(5)“frmUpdate台账”窗体代码。主要代码是:

Private Sub Command1_Click()

Dim strSQL As String

strSQL = "Update 物资台账 Set 物资名称='" + Text1(1) + "',"

strSQL = strSQL + "计量单位='" + Combo1.Text + "',"

strSQL = strSQL + "单价=" + Text1(2) + ","

strSQL = strSQL + "期初库存=" + Text1(3)

strSQL = strSQL + " Where 物资编码='" + Text1(0) + "'"

ADOcn.Execute strSQL

Unload Me

End Sub

(6)“frmQuery台账”窗体代码。

Private Sub Command1_Click()

'拼写查询条件字符串

Dim str1, str2 As String

str1 = ""

str2 = ""

If Text1(0) <> "" Then

str1 = "物资编码" + Combo1.Text + "'" + Text1(0) + "'"

End If

If Text1(1) <> "" Then

str1 = "物资名称" + Combo2.Text + "'" + Text1(1) + "'"

End If

If str1 = "" And str2 = "" Then

strQuery1 = ""

ElseIf str1 = "" And str2 <> "" Then

strQuery1 = str2

ElseIf str1 <> "" And str2 = "" Then

strQuery1 = str1

Else

strQuery1 = str1 + " And " + str2

End If

Unload Me

End Sub

Private Sub Command2_Click()

'退出本窗体

Unload Me

End Sub

Private Sub Form_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 = ""

End Sub

回复

使用道具 举报