read.me.txt

JSJ03-018@DELPHI三层图书管理系统(源代码+论文)

收藏

资源目录
跳过导航链接。
JSJ03-018@DELPHI三层图书管理系统(源代码+论文).zip
JSJ03-018@DELPHI三层图书管理系统(源代码+论文)
read.me.txt---(点击预览)
DELPHI三层图书管理系统.doc---(点击预览)
code999.com说明.txt---(点击预览)
about.txt---(点击预览)
back
图书馆管理系统.bak
图书馆管理系统.mdb
help
read.me.txt---(点击预览)
delphifans.com.nfo
help.chm
Index.hhk
index.htm
info.htm
kai.hhc
Table of Contents.hhc
图书馆帮助.hhp
帮助.chm
帮助.hhp
客户端
read.me.txt---(点击预览)
uni
bookindex.dfm
bookindex.pas
code.dfm
code.pas
informatin.dfm
informatin.pas
jisao.dfm
jisao.pas
maxthin.dfm
maxthin.pas
Unit1.dfm
Unit1.pas
client.cfg
client.dpr
client.exe
client.res
connect.dfm
connect.pas
data.dfm
data.pas
delphifans.com.nfo
login.dfm
login.pas
main.dfm
main.pas
netlist.dfm
netlist.pas
管理
read.me.txt---(点击预览)
uni
backup.dfm
backup.pas
borrow.dfm
borrow.pas
Ncard.dfm
Ncard.pas
newbook.dfm
newbook.pas
users.dfm
users.pas
about.dfm
about.pas
admin.cfg
admin.dpr
admin.exe
admin.res
connect.dfm
connect.pas
data.dfm
data.pas
delphifans.com.nfo
fm_main.dfm
fm_main.pas
help.chm
login.dfm
login.pas
main.dfm
main.pas
netlist.dfm
netlist.pas
论文
config.dfm
config.pas
data.dfm
data.pas
dbconf.ini
delphifans.com.nfo
Libserver_TLB.pas
main.dfm
main.pas
scktsrvr.exe
server.cfg
server.dpr
server.exe
server.res
server.tlb
server_TLB.pas
压缩包内文档预览:
预览图
编号:508077    类型:共享资源    大小:4.30MB    格式:ZIP    上传时间:2015-11-10 上传人:QQ28****1120 IP属地:辽宁
12
积分
关 键 词:
毕业设计计算机
资源描述:
JSJ03-018@DELPHI三层图书管理系统(源代码+论文),毕业设计计算机
内容简介:
Delphi园地发布如果你喜欢本站,请帮忙点击一下广告-更多精彩Delphi资源请访问每天都有更新,每天都有精彩商业源码精品光盘/cd.html虚拟主机99元超低价空间限期抢购-联系方式:QQ:124748126Tel:0515-8046163Email:webmasterntsDelphi园地发布如果你喜欢本站,请帮忙点击一下广告-更多精彩Delphi资源请访问每天都有更新,每天都有精彩商业源码精品光盘/cd.html虚拟主机99元超低价空间限期抢购-联系方式:QQ:124748126Tel:0515-8046163Email:webmasterntsDelphi园地发布如果你喜欢本站,请帮忙点击一下广告-更多精彩Delphi资源请访问每天都有更新,每天都有精彩商业源码精品光盘/cd.html虚拟主机99元超低价空间限期抢购-联系方式:QQ:124748126Tel:0515-8046163Email:webmasternts 分布式多层数据库系统的应用 目 录 第一部分 引言 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我的工作 nts 设计系统框架,设计数据库,编写代码,测试数据等。 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 系统设计 数据流图 管理要求 查询要求 管理结果 查询结果 (顶层数据流图) 图书 管理系统 管理人员 用 户 nts数据库设计过程 数据库的设计过程如下图所示。在数据库设计过程中,需求分析和概念设计可以独立于任何数据库管理系统进行。逻辑设计和物理设计与具体的数据库管理系统密切相关。由于需求分析比较重要。我们在设计的时候,花了比较多的时间。在获得这些资料之后,进行分析。从中提取有用的部分。分析各种用户的权限。 需求分析说明书 概念数据库模式 独立于数据 (高级数据模型) 库管理系统 与数据库管 理系统相关 逻辑数据库模式 (特定数据模型) 物理数据库模式 (特定的物理存储结构和存取方式) 图:数据库设计过程 第四部分 毕业设计内容 现实世界 需求分析 概念数据库设计 逻辑数据库设计 物理数据库设计 nts4.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。这时你可以看到服务器端nts的 COM 程序被激活了。如果在网络上调试,需要给出服务器名 :ComputerName:服务器名(自动给出 网上邻居)注意: ServerGUID 的 GUID 值是自动给出的。 3 ) 放 置 一 个 TClientDataSet 控 件 ( 在 Data Access 页 ), 属 性 RemoteServer= DCOMConnrction1,ProviderName:=DataSetProvider1(服务器端将被激活) ,Active=true (激活后将能正常连接) 4)放置 TDataSource,属性: Dataset:指向 cdsCustomer。 这样一个客户端程序就建立好了 ,其余犹如普通的数据库设计。 4 4 客户端实现 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; 4 5 动态连接应用程序服务器的实现 客户端程序在运行时,需要连接应用服务器程序以取得服务。但是,在系统实际 应用的时候,运行应用服务器程序的计算机是经常改变的,因此在客户端程序启动时,应该先找到运行应用服务器程序的计算机的设置。动态连接应用服务器的流程类似于 12.3 节的动态数据库连接,动态连接应用服务器程序的流程图 14-1 所示。 掌握了动态连接应用服务器的流程,就可以具体实现它。下面就将分步骤介绍动态连接应用服务器的实现过程。 (1) 在 Delphi 中新建一个窗体,将单元文件保存为 connect.pas 窗体的 Name 属性设为fm_serconfig,Caption 属性设为 ” 服务器配置 ” ,运行后窗体如下图所示。 (2) 在“连接设置”窗体中,需要输入应用服务器主机名(或者应用服务器 IP 地址)和应用服务器的端口号,这些配置信息将用来连接应用服务器。如果连接成功,输入的配置信息将被写入到注册表中,以后程序启动时,读取注册表配置信息,就可而已连接应用服务器程序了。程序的具体实现部分如程序清单如下所示。 procedure BitBtn1Click(Sender: TObject); procedure Button1Click(Sender: TObject); private procedure WriteToReg(const bappHost,bappIp,aPort:string); nts Private declarations public Public declarations end; var fm_SerConfig: Tfm_SerConfig; Connected: boolean= false; /代表是否连接成功 implementation uses netlist, data; $R *.dfm procedure 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); begin edt_ip.Clear; edt_host.Text:= NetExecute(TFm_NetList); end; /把信息写入注册表 ntsprocedure Tfm_SerConfig.WriteToReg(const bappHost,bappIp,aPort:string); var reg: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 nts 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); begin node:=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; ntsend; /取 得计算机名 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; /执行失败 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; /执行失败 /获取整个网络中的网络类型信息 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; 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; 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); nts 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方法,判断应用程序是否连接上了应用服务器。如果连接成功,将进入应用程序;如果连接失败,将退出应用程序。 至此,动态连接应用服务器就做完了。 4 6 图书管理功能的实现 图书管理系统需要满足来自三方面的需求,这三个方面分别是图书借阅者、图书馆工作人员和图书馆管理人员。图书借阅者的需求是查询图书馆所存的图书、个人借阅情况及个人信息的修改;图书馆工作人员对图书借阅者的借阅及 还书要求进行操作,同时形成借书或还书报表给借阅者查看确认;图书馆管理人员的功能最为复杂,包括对工作人员、图书借阅者、图书进行管理和维护,及系统状态的查看、维护并生成催还图书报表。 图书借阅者可直接查看图书馆图书情况,如果图书借阅者根据本人借书证号和密码登录系统,还可以进行本人借书情况的查询和维护部分个人信息。一般情况下,图书借阅者只应该查询和维护本人的借书情况和个人信息,若查询和维护其他借阅者的借书情况和个人信息,就要知道其他图书借阅者的借书证号和密码。这些是很难得到的,特别是密码,所以不但满足了图 书借阅者的要求,还保护了图书借阅者的个人隐私。 图书馆工作人员有修改图书借阅者借书和还书记录的权限,所以需对工作人员登陆本模块进行更多的考虑。在此模块中,图书馆工作人员可以为图书借阅者加入借书记录或是还书记录,并打印生成相应的报表给用户查看和确认。 nts 在本系统中由于没有打印机设备供试验, 所以没有制作打印模块。本系统提供的功能有 1. 设计不同用户的操作权限和登陆方法 2. 对所有用户开放的图书查询
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:JSJ03-018@DELPHI三层图书管理系统(源代码+论文)
链接地址:https://www.renrendoc.com/p-508077.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!