国开助手《VisualBasic程序设计》形考任务五答案
小虾米
2026-05-11 04:38:39
3 次阅读
0 分钟阅读
下载后请重命名添加本人姓名
请同学选择课程【第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 物资台账表结构字段名类型长度备注物资编码Char41.主关键字为“物资编码”2.在主关键字上创建聚集唯一索引3.“物资编码”由4位组成,其中第1位使用英文字母表示物资类别,后3位使用数字表示流水号。物资类别如下:A表示钢笔类,B表示橡皮类物资名称Varchar10计量单位Char2单价Money8期初库存Numeric9表9.5 物资入库表结构字段名类型长度备注物资编码Char4在主关键字“物资编码”上创建聚集不唯一索引入库时间Datetime8入库数量Numeric9表9.6 物资出库表结构字段名类型长度备注物资编码Char4在主关键字“物资编码”上创建聚集不唯一索引出库时间Datetime8出库数量Numeric9同学们既可以利用SQL Server企业管理器,通过图形化界面完成数据库创建工作,也可以直接在SQL Server查询分析器中运行以下语句:--创建“进销存”数据库容器CREATE DATABASE 进销存GOUSE 进销存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]GO2根据业务逻辑书写SQL语句由于拟开发的应用程序具有对数据表的增加、删除、修改和查询4项基本功能,因此请同学们首先在实验报告上写出相应的SQL语句,比如:--向物资台账表中新增数据INSERT INTO 物资台账(物资编码,物资名称,计量单位,单价,期初库存)VALUES('A001','英雄牌钢笔','只',2.5,50)
--修改物资台账表中现有数据UPDATE物资台账 SET 单价 = 3 ,期初库存= 60WHERE 物资编码 = '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 StringPublic 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.ShowEnd Sub将Main过程设为工程启动对象。(2)FrmMain窗体主要代码。该窗体的代码主要用于调度其他各窗体,起串接作用。Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.But_ton)Select Case ButtonCase "物资台账管理"frm台账.Show 1Case "物资入库管理"frm入库.Show 1Case "物资出库管理"frm出库.Show 1Case "退出系统"Unload Me '或者使用End命令End SelectEnd Sub(3)“frm台账”窗体代码。“通用”部分声明一个Sub过程,用于在MSFlexGrid中显示记录。Private Sub DisplayGrid()'声明变量Dim strGrid As StringDim i As IntegerDim ADOrs As New RecordsetADOrs.ActiveConnection = ADOcn'打开物资台账If strQuery1 <> " ThenADOrs.Open "Select * From 物资台账 Where " + strQuery1 + " Order By 物资编码"ElseADOrs.Open "Select * From 物资台账 order by 物资编码"End If'设置MSFlexGrid控件的表头MSFlexGrid1.ClearMSFlexGrid1.Rows = 0MSFlexGrid1.Cols = 6strGrid = "物资编码" + vbTab + "物资名称" + vbTab + "计量单位" + vbTabstrGrid = strGrid + "单价" + vbTab + "期初库存" + vbTab + "期初金额"i = 0'在第i行增加一列MSFlexGrid1.AddItem strGrid, ii = i + 1'通过循环显示表中所有记录Do While Not ADOrs.EOFstrGrid = ADOrs("物资编码") + vbTab + ADOrs("物资名称") + vbTab + ADOrs("计量单位")strGrid = strGrid + vbTab + Str(ADOrs("单价")) + vbTab + Str(ADOrs("期初库存"))strGrid = strGrid + vbTab + Str(ADOrs("单价") * ADOrs("期初库存"))MSFlexGrid1.AddItem strGrid, iADOrs.MoveNext '指针下移一条记录i = i + 1LoopMSFlexGrid1.Rows = i + 1MSFlexGrid1.FixedRows = 1MSFlexGrid1.FixedCols = 1End SubPrivate Sub Form_Load()'设置查询条件变量的初值strQuery1 = "'显示物资台账记录DisplayGridEnd SubPrivate Sub Command1_Click()'调用增加记录窗体FrmAdd台账.Show 1DisplayGridEnd SubPrivate Sub Command2_Click()'删除一条记录Dim strSQL As StringDim i As Integer'取当前光标所在行i = MSFlexGrid1.Row'取当前行的第0列单元值,即物资编码列If MSFlexGrid1.TextMatrix(i, 0) = " ThenMsgBox "请先选择一个记录!", vbQuestion + vbOKOnly, "信息提示"Exit SubEnd IfstrSQL = "Delete From 物资台账"strSQL = strSQL + " Where 物资编码='" + MSFlexGrid1.TextMatr _ix(i, 0) + "'"If MsgBox("是否要删除?, vbQuestion + vbOKCancel, "信息提示") = vbOK ThenADOcn.Execute strSQL '执行删除操作End If'重新显示DisplayGridEnd SubPrivate Sub Command3_Click()'调用修改记录窗体Dim i As Integeri = MSFlexGrid1.RowIf MSFlexGrid1.TextMatrix(i, 0) = " ThenMsgBox "请先选择一个记录!", vbQuestion + vbOKOnly, "信息提示"Exit SubEnd 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 1End With'修改完后重新显示DisplayGridEnd SubPrivate Sub Command4_Click()'调用设置查询条件窗体FrmQuery查询.Show 1'设置完查询条件后重新显示记录DisplayGridEnd SubPrivate Sub Command5_Click()'调用打印报表窗体Dim ADOrs As New RecordsetADOrs.ActiveConnection = ADOcnIf strQuery1 <> " ThenADOrs.Open "Select * From 物资台账 Where " + strQuery1 +"Order By 物资编码"ElseADOrs.Open "Select * From 物资台账 Order By 物资编码"End If'设置报表窗体的DataSource和DataMember属性Set frmReport台账.DataSource = ADOrs.DataSourceFrmReport台账.DataMember = ADOrs.DataMemberFrmReport台账.Show 1End SubPrivate Sub Command6_Click()'退出本窗体Unload MeEnd Sub(4)“frmAdd台账”窗体代码。Private Sub Command1_Click()Dim strSQL As StringDim ADOrs As New RecordsetSet ADOrs.ActiveConnection = ADOcn'首先查询主关键字“物资编码”是否重复ADOrs.Open "Select 物资编码 From 物资台账 Where 物资编码='" + Text1(0) + "'"If Not ADOrs.EOF ThenMsgBox "物资编码已存在,请重新输入", 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 strSQLMsgBox "增加成功,请继续!", vbQuestion + vbOKOnly, "信息提示"End SubPrivate Sub Command2_Click()'退出本窗体Unload MeEnd SubPrivate Sub Form_Load()'赋初值Text1(0) = "Text1(1) = "Text1(2) = "0"Text1(3) = "0"Combo1.ListIndex = 0End SubPrivate Sub Text1_Change(Index As Integer)'当“单价”和“期初库存”值发生变化时,自动计算“期初金额”If Index = 2 Or Index = 3 ThenText1(4) = Trim(Str(Val(Text1(2)) * Val(Text1(3))))End IfEnd SubPrivate Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)'将用户输入的回车键转换为Tab键,使焦点自动下移If KeyAscii = 13 ThenSendKeys "{Tab}"End If'对于“单价”和“期初库存”文本框只允许输入数字、小数点和退格键If Index = 2 Or Index = 3 ThenIf Not ((Chr(KeyAscii) >= "0" And Chr(KeyAscii) <= "9") _Or Chr(KeyAscii) = "." Or KeyAscii = 8) ThenKeyAscii = 0End IfEnd IfEnd Sub(5)“frmUpdate台账”窗体代码。主要代码是:Private Sub Command1_Click()Dim strSQL As StringstrSQL = "Update 物资台账 Set 物资名称='" + Text1(1) + "',"strSQL = strSQL + "计量单位='" + Combo1.Text + "',"strSQL = strSQL + "单价=" + Text1(2) + ","strSQL = strSQL + "期初库存=" + Text1(3)strSQL = strSQL + " Where 物资编码='" + Text1(0) + "'"ADOcn.Execute strSQLUnload MeEnd Sub(6)“frmQuery台账”窗体代码。Private Sub Command1_Click()'拼写查询条件字符串Dim str1, str2 As Stringstr1 = "str2 = "If Text1(0) <> " Thenstr1 = "物资编码" + Combo1.Text + "'" + Text1(0) + "'"End IfIf Text1(1) <> " Thenstr1 = "物资名称" + Combo2.Text + "'" + Text1(1) + "'"End IfIf str1 = " And str2 = " ThenstrQuery1 = "ElseIf str1 = " And str2 <> " ThenstrQuery1 = str2ElseIf str1 <> " And str2 = " ThenstrQuery1 = str1ElsestrQuery1 = str1 + " And " + str2End IfUnload MeEnd SubPrivate Sub Command2_Click()'退出本窗体Unload MeEnd SubPrivate Sub Form_Load()'对窗体对象赋初值Combo1.ClearCombo1.AddItem "="Combo1.AddItem ">="Combo1.AddItem ">"Combo1.AddItem "<"Combo1.AddItem "<="Combo1.AddItem "<>"Combo2.ClearCombo2.AddItem "="Combo2.AddItem ">="Combo2.AddItem ">"Combo2.AddItem "<"Combo2.AddItem "<="Combo2.AddItem "<>"Text1(0).Text = "Text1(1).Text = "End Sub