版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章图书管理应用程序设计
一个软件系统从整体上可以称为一项解决方案,该方案中可以包含一个或多个项目,一个项目中又可以包含多个窗体、模块、类以及其他文件。
变量的作用域与生存期涉及命名空间、项目、模块、类和过程。
本章通过设计一个图书管理应用程序,重点探讨多窗体的设计、类的设计、变量的作用域与生存期。首先我们应该熟悉项目的管理、命名空间、模块等知识点。工作情境描述
9.1本章教学导航9.2
参考实例体验9.3
设计任务描述9.4
项目Chapter10_1中变量的作用域与生存期分析9.6
任务实现过程9.5
课堂同步实践9.7
相关知识链接9.89.1工作情境描述信息系统一般由多个窗体组成,主要包括用户登录窗体、注册提示窗体、系统主窗体、各个功能实现窗体。用户通常先进行登录,然后显示主窗体,主窗体是信息系统的总控台,在主窗体可以打开其他功能实现窗体。9.2本章教学导航知识技能目标掌握【图书管理】应用程序功能的实现掌握模块的创建掌握自定义类的创建掌握对象的创建与使用掌握全局变量、静态变量的应用掌握变量的生存期与作用域掌握多窗体应用程序的设计掌握应用程序的启动与退出掌握SQL语句在数据访问环境中的正确使用方法掌握复杂SQL语句的正确书写方法掌握ComboBox、DataGrid控件数据绑定的实现方法掌握导航栏的设计方法掌握MDI窗体的设计方法掌握Main过程的创建与编码方法课时建议8课时(含课堂同步实践)本章任务课堂示范、同步实践课外拓展:图书管理应用程序本章应用的已学控件Label、TextBox、Button、Panel、GroupBox、ComboBox、MainMenu、ContextMenu、ToolBar、StatusBar、ImageList、Timer应用的属性
窗体的属性:窗体的MdiParent、Dock等属性
控件的属性:ComboBox控件的DataSource、Focus等属性,DataGrid控件的CurrentCell、DataSource等属性应用的方法窗体的方法:窗体的ShowDialog方法应用的基础知识数据类型:String
变量:全局变量、窗体级局部变量、过程级局部变量、块级局部变量、静态变量表达式:比较表达式、复杂的连接表达式语句:If…EndIf、If…Else…EndIf、SelectCase…EndSelect、With…EndWithSQL语句:like运算符、%通配符命名空间:System.Data.SqlClient
类:Application类及其方法Run,DataTable类及其属性Rows、DefaultView,SqlConnection类,BindingManagerBase类自定义类与对象自定义模块9.3参考实例体验参考实例如图9-1所示,请从网上下载瑞天图书管理系统2008标准版,成功安装后,试用该系统,体验其功能。图9-1
【瑞天图书管理系统】的主界面9.4设计任务描述创建一个简单的图书管理应用程序,该程序包括闪窗、登录窗体、MDI主窗体、浏览图书信息窗体、浏览读者信息窗体等多个窗体,MDI主窗体包括菜单栏、工具栏、导航栏、状态栏和子窗体显示区域。9.5任务实现过程9.5.1新建【图书管理】应用程序项目(1)启动VisualStudio.NET2003,在VisualStudio.NET2003集成开发环境中,单击菜单【文件】-【新建】-【项目】,打开【新建项目】对话框。(2)在【新建项目】对话框左侧“项目类型”中选择【VisualBasic项目】选项,在右侧“模板”中选择【Windows应用程序】选项。(3)在对话框的【名称】文本框中输入新项目的名称:Chapter10_1。在“位置”文本框中输入或者选取项目文件的存储位置。(4)单击【确定】按钮,完成新项目的创建,系统自动生成一个名为“Form1.vb”的Windows窗体,将该窗体的名称修改为“frmMain.vb”,即应用程序的主窗体。9.5.2设计图书管理应用程序的MDI主界面Windows应用程序的主界面一般是一个MDI窗体,MDI窗体是整个应用程序的控制中心,主要包括菜单栏、工具栏、状态栏,其中通过菜单栏或工具栏可以打开子窗口或实现一些功能,状态栏可以显示系统的动态帮助信息。图书管理应用程序的主界面如图9-2所示。
图9-2图书管理应用程序的主界面图书管理应用程序主界面的菜单栏包括【系统设置】、【图书管理】、【读者管理】、【借阅管理】、【数据查询】、【报表打印】和【帮助】等菜单,主要菜单的菜单项如表9-1所示。表9-1 图书管理应用程序主界面的主要菜单及菜单项图书管理应用程序主界面导航栏及其按钮组成如图9-3、图9-4和图9-5所示。图书管理应用程序主界面的主要属性设置如表9-2所示。属性名称属性值属性名称属性值(Name)frmMainText图书管理应用程序Icon指定一个ico文件Size720,780IsMdiContainerTrueStartPositionCenterScreenMenuMainMenu1WindowStateMaximized表9-2 图书管理应用程序主界面的主要属性设置9.5.3设计浏览图书信息界面浏览图书信息窗体如图9-6所示。图9-6浏览图书信息窗体9.5.4添加公共类单击VisualBasic.NET的菜单【项目】-【添加类】或选中项目名称,然后单击鼠标右键打开快捷菜单,在快捷菜单中单击菜单【添加】-【添加类】,如图9-7所示,
图9-7【添加类】的快捷菜单
弹出一个【添加新项】的对话框,如图9-8所示,在【名称】文本框中输入类文件的文件名,例如“dbClass.vb”,扩展名“vb”可以不输入,默认的扩展名也是“vb”。
单击【打开】按钮,一个新的类文件便会添加到项目中,同时打开代码编辑窗口。图9-8【添加新项】对话框9.5.5添加公共模块向项目Chapter10_1中添加一个模块文件Module1.vb,该模块文件主要定义了3个公有变量、1个自定义类的对象和main过程,程序代码如下所示。PublicUserNameAsString '用于存放当前登录用户的用户名PublicUserPasswordAsString '用于存放当前登录用户的密码PublicUserPurviewAsString '用于存放当前登录用户的类型PublicobjDbAsNewdbClass '定义自定义类的对象变量PublicSubmain()DimLoginAsNewfrmLoginLogin.ShowDialog()IfLogin.bResult=TrueThenDimMainAsNewfrmMainApplication.Run(Main)EndIfEndSub9.5.6图书管理应用程序主窗体的程序设计1.图书管理应用程序主界面的窗体或控件的事件过程及功能说明该事件的过程及功能说明如表9-8所示。表9-8 图书管理应用程序主界面的窗体或控件的事件过程及功能说明窗体或控件的事件过程功能说明窗体frmMain的Load事件过程(1)根据窗口大小设置控件panel的大小(2)根据登录用户的权限类型设置菜单项的是否可用(3)在主界面中显示默认的子窗体,且设置子窗体的显示状态窗体frmMain的SizeChanged事件过程当窗口大小发生改变时,控件panel的大小也相应进行调整工具栏的ButtonClick事件过程单击工具栏按钮,显示相应的子窗口主界面菜单的Click事件过程单击菜单栏中的菜单项,显示相应的子窗口左侧导航栏主按钮的Click事件过程单击某一个主按钮,显示对应的panel控件,隐藏其他的panel控件左侧导航栏各个按钮的MouseMove事件过程和MouseLeave事件过程当鼠标指针移动到各个按钮位置时,各个按钮的前景色立即发生改变左侧导航栏各个按钮的Click事件过程单击左侧导航栏的panel控件区域的按钮时,显示对应的窗口窗体frmMain的Closed事件过程当窗体被关闭时,显示提示信息2.编写自定义函数IsMDIChi的程序代码自定义过程IsMDIChi用于判断窗体是否已经打开,如果窗体已经打开,则不需重复打开,只需显示。3.编写主窗体frmMain的Load事件过程的程序代码4.编写主窗体frmMain的SizeChanged事件过程的程序代码5.编写主窗体frmMain菜单项的Click事件过程的程序代码(1)编写菜单项mnu02_01的Click事件过程的程序代码(2)编写主窗体【窗口】菜单栏中各个菜单项的Click事件过程的程序代码(3)在菜单中列出已打开的MDI子窗体把【窗口】菜单的MdiList属性设置为True,系统自动将打开的MDI子窗体的标题添加到【窗口】的菜单的末尾。6.编写主窗体frmMain工具栏的ButtonClick事件过程的程序代码7.编写主窗体frmMain左侧导航栏主按钮的Click事件过程的程序代码该程序代码如表9-11所示。表9-11 主窗体frmMain左侧导航栏主按钮的Click事件过程及其程序代码控件名称Click事件过程的程序代码btnBasicOperatepanel03_1.Visible=Truepanel03_2.Visible=Falsepanel03_3.Visible=FalsebtnDataManagepanel03_1.Visible=Falsepanel03_2.Visible=Truepanel03_3.Visible=FalsebtnSystemSetpanel03_1.Visible=Falsepanel03_2.Visible=Falsepanel03_3.Visible=True8.编写导航栏按钮的MouseMove事件过程和MouseLeave事件过程的程序代码左侧导航栏【基本操作】按钮的MouseMove事件过程和MouseLeave事件过程的程序代码如表9-12所示,【资料管理】与【系统设置】两个按钮的MouseMove事件过程和MouseLeave事件过程的程序代码与【基本操作】按钮类似。控件名称事件名称程序代码btnBasicOperateMouseMovebtnBasicOperate.ForeColor=System.Drawing.Color.RedbtnBasicOperateMouseLeavebtnBasicOperate.ForeColor=System.Drawing.Color.Black表9-12导航栏中【基本操作】按钮的MouseMove和MouseLeave事件过程的程序代码9.编写click事件的程序代码该程序代码如下所示,左侧导航栏中其他按钮Click事件过程的程序代码与【图书管理】按钮类似。mnu02_01.PerformClick()10.编写窗体frmMain的Closed事件过程的程序代码该程序代码如下所示。IfMessageBox.Show("您是否真的要退出图书管理应用程序?")ThenApplication.Exit()EndIf9.5.7浏览图书信息窗体的程序设计1.定义窗体级变量2.编写bookInfoManage窗体的Load事件过程的程序代码3.编写按钮btnSelectAll的Click事件过程的程序代码4.编写文本框txtBookName的TextChanged事件过程的程序代码5.编写文本框txtBookId的TextChanged事件过程的程序代码6.编写控件DataGrid1的CurrentCellChanged事件过程的程序代码9.5.8设计闪窗
闪窗的外观如图9-9所示,闪窗的Name属性值为frmSplash,该窗体不必编写事件过程的程序代码。图9-9闪窗的外观9.5.9设计图书管理应用程序的用户登录界面1.设计用户登录界面的外观用户登录窗体如图9-10所示,该窗体包括1个GroupBox控件、3个Label控件、1个ComboBox控件、1个TextBox控件、2个Button控件和1个Timer控件。
图9-10
【用户登录】窗体的外观2.用户登录的程序设计(1)声明窗体级变量(2)编写用户登录窗体frmLogin的Load事件过程的程序代码(3)编写按钮btnLogin的Click事件过程的程序代码(4)编写控件Timer1的Tick事件过程的程序代码(5)编写登录窗体中【登录】按钮的Click事件过程的程序代码9.5.10程序的调试、编译和运行1.生成程序2.改变启动对象在“窗体属性页”对话框中改变程序的启动对象为“SubMain”。3.运行程序9.5.11
【图书管理】应用程序的测试单击【启动】按钮或者直接按<F5>,程序开始运行,首先显示如图9-12所示的【闪窗】;闪窗的透明度逐步降低,
图9-12【闪窗】的运行状态
直到透明度为0,闪窗隐退,出现如图9-13所示【用户登录】窗口;
图9-13【用户登录】窗口的运行状态在组合框的用户列表中选择一个“用户名”,例如选择“admin”,然后在【密码】文本框中输入正确的密码,单击【确定】按钮,会弹出如图9-14所示的【成功登录】的提示信息对话框。
图9-14【成功登录】的提示信息对话框在【成功登录】的提示信息对话框中单击【确定】按钮,则先后加载图书管理应用程序的主窗体和子窗体,如图9-18所示。
图9-18图书管理应用程序的主窗体和子窗体9.6项目Chapter10_1中变量的作用域与生存期分析不同类型的变量在内存中的不同区域分配存储空间,其作用域与生存期也不完全相同。1.模块Module1中变量的声明与访问2.类内变量的声明与访问3.窗体类frmLogin中窗体级变量的声明与访问4.窗体类frmLogin中过程级变量的声明与访问(1)过程级局部变量(2)过程级静态变量(3)块级局部变量项目Chapter10_1涉及了变量的作用域与生存期、模块级全局变量、窗体级全局变量、窗体级局部变量、过程级局部变量和静态变量等问题,分析各个变量及其访问权限,可以得出以下结论。(1)一个解决方案可以包含一个或多个项目,一个项目又可包含一个或多个窗体、一个或多个类、一个或多个模块。(2)模块中的Public成员、Friend成员能被模块所在项目中的类直接访问。(3)类(包括窗体类)中的Public成员、Friend成员能被类内成员以及该类的对象访问。(4)类(包括窗体类)中的Private成员只能被类内成员访问,不能被类的对象访问。(5)窗体级的变量允许使用Public、Friend、Private修饰符声明;也允许使用Dim声明,相当于使用Private修饰符。9.7课堂同步实践1.任务描述创建一个项目“ClassroomPractise10_1”,在该项目添加两个窗体:【闪窗】和【用户登录】窗体,在【闪窗】中添加1个Timer控件。将项目的启动对象设置为【闪窗】,即先调用【闪窗】,后调用【用户登录】窗体。程序运行时,首先看到的是【闪窗】,【闪窗】渐隐至完全透明之后,【闪窗】消失,【用户登录】窗体出现。请编写程序代码实现以上要求。2.要点提示窗体的出现顺序为:先出现闪窗,后出现登录窗体,简称为“推式调用”。在闪窗的Closed事件或者Closing事件中添加如下代码即可实现。DimLoginAsNewfrmLoginLogin.ShowDialog()9.8相关知识链接9.8.1解决方案资源管理器观察如图9-26所示的【解决方案资源管理器】窗口,本章前面所创建的解决方案Chapter10_1中包含了1个项目文件Chapter10_1,该项目中包含了4个窗体文件:frmSplash.vb、frmLogin.vb、frmMain.vb和bookInfoManage.vb,1个类文件dbClass.vb和1个模块文件Module1.vb。
图9-26【解决方案资源管理器】窗口解决方案资源管理器是有效管理项目及其文件的视图,并且提供与项目和文件相关的命令的快捷访问方式。与此窗口相关联的工具栏中,如图9-27所示,
图9-27【解决方案资源管理器】窗口的工具栏及功能提供了【解决方案资源管理器】窗口列表中突出显示项的常用命令。
若要显示【解决方案资源管理器】窗口,单击菜单【视图】-【解决方案资源管理器】即可。9.8.2多窗体设计(1)【常规】属性【常规】属性栏主要设置程序集名称、输出类型、启动对象、根命名空间等内容,如图9-28所示,设置项目的启动对象为“SubMain”。图9-28设置项目Chapter10_1的启动对象(2)【生成】属性单击【生成】,切换到【生成】选项,如图9-29所示。
图9-29【Chapter10_1属性页】的【生成】属性选项主要设置应用程序图标、编译器默认值。其中“OptionExplicit”用于指定所有的变量是否必须先定义后使用,“OptionStrict”用于指定是否必须有明确的类型转换,“OptionCompare”用于设定字符串比较的规则。一个项目中可以包含多个窗体,一个窗体便是一个类,只是窗体类有可视化的外观。9.8.3应用程序的启动与退出.NET框架类库提供了Application类。Application类提供了一些方法和属性来管理应用程序,包括启动和退出应用程序的方法。1.SubMain过程(1)SubMain是一个特定的程序,只能定义在模块或类中(2)创建自定义的SubMain过程(3)将SubMain设定为启动对象(4)定义SubMain过程的限制2.使用Application.Exit方法退出应用程序(1)语法格式:Application.Exit()(2)调用Application.Exit退出应用程序时,不会触发Form.Closed和Form.Closing事件,如果在这些事件中有必须执行的代码,那么在调用Application.Exit方法前,先调用Form.Close方法关闭各个独立窗体。但是单击窗体右上角的“关闭”按钮会触发Form.Closing事件。(3)在只有一个窗体的应用程序中,使用Form.Close方法就可以退出应用程序而不需要调用Application.Exit方法。但在多个窗体的应用程序中,应该调用Application.Exit退出应用程序。9.8.4类与对象1.基本概念(1)类类是创建对象的“模板”或者“蓝图”。类通过定义属性来存储数据,通过定义操作来使用这些数据,类同时也定义了一套“限制”允许或禁止访问它的属性和操作。类是对事物共性的抽象,例如Form类抽象了窗体的基本属性(例如标题、背景色)和一些基本操作(例如打开、关闭、最小化)。(2)对象如果要执行类的方法和使用类的属性,则需要创建类的实例(instance),类的实例称为对象。对象是类的特定实例,它包含类中所定义的特征。(3)类与对象的区别类与对象就好比图纸与房子的关系,类是抽象的,对象是实际的。类是创建对象实例的模板,是同类对象的集合与抽象,它包含所创建对象的属性描述和行为特征的定义。类是对象的定义,用类说明的变量称为对象,对象是类的一个实例。2.类的基本特性(1)封装性(2)继承性(3)多态性3.创建与使用自定义类类是构建对象的基础,对象是类的实例化。类的成员主要有:成员常数、成员变量、成员属性、成员事件、成员方法和构造函数(New)。(1)类的声明声明类的语法格式如下所示。访问权限修饰符Class类名称
……'类的主体,在这里定义类的成员EndClass(2)成员变量的定义成员变量是指在类内部声明的变量,对于公有变量,类的对象可以直接访问,而私有变量或保护类型的变量,类的对象不可以访问。(3)成员属性的定义属性是类的对象与类输入输出数据的过程,分为可读可写、只读、只写等几种类型。(4)成员方法的定义(5)成员事件的定义(6)共享成员的定义4.类的构造方法与析构方法VisualBasic.NET使用构造方法控制对象的初始化,使用析构方法控制系统资源的释放。(1)类的构造方法(New方法)PublicSubNew()……'添加初始化代码EndSub定义New方法的语法格式如下所示。(2)类的析构方法当不再需要某对象时,可以调用该对象的Finalize方法,释放其占用的内存。Finalize方法称为“析构方法”,它负责执行清理任务,例如保存状态信息、关闭文件或关闭数据库的连接,执行在释放对象前必须完成的其他任务。Finalize方法可以自行定义,定义的语法格式如下。ProtectedOverridesSubFinallize()……'执行清理任务的程序代码EndSub5.对象的创建与使用创建一个类的对象,系统会自动为它分配一定的内存空间,用于存储对象的相关信息。对象的使用过程中,对象将一直占有内存空间。当对象使用完毕,就要释放对象所占用的内存空间,否则会浪费有限的系统资源。(1)创建类的对象VisualBasic.NET使用New语句来创建对象。创建对象的语法格式如下。Dim对象名称AsNew命名空间.类名(2)设置对象的属性
设置对象属性的语法格式如下所示。对象名称.属性名称=属性值读取对象属性值的语法格式如下所示。变量名=对象名称.属性名称(3)调用对象的方法调用对象的方法的语法格式如下所示。对象名.方法名(参数列表)(4)响应对象的事件通过对象的事件可以响应用户的操作,与用户进行交互。引发事件的对象称为事件源,为了确定引发事件的事件源,用WithEvents关键字声明对象,声明位置必须位于函数外部的开头部分。6.类的继承一般地,如果B类从A类继承而来,那么A类就称为父类,B类就称为子类,这与我们人类的父子关系是相似的。继承最大的优势是可以实现代码复用,子类从父类中继承各种特征,只要在子类中添加自己的特性代码就可以形成新的类。在实现功能方面,子类可以“青出于蓝,而胜于蓝”,但父类的有些特征也可以限制子类无法继承。
PublicClass子类名称
Inherits父类名称
……'子类的程序代码EndClass继承的语法格式如下所示。从父类定义子类时,必须使用Inherits关键字声明父类名称,Inherits语句必须位于类内的第1行的位置。
根据以上分析我们得出以下几个重要的结论:(1)子类可以从父类中继承除Private类型以外的全部变量、属性、方法和事件,子类可以直接调用从父类继承的属性、方法和事件等。(2)New方法不能被子类继承,但是可以通过MyBase关键字调用父类的New方法。在子类的方法中使用MyBase关键字调用父类的New方法时,一定要把MyBase语句放在该方法的第一条语句的位置上,否则会出错。7.VisualBasic.NET的类(1)窗体类(2)Control类(3)Object类(4)String类(5)Array类(6)Collection类Collection类提供了一种将一组相关项作为一个集合对象进行引用的便捷方法。集合中的成员只需要存在于集合中即可成为相关项,而不需要具有相同的数据类型。9.8.5模块一个项目中所有对象都允许访问的全局变量或方法,必须在模块中声明。例如模块Module1中声明的4个Public变量:userName、userPassword、UserPurview和objDb,在项目Chapte
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国建筑第八工程局有限公司南方公司2026届春季校园招聘笔试参考题库及答案详解
- 中国中煤华东分公司2026年第四批公开招聘17人笔试备考题库及答案详解
- 温州市四港联动发展有限公司 2026年第二批劳务派遣工作人员招聘10人笔试参考题库及答案详解
- 2026年度春季江铜集团江西德普校园招聘1人笔试备考题库及答案详解
- 企业2026年企业培训师服务补充协议
- 2026年辽宁锦州农垦(集团)有限公司计划招录29人笔试参考题库及答案详解
- 2026浙江财经大学数智商学院招聘4人笔试模拟试题及答案详解
- 互联网教育战略联盟合同文本
- 2026内蒙古呼和浩特新城区东街街道党委社区卫生服务站招聘1人笔试备考题库及答案详解
- 订货会参展商产品运输合同
- 2025年甘肃庆阳市地理生物会考真题试卷(+答案)
- 北京市西城区2026年中考二模英语试题(含答案)
- (三模)济南市2026届高三5月针对性训练生物试卷(含答案)
- 2026宁夏电投永利能源有限公司招聘21人考试备考题库及答案解析
- 金牛区驷马桥等街道2026年公开招聘社区专职工作人员(26人)笔试备考试题及答案详解
- 2026中国报废汽车拆解行业盈利动态与需求趋势预测报告
- 2026年无损检涡流检二级考核模拟题库附参考答案详解【考试直接用】
- 2026年春教科版(新教材)小学科学三年级下册第三单元《只有一个地球》知识点清单
- 西安交通大学同等学力人员申请硕士学位资格审查表
- PCB常见不良品图片及改善措施汇总
- 苏教版八年级(上)期末文言文复习《活板》
评论
0/150
提交评论