资源目录
压缩包内文档预览:
编号:59156103
类型:共享资源
大小:359.29KB
格式:RAR
上传时间:2020-03-17
上传人:qq77****057
认证信息
个人认证
李**(实名认证)
江苏
IP属地:江苏
7.2
积分
- 关 键 词:
-
vb
图书
管理
系统
第三
- 资源描述:
-
vb图书管理系统(第三版),vb,图书,管理,系统,第三
- 内容简介:
-
目 录第一章 概述11.1开发背景11.2管理信息系统产生的背景11.3系统功能要求的分析2第二章 开发环境及实现技术介绍32.1开发环境32.2开发工具简介3第三章 图书管理系统的设计和实现53.1系统的设计53.1.1概要设计53.1.2详细设计73.2系统的实现93.2.1主界面的设计与实现123.2.2图书管理模块的设计与实现153.2.3读者管理模块的设计与实现193.2.4图书借阅管理模块的实现223.2.5系统管理模块的设计与实现25第四章 图书管理系统的运行说明404.1运行环境40致 谢42参考文献43第一章 概述1.1开发背景在图书管理系统用计算机管理图书是一种计算机应用技术的创新,在计算机还未普及之前图书管理都是由图书管理人员手工记帐的方式来操作的.现在一般的图书馆都是采用计算机作为工具的实用的计算机图书管理程序来帮助图书馆管理员进行更有效的图书管理。1.2图书管理系统产生的背景图书管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。 经过分析,我们使用 MICROSOFT公司的 VISUAL BASIC开发工具,利用其提供的各种面向对象的开发工具,尤其是数据窗口这一能方便而简洁操纵数据库的智能化对象,首先在短时间内建立系统应用原型,然后,对初始原型系统进行需求迭代,不断修正和改进,直到形成用户满意的可行系统。 1.3 系统功能要求的分析图书管理系统主要服务与图书管理人员,包含的功能模块主要有:一. 图书管理:图书类别管理,图书信息管理二. 读者管理:读者管理,读者信息管理.三. 图书借阅管理:借书管理,还书管理.四. 系统管理:添加管理员,修改密码,退出系统第二章 开发环境及实现技术介绍2.1开发环境硬件平台CPUIntel P4 1.5G主板Intel 850芯片组的GA-8TX-C内存2128M的三星Rambus内存硬盘Seagate Barracuda 7200.7 80G显卡Unika 小妖G9800显示器美格770PF,17寸纯平显示器软件环境操作系统Microsoft WindowsXP简体中文专业版SP1办公软件Microsoft Office 2003显卡驱动nVIDIA ForceWare驱动56.72版For Win2000/XP2.2 开发软件介绍本系统所采用的编程语言为visual basic 6.0与 微软的 access作为操作数据库.现分别对其简单介绍:Visual Basic 6.0是Micrsoft公司出品的开发工具,Visual Basic是一种可视化的,面向对象的Windows开发语言,它具有易用,通用和开发效率高的特点。随着微软对它不断地改进以及计算机本身性能的提高,使得Visual Basic越来越适合一般的应用程序开发。正如Bill Gate所说,世界上绝大多数的Windows应用程序是用Visual Basic编写的。在众多的开发工具中,我们为什么要选择Visual Basic6.0呢?因为VB具有众多其它开发工具所没有的优点!具体介绍如下:u 开发的高效u 语言的高效u 编译的高效u 执行的高效u 维护的高效基于以上理由,我们毫不忧郁的选择了VB6.0做为我们的开发工具!主要的控件及其基本属性,事件简介u 命令按钮类的控件:1) Caption属性:用来显示在控件上的标题。2) Enable属性:控制控件的激活状态灰色或可用。3) Appearance属性:值为1时,则以3D效果显示该控件,0则不然。4) Backcolor属性:用来改变在按钮上显示图像的背景色。5) Cancel属性:该属性决定按钮是否为一个”取消”按钮。6) Default属性:决定哪一个命令按钮控件是窗体的缺省命令按钮.7) Font属性:控制各种文字字体类型.8) Left,top,height,width属性:设定控件的位置与大小.9) Style,picture属性:决定按钮的显示方式是否为图像形式出现.10) Visible属性:确定控件运行时是否为可见.11) Index属性:当控件为一控件数组时,此属性值为该控件在数组的下标值.12) DownPicture属性:设置/返回一个对图片的引用,该图片在按钮被单击处于压下状态时显示。13) DisabledPicture属性:设置/返回一个对图片的引用,该图片在控件无效时显示在控件中。14) MaskColor属性:设置/返回一个在按钮的图片中作为“掩码“的的颜色15) Picture属性:设置返回commandButton控件中要显示的图片。u 命令按钮类的事件:1) 单击事件Click事件(1) 触发与适用此事件是在一个命令按钮对象上按下然后释放一个鼠标按钮时发生。命令按钮的Click事件仅对当单击鼠标时发生。(2) 事件处理过程按钮单击事件的处理过程为: Private Sub object-Click(Index As Integer)其中Object为引发该事件的对象名称。如果是命令按钮的控件是数组,则需要使用Index参数标识该控件。2) 获得焦点GotFocus事件(1) 触发与适用 当命令按钮获得焦点产生该事件,获得焦点可以通过诸如Tab切换或单击对象之类的用户动作,或在代码中用SetFocus方法改变焦点来实现。(2) 事件处理过程命令按钮GotFoucs事件处理过程为:Private Sub Object-GotFocus(Index As Integer)3) LostFocus事件:当一个对象失去焦点时发生4) KeyDown事件:当命令按钮具有焦点时按下一个键时发生5) KeyUp事件:当命令按钮具有焦点时释放一个键时发生。6) KeyPress事件:当用户按下或松开一个ANSI键时发生。7) MouseDown事件:当在命令按钮上按下鼠标按钮时发生。8) MouseMove事件:当命令按钮上移动鼠标时发生。9) MouseUp事件:当在命令按钮上释放鼠标按钮时发生。 u 标签框类的控件类的控件:1) Caption属性:在应用程序界面上加入说明。2) Autosize属性:决定控件是否自动改变大小以显示其全部内容。3) Backstyle属性:用以指示标签是否透明.4) Bordstyle属性:用以设定控件是否有边框。u 文本框类的控件:1) Text属性:通过像text属性赋值的方法来改变该属性的值。2) Maxlength属性:该属性设定在文本框控件中能够输入的最大字符数。3) Multline属性:该属性设定text字符串中是否接受换行符。4) Scrollbars属性:该属性决定是否为文本框加滚动条。5) Passwordchar属性:该属性设定输入文本的特殊显示字符,在设计密码程序时非常有用。6) Change事件属性:文本框的内容发生改变时,相应的控件之间发生相应的改变,具有即时性。7) Keypress:事件由用户在文本框控件中按任意键触发。8) Alignment属性:设定控件中的文本对其方式9) Appearance属性:设定一个对象在运行时是否可以3D效果显示。10) BackColor属性:设置返回背景色11) BorderStyle属性:设置对象的边框样式12) DataField属性:设定数据使用者将被绑定到的字段名13) DataFormat属性:设定DataFormat对象,用于数据绑定14) DataMember属性:从数据供应程序提供的几个数据成员中返回/设定一个特定的数据成员15) DataSource属性:设定控件绑定的一个数据源16) DragIcon属性:设定图标,它将在拖放操作中作为指针显示17) DragMode模式:设定一个值,确定在拖放操作中所用方式18) Enabled属性:设置/返回运行时TextBox是否相应用户事件19) Font属性:设置/返回字体属性20) ForeColor属性:设置/返回文本的前景色21) Height属性:设置/返回TextBox的高度22) IMEMode属性:设置/返回数值用来确定输入方法编辑器的状态23) Index属性:设置/返回唯一的标识控件数组中该控件的编号24) Left属性:设置/返回TextBox控件的水平位置25) Locked属性:设置/返回TextBox中文本是否可编辑26) LinkItem属性:设置/返回DDE与另一个应用程序会话时,传给接受端的数据27) MaxLength属性:设置/返回一个值,指定在TextBox控件中能够输入的字符最大值28) MouseIcon属性:设置/返回自定义鼠标的图标29) Top属性:设置/返回TextBox控件的垂直位置30) Tag属性:存储过程所需的附加数据u 文本框类的事件:1) Change事件:当改变文本框内容时发生2) Click事件:鼠标单击控件时发生3) DblClick事件:用鼠标左键双击控件时发生4) DragDrop事件:在一个完整的拖放动作完成或使用Drag方法,并将其Action参数设置为2时发生5) DragOver事件:在拖放操作正在进行时发生6) GotFocus事件:当一个命令按钮获得焦点时发生7) LinkClose事件:当一个DDE对话结束时发生8) LinkError事件:当一个DDE对话框过程中出现错误时,该事件发生9) KeyDown事件:当命令按钮具有焦点时按下一个键时发生10) Validate事件:在焦点转换到另一个控件之前发生,此时该控件的Causes Validation 属性值设置为True u 单选按钮类的控件:1) Caption属性:显示在控件上的文本,是单选按钮的标题。2) Alignment属性:决定单选按钮的标题在控件上的位置。3) Enable属性:该控件为灰色时为false,表示运行时不可用。4) Index属性:属性值表示为单选按钮组成的控件中某个按钮的索引值。5) Tabindex属性:建立控件时,vb自动为其分配一个tabindex值,利用tab键可以在控件之间切换焦点。6) Value属性:反映控件状态的属性,返回true表示已选择了该按钮。7) Appearance 属性:设置/返回一个对象在运行时是否以3D效果显示。8) BackColor 属性:设置/返回背景色。9) Container 属性:设置/返回Form上的控件属性。10) DataField 属性:设置/返回数据使用者将被绑定到的字段名。11) DataFormat 属性:设置/返回DataFormat对象,一个绑定对象将附加到它。12) DisabledPicture 属性:设置/返回一个对图像的引用,该图片在控件无效时显示在控件中。13) DownPicture 属性:设置/返回一个对图片的引用,该图片在控件单击下处于压下状态时显示。14) DragMode 属性:设置/返回一个值,确定在拖放操作中所用的方式。15) Font 属性:设置/返回字体属性。16) FontBold 属性:设置/返回字体粗体样式。17) FontItalic 属性:设置/返回字体斜体样式。 18) FontStrikethru 属性:设置/返回字体删除线样式。19) FontUnderLine 属性:设置/返回字体下划线样式。20) FontName 属性:设置/返回控件中显示文本所用的字体大小。21) FontSize 属性:设置/返回控件中显示文本所用的字体大小22) Height 属性:设置/返回控件的高度。23) MaskColor 属性:设置/返回一个在控件的图片中作为掩码的颜色。24) MousePointer 属性:设置/返回一个值,该值指示在运行时当鼠标移动到对象上时显示的指针类型。u 单选按钮类的常用事件:1) Click 事件:鼠标单击控件时发生。2) DbClick事件: 当在一个对象上按下和释放鼠标按钮并再次按下和释放按钮时,该事件发生。3) DragDrop事件:在一个完整的拖放动作或使用Drag方法,并将其Action参数设置位2时,该事件发生。4) DragOver事件: 在拖放操作正在进行时发生。5) GotFocus事件: 当获的对象焦点时发生。6) LostFocus事件:当对象失去焦点时发生。7) KeyDown事件:当控件具有焦点时按下一个键时发生。8) KeyUp事件: 当控件具有焦点时释放一个键时发生。9) KeyPress事件:当用户按下或释放ANSI一个键时发生。10) MouseDown事件:当在控件上按下鼠标键时发生。11) MouseMove事件:在控件上移动鼠标时发生。12) MouseUp事件:在控件上释放鼠标时发生。u 复选按钮类的控件:1) Caption属性:缺省为check1。2) Index属性:该属性值为复选框控件数组的下标.3) Value属性:value为0表空白,为1表勾号,为2表示灰色勾号.4) Container属性:Form控件上的容器。5) DataChangeed属性:设置/返回一个值,指出被绑定的控件中的数据已经被某进程修改。6) DataField属性:设置或返回数据使用者将被绑定到的字段名。7) DataFormat 属性:设置或返回DataFormat对象,用于数据绑定。8) Datasource属性:设置或返回控件绑定的一个数据源。9) DisabledPicture属性:设置或返回一个对图片的引用,该图片在控件无效时显示在控件中。10) DownPicture 属性:设置或返回一个对图片的引用,该图片在控件被单击处于压下状态时显示。11) DragIcon属性:设置或返回图标,它将在拖放操作中做为指针显示。12) DragMode属性:设置返回一个值,确定在拖放操作中所用方式。13) Font属性:设置或返回字体的属性。14) Name属性:设置或返回控件的标识名。15) Value属性:设置或返回控件的状态。u 复选按钮类的控件的基本事件:1) Click事件:鼠标单击控件时发生。2) DragDrop事件:在一个完整的拖放动作完成或使用Drag方法,并将其Action参数设置为2时发生。3) DragOver事件:在拖放操作正在进行时发生。4) GotFocus事件:在对象获的焦点时发生。,5) OLECompleteDrag事件:当源部件被放到目标时发生,并通知源部件拖放操作被执行或取消。6) OLEDragDrag事件:当源部件决定放操作能发生,却源部件被放到目标部件时,此事件发生。u 框架类的控件:1) List属性:列表框控件的表项是使用数组的方式保存,数组的每一个元素存储列表控件的一个表项1) Listcount属性:控件列表部分项目的个数。2) Mutselect属性:可以设置列表框为单选或允许多选属性.3) Selectd属性:标示一个数组,数组各元素为:4) Selected(0),selected(1)u 滚动条类的控件:1) Value属性:滚动条上滑块所在位置由value值所决定。2) Max和min属性:对value值的最大,最小进行限制。3) Largechange属性:用户点击滚动条与键头之间的区域时,value的改变量。4) OnClick事件:用来添加按钮的单击事件所执行的程序代码。u 定时器类类的控件:1) Interval属性:表示定时的时间间隔,以毫秒为单位。2) Enable属性:为true时(缺省值),激活定时器开始计时;为false时处于休眠状态.数据库连接方式选择Visual basic6.0连接数据库的主要方式以下几种方式:一是:用data控件进行数据库链接 ,二是利用adodc(ADO Data Control)进行数据库链接 。三是: 利用DataEnvironment进行数据库链接.四是利用ADO(ActiveX Data Objects)进行编程:现在我们来大致对这几种技术应用介绍:一、 用data控件进行数据库链接.第一步:给窗体添加一个Data控件。第二步:用Access建立一个名为Pad的数据库,在库中建立一个表Myset,给表添加四个字段:backcolor(数据),forecolor(文本),fontname(文本),fontsize(文本)。注意:请将库文件存入程序所在目录。 如果你的机器没安装有Access,可通过VB建库。二、 利用adodc(ADO Data Control)进行数据库链接:使用adodata控件访问数据库可以完全不用编写代码,只需要通过简单的设置和操作其属性就可以实现与数据库的连接,通过绑定数据感知控件,就能提供一个访问数据库的界面,用来实现对数据库的浏览,贴加,删除,修改等操作.三、 利用DAO对数据库进行操纵:在visual basic 中提供了两种与jet数据引擎接口的方法:data控件与数据访问对象(DAO)DAO是database object的英文缩写,要访问数据库一方面数据库要提供访问接口,另一方面要在编程环境中有对数据库的支持.DAO模型是设计关系数据库系统结构的对象类的集合.他们提供了管理关系型数据库系统所需要的全部操作属性和方法,这其中包括建立数据库,定义表,字段和建立表间关系,定位和查询数据库等.关系数据库介绍:关系数据库是目前各类数据库中最重要、最流行的数据库,他应用数学方法来处理数据库数据,是目前使用最广泛的数据库系统。20世纪70年代以后开发的数据库管理系统产品几乎都是基于关系的。在数据库发展的历史上,最重要的成就就是关系模型。 关系数据库系统与非关系数据库系统的区别是:关系系统只有“表“这一种数据结构;而非关系数据库系统还有其他数据结构,对这些数据结构有其他的操作。结构化查询语言SQL(Structured Query Language)是一种介于关系代数与关系演算之间的语言,其功能包括查询、操纵、定义和控制四个方面,是一个通用的、功能极强的关系数据库语言。目前已成为关系数据库的标准语言MicrosoftAccess介绍:使用MicrosoftAccess,可以在单一的数据库文件中管理所有的信息。在这个文件中,用户可以将自己的数据分别保存在各自独立的存储空间中,这些空间称作表;可以使用联机窗体来查看、添加及更新表中的数据;使用查询来查找并检索所要的数据;也可以使用报表以特定的版面布置来分析及打印数据。 如果要保存数据,请为每一种类型的信息创建一个表。如果要从查询、窗体或报表中的多个表中将数据合并在一起,就要定义各个表之间的关系。 如果要搜索并检索符合指定条件的数据,包括来自多个表中的数据,就要创建查询。查询的同时也可以更新或删除多条记录,并对数据执行内嵌或自定义的计算。 如果要简单地直接在某个表中查看、输入及更改数据,请创建一个窗体。在打开一个窗体时,MicrosoftAccess将从一个或多个表中检索数据,并使用用户在“窗体向导”选择的版面布局或所创建的版面布局,将窗体显示在屏幕上。 如果要分析数据或将数据以特定的方式打印出来,请创建一个报表。例如,可以打印一份将数据分组并计算数据总和的报表,也可以打印另一份带有各种数据格式的打印邮件标签的报表。第三章 图书管理系统的设计与实现3.1 系统的设计3.1.1系统的概要设计该系统考虑将整个系统分解成如下模块:主界面图书管理图书信息管理读者类别管理读者信息管理图书借阅管理借书管理还书管理系统管理登录图书类别管理读者管理3.1.2 系统的详细设计1.读者类别表2.读者信息表:3. 借阅信息表:4. 书籍信息表:5.图书类别表:6.系统管理表:3.2 系统的设计与实现3.2.1 系统的主界面的设计与实现主界面代码:Private Sub add_admin_Click()frmadduser.ShowEnd SubPrivate Sub add_back_book_Click()frmbackbookinfo.ShowEnd SubPrivate Sub add_book_info_Click()frmaddbookinfo.ShowEnd SubPrivate Sub add_book_style_Click()frmaddbookstyle.ShowEnd SubPrivate Sub add_lend_book_Click()frmfindbook.ShowEnd SubPrivate Sub add_reader_info_Click()frmaddreaderinfo.ShowEnd SubPrivate Sub add_reader_style_Click()frmaddreaderstyle.ShowEnd SubPrivate Sub change_pwd_Click()frmchangepwd.ShowEnd SubPrivate Sub del_book_info_Click()frmmodifybookinfo.ShowEnd SubPrivate Sub del_book_style_Click()frmmodifybookstyle.ShowEnd SubPrivate Sub del_reader_info_Click()frmreaderinfo.ShowEnd SubPrivate Sub del_reader_style_Click()frmmodifyreaderstyle.ShowEnd SubPrivate Sub exit_sys_Click()EndEnd SubPrivate Sub find_book_info_Click()frmfindbook.ShowEnd SubPrivate Sub find_lend_book_Click()frmfindborrowinfo.ShowEnd SubPrivate Sub find_reader_info_Click()frmfindreader.ShowEnd SubPrivate Sub modify_book_info_Click()frmmodifybookinfo.ShowEnd SubPrivate Sub modify_book_style_Click()frmmodifybookstyle.ShowEnd SubPrivate Sub modify_reader_info_Click()frmreaderinfo.ShowEnd SubPrivate Sub modify_reader_style_Click()frmmodifyreaderstyle.ShowEnd Sub3.2.2 图书管理模块的设计与实现图书管理模块主要由:图书类别管理,图书信息管理.图书类别管理又分别由以下几个界面构成:1. 添加图书类别添加图书类别代码:Private Sub Command1_Click()Dim rs_bookstyle As New ADODB.RecordsetDim sql As StringIf Trim(Text1.Text) = Then MsgBox 图书种类不能为空, vbOKOnly + vbExclamation, Text1.SetFocus Exit SubEnd IfIf Trim(Text2.Text) = Then MsgBox 种类编号不能为空, vbOKOnly + vbExclamation, Text2.SetFocus Exit SubEnd Ifsql = select * from 图书类别 where 类别名称= & Text1.Text & rs_bookstyle.Open sql, conn, adOpenKeyset, adLockPessimisticIf rs_bookstyle.EOF Then rs_bookstyle.AddNew rs_bookstyle.Fields(0) = Trim(Text1.Text) rs_bookstyle.Fields(1) = Trim(Text2.Text) rs_bookstyle.Update MsgBox 添加图书类别成功!, vbOKOnly, rs_bookstyle.CloseElse MsgBox 读者类别重复!, vbOKOnly + vbExclamation, Text1.SetFocus Text1.Text = rs_bookstyle.Close Exit SubEnd IfEnd Sub2. 修改图书类别:修改图书类别代码:Private Sub Form_Load()Dim sql As StringOn Error GoTo loaderrorsql = select * from 图书类别rs_reader.CursorLocation = adUseClientrs_reader.Open sql, conn, adOpenKeyset, adLockPessimistic 打开数据库cmdupdate.Enabled = False设定datagrid控件属性DataGrid1.AllowAddNew = False 不可增加DataGrid1.AllowDelete = False 不可删除DataGrid1.AllowUpdate = FalseIf userpow = guest Then 权限相关 Frame2.Enabled = FalseEnd IfSet DataGrid1.DataSource = rs_readerExit Subloaderror: MsgBox Err.DescriptionEnd Sub3.2.3 读者管理模块的设计与实现1.添加读者类别界面:Private Sub Command1_Click()Dim sql As StringIf Trim(Text1.Text) = Then MsgBox 读者种类不能为空, vbOKOnly + vbExclamation, Text1.SetFocus Exit SubEnd IfIf Trim(Text2.Text) = Then MsgBox 借书数量不能为空, vbOKOnly + vbExclamation, Text2.SetFocus Exit SubEnd IfIf Trim(Text3.Text) = Then MsgBox 借书期限不能为空, vbOKOnly + vbExclamation, Text3.SetFocus Exit SubEnd IfIf Trim(Text4.Text) = Then MsgBox 有限期限不能为空, vbOKOnly + vbExclamation, Text4.SetFocus Exit SubEnd Ifsql = select * from 读者类别 where 种类名称= & Text1.Text & rs_readerstyle.Open sql, conn, adOpenKeyset, adLockPessimisticIf rs_readerstyle.EOF Then rs_readerstyle.AddNew rs_readerstyle.Fields(0) = Trim(Text1.Text) rs_readerstyle.Fields(1) = CInt(Text2.Text) rs_readerstyle.Fields(2) = CInt(Text3.Text) rs_readerstyle.Fields(3) = CInt(Text4.Text) rs_readerstyle.Update MsgBox 添加读者类别成功!, vbOKOnly, rs_readerstyle.CloseElse MsgBox 读者类别重复!, vbOKOnly + vbExclamation, Text1.SetFocus Text1.Text = rs_readerstyle.Close Exit SubEnd IfEnd Sub3. 查询读者信息代码分析:Private Sub Command1_Click()Dim rs_findreader As New ADODB.RecordsetDim sql As StringIf Check1.Value = vbChecked Then sql = 读者编号= & Trim(Text1.Text & ) & End IfIf Check2.Value = vbChecked Then If Trim(sql) = Then sql = 读者姓名= & Trim(Text2.Text & ) & Else sql = sql & and 读者姓名= & Trim(Text2.Text & ) & End IfEnd IfIf Check3.Value = vbChecked Then If Trim(sql) = Then sql = 读者类别= & Trim(Combo1.Text & ) & Else sql = sql & and 读者类别= & Trim(Combo1.Text & ) & End IfEnd Ifsql = select * from 读者信息 where & sqlrs_findreader.CursorLocation = adUseClientrs_findreader.Open sql, conn, adOpenKeyset, adLockPessimisticDataGrid1.AllowAddNew = FalseDataGrid1.AllowDelete = FalseDataGrid1.AllowUpdate = FalseSet DataGrid1.DataSource = rs_findreaderrs_findreader.CloseEnd Sub3.2.4 图书借阅管理模块的设计与实现代码实现:Private Sub Command1_Click()Dim sql As StringDim rs_find As New ADODB.RecordsetIf Option1.Value = True Then sql = select * from 书籍信息 where 是否被借出=是End IfIf Option2.Value = True Then sql = select * from 书籍信息 where 是否被借出=否End IfIf Option3.Value = True Then sql = select * from 借阅信息 where 读者姓名= & Text1.Text & End If rs_find.CursorLocation = adUseClient rs_find.Open sql, conn, adOpenKeyset, adLockPessimistic DataGrid1.AllowAddNew = False DataGrid1.AllowDelete = False DataGrid1.AllowUpdate = False Set DataGrid1.DataSource = rs_findEnd Sub3.2.5系统管理模块的设计与实现Private Sub Command1_Click()Dim sql As StringDim rs_add As New ADODB.RecordsetIf Trim(Text1.Text) = Then MsgBox 用户名不能为空, vbOKOnly + vbExclamation, Exit Sub Text1.SetFocusElse sql = select * from 系统管理 rs_add.Open sql, conn, adOpenKeyset, adLockPessimistic While (rs_add.EOF = False) If Trim(rs_add.Fields(0) = Trim(Text1.Text) Then MsgBox 已有这个用户, vbOKOnly + vbExclamation, Text1.SetFocus Text1.Text = Text2.Text = Text3.Text = Combo1.Text = Exit Sub Else rs_add.MoveNext End If Wend If Trim(Text2.Text) Trim(Text3.Text) Then MsgBox 两次密码不一致, vbOKOnly + vbExclamation, Text2.SetFocus Text2.Text = Text3.Text = Exit Sub ElseIf Trim(Combo1.Text) system And Trim(Combo1.Text) guest Then MsgBox 请选择正确的用户权限, vbOKOnly + vbExclamation, Combo1.SetFocus Combo1.Text = Exit Sub Else rs_add.AddNew rs_add.Fields(0) = Text1.Text rs_add.Fields(1) = Text2.Text rs_add.Fields(2) = Combo1.Text rs_add.Update rs_add.Close MsgBox 添加用户成功, vbOKOnly + vbExclamation, Unload Me End IfEnd IfEnd Sub第四章 图书管理系统运行环境4.1运行环境硬件平台CPUIntel P4 1.5G主板Intel 850芯片组的GA-8TX-C内存2128M的三星Rambus内存硬盘Seagate Barracuda 7200.7 80G显卡Unika 小妖G9800显示器美格770PF,17寸纯平显示器软件环境操作系统Microsoft WindowsXP简体中文专业版SP1办公软件Microsoft Office 2003显卡驱动nVIDIA ForceWare驱动56.72版For Win2000/XP致 谢在本次毕业设计中,我从指导老师身上学到了很多东西。他认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。他无论在理论上还是在实践中,都给与我很大的帮助,使我得到不少的提高,这对于我以后的工作和学习都有一种巨大的帮助,感谢他细心而又耐心的辅导。参考文献数据库系统原理与应用 闪四清 清华大学出版社1999VisualVisual 6.0从入门到精通 罗光春 电子科技大学出版社2000Visual visual 6.0基础与应用 周丰治 高等教育出版社2001软件工程 杨文龙等 电子工业出版社2002管理信息系统 薛华成 清华大学出版社199921指导教师评语:签名:日期: 外文资料译文(一) 电路交换网与vb调用数据库 切换电路的连接设置的结果是保留了从发送端到接收端的包所通过的线路带宽。其它的特性这一就是所有的包都沿同一个线路意味着如果包传输超过了时序那它将不能到达接收端.由于没有路径用来进行包交换,所以要想不同的包沿不同的路径传送就是能依靠网络的条件了。这样包即便是超过了时序它们也有可能到达的。包交换技术比线路交换技术更能容错。事实上,这也是它被发明的理由!当一个交换开头被拉下,则所有使用它的线路将被切断并且其余的包将不能再被传送。此时如果在进行包交换,包将在已选择的路径上停止交换。预先建立一条路径也开创预先保留带宽的可能性。如果带宽被保留,那么当一个包到达时,通过保留的带宽它可以被立即发送出去。假如没有带宽被保留用于包交换,那么所有的包将不得不等待着被转发。预先保留带宽意味着当一个包出现时不会发生拥塞(除非出现的包比预期的还多)。在另一方面,当尝试建立一条电路时,由于拥塞,尝试将会失败。因此,在线路交换(在设置时)和包交换(在包发送时)的不同时间拥塞都可能发生。如果为特定的用户建立一条线路那么当这个用户没有数据传送时,则这些保留下来的带宽将被浪费而不能用于其它用户的传输。而包交换则不会浪费带宽,因此它在系统宽带方面的应用更有前景。理解电路交换和包交换的这种商业差别是极其重要的。这种商业差别是在质保服务和浪费资源相对不质保服务和不浪费资源的。包交换是利用存储器并向前发送的。包是先存储在路由器的内存里然后再发送到下一个路由器的。和电路交换一样信息位也是连续不断地通过导线传输的。存储转发技术增加了延迟时间。另一个不同是电路交换是完全透明的。发送者和接收者可以使用他们想要的任一比特速率,格式和帧同步.这通信公司不知道也不关心这的。而在包交换中载体决定了基本的参数的。用一个简单比喻它们就像一个是公路一个是铁路。在以前,用户决定介质的大小,速度和特性。而后来这些都由通信公司做了的。这些都是透明的它允许声音,数据和传真共同存在于电话系统里。电路交换和包交换的最后一个不同点是计费方式。电路交换的计费是按照传统的距离和时间的。比如移动电话除打国际电话外距离是不列入计算的,而时间也只是列入一个简单的计算(例:拔打2000分钟电话比1000分钟电话花费的多并且晚上或周末也比平时来得便宜)。时间对于包交换来说是没有问题的,但是传输流量却是个问题。ISPs为家庭用户的计费方式基于按一个月的流量的一半的,这是因为它们用得相对较少并且他们的顾客也很好理解这种计费方式。但是主干网络中心的收费是基于它们的流量的。这些不同列在图2-40里。项目电路交换包交换呼叫设置需要不需要专用物理线路是否每个包沿相同路径是否包的到达中有规则的是否是否会致命的崩溃是否带宽利用固定动态分配可能的时间堵塞在设置时在每个包时可能浪费带宽是否以存储转发进行发送否是透明性是否收费按分钟按包图240:比较电路交换网络和包交换网络的不同电路交换和包交换是两者都是非常重要的,我们将立即在详细的资料里提及并描述它们之间各种不同的技术。2.6 移动电话系统 传统的电话的系统将不能满足用户的大量增长(即有一天实现了终端到终端的光纤连接)。人类在进步,人们期望能在飞机上,汽车里,船上,足球场甚至在公园里跑步的时候也能打电话。在近几年人们更是期望能在更多的地方发电子邮件和上网冲浪。因此有很多的人关心无线电话技术。在下面的章节我们将用详细的资料来学习这些主题。 无线电话可以分为基本的两种:无绳电话和移动电话(有时也叫蜂窝电话)。无绳电话设备是由痤机和听筒组成它们被安装在用户的家里。它们从不被应用于网络,所以我们没有办法做进一步的检测。取而代之,我们将把焦点放在在声音和数据通信上有广泛应用的移动系统上。 移动电话经历了三个不同的发展阶段,每个阶段都有不同的技术:1 模拟声音2 数字声音3 数字声音和数据(互联网,电子邮件,etc.)虽然我们主要讨论这系统技术,但是我们也有必要注意政府和市场对它的巨大影响。第一个移动电话系统是在美国由受美国国家联邦通讯委员会(FCC)委托的美国电话电报公司(AT&T)设计的。结果在整个美国就有了一个简单的(模拟)系统并且移动电话开始在加利福尼亚上市同时也在纽约得到应用。相反的,当移动电话来到欧洲时,由于每个国家都设计了自己的系统,所以结局很惨败。当数字技术到来时,欧洲从前面的失败中吸收教训,政府和邮政制定了简单系统(GSM)的统一标准,因此移动电话在欧洲的任何一个地方都是通用的。此时,美国政府决定不把标准商业化因而它失去了数字市场。这个决定导致不同的设备生产商生产出不同的移动电话。结果现在美国有两不可兼容的数字移动电话在使用(加强了一家就会削弱另一家)。即使美国拥有移动电话的所有权,但是在应用上欧洲要远远超过美国的。原因之一就是整个欧洲拥有相同的简单系统。然而更多的是由于美国和欧洲的基本电话数量不同。在美国移动电话和固定电话是共用的,因此对于用户没有办法区分(212)234-5678到底是固定电话(拨打是便宜的或者是免费的)还是移动电话(拨打是昂贵的)。为了使人们从使用电话中获益,电话公司决定为引入呼叫而花自己的钱制造移动电话。结果导致,很多人怕由于呼叫而收到一大笔帐单而不愿意买移动电话。在欧洲移动电话有特殊的区号(如800,900之类的数字),所以它很快就得到了认可。因而在一般的“叫方付费”的原则在欧洲也被应用于移动电话了(除国际电话分开收费外)。在欧洲采用颁布广泛的已经付费的移动电话的影响巨大(超过同地区的75%)。移动电话可以在很多的商店里购买而不像购买收音机那样需要很多手续。谁付费谁使用,他们预先存入,比如20或50 euro并且在快用完的时候可以用PIN码进行再充值。结果在欧洲几乎所有的青年和小孩都有一个(预付费的)移动电话,这样他们的父母就可以准确的定位他们而不用去担心孩子们会用掉一大笔帐的。如果仅在偶而使用移动电话,那么它的使用是基本免费的因为这里有月租或者预先支付呼叫。2.6.1 第一代移动电话:模拟声音 移动电话充分体现了政治和市场的特征。让我们来看一下它的技术吧。它是从简单的系统开始的。在20世纪的初,移动无线电话被偶而应用于海上或军事通信中。在1946年,第一个基站被安置在St.Louis。这个系统被安置在高层建筑上,它使用一个简单的大的发送机并且有了用于发送和接收的简单的通道。像这样的系统称做被动式系统,从1950开始它就被安装在很多的城市了。可较验的收音机,出租车,警车还有电视也广泛采用这种技术。在1960年,IMTS(改良的移动电话系统)被发明。它仍然使用高达200瓦的发送器,发送器被安置在山上,不过此时已经有了两各不同的频率了,一种用来发送,另一种用来接收,所以这个呼叫按钮就可不要了。相比信号出站移动电话的信号入站是通过不同的通道的,因此移动用户不会互相听到(不像应用在出租车上被叫系统)。 IMTS支持从150 MHz到 450 MHz的23条通道。由于通道太少,用户经常要等很长时间才能听到拔号音。也由于小山上的发送器的功率太大,为了不互相干扰邻近的系统不得不与它相距几百千米。总而言之,这有限的容量使用这系统有点不合实际应用。VB6.0中的MSChart控件是一个功能强大的高级图表工具,拥有丰富的图表绘制功能,可显示二维和三维的棒图、区域图、线形图、饼图等多种常用图表。近日我为了在双击图表的某个区域时将与该区域相对应的数据库的内容在DataGrid控件上显示出来,遇到了许多困难,最后用一个自定义的变量SelectSeries解决了问题,具体方法如下:设数据库名称为“学生信息”,有一Access表“学生成绩”,其内容为一个班学生的考试成绩,包括学号、姓名、成绩3个字段,成绩字段格式是字符型,值为“优”、“良”、“中”、“差”中的一个。窗体Form1包括一个MSChart控件McScore,类型为二维饼图,用于显示每种成绩的学生数;一个ADO控件AdScore用于连接数据库;一个DataGrid控件DgScore用于以表格形式显示数据库内容。工作过程为:双击饼图的某个区域,则DgScore显示相应成绩的学生名单。代码如下:Option ExplicitDim SelectedSeries as Integer 自定义变量Dim Rs() as String 提取记录集用的字符串数组Private Sub Form_Load()设定DataGrid控件的数据源DgScore.DataSource=AdScore设定ADO控件的连接字串和初始的记录源,即显示内容AdScore.ConnectString=Provider=Microsoft.OLEDB.3.51;Persist_Security Info=False;Data Source=学生信息AdScore.RecordSource=selet from学生成绩order by成绩AdScore.Refresh预设好提取记录用的SQL语句Rs(1)=select from学生成绩where成绩=Chr(34)优_Chr(34)order by成绩Rs(2)=select from学生成绩where成绩=Chr(34)良_Chr(34)order by成绩Rs(3)=select from学生成绩where成绩=Chr(34)中_Chr(34)order by成绩Rs(4)=select from学生成绩where成绩=Chr(34)差_Chr(34)order by成绩End SubPrivate Sub McScore_SeriesSelected(Series as Integer,MouseFlags as _Integer,Cancel as Integer)SelectedSeries=SeriesEnd SubPrivate Sub McScore_PointSelected(Series as Integer,DataPoint as_Integer,MouseFlags as Integer,Cancel as Integer)SelectedSeries=SeriesEnd SubPrivate Sub McScore_Db1Click()改变ADO控件的记录源并刷新Adoc1.RecordSource=Rs(SeletedSeries)Adoc1.RefreshEnd Sub- VB做为快速应用开发(RAD)工具越来越得到开发人员的认可和接受。它对许多API(如ODBC API、SOCKET API等等)的封装使得编程变得简单起来。同时,它支持集成开发环境下的可视化、事件驱动、面向对象等编程特点。下面,我们谈谈在VB中调用存储过程的实现方法及其注意事项。 - 我们知道,VB的数据库编程有许多种方法,比如直接用ODBC API编程,这种方法灵活、高效,程序员可以实现对数据库复杂的控制;也可以用VB中的数据对象,如RDO(远程数据对象)、DAO(数据访问对象)、ADO(ActiveX 数据对象),这种方法实现起来方便、快捷,但灵活性较差一些。由于存储过程在实现数据封装、隐藏以及代码的预编译、减少网络负载、维护方便等优点,所以被许多RDBMS和编程工具做支持。VB中的各类数据对象也提供对存储过程的支持。 - 我们以ADO为例来说明其实现的步骤 - 1 创建、调试存储过程。你可以在数据库中也可以在其他外挂程序的支持下进行存储过程的创建和调试工作。本例中的存储过程代码如下(使用PUBS的MS SQL中的例子库 ): CREATE PROCEDURE myprocedurejob_id smallint,job_lvl tinyintASSELECT *FROM employeeWHERE job_id job_lvl- 2 在VB中生成一个新的工程,工程有一窗体,一个COMMAND(NAME:COMMAND1) 按钮,一个 MSFlexGrid(NAME:MSFlexGrid1)控件。 - 3 创建连接ADO connection; - 4 创建命令ADO command; - 5 创建参数并设置各个参数的属性; - 6 执行ADO command; - 7 对数据进行处理;MSFlexGrid显示查询到的数据 - 8 释放连接,退出程序。 - 其中代码如下: 在窗体中声明以下变量:Dim cnn1 As ADODB.Connection 连接Dim mycommand As ADODB.Command 命令Dim parm_jobid As ADODB.Parameter 参数1Dim parm_joblvl As ADODB.Parameter 参数2Dim rstByQuery As ADODB.Recordset 结果集Dim strCnn As String 连接字符串在窗体的LOAD事件中加入如下代码:Set cnn1 = New ADODB.Connection 生成一个连接strCnn = DSN=MYDSN;uid=sa;pwd=创建的系统数据源MYDSN指向PUBS数据库cnn1.Open strCnn 打开连接在窗体的UNLOAD中的加入代码如下:cnn1.Close 关闭连接Set cnn1 = Nothing 释放连接在按钮中的代码如下:Dim i As integerDim j as integer Set parm_jobid = New ADODB.ParameterSet mycommand = New ADODB.Command parm_jobid.Name = name1 this line can be ommitedparm_jobid.Type = adInteger 外 文 原 文(二)Electric circuit exchange network and vb transfer database The result of the connection setup with circuit switching is the reservation of bandwidth all the way from the sender to the receiver. All packets follow this path. Among other properties, having all packets follow the same path means that they cannot arrive out of order. With packet switching there is no path , so different packets can follow different paths, depending on network conditions at the time they are sent. They may arrive out of order.Packet switching is more fault tolerant than circuit switching. In fact, that is why it was invented. If a switch goes down, all of the circuits using it are terminated and no more traffic can be sent on any of them. With Packet switching, packets can be routed around dead switches.Setting up a path in advance also opens up the possibility of reserving bandwidth in advance. If bandwidth is reserved, then when a packet arrives, it can be sent out immediately over the reserved bandwidth. With packet switching, no bandwidth is reserved, so packets may have to wait their turn to be forwarded.Having bandwidth reserved in advance means that no congestion can occur when a packet shows up (unless more packets show up than expected).On the other hand, when an attempt is made to establish a circuit, the attempt can fail due to congestion. Thus, congestion can occur at different times with circuit switching(at setup time) and packet switching(when packets are sent).If a circuit has been reserved for a particular user and there is no traffic to send, the bandwidth of that circuit is wasted. It cannot be used for other traffic. Packet switching does not waste bandwidth and thus is more efficient form a system-wide perspective. Understanding this trade-off is crucial for comprehending the difference between circuit switching and packet switching. The trade-off is between guaranteed service and wasting resources versus not guaranteeing service and not wasting resources.Packet switching uses store-and-forward transmission. A packet is accumulated. in a routers memory, then sent on to the next router. With circuit switching, the bits just flow through the wire continuously. The store-and-forward technique adds delay.Another difference is that circuit switching is completely transparent.The sender and receiver can use any bit rate, format, or framing method they want to. The carrier does not know or care. With packet switching, the carrier determines the basic parameters. A rough analogy is a road versus a railroad. In the former, the user determines the size, speed, and nature of the vehicle; in the latter, the carrier does. It is this transparency that allows voice, data, and fax to coexist within the phone system.A final difference between circuit and packet switching is the charging algorithm. With circuit switching, charging has historically been based on distance and time. For mobile phones, distance usually does not play a role, except for international calls, and time plays only a minor role(e.g., a calling plan with 2000 free minutes costs more than one with 1000 free minutes and sometimes night or weekend calls are cheaper than normal).With packet switching, connect time is not an issue, but the volume of traffic sometimes is. For home users, ISPs usually charge a flat monthly rate because it is less work for them and their customers can understand this model easily, but backbone carriers charge regional networks based on the volume of their traffic. The differences are summarized in Fig.2-40.ItemCircuit SwitchedPacket SwitchedCall setupRequiredNot neededDedicated physical pathYesNoEach packet follows the same routeYesNoPackets arrive in orderYesNoIs a switch crash fatalYesNoBandwidth availableFixedDynamicTime of possible congestionAt setup timeOn every packetPotentially wasted bandwidthYesNoStore-and-forward transmissionNoYesTransparencyYesNoChargingPer minutePer packetBoth circuit switching and packet switching are important enough that we will come back to them shortly and describe the various technologies used in detail.2.6 THE MOBILE TELEPHONE SYSTEMThe traditional telephone system(even if it some day gets multi-gigabit end-to-end fiber) will still not be able to satisfy a growing group of users :people on the go .People now expect to make phone calls from airplanes ,cars ,swimming pools ,and while jogging in the park .Within a few years they will also expect to send e-mail and surf the Web from all these locations and more consequently ,there is a tremendous amount of interest in wireless telephony .In the following sections we will study this topic in some detail.Wireless telephones come in two basic varieties :cordless phones and mobile phones(sometimes called cell phones),Cordless phones are devices consisting of a base station and a handset sold as a set for use within the home. These are never used for networking ,so we will not examine them further .Instead we will concentrate on the mobile system ,which is used for wide area voice and data communication.Mobile phones have gone through three distinct generations ,with different technologies:1. Analog voice2. Digital voice3. Digital voice and data(Internet ,e-mail ,etc.).Although most of our discussion will be about the technology of these systems ,it is interesting to note how political and tiny marketing decisions can have a huge impact .The first mobile system was devised in the U.S. by AT&T and mandated for the whole country by the FCC .As a result ,the entire U.S. had a single(analog) system and a mobile phone purchased in California also worked in New York .In contrast ,when mobile came to Europe ,every country devised its own system ,which resulted in a fiasco.Europe learned from its mistake and when digital came around, the government-run PTTs got together and standardized on a single system(GSM),so any European mobile phone will word anywhere in Europe .By then ,the U.S. had decided that government should not be in the standardization business ,so it left digital to the marketplace .This decision resulted in different equipment manufacturers producing different kinds of mobile phones .As a consequence ,the U.S. now has two major incompatible digital mobile phone systems in operation(plus one minor one).Despite an initial lead by the U.S. , mobile phone ownership and usage in Europe is now far greater than in the U.S. Having a single system for all of Europe is part of the reason ,but there is more .A second area where the U.S. and Europe differed is in the humble matter of phone numbers .In the U.S. mobile phones are mixed in with regular (fixed) telephones .Thus ,there is no way for a caller to see if ,say ,(212)234-5678 is a fixed telephone (cheap or free call) or a mobile phone (expensive call).To keep people from getting nervous about using the telephone ,the telephone companies decided to make the mobile phone owner pay for incoming calls .As a consequence ,many people hesitated to buy a mobile phone for fear of running up a big bill by just receiving calls .In Europe ,mobile phones have a special area code (analogous to 800 and 900 numbers) so they are instantly recognizable .Consequently , the usual rule of “caller pays” also applies to mobile phones in Europe (except for international calls where costs are split).A third issue that has had a large impact on adoption is the widespread use of prepaid mobile phones in Europe (up to 75% in some areas ).These can be purchased in many stores with no more formality than buying a radio .You pay and you go .They are preloaded with ,for example ,20 or 50 euro and can be recharged (using a secret PIN code ) when the balance drops to zero . As a consequence , practically every teenager and many small children in Europe have (usually prepaid ) mobile phones so their parents can locate them ,without the danger of the child running up a huge bill .If the mobile phone is used only occasionally ,its use is essentially free since there is no monthly charge or charge for incoming calls .2.6.1 First-Generation Mobile Phones :Analog Voice Enough about the politics and marketing aspects of mobile phones .Now let us look at the technology ,starting with the earliest system .Mobile radiotelephones were used sporadically for maritime and military communication during the early decades of the 20th century .In 1946, the first system for car-based telephones was set up in St.Louis .This system used a single large transmitter on top of a tall building and had a single channel ,used for both sending and receiver .Such systems ,known as push-to-talk systems ,were installed in several cities beginning in the late 1950s.CB-radio,taxis,and police cars on television programs often use this technology.In the 1960s,IMTS(Improved Mobile Telephone System) was installed .It ,too ,used a high-powered (200-watt) transmitter ,on top of a hill , but now had two frequencies ,one for sending and one for receiving , so the push-to-talk button was no longer needed . Since all communication from the mobile telephones went inbound on a different channel than the outbound signals ,the mobile users could not hear each other (unlike the push-to-talk system used in taxis). IMTS supported 23 channels spread out from 150 MHz to 450 MHz .Due to the small number of channels ,users often had to wait a long time before getting a dial tone .Also ,due to the large power of the hilltop transmitter ,adjacent systems had to be several hundred kilometers apart to avoid interference . All in all ,the limited capacity made the system impractical.In VB6.0 MSChart controls is one function formidable high-level graph tool, has the rich graph plan function, may demonstrate two-dimensional and the three dimensional good chart, the linear chart, the cake chart and so on the many kinds of commonly used graph. Recently I in order to in double struck the graph when some region will the database content which corresponded with this region controlled on in DataGrid demonstrates, encountered many difficulties, finally used one to solve the problem from definition variable SelectSeries, concrete method as follows:Supposes the database name is the student information , has one Access table the student result , its content is one class students test result, includes the student number, the name, the result 3 fields, the result field form is the character, the value is is superior , is good , center , the difference center one.Window Form1 includes one MSChart controls MC$score, the type for the two-dimensional cake chart, uses in to demonstrate each kind of result the student counts; One ADO controls AdScore uses in to connect the database; One DataGrid controls DgScore uses in by the form form demonstration database content.The work process is: Double strikes the cake chart some region, then DgScore demonstrates the corresponding result the student name list.Code as follows:Option ExplicitDim SelectedSeries as Integer from definition variable Dim Rs () as String withdraws the character string array which the record compendium uses Private Sub Form_Load () Establishes DataGrid controls the data pool DgScore.DataSource= AdScore Establishes ADO controls the connection character string and the initial record source, namely demonstration content AdScore.ConnectString= Provider=Microsoftc.oledb.3.51; Persist_Security Info=False; Data Source= student information AdScore.RecordSource= selet * from student result order by result AdScore.Refresh Supposes in advance withdraws the SQL sentence which the recording uses Rs (1) = select * from the student result where result = + Chr (34) + is superior + _Chr (34) + order the by result Rs (2) = select * from the student result where result = + Chr (34) + is good + _Chr (34) + order the by result Rs (3) = select * from student result where result = + Chr (34) + center + _Chr (34) + order by result Rs (4) = select * from student result wh
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。