visualbasic程序设计项目化教程 项目16 图书管理系统_第1页
visualbasic程序设计项目化教程 项目16 图书管理系统_第2页
visualbasic程序设计项目化教程 项目16 图书管理系统_第3页
visualbasic程序设计项目化教程 项目16 图书管理系统_第4页
visualbasic程序设计项目化教程 项目16 图书管理系统_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

Visual Basic 程序设计项目化教程,主编 管小清 郭贺彬,项目十六 图书管理系统,项目功能描述: 本项目设计并完成了一个小型的图书管理系统,系统可对借书人的个人信息及个人借情况进行登记录入、编辑、修改及删除,可对购买图书进行登记,对库存图书进行查询汇总,并对借书人损坏书籍进行登记录入。,项目十六 图书管理系统,项目主要知识点:编程方式访问数据库无源数据库连接图书管理系统的设计项目实施步骤:1阅读相关基础知识2图书管理系统功能设计简述3SQL Server 2000数据库设计4图书管理系统窗体设计5程序代码调试,16.1基础知识概述,16.1.1 无源数据库连接1无源数据库连接概述“无源数据库”连接并不是说不需要数据源,如果没有数据源则连接将成为纸上谈兵,只是不需要配置ODBC数据源,利用ADO通过代码编程进行连接。2使用ADO 对象模型访问数据库 为了能够在程序中使用ADO对象编程,在连接数据库前,在Visual Basic 6.0菜单 “工程”“引用”中选择Microsoft ActiveX Data Objects 2.8 Library组件。运用ADO对象模型的主要元素Connection(连接)中的ConnectionString属性进行连接,ConnectionString为可读写string类型,在模块中指定一个连接字符串,告诉ADO如何连接数据库。,16.2图书管理系统功能设计,16.2.1 系统目标通过使用小型图书管理系统,可以方便地对个人借书、还书、损坏书籍赔偿及图书信息进行管理。,16.2.2 系统功能,1个人信息对借书人的必要的个人信息及借书情况进行添加、修改、删除。2图书信息 可以通过图书编号或时间进行书籍查询,并输出查询结果。同时对损坏的书籍进行赔偿登记。3系统管理 可以添加/删除系统用户,登记新图书,并对图书信息进行修改、删除。,16.2.3 系统结构图,图书管理系统系统结构图,如图16-1所示:,图 16-1 图书管理系统结构图,16.3数据库设计,16.3.1 建立tushugl数据库启动SQL Server 2000中企业管理器,建立tushugl数据库,建立个人信息、个人借书、图书登记、用户信息、图书赔偿数据表。1个人信息表,如图16-2所示:,图16-2 个人信息表,16.3数据库设计,2个人借书表,如图16-3所示,图 16-3 个人借书表,16.3数据库设计,3图书登记表,如图16-4所示:,图16-4 图书登记表,16.3数据库设计,4用户信息表,如图16-5所示:,图16-5 用户信息表,16.3数据库设计,5图书赔偿表,如图16-6所示:,图16-6 图书赔偿表,16.3.2 连接数据库,1引用ADO在Visual Basic环境下,选择“工程”“引用”命令,在出现的对话框中选择“Microsoft ActiveX Data Objects 2.0 Library”,然后单击“ 确定”按钮,如下图16-7所示:,图 16-7 引用ADO,16.3.2 连接数据库,2创建模块文件建立公共模块可以提高代码的效率,同时使得修改和维护代码都很方便。(1)添加模块在Visual Basic环境下,选择“工程”“添加模块”则出现模块对话框,如图16-8所示: 选择模块图标后,单击“打开”按钮,则模块已经添加到工程中了。默认情况下名为Module1。,图16-8 模块对话框,16.3.2 连接数据库,(2) 定义ADO连接对象在“图书管理系统”工程中,创建模块文件,在模块中,定义ADO连接对象。语句如下: Public conn As New ADODB.Connection 标记连接对象Public rs As New ADODB.Recordset 标记连接对象(3)创建实例对象在子程序中,用如下的语句创建实例对象: Dim conn As ADODB.ConnectionDim rs As ADODB.RecordsetsSet conn = New ADODB.Connection 创建实例对象Set rs = New ADODB. Recordsets 创建实例对象(4)建立连接,打开数据库conn.ConnectionString = Provider=SQLOLEDB.1;Persist_ Security_ Info=False;Server=机器名实例名;User ID=sa;_ Password=;DataBase=tushugl; conn.Open,16.4“图书管理系统”窗体设计,16.4.1 主窗体设计1设计概述在主窗体界面中单击菜单上的功能按钮,可以调用相应的子窗体。在状态栏中显示当前的日期、时间以及公司的网址。对界面背景进行添加图片和阴影字的设计。2主窗体设计(1)创建主窗体新建一个“标准EXE”工程并将工程命名为“图书管理系统”。选择“工程”“添加MDI窗体”命令。与上一个项目不同的是我们采用MDI(多文档界面)。在应用程序中,使用多文档界面(MDI)可以同时打开显示、处理多个文档,使数据处理更加方便。在MDI应用程序中至少包含两种窗体:父窗体和子窗体。每个窗体都有相应的特性。,16.4“图书管理系统”窗体设计,MDI窗体的特性MDI窗体有且只有一个。子窗体至少有一个或一个以上。所有的窗体无论任何操作都不能移出MDI窗体。父窗体最小化时,所有的子窗体也同时最小化,并且MDI窗体及其所有的子窗体将由一个图标来代表。MDI子窗体的属性在建立了MDI子窗体之后,要想Form1成为子窗体,要将其MDIChild属性设置为True。,16.4“图书管理系统”窗体设计,(2)设置主窗体的属性 主窗体的属性如表16-1所示:,表16-1 窗体属性表,16.4“图书管理系统”窗体设计,(3)创建ADO对象模块文件在菜单中选择“工程”“添加模块”命令,将模块添加到工程后,默认名为Module1,重命名为baseSQL。在模块中定义整个工程的公共变量。Public conn As New ADODB.Connection 定义连接对象Public rs_dengji As New ADODB.Recordset 定义记录集对象Public rs_jieshu As New ADODB.RecordsetPublic rs_peichang As New ADODB.RecordsetPublic rs_adduser As New ADODB.RecordsetPublic rs_deluser As New ADODB.RecordsetPublic rs_login As New ADODB.RecordsetPublic rs_peichang As New ADODB.Recordset,16.4“图书管理系统”窗体设计,(4)创建全局变量模块文件将模块添加到工程中了。默认情况下名为Module2,可重命名为耻下 basedim在模块中定义整个工程的公共变量Public userID As String 定义当前用户IDPublic userpow As String 定义用户权限Public find As Boolean 定义查询Public findok As BooleanPublic frmdata As BooleanPublic Const keyenter = 13 enter键的ASCII码,16.4.2 主窗体菜单,1创建菜单选择“工具”“菜单编辑器”编辑菜单,弹出如图16-8所示菜单编辑器对话框,根据系统的需要创建主菜单和子菜单。,图16-8 图书管理系统菜单设计,16.4.2 主窗体菜单,系统菜单项表系统菜单项如表16-2所示:,16.4.2 主窗体菜单,主窗体代码在本项目中,子菜单事件都是Click事件,这里给出主窗体部分代码。“添加用户”子菜单Click事件,调出添加用户窗体代码。Private Sub adduser_Click()frmadduser.Show 1End Sub“查询输出”子菜单Click事件,调出查询输出窗体代码。Private Sub chaxunshuchu_Click()frmfind.Show 1End Sub“退出”子菜单Click事件,调出退出窗体代码。Private Sub exit_Click()Unload MeEnd Sub,16.4.2 主窗体菜单,“图书登记”子菜单Click事件,调出图书登记窗体代码。Private Sub checkin_Click()frmdengji.Show End Sub“个人借书”子菜单Click事件,调出个人借书窗体代码。Private Sub personborrow_Click()frmjieshu.Show End Sub“图书赔偿”子菜单Click事件,调出图书赔偿窗体代码。Private Sub tushupeichang_Click()frmpeichang.Show 1End Sub,16.4.3 创建各子窗体,1子窗体设计(1)设计说明 图书管理系统的子窗体类型主要有“系统登录”、“数据编辑录入”、“查询”、“打印报表”等。在图书管理系统中,要创建的所有子窗体如表16-3所示:,16.4.3 创建各子窗体,(2)子窗体代码 “图书管理系统”项目,尽管有些子窗体界面功能设计与项目十五“汽车销售管理系统”基本相同,例如系统登录子窗体,图书登记子窗体,查询子窗体等,但由于访问数据库方式发生了巨大的变化,使用ADO对象模型,采用编程式访问数据库,所以在”图书管理系统”子窗体中,除了设计窗体的界面外,更重要的是编程代码,是本项目的重点难点内容。,16.4.3 创建各子窗体,2系统登录子窗体 关于系统登录界面设计,可参考项目六,我们重点介绍系统登录子窗体的代码。 (1)窗体加载代码 Set conn = New ADODB.Connection 创建连接实例conn.ConnectionString = Provider=SQLOLEDB.1;Persist_ Security Info=False;Server=ZHENGSHAOJ;User ID=sa;_Password=;DataBase=tushugl; 连接数据库conn.ConnectionTimeout = 30conn.Open,16.4.3 创建各子窗体,(2)打开记录集对象的代码 rs_login.Open , select * from 用户信息,conn,_ adOpenKeyset,adLockOptimistic, adCmdText3个人信息窗体设计 个人信息窗体属于数据编辑录入类型窗体,我们在项目十五中,介绍了两种创建数据编辑录入窗体的方法,本项目中我们以“个人信息”子窗体为例,继续深入学习第二种创建数据编辑录入窗体的方法。 (1)设计思路 在个人信息窗体中,即能对个人信息进行添加、修改、删除,也同时能看到每个人借书的详细资料。,16.4.3 创建各子窗体,(2)启动“数据窗体向导” 启动“数据窗体向导”的方法,可参考项目十五中关于“数据编辑录入窗体”的创建。(3)提供连接信息 本项目采用无源数据库连接,这样在提供连接信息时与项目十五完全不同,其具体信息如图16-9所示:,16.4.3 创建各子窗体,(4)选择窗体类型和数据绑定类型窗体类型我们选择“主表/细表”,绑定类型我们选择“ADO代码”。,图 16-10 窗体类型和数据绑定类型,16.4.3 创建各子窗体,(5)主表记录源 主表记录源选择“个人信息”,并选定所有字段。如图16-11所示:,图 16-11 主表记录源,16.4.3 创建各子窗体,(6)详细资料记录源 细表记录源选择“个人借书”,然后把需要详细描述的字段作为选定的字段,如图16-12所示:,图 16-11 细表记录源,16.4.3 创建各子窗体,(7)记录源关系 选择一个字段作为连接主/细表的字段,如图16-12所示:,图 16-12 主/细表关联字段,16.4.3 创建各子窗体,(8)选择窗体控件 选择窗体所需要的控件,如图16-13所示:,图 16-13 窗体控件选择,16.4.3 创建各子窗体,(9)用数据窗体向导制作的“个人信息”按照我们的选择,生成的数据窗体如图16-14所示:,图 16-14 个人信息窗体,16.4.3 创建各子窗体,(10)个人信息窗体代码 用数据窗体向导制作的“个人信息”窗体,代码自动产生。4图书登记子窗体设计与主要代码关于图书登记窗体,由于我们采用编程访问数据库,所以编程代码是重点及难点问题。 设计思路 图书登记窗体是数据编辑录入窗体,其窗体设计参考项目十五中数据编辑录入窗体的第一种方法,用我们所学的控件创建,使窗体能对记录进行添加、修改、删除。,16.4.3 创建各子窗体,(2)图书登记子窗体图书登记窗体如图16-15所示:,图16-15 图书登记窗体,16.4.3 创建各子窗体,图书登记子窗体控件图书登记窗体上控件列表: 表16-4 图书窗体上的控件表,16.4.3 创建各子窗体,16.4.3 创建各子窗体,(4)图书登记窗体主要代码窗体加载代码:Private Sub Form_Load() conn.CursorLocation = adUseClient adUserClient 控制记录集游标,是客户端还是服务器端,若选择adUserSever是服务器端,选择adUseClient是客户端。Set rs_dengji = New ADODB.Recordset 创建记录集实例If rs_dengji.State = adStateOpen Then 检测数据库是否打开状态rs_dengji.CloseEnd If,16.4.3 创建各子窗体,rs_dengji.Open select * from 图书登记, conn,_adOpenKeyset,adLockOptimistic, adCmdTex 打开“图书登记”表Set Me.DataGrid1.DataSource = rs_dengji DataGrid1绑定数据源DataGrid1.Col = 0 文本框与DataGrid1绑定Text1(0).Text = DataGrid1.TextDataGrid1.Col = 1Text1(1).Text = DataGrid1.TextDataGrid1.Col = 2Text1(2).Text = DataGrid1.TextDataGrid1.Col = 3DTPicker1.Value = DataGrid1.TextDataGrid1.Col = 4Text1(4).Text = DataGrid1.TextDataGrid1.Col = 5Text1(5).Text = DataGrid1.Text,16.4.3 创建各子窗体,“添加记录”按钮代码:Private Sub Command1_Click() Do While rs_dengji.EOF = FalseIf rs_dengji.Fields(0) = Trim(Text1(0).Text) ThenStr = MsgBox(您输入的图书编号己存在,是否将图书数量_累加到原始图书上? , vbQuestion + vbYesNo, 编号重复)If str1 = vbYes Thenrs_dengji.Fields(4) = Int(rs_dengji.Fields(5) + Int(Text1(4).Text)rs_dengji.UpdateMsgBox 添加成功!请验证!, vbInformation, 累加成功Exit SubElseText1(0).Text = Exit Sub,16.4.3 创建各子窗体,End IfElsers_dengji.MoveNextEnd If Looprs_dengji.AddNewrs_dengji.Fields(编号) = Trim(Text1(0).Text)rs_dengji.Fields(书名) = Trim(Text1(1).Text)rs_dengji.Fields(类型) = Trim(Text1(2).Text)rs_dengji.Fields(购买日期) = DTPicker1.Valuers_dengji.Fields(数量) = Val(Trim(Text1(4).Text)rs_dengji.Fields(定价) = Val(Trim(Text1(5).Text)rs_dengji.UpdateMsgBox 数据己添加成功, vbInformation, 添加成功 End Sub,16.4.3 创建各子窗体,“删除记录”按钮代码:Private Sub Command2_Click() If rs_dengji.EOF = True Then MsgBox 没有记录,无法删除! Exit Sub End If If rs_dengji.EOF = False Then Text1(0).Text = rs_dengji.Fields(0) If MsgBox(删除当前记录吗?, vbYesNo + vbQuestion) = vbYes Then rs_dengji.Delete rs_dengji.Update End If MsgBox 数据己删除, vbInformation, 删除图书登记 Else rs_dengji.MoveNext End If End Sub,16.4.3 创建各子窗体,“下一条”按钮代码:Private Sub Command3_Click()If Command4.Enabled = False Then Command3.Enabled = TrueEnd IfIf rs_dengji.EOF = False Then rs_dengji.MoveNext If rs_dengji.EOF ThenMsgBox 这是最后一条记录, vbOKCancel + vbQuestion_rs_dengji.MoveLast End If,16.4.3 创建各子窗体,Text1(0).Text = rs_dengji.Fields(0) Text1(1).Text = rs_dengji.Fields(1) Text1(2).Text = rs_dengji.Fields(2) DTPicker1.Value = rs_dengji.Fields(3) Text1(4).Text = rs_dengji.Fields(4) Text1(5).Text = rs_dengji.Fields(5)End IfEnd Sub,16.4.3 创建各子窗体,“上一条” 按钮代码Private Sub Command4_Click()If Command3.Enabled = False Then Command4.Enabled = TrueEnd IfIf rs_dengji.BOF = False Thenrs_dengji.MovePrevious If rs_dengji.BOF Then MsgBox 这是第一条记录, vbOKCancel + vbQuestion rs_dengji.MoveFirst Exit Sub,16.4.3 创建各子窗体,End If Text1(0).Text = rs_dengji.Fields(0) Text1(1).Text = rs_dengji.Fields(1) Text1(2).Text = rs_dengji.Fields(2) DTPicker1.Value = rs_dengji.Fields(3) Text1(4).Text = rs_dengji.Fields(4) Text1(5).Text = rs_dengji.Fields(5) End IfEnd Sub,16.4.3 创建各子窗体,个人借书和图书赔偿子窗体分别如下图16-16和16-17所示,它们与图书登记子窗体的代码基本相同,在此不作介绍。,图 16-16 个人借书窗体,16.4.3 创建各子窗体,图16-17 图书赔偿窗体,16.4.3 创建各子窗体,5查询子窗体设计(1)设计思路 “查询”是应用软件中必不可少的部分,几乎任何一个应用软件的设计都离不开查询,本系统可以按照图书的编号进行查询,也可以按照购书时间进行查询。(2)查询子窗体界面 查询子窗体界面如图16-18所示:,图16-18 图书查询窗体,16.4.3 创建各子窗体,(3)查询子窗体控件 查询子窗体控件如表16-5所示:,16.4.3 创建各子窗体,(4)查询子窗体的主要代码:加载窗体代码:Private Sub Form_Load()Dim i As IntegerIf rs_dengji.State = adStateOpen Then 检验数据库状态rs_dengji.CloseEnd Ifrs_dengji.Open select * from 图书登记 order by 编号 desc, _conn, adOpenKeyset, adLockOptimistic, adCmdTextIf rs_dengji.EOF = False Then 添加编号和日期,16.4.3 创建各子窗体,With rs_dengji Do While Not .EOF Combo1(0).AddItem .Fields(0) Combo1(1).AddItem .Fields(0) Combo2(0).AddItem .Fields(3) Combo2(1).AddItem .Fields() .MoveNext LoopEnd WithEnd IfEnd Sub,16.4.3 创建各子窗体,查询按钮代码Private Sub Command1_Click()If rs_dengji.State = adStateOpen Then 检验数据库状态rs_dengji.CloseEnd IfIf Option1.Value = True ThenOption2.Enabled = Falsers_dengji.Open select * from 图书登记 where 编号 between _& Combo1(0).Text & and & Combo1(1).Text & , _conn, adOpenKeyset, adLockOptimistic, adCmdTextfrm_datamanage.Show 调查询结果输出窗体End If,16.4.3 创建各子窗体,If Option2.Value = True ThenOption1.Enabled = Falsers_dengji.Open select * from 图书登记 where 购买日期 between & Combo2(0).Text & and & Combo2(1).Text & frm_datamanage.ShowEnd IfUnload MeEnd Sub,16.4.3 创建各子窗体,(5)查询结果输出窗体查询结果输出窗体如图16-19所示:,图 16-19 图书查询结果输出,16.4.3 创建各子窗体,6报表窗体设计(1)设计概述 报表是数据管理系统不可缺少部分,Visual Basic 6.0提供了数据报表设计器来建立数据报表。 数据报表设计器是一个多功能的报表生成器,以创建联合分层结构报表的能力为特色,同数据源一起使用,可以从几个不同的相关表创建报表。除创建可打印报表之外,也可以将报表导入到HTML或文本文件中。 (2)设计方法 配置一个数据源,用于访问数据库,并设定DataReport对象的DataSource属性和DetaMember属性。运行时,使用Show方法显示数据报表,本项目我们以图书登记信息分组输出为例详细介绍设计过程。,16.4.3 创建各子窗体,添加数据环境设计器我们利用数据环境设计器,设置分组字段。单击“工程”“添加Data Environment”命令,在“图书管理系统”中添加一个数据环境设计器。如图16-20所示:,图 16-20 数据环境设计器,16.4.3 创建各子窗体,设置Connection1属性选中“Connection1”,单击鼠标右键,在弹出的菜单中选择“属性”命令,弹出由如图16-21所示的对话框,设置数据链接属性。然后在图16-22中设计连接选项卡。,图 16-21 数据链接属性,16.4.3 创建各子窗体,图 16-22 连接选项卡,16.4.3 创建各子窗体,添加命令Command1选中“Connection1”,单击鼠标右键,在弹出的菜单中选择“添加命令”,如图16-23所示。,图 16-23 添加Command1命令,16.4.3 创建各子窗体,设置Command1通用属性选中“Command1”,单击鼠标右键,在弹出的菜单中选择“属性”命令,在“Command1”属性对话框中,选择“通用”选项卡。在“数据库对象”列表框中选择“图书类型”,如图16-24所。,图 16-24 Command1数据库对象及对象名称,16.4.3 创建各子窗体,设置Command1分组属性选中“Command1”,单击鼠标右键,在弹出的菜单中选择“属性”命令,在“Command1”属性对话框中,选择“分组”选项卡。勾选“分组命令对象”,并将“图书登记”字段“类型”添加到“用于分组字段”,如图19-25所示:,图 16-25 Command1分组属性,16.4.3 创建各子窗体,分组设置完成后的结果分组设置完成后,数据环境设计器将显示分组后的Commnad1对象,如图16-26所示,至此,通过“图书登记”表中字段“类型”对图书登记信息进行分组的设置完成了。,图 16-27 分组后的Command1对象,16.4.3 创建各子窗体,添加数据报表选择“工

温馨提示

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

评论

0/150

提交评论