DELPHI三层图书管理系统(源代码+论文)
收藏
资源目录
压缩包内文档预览:
编号:149740927
类型:共享资源
大小:3.29MB
格式:RAR
上传时间:2021-10-10
上传人:好资料QQ****51605
认证信息
个人认证
孙**(实名认证)
江苏
IP属地:江苏
20
积分
- 关 键 词:
-
DELPHI
三层
图书
管理
系统
源代码
论文
- 资源描述:
-
DELPHI三层图书管理系统(源代码+论文),DELPHI,三层,图书,管理,系统,源代码,论文
- 内容简介:
-
分布式多层数据库系统的应用目 录第一部分 引言1.1 任务或问题:1.2 实际背景:1.3 我的工作1.4 特色(创新)第二部分 毕业设计课题2.1 设计课题2.2 设计时间2.3 设计人员及任务2.4 指导老师2.5 设计内容第三部分 系统方案论证3.1 软件定义3.2 体系结构规划第四部分 毕业设计内容4.1 分布式多层数据库开发简介4.2 服务器端程序的建立4.3客户端程序的建立4.4客户端实现SQL 查询4.5 动态连接应用程序服务器的实现4.6 图书管理功能的实现第五部分 毕业设计心得体会第六部分 附录8.1 代码部分参考资料摘要本次毕业设计任务是通过开发一个分布式多层数据库图书管理系统,学习用delphi开发分布式多层数据库系统。采用Delphi6.0和MS Server2000等软件为开发工具;通过对计算机硬件和软件解决方案的论证;对应用领域进行调查分析;参考各种资料和进行数据库编程实践。在指导老师的帮助下,已经基本上成功地实现了设计任务书的要求。使得设计的数据库系统能够实现一般数据库的管理。我们研究了数据库的查询优化问题。第一部分 引 言1.1任务或问题:开发一个分布式多层图书管理系统,可以实现动态的连接应用程序服务器,只要对配置文件进行配置,就可以像网上邻居一样选择所要连接的应用程序服务器。并提供借书还书,图书和期刊检索等查询功能。1.2实际背景:随着社会发展,人类的生产、生活越来越离不开信息。谁拥有了更多更有效的信息,谁就将在竞争中处于有利地位。信息产业正在成为一个国家的支柱。数据作为信息的载体,其管理工具数据库对于信息技术的重要性,正日益得到人们的重视。只有拥有了先进的数据库技术,才能有效地管理好浩如烟海的数据,并从中提取出对自己有用的信息来加以利用。90年代,人们开发MIS系统大都采用客户机/服务器结构,客户机/服务器结构既是硬件结构又是软件结构。即数据放在服务器上,程序在客户机上。进行数据访问时,由客户机提出请求(一般是SQL语句),服务器执行并给出结果。客户机/服务器对于优化了网络,提高了系统的利用率。客户机/服务器体系结构的发展经历了从二级体系结构模式到三级体系结构模式。1.3我的工作 设计系统框架,设计数据库,编写代码,测试数据等。1.4特色(创新)可以像网上邻居一样选择所要连接的应用程序服务器。第二部分 毕业设计课题2.1 设计课题漳大图书馆管理系统2.2 设计时间二四年10月至二四年12月2.3 设计人员及任务王东凯 动态连接服务器模块的实现及帮助件功能模块的实现王开斌 分布式多层数据模块的实现王杰林 图书管理功能模块的实现陈庆辉 sqlserver 2000数据库的分析及表的设计2.4 指导老师苏绿园 2.5 设计内容利用Delphi6.0和MS Server2000为主要开发工具,以WindowsXP为开发平台。设计出分布式多层应用的图书馆管理系统。可以实现动态的连接应用程序服务器,只要对配置文件进行配置,就可以像网上邻居一样选择所要连接的应用程序服务器。实现与应用程序服务器快速而准确的连接。第三部分 系统方案论证3.1软件定义 数据库设计所要的解决的问题是:对于一个给定的应用领域,设计优化的数据库逻辑和物理结构,使之满足用户的信息管理要求和数据操作要求,有效地支持各种应用系统的开发和运行。数据库设计的目标是为用户和各种应用系统提供一个高效的运行环境。而数据库的设计可以视为如下的优化问题。(1) 计算机的软硬件环境;(2) 数据库管理系统的能力;(3) 用户的操作要求与信息要求;(4) 完整性和安全性约束。3.2 体系结构规划本次设计的系统采用 三层客户/服务器体系,为了便于理解,我们先从二层客户/服务器体系结构来阐述:客户/服务器是在网络基础上,以数据库管理为后援,以计算机为网上工作站的一种系统结构。该结构的关键在把网络环境上的数据库存取和应用程序一分为二,分别由网上的数据库服务器和网上客户来执行。虽然本系统客户/服务器是建立在LAN的基础上,但它比以往的文件服务系统有了很大的改进。首先,它消除了不必要的网络传输负担;其次,它可以使作为数据库服务器的计算机被高度优化,以适应数据处理的需要。客户/服务器已经能够应用于复杂的网络上,并使之能够更有效地进行选择、检索、索引排序等数据处理。作为一种高级的分布式计算机环境、客户/服务器有足够的能力把处理后的结果(不是整个文件)通过网络传输出去,并根据用户需求灵活地配置各种大、中、小型计算机系统。3.3 系统设计数据流图用户管理人员 图书管理系统 管理要求 查询要求 管理结果 查询结果 (顶层数据流图)数据库设计过程数据库的设计过程如下图所示。在数据库设计过程中,需求分析和概念设计可以独立于任何数据库管理系统进行。逻辑设计和物理设计与具体的数据库管理系统密切相关。由于需求分析比较重要。我们在设计的时候,花了比较多的时间。在获得这些资料之后,进行分析。从中提取有用的部分。分析各种用户的权限。现实世界 需求分析 需求分析说明书 概念数据库设计 概念数据库模式 独立于数据 (高级数据模型) 库管理系统 与数据库管逻辑数据库设计 理系统相关 逻辑数据库模式 (特定数据模型)物理数据库设计 物理数据库模式 (特定的物理存储结构和存取方式) 图:数据库设计过程第四部分 毕业设计内容4.1分布式多层数据库开发简介Delphi提出的MIDAS(Multi-Tier distributed Application Services Suite多层分布式应用服务器组),是把原来Two- Tier数据连接放到了服务器端的COM组件上,客户端只剩下了执行文件和MIDAS.DLL,前台和服务器上的COM组件,通过DCOM机制互相沟通。这个多的一层,称为应用程序服务器(Application Server),或者称为中间件。整个工作机制见下图:这种多层分布式工作机制,主要基于这样几点考虑:1) 减少客户机的维护量,因为前台程序比较简单;把企业逻辑封装在通用的中间件应用服务器中,不同的客户都可以共享同一个中间层(包括Web),而不必每个客户都单独实现企业规则,避免了重复开发和维护的麻烦。由于客户程序相当瘦(这就是现在流行的瘦客户机概念),无论是开发还是发布,都变得简单了。2) 便于升级,当中间件升级的时候,客户程序可能不需要变化;3) 实现了分布式数据处理,把一个应用程序分布在几台机器上运行,可以提高应用程序的性能,也可以把敏感部分封装在中间件,为不同的用户设置不同的访问权限,增强了安全性。4) 减少直接连接数据库的用户数目,减少费用。在Delphi 6.0上,在原来的MIDAS基础上,发展了DataSnap技术,在很多细节方面,它提供了原来MIDAS所没有的许多功能,使用上更加方便了。DataSnap主要提供客户端和中间件之间的通信,不但支持COM+技术也支持TCP/IP或者CORBA,它们使用类似的界面和方法,其结果由程序自动完成,这就大大扩充了它的应用范围。必须要提醒的是,前台机器上除了应用程序以外,还必须把一个MIDAS.DLL文件复值到前台机器上,这个文件在服务器的WINNTSystem32目录下。4.2 服务器端程序的建立 服务器端程序实际上是个COM 工程,它本身连接数据源,再通过接口与客户端联系,这个COM 工程必须注册在服务器上。首先建立一个空白的工程,在工程里放置一个Adoconnection组件。然后再建一个远程数据模块file - New - Other - Multitier - Remote Data Module(远程数据模块)。 Coclass Name : libserver ,Instancing :执行模式,大部分用Multiple Instance(多重实例),Threading Model:线程模式,建议用Apartment(单元),产生一个窗口,在这个窗口里,可以放入数据控件。 在Viwe - Type Libray 中,我们可以看到这个COM 的一些特性。我们也可以记下系统提供的GUID,以备后来使用。加入一个ADOTable,并设置其指向一个数据库。再设置一个DataSetProvider(在DataAccess页)指向ADOTable,这就完成了服务器端的程序设计。保存,编译,注册(注意,只要运行就自动在本机注册了)。4.3 客户端程序的建立 在Two-Tier模式中,客户端(Client)程序是直接和服务器的数据源相连的,而Multi-Tier模式,多个客户端连接的是一个应用程序服务器,因为收费是按客户端数计算的,所以,数据库的使用费用比较低。 1)建立一个普通的工程。 2)放置一个TDCOMConnrction控件(在Datasnap页),属性:在本机注册时,可直接设置以下属性:ServerName:应用程序服务器注册名(server.libserver) ,Connected=true。这时你可以看到服务器端的COM 程序被激活了。如果在网络上调试,需要给出服务器名:ComputerName:服务器名(自动给出网上邻居)注意: ServerGUID的GUID值是自动给出的。3)放置一个TClientDataSet控件(在Data Access页),属性RemoteServer= DCOMConnrction1,ProviderName:=DataSetProvider1(服务器端将被激活),Active=true (激活后将能正常连接) 4)放置TDataSource,属性:Dataset:指向cdsCustomer。这样一个客户端程序就建立好了,其余犹如普通的数据库设计。44 客户端实现SQL 查询 由于在客户端不存在TQuery控件,似乎客户服务器模式是无法做SQL查询的。但是,Delphi很好的解决了这个问题。事实上,只要客户端连接上服务端应用程序,客户端的TClientDataSet就包含了一个名字为Provider的属性,对应到服务器端DataSetProvider的所有默认属性和方法,其中DataSetProvider有一个Options属性,只要让其中的poAllowCommandText=true, 那么,DataSetProvider的poAllowCommandText就可以接受前台来的SQL 命令,并传送给TQuery。 可以看出,真正传递数据的是DataSetProvider的接口,所以,用这个接口搭建传递SQL 的桥梁是必需的。客户端进行SQL 查询的方法是: ClientDataSet.Close; ClientDataSet.CommandText := SQL语句;ClientDataSet.Open; 45 动态连接应用程序服务器的实现客户端程序在运行时,需要连接应用服务器程序以取得服务。但是,在系统实际应用的时候,运行应用服务器程序的计算机是经常改变的,因此在客户端程序启动时,应该先找到运行应用服务器程序的计算机的设置。动态连接应用服务器的流程类似于12.3节的动态数据库连接,动态连接应用服务器程序的流程图14-1所示。掌握了动态连接应用服务器的流程,就可以具体实现它。下面就将分步骤介绍动态连接应用服务器的实现过程。(1) 在Delphi中新建一个窗体,将单元文件保存为connect.pas窗体的Name属性设为fm_serconfig,Caption属性设为”服务器配置”,运行后窗体如下图所示。(2) 在“连接设置”窗体中,需要输入应用服务器主机名(或者应用服务器IP地址)和应用服务器的端口号,这些配置信息将用来连接应用服务器。如果连接成功,输入的配置信息将被写入到注册表中,以后程序启动时,读取注册表配置信息,就可而已连接应用服务器程序了。程序的具体实现部分如程序清单如下所示。procedure BitBtn1Click(Sender: TObject);procedure Button1Click(Sender: TObject);privateprocedure WriteToReg(const bappHost,bappIp,aPort:string); Private declarations public Public declarations end;var fm_SerConfig: Tfm_SerConfig; Connected: boolean= false; /代表是否连接成功implementationuses netlist, data;$R *.dfmprocedure Tfm_SerConfig.BitBtn1Click(Sender: TObject);begin if (Edt_host.Text=) or (Edt_host.Text=null) and(Edt_ip.Text=) or (Edt_host.Text=null) then begin application.MessageBox(请输入服务器和IP,输入错误, mb_iconinformation + mb_defbutton1); exit; end; try strtoint(edt_Port.text); except Application.MessageBox(请输入正确的端口号, 输入错误., mb_iconinformation + mb_defbutton1); exit; end; statusbar1.Panels0.Text:=正在连接服务器,pleale wait; statusbar1.Refresh; screen.Cursor:=crHourGlass; fm_data.Socket.Connected:=false; fm_data.Socket.Host:=edt_host.Text; fm_data.Socket.Address:=edt_ip.Text; fm_data.Socket.Port:=strtoint(edt_port.Text); try screen.Cursor:=crdefault; fm_data.Socket.Connected:=true; application.MessageBox(连接成功,图书管理系统, mb_iconinformation + mb_defbutton1); connected:=true; except screen.Cursor:=crdefault; application.MessageBox(连接失败,图书管理系统,mb_iconinformation+mb_defbutton1); connected:=false; end;/连接成功向注册表里写入应用服务器配置信息 WriteToReg(edt_Host.Text, edt_IP.Text, edt_Port.Text); close;end;/利用可视化窗体来选择计算机procedure Tfm_SerConfig.Button1Click(Sender: TObject);beginedt_ip.Clear;edt_host.Text:= NetExecute(TFm_NetList);end;/把信息写入注册表procedure Tfm_SerConfig.WriteToReg(const bappHost,bappIp,aPort:string);varreg:Tregistry;begin reg:=Tregistry.Create; reg.RootKey:=HKEY_LOCAL_MACHINE; if not reg.OpenKey(Softwarepz,false) then /如果可以创建目录 begin reg.CreateKey(Softwarepz); reg.OpenKey(Softwarepz,false); end; reg.WriteString(host,bapphost); reg.WriteString(ip,bappip); reg.WriteString(port,aport); reg.Free;end;end.打开“连接设置”配置窗口,在打开窗体之前,函数已经将布尔变量Connected设为False,而在窗体被关闭之后,将返回Connected变量的值,根据布尔变量Connected的值可以判断是否已经连接上应用服务器。(3) 在连接设置主窗口中,我们为应用服务器名提供了辅助录入的方法,点击应用服务器名编辑框右边的省略号按钮(Button1),将弹出一个浏览局域网计算机的对话框,以方便用户选择应用服务器所在的计算机。在此我们调用了一个NetExecute方法,它将返回用户选中的计算机的主机名。这个方法是如何实现的呢?下面将介绍NetExecute方法的实现过程。在Delphi中新建一个窗体,将窗体单元文件保存为netlist .pas,窗体的Name属性设为Fm_netlist。运行后窗体如下图所示。在列举网络资源窗体中,将按照工作组以树型目录的形式显示局域网中的计算机。程序的具体实现部分如下所示。procedure FormActivate(Sender: TObject);procedure TreeView1Click(Sender: TObject);procedure BitBtn1Click(Sender: TObject);private procedure getcomputername; procedure getgroupname; Private declarations public Public declarations end;function NetExecute(aFormClass: TFormClass): string;var fm_NetList: Tfm_NetList; node: Ttreenode; aComputerName : string;/全局变量,存储选中的主机名implementation$R *.dfm/打开窗体,并返回选定的计算机function NetExecute(aFormClass: TFormClass): string;begin aComputerName := ; with aFormClass.Create(Application) do begin try showModal; finally free; end; result := aComputerName; end;end;procedure TFm_netlist.FormActivate(Sender: TObject);beginnode:=treeview1.items.add(Treeview1.topitem, 整个网络);node.imageindex:=0;treeview1.setfocus;end;procedure TFm_netlist.TreeView1Click(Sender: TObject);begin if treeview1.Selected.Level=0 then begin if treeview1.Selected.Count=0 then /添加工作组名 getgroupname(); end; if treeview1.Selected.Level=1 then begin if treeview1.Selected.Count=0 then /添加计算机名 getcomputername; end; if treeview1.Selected.Level=2 then bitbtn1.Enabled:=true else bitbtn1.Enabled:=false;end;/取得计算机名procedure Tfm_netlist.getcomputername;var NetResource: TNetResource; Buf: Pointer; Count, BufSize, Res: DWord; Ind: Integer; lphEnum: THandle; Temp: TNetResourceArray; groupname: string; my_node: Ttreenode; my_node_2: Ttreenode;begin screen.Cursor := crHourGlass; statusbar.panels0.text := 正在列举组名.,请稍侯; statusbar.refresh; my_node := treeview1.Selected; groupname := treeview1.Selected.Text; FillChar(NetResource, SizeOf(NetResource), 0); /初始化网络层次信息 NetResource.lpRemoteName := GroupName1; /指定工作组名称 NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER; /类型为服务器(工作组) NetResource.dwUsage := RESOURCEUSAGE_CONTAINER; NetResource.dwScope := RESOURCETYPE_DISK; /列举文件资源信息 /获取指定工作组的网络资源句柄 Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, NetResource, lphEnum); if Res NO_ERROR then Exit; /执行失败 while True do /列举指定工作组的网络资源 begin Count := $FFFFFFFF; /不限资源数目 BufSize := 8192; /缓冲区大小设置为8K GetMem(Buf, BufSize); /申请内存,用于获取工作组信息 /获取计算机名称 Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize); if Res = ERROR_NO_MORE_ITEMS then break; /资源列举完毕 if (Res NO_ERROR) then Exit; /执行失败 Temp := TNetResourceArray(Buf); for Ind := 0 to Count - 1 do /列举工作组的计算机名称 begin /获取工作组的计算机名称,+2表示删除,如wangfajun=wangfajun my_node_2 := treeview1.Items.AddChild(my_node, Temp.lpRemoteName + 2); my_node_2.imageindex := 2; Inc(Temp); end; end; Res := WNetCloseEnum(lphEnum); /关闭一次列举 if Res NO_ERROR then exit; /执行失败 FreeMem(Buf); screen.Cursor := crDefault; statusbar.panels0.text := ; statusbar.refresh;end;/获取组名procedure Tfm_NetList.GetGroupName;var NetResource: TNetResource; Buf: Pointer; Count, BufSize, Res: DWORD; lphEnum: THandle; p: TNetResourceArray; i, j: SmallInt; NetworkTypeList: TList; my_node_1: Ttreenode;begin statusbar.panels0.text := 正在列举域名.,请稍侯; statusbar.refresh; screen.Cursor := crHourGlass; NetworkTypeList := TList.Create; /获取整个网络中的文件资源的句柄,lphEnum为返回名柄 Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, nil, lphEnum); if Res NO_ERROR then exit; /执行失败 /获取整个网络中的网络类型信息 Count := $FFFFFFFF; /不限资源数目 BufSize := 8192; /缓冲区大小设置为8K GetMem(Buf, BufSize); /申请内存,用于获取工作组信息 Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize); if (Res = ERROR_NO_MORE_ITEMS) /资源列举完毕 or (Res NO_ERROR) /执行失败 then Exit; P := TNetResourceArray(Buf); for I := 0 to Count - 1 do /记录各个网络类型的信息 begin NetworkTypeList.Add(p); Inc(P); end; /WNetCloseEnum关闭一个列举句柄 Res := WNetCloseEnum(lphEnum); /关闭一次列举 if Res NO_ERROR then exit; for J := 0 to NetworkTypeList.Count - 1 do /列出各个网络类型中的所有工作组名称 begin /列出一个网络类型中的所有工作组名称 NetResource := TNetResource(NetworkTypeList.ItemsJ); /网络类型信息 /获取某个网络类型的文件资源的句柄,NetResource为网络类型信息,lphEnum为返回名柄 Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, NetResource, lphEnum); if Res NO_ERROR then break; /执行失败 while true do /列举一个网络类型的所有工作组的信息 begin Count := $FFFFFFFF; /不限资源数目 BufSize := 8192; /缓冲区大小设置为8K GetMem(Buf, BufSize); /申请内存,用于获取工作组信息 /获取一个网络类型的文件资源信息, Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize); if (Res = ERROR_NO_MORE_ITEMS) /资源列举完毕 or (Res NO_ERROR) /执行失败 then break; P := TNetResourceArray(Buf); for I := 0 to Count - 1 do /列举各个工作组的信息 begin my_node_1 := treeview1.Items.addchild(node, StrPAS(P.lpRemoteName); /取得一个工作组的名称 my_node_1.imageindex := 1; Inc(P); end; end; Res := WNetCloseEnum(lphEnum); /关闭一次列举 if Res NO_ERROR then break; /执行失败 end; FreeMem(Buf); NetworkTypeList.Destroy; screen.Cursor := crDefault; statusbar.panels0.text := ; statusbar.refresh;end;procedure TFm_netlist.BitBtn1Click(Sender: TObject);begin aComputerName := treeview1.Selected.Text; close;end;end.在上面的程序清单中,首先定义了NetExecute方法,它根据传递进来的TFormClass参数值TformNet,打开“列举网络资源”窗口,用户可以在此窗口中选择想要连接的运行应用服务器程序的计算机。NetExecute方法将返回选中的计算机主机名。在程序清单中,还自定义了GetGroupName和GetComputerName这两个非常重要的过程,其中GetGroupName方法用于获取网络中所有的工作组名称,并将工作组名添加到目录树的第二级目录中;GetComputerName方法则根据工作组的名称穷举工作组下的计算机,并将这些计算机添加到目录树的第三级目录中。选择好计算机后,单击“确定”按钮,系统将把选定的计算机主机名赋给aComputerName全局变量,此时在NetExecute方法中,便返回此值。(4) 在data单元(data.pas)中定义connect_app方法。connect_app方法用语读取注册表中配置应用服务器的信息并测试连接,如果没有连接上应用程序服务器将从新弹出配置窗口。这个接口方法在程序主窗体创建时被调用,用以尝试连接应用服务器。ConnectAppServ方法在interface中的具体定义为:function TFm_data.connect_app: boolean; /判断是否连接上了应用服务器var vs_Host, vs_Address, vs_Port: string; reg: TRegistry;begin Result := True; reg := Tregistry.create; Reg.RootKey := HKEY_LOCAL_MACHINE; socket.Connected := false; /读取注册表配置的应用服务器信息 if Reg.OpenKey(Softwarepz, False) then /如果注册表有信息 begin vs_Host := reg.ReadString(Host); vs_Address := reg.ReadString(ip); vs_Port := reg.readstring(Port); try /测试连接 socket.Address := vs_Address; socket.Host := vs_Host; socket.Port := strtoint(vs_Port); socket.Connected := true; reg.closekey; except /未连接上,弹出配置窗口 reg.closekey; try fm_SerConfig := Tfm_serconfig.create(self); fm_SerConfig.showmodal; finally fm_SerConfig.free; end; end; end else /如果没有信息 弹出配置窗口 begin try fm_SerConfig := Tfm_SerConfig.create(self); fm_SerConfig.showmodal; finally fm_SerConfig.free; end; end;end;在此过程里,将主要读取键为“HKEY_LOCAL_MACHINESOFTWAREPZ”目录下的应用服务器主机名,应用服务器IP地址和端口号的值,然后将这些值赋给主窗体的SocketConnection组件以测试连接。如果连接成功就返回True值,如果连接失败,将弹出“连接设置“窗口,用户需要从新输入应用服务器主机名,应用服务器IP地址和端口号。如果仍然连接失败,就返回False值,表示连接失败。(5) 动态连接设置的最后一个步骤就是在主窗体被创建时,调用第4步中自定义的Imyserver_autho方法,判断应用程序是否连接上了应用服务器。如果连接成功,将进入应用程序;如果连接失败,将退出应用程序。至此,动态连接应用服务器就做完了。46 图书管理功能的实现图书管理系统需要满足来自三方面的需求,这三个方面分别是图书借阅者、图书馆工作人员和图书馆管理人员。图书借阅者的需求是查询图书馆所存的图书、个人借阅情况及个人信息的修改;图书馆工作人员对图书借阅者的借阅及还书要求进行操作,同时形成借书或还书报表给借阅者查看确认;图书馆管理人员的功能最为复杂,包括
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

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