《程序设计实践》课程设计报告-图书馆管理系统数据库分析与设计.doc_第1页
《程序设计实践》课程设计报告-图书馆管理系统数据库分析与设计.doc_第2页
《程序设计实践》课程设计报告-图书馆管理系统数据库分析与设计.doc_第3页
《程序设计实践》课程设计报告-图书馆管理系统数据库分析与设计.doc_第4页
《程序设计实践》课程设计报告-图书馆管理系统数据库分析与设计.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

长沙理工大学程序设计实践课程设计报告学 院 计通学院 专 业 计算机科学与技术 班 级 计算机03-05 学 号 27 学生姓名 指导教师 课程成绩 完成日期 2006年9月20号图书馆管理系统数据库分析与设计学生姓名: 指导老师:卢摘要: 图书信息管理系统主要由读者信息管理模块,图书信息管理模块,借阅信息管理模块,系统信息管理模块等组成。其中又各自分成读者注册,证件修改,用户注销,图书查询,操作记录等子模块。在设计本系统过程中,我们第一步由自顶而下的需求分析概括设计出系统总模块的数据流图,再设计个子模块的相应数据流图,列出数据流信息及数据字典;第二步概念设计在需求分析基础上用E-R图表示出数据及相互间联系,采用先作子图,再合并成初步E-R图,进行修改和重构后得到基本E-R图;第三步逻辑设计,在SQL Server的设计环境下把图书馆管理系统E-R图转化为成逻辑数据模型表示的逻辑模式,同时实现数据模型的优化和数据模式的规范化;第四步进行物理设计设计数据的内模式,确定数据的存储结构,存取路径,存储空间分配等等,具体形式为表,视图,索引的建立。关键字:数据库,SQL语言,MS SQL Server,图书管理Abstract:The books information management system mainly by the reader information management module, the books information management module, borrows the information management module, the system information management module and so on is composed.Respectively divides into the reader registration, the credential revises, the user cancels, books inquiry, operating record small steelyard module. In designs in this system process, we first step by from go against but the under demand analysis summary to design the system total module the data stream chart, the re-engineering stature module corresponding data stream chart, lists the data stream information and the data dictionary;The second step of conceptual design expressed in the demand analysis foundation with the E-R chart the data and mutually relates, uses first is the child to attempt, then merges the preliminary E-R chart, after carries on the revision and the heavy construction obtains basic E-R; The third step of logical design, transforms in under the SQL Server design environment the library management system E-R chart for becomes the logic data model expression the logical pattern, simultaneously realizes the data model optimization and the data pattern standard is deficient; Fourth step carries on the physical design design data in pattern, the specified data memory structure, the access path, storage space assignment and so on, the concrete form is the table, the view, the index constructsKeywords:DataBase,SQL Language,MS SQL Server, Books management1 需求分析用户的需求具体体现在各种信息的提供、保存、更新和查询,这就要求数据库结构能充分满足各种信息的输入和输出。收集基本数据,数据结构以及数据处理的流程,为后面的具体设计打下基础。在仔细分析调查有关图书馆管理信息需求的基础上,我们主要考虑以下几个方面的需求:1) 用户需求:图书用户要求计算机系统和SQL Server所工作的范围;2) 应用资源:数据库应用的平台包括物理平台和图书等;3) 应用质量和可靠性要求:包括操作人员素质和系统的纠错能力等1.1 项目名称: 图书馆信息管理系统1.2 项目背景和内容概要对图书馆管理信息系统进行详细地分析后,我们将系统分为以下几个模块:借阅管理模块、借书证信息管理模块、图书信息管理模块、系统管理模块。其主要功能如下:l 借阅管理模块主要功能如下:1).可以为读者办理,修改,注销借书证,输入读者借书证基本信息等,定制读者的借阅权限。2).可以通过借书证查询图书信息、借出图书信息,借阅图书。3).通过借书证还书,管理员可以通过对借阅信息的管理对到期还未还的书,通过查询读者的借书证信息查询读者联系方式发出催还通知。l 借书证信息管理模块主要功能如下:1).读者基本信息的输入,如:读者姓名、性别、单位等。2).读者信息的修改、注销等功能。3).添加新的读者及其信息等。l 图书信息管理模块主要功能如下:1).定制书籍的各种信息管理,如:书名、作者、出版信息等。2).书籍信息的修改,新图书的入库管理和图书的注销等。l 系统管理模块主要功能如下:1).用户登录。2).修改密码。3).添加用户。l 系统备份和数据传输模块主要功能如下:1).备份数据库数据2).恢复数据库数据3).网络数据传输13 数据流图l 数据流总体图示图1-1 数据流总体图l 办理借书证图1-2 输借书证流图l 借书证修改图1-3 借书证修改流图l 借书证注销图1-4借书证注销流图l 借书系统不能借书的原因图1-5借书系统流图l 检索系统图1-6 检索系统流图l 还书系统图1-7 还书系统流图l 图书档案管理系统图1-8 档案管理流图1.4 数据字典 参数名类型长度取值范围别名意义图书书名字符型11SM图书编号字符型11B1050600000-B1050610000SH作者字符型10YZ出版社字符型20CBS单价数值型8DJ借出日期日期型yy-mm-ddJS还书日期日期型yy-mm-ddHS借书证号字符型100501000000-0501100000JSZ姓名字符型20NAME是否归还字符型20YN性别字符型2SEX单位字符型20DW发证日期日期型yy-mm-ddFZ已借书册数字符型2YNC是否允许借书字符型2YNS是或否类别字符型20LB进册数数值型10JC库存量数值型10CZ操作员编号数值型10CB操作员姓名字符型10CNAME操作员密码 字符型15MM表1数据字典2 概念结构设计这一阶段我们将客户的应用需求抽象为信息世界的结构,即对系统的人、物、事和概念进行人为处理,抽取人们所关心的共同特性,同时把这些特性用概念精确的描述。我们首先根据需求分析的结果(数据流图、数据字典等)对现实世界的数据进行抽象,设计各个局部E-R图,然后合并成初步E-R图,再进行修改与重构。2.1局部E-R图图书信息管理系统主要分为以下几个局部E-R图:1).借书证处理系统ER图:管理员办证改证销证读者档案借书证身份验证身份验证身份验证1PPNMNMP1P图2-1 借书证处理系统ER图图中各实体属性如下:读者档案:学号,读者姓名,性别,出生日期,借书证号,职业,单位,通讯地址,邮政编码,联系电话借书证:借书证号,姓名,性别,办证日期,借阅范围,最大借书量,照片,身份证号管理员:管理员编号,管理员姓名,登陆密码2).借书系统ER图:读者借书证库存表借出信息验证查询借书检查库存索书条111N1NN图2-2借书系统ER图图中各实体属性如下:读者:身份证号,读者姓名,借书证号借书证:借书证号,姓名,性别,办证日期(借阅范围,最大借书量,照片,身份证号)库存信息:书号,图书编号借出信息:图书编号,借书证号,借书日期,归还日期3).索书系统ER图:读者图书档案索书要求索书MN索书条图2-3索书系统ER图图中各实体属性如下:读者:读者姓名,借书证号图书档案:图书编号,书号,书名,作者,出版单位,出版日期,单价,藏书册书,类别,入库日期4).还书系统ER图:验证还书催还完整检查读者借书证库存表借出信息管理员是否归还1N1MMN1M1P图2-4 还书系统ER图图中各实体属性如下:读者:学号,读者姓名,借书证号借书证:借书证号,姓名,性别,办证日期库存信息:书号,图书编号借出信息:图书编号,借书证号,借书日期,归还日期管理员:操作员编号,管理员姓名,登陆密码5)图书档案管理系统ER图:管理员修改输入注销图书档案库存身份验证身份验证身份验证1N1NN1NNNN入库清单图2-5 档案管理系统ER图图中各实体属性如下:管理员:操作员编号,管理员姓名,登陆密码库存信息:书号,图书编号图书档案:图书编号,书号,书名,作者,出版单位,出版日期,单价,类别,入库日期入库清单:入库日期,图书编号,管理员编号,书名6). 整体E-R图读者图书档案借出书库库存表管理员借书证图书管理证件处理催还借书还书查询已借索书PPM1MN11MNPPMNNPMNN1N图2-6 整体ER图图中各实体属性如下:读者档案:学号,读者姓名,性别,借书证号,单位借书证:借书证号,姓名,性别,办证日期管理员:操作员编号,管理员姓名,登陆密码库存信息:书号,图书编号借出信息:图书编号,借书证号,借书日期,归还日期图书档案:书号,书名,作者,出版单位,出版日期,单价,类别,藏书册书,图书编号入库日期2.2 实体描述说明:1、由于读者的信息可以在借书证办理档案中查到所以合并为借书证办理档案 2. 将借出书库和入库清单分别合并到了借书登记表和图书信息表中实体名称借书证数据库表借书证信息表实体说明读者和借书证信息实体属性列表借书证号,姓名,性别,办证日期,最大借书量,学号实体名称管理员数据库表tz_passwd实体说明管理员的信息实体属性列表管理员编号,管理员姓名,登陆密码实体名称读者数据库表借书登记表实体说明图书馆未被借出的图书信息实体属性列表书号,图书编号实体名称读者数据库表还书登记表实体说明图书馆未被借出的图书信息实体属性列表书号,图书编号实体名称图书档案数据库表图书信息表实体说明馆藏图书信息实体属性列表书号,书名,作者,出版单位,出版日期,版次,单价,类别,图书编号,入库日期表2 实体描述2.3 关系描述 (已包含在E-R图中)2.4 实体-关系调整 (实体描述表中已消除冗余实体和关系)2.5 数据项定义1)图书库的数据项定义:名称别名类型长度其他图书书名SM字符型20普通索引书号SH数值型20主索引译者YZ字符型10出版社CBS字符型20单价DJ数值型8出版时间CBSJ日期型8表3 图书库数据项定义2)借、还书库的数据项定义:名称别名类型长度其他姓名XSXM字符型10普通索引借书证号JSZH数值型8主索引图书书名SM字符型20图书编号SH字符型20借书日期JSRQ日期型8还书日期HSRQ日期型8表4借、还书库数据项定义3)借书证库的数据项定义:名称别名类型长度其他姓名JSXM字符型10普通索引借书证号JSGH字符型6主索引性别XB字符型4单位DW字符型8表5借书证库数据项定义4)操作员库的数据项定义:名称别名类型长度其他操作员编号CZYYHH字符型10操作员用户名CZYYHM字符型10口令KL字符型10表6操作员库数据项定义2.6数据表(库)描述图书数据库=图书书名+图书编号+著者+出版社+单价+书号+出版时间借书库=姓名+借书证号+教师姓名+图书名称+借书日期+还书日期教师数据库=姓名+借书证号+单位操作员库=操作员用户名+口令2.7 系统功能模块图软件功能结构图:工商学院图书信息管理系统系统管理基本情况录入借、还书管理查询、统计初始化数据备份操作员管理一般用户登陆新图书登记新期刊登记借书登记还书登记图书库藏查询借书证库查询图书查询借书查询还书查询图2-7 软件功能结构2.8 系统流程图:图书管理系统读者查询系统图书(期刊)库查询图2-8 系统流程图3 逻辑结构设计为了能够用计算机和SQL Server实现用户需求,可将概念结构转化为相应的数据模型,即是设计逻辑结构。即由ER图建立了适当的表,并按不同的范式的定义,对表进行规范化。对规范化的表,更据用户需求建立数据库结构。3.1 确定数据依赖关系名主 要 函 数 依 赖管理员 BCNF管理员编号(管理员姓名,登陆密码)库存信息BCNF 图书编号书名等借出信息BCNF(图书编号)(借书日期,借书证号,归还日期)借书证2NF借书证号(借书证号,姓名,性别,单位,发证日期,已借书册书,是否容许借书)以后扩展:身份证号(姓名,性别,照片)图书档案2NF图书编号(书号,书名,作者,出版单位,出版日期,版次,单价,内容提要,分类号,索书号,所在书库,入库日期)入库清单BCNF图书编号(管理员编号,书名,入库日期)还书信息BCNF借书证号(姓名,图书编号,书名,借出日期,还书日期)3.2 数据依赖的优化与调整3.2.1关系模式的优化 (1) 借书证信息:借书证 (借书证号,姓名,性别,单位,发证日期,已借书册书,是否容许借书) 满足 BCNF范式(2) 管理员信息:管理员信息(管理员编号,管理员姓名,登陆密码)满足 BCNF 范式(3) 库存信息:库存信息(图书编号,书号) 满足BCNF 范式(4) 借书信息:借书信息(图书编号,借书证号,姓名,书名,借书日期,是否归还)满足 BCNF 范式(5) 还书信息:还书信息(姓名,图书编号,书名,借出日期,还书日期)满足 BCNF 范式(6) 图书信息:图书档案(图书编号,书名,作者,图书类别,单价,出版社,进册书,库存量)均满足 BCNF范式(7) 入库清单:入库清单(图书编号,管理员编号,书名,入库日期)满足 BCNF范式3.2.2关系模式的调整虽然在关系模式的优化中将各种关系满足了BCNF范式的要求,但是对某些数据库的操作却并没有简化,相反导致了数据库查询等数据库操作的效率低下。于是对借书证信息,和图书信息作出了以下调整。(1) 借书证信息:借书证(借书证号,姓名,性别,办证日期,单位,已借书册数,借书许可,)(3NF) (2) 图书信息: 图书档案(图书编号,书名,作者,出版单位,单价,图书类别,进册数,入库量) (2NF)4 代码设计图书管理系统部分源代码图书外借情况查询代码tempstr=allt(thisform.container1.text1.value)tempstr=%+tempstr+%if bo1.text=借书证号select * from 借书登记表 where 借书登记表.借书证号 like tempstr into cursor tempcursorthisform.grid1.recordsource=tempcursorthisform.refreshendif if bo1.text=姓名select * from 借书登记表 where 借书登记表.姓名 like tempstr into cursor tempcursorthisform.grid1.recordsource=tempcursorthisform.refreshendif if bo1.text=图书编号select * from 借书登记表 where 借书登记表.图书编号 like tempstr into cursor tempcursorthisform.grid1.recordsource=tempcursorthisform.refreshendif if bo1.text=书名select * from 借书登记表 where 借书登记表.书名 like tempstr into cursor tempcursorthisform.grid1.recordsource=tempcursorthisform.refreshendif if bo1.text=是否归还select * from 借书登记表 where 借书登记表.是否归还 like tempstr into cursor tempcursorthisform.grid1.recordsource=tempcursorthisform.refreshendif thisform.container1.text1.value=图书外借和归还情况查询代码tempstr=allt(thisform.container1.text1.value)tempstr=%+tempstr+%if bo1.text=借书证号select * from 还书登记表 where 还书登记表.借书证号 like tempstr into cursor tempcursorthisform.grid1.recordsource=tempcursorthisform.refreshendif if bo1.text=姓名select * from 还书登记表 where 还书登记表.姓名 like tempstr into cursor tempcursorthisform.grid1.recordsource=tempcursorthisform.refreshendif if bo1.text=图书编号select * from 还书登记表 where 还书登记表.图书编号 like tempstr into cursor tempcursorthisform.grid1.recordsource=tempcursorthisform.refreshendif if bo1.text=书名select * from 还书登记表 where 还书登记表.书名 like tempstr into cursor tempcursorthisform.grid1.recordsource=tempcursorthisform.refreshendif thisform.container1.text1.value=存储过程代码procedure RIDELETElocal llRetValllRetVal=.t. IF (ISRLOCKED() and !deleted() OR !RLOCK() llRetVal=.F. ELSE IF !deleted() DELETE IF CURSORGETPROP(BUFFERING) 1 =TABLEUPDATE() ENDIF llRetVal=pnerror=0 ENDIF not already deleted ENDIF UNLOCK RECORD (RECNO()RETURN llRetValprocedure RIUPDATElparameters tcFieldName,tcNewValue,tcCascadeParentlocal llRetValllRetVal=.t. IF ISRLOCKED() OR !RLOCK() llRetVal=.F. ELSE IF EVAL(tcFieldName)tcNewValue PRIVATE pcCascadeParent pcCascadeParent=upper(iif(type(tcCascadeParent)C,tcCascadeParent) REPLACE (tcFieldName) WITH tcNewValue IF CURSORGETPROP(BUFFERING) 1 =TABLEUPDATE() ENDIF llRetVal=pnerror=0 ENDIF values dont already match ENDIF its locked already, or I was able to lock it UNLOCK RECORD (RECNO()return llRetValprocedure rierrorparameters tnErrNo,tcMessage,tcCode,tcProgramlocal lnErrorRows,lnXXlnErrorRows=alen(gaErrors,1)if type(gaErrorslnErrorRows,1)L dimension gaErrorslnErrorRows+1,alen(gaErrors,2) lnErrorRows=lnErrorRows+1endifgaErrorslnErrorRows,1=tnErrNogaErrorslnErrorRows,2=tcMessagegaErrorslnErrorRows,3=tcCodegaErrorslnErrorRows,4=lnXX=1do while !empty(program(lnXX) gaErrorslnErrorRows,4=gaErrorslnErrorRows,4+,+; program(lnXX) lnXX=lnXX+1enddogaErrorslnErrorRows,5=pcParentDBFgaErrorslnErrorRows,6=pnParentRecgaErrorslnErrorRows,7=pcParentIDgaErrorslnErrorRows,8=pcParentExprgaErrorslnErrorRows,9=pcChildDBFgaErrorslnErrorRows,10=pnChildRecgaErrorslnErrorRows,11=pcChildIDgaErrorslnErrorRows,12=pcChildExprreturn tnErrNoPROCEDURE riopenPARAMETERS tcTable,tcOrderlocal lcCurWkArea,lcNewWkArea,lnInUseSpotlnInUseSpot=atc(tcTable+*,pcRIcursors)IF lnInUseSpot=0 lcCurWkArea=select() SELECT 0 lcNewWkArea=select() IF NOT EMPTY(tcOrder) USE (tcTable) AGAIN ORDER (tcOrder) ; ALIAS (_ri+LTRIM(STR(SELECT() share ELSE USE (tcTable) AGAIN ALIAS (_ri+LTRIM(STR(SELECT() share ENDIF if pnerror=0 pcRIcursors=pcRIcursors+upper(tcTable)+?+STR(SELECT(),5) else lcNewWkArea=0 endif something bad happened while attempting to open the fileELSE lcNewWkArea=val(substr(pcRIcursors,lnInUseSpot+len(tcTable)+1,5) pcRIcursors = strtran(pcRIcursors,upper(tcTable)+*+str(lcNewWkArea,5),; upper(tcTable)+?+str(lcNewWkArea,5) IF NOT EMPTY(tcOrder) SET ORDER TO (tcOrder) IN (lcNewWkArea) ENDIF sent an order if pnerror0 lcNewWkArea=0 endif something bad happened while setting orderENDIFRETURN (lcNewWkArea)PROCEDURE riendPARAMETERS tlSuccesslocal lnXX,lnSpot,lcWorkAreaIF tlSuccess END TRANSACTIONELSE SET DELETED OFF ROLLBACK SET DELETED ONENDIFIF EMPTY(pcRIolderror) ON ERRORELSE ON ERROR &pcRIolderror.ENDIFFOR lnXX=1 TO occurs(*,pcRIcursors) lnSpot=atc(*,pcRIcursors,lnXX)+1 USE IN (VAL(substr(pcRIcursors,lnSpot,5)ENDFORIF pcOldCompat = ONSET COMPATIBLE ONENDIFIF pcOldDele=OFF SET DELETED OFFENDIFIF pcOldExact=ON SET EXACT ONENDIFIF pcOldTalk=ON SET TALK ONENDIFdo case case empty(pcOldDBC) set data to case pcOldDBCDBC() set data to (pcOldDBC)endcaseRETURN .T.PROCEDURE rireuse* rireuse.prgPARAMETERS tcTableName,tcWkAreapcRIcursors = strtran(pcRIcursors,upper(tcTableName)+?+str(tcWkArea,5),; upper(tcTableName)+*+str(tcWkArea,5)RETURN .t.* 参照完整性删除触发器 借书证信息表PROCEDURE _RI_DELETE_借书证信息表LOCAL llRetValllRetVal = .t.PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildIDPRIVATE pcParentExpr,pcChildExprSTORE TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExprSTORE 0 TO pnParentRec,pnChildRecIF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET(TALK) SET TALK OFF pcOldDele=SET(DELETED) pcOldExact=SET(EXACT) pcOldCompat=SET(COMPATIBLE) SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors= pcRIwkareas= pcRIolderror=ON(error) pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program() IF TYPE(gaErrors(1)U release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO (TSGLXT)ENDIF first triggerLOCAL lcParentID & parents value to be sought in childLOCAL lcChildWkArea & child work area handle returned by riopenLOCAL lcParentWkAreaLOCAL llDelHeaderarealcStartArea=select()llRetVal=.t.lcParentWkArea=select()SELECT (lcParentWkArea)pcParentDBF=dbf()pnParentRec=recno()STORE 借书证号 TO lcParentID,pcParentIDpcParentExpr=借书证号lcChildWkArea=riopen(还书登记表,借书证号)IF lcChildWkArea=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F.ENDIF not able to open the child work areapcChildDBF=dbf(lcChildWkArea)llRetVal=!SEEK(lcParentID,lcChildWkArea)SELECT (lcChildWkArea)pnChildRec=recno()pcChildID=借书证号pcChildExpr=借书证号IF !llRetVal DO rierror with -1,违反删除限制规则。,ENDIF=rireuse(还书登记表,lcChildWkArea)IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetValENDIFIF _triggerlevel=1 do riend with llRetValENDIF at the end of the highest trigger levelSELECT (lcStartArea)RETURN llRetVal* 结束参照完整性删除触发器 借书证信息表*procedure _RI_UPDATE_借书证信息表* 参照完整性更新触发器 借书证信息表LOCAL llRetValllRetVal = .t.PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildIDPRIVATE pcParentExpr,pcChildExprSTORE TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExprSTORE 0 TO pnParentRec,pnChildRecIF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET(TALK) SET TALK OFF pcOldDele=SET(DELETED) pcOldExact=SET(EXACT) pcOldCompat=SET(COMPATIBLE) SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors= pcRIwkareas= pcRIolderror=ON(error) pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program() IF TYPE(gaErrors(1)U release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO (TSGLXT)ENDIF first triggerLOCAL lcParentID & parents value to be sought in childLOCAL lcOldParentID & previous parent id valueLOCAL lcChildWkArea & child work area handle returned by riopenLOCAL lcChildID & childs value to be sought in parentLOCAL lcOldChildID & old child id valueLOCAL lcParentWkArea & parentwork area handle returned by riopenLOCAL lcStartArealcStartArea=select()llRetVal=.t.lcParentWkArea=select()SELECT (lcParentWkArea)pcParentDBF=dbf()pnParentRec=recno()lcOldParentID=OLDVAL(借书证号)pcParentID=lcOldParentIDpcParentExpr=借书证号lcParentID=借书证号IF lcParentIDlcOldParentID lcChildWkArea=riopen(还书登记表) IF lcChildWkArea=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SELECT (lcChildWkArea) SCAN FOR 借书证号=lcOldParentID pnChildRec=recno() pcChildID=借书证号 pcChildExpr=借书证号 IF NOT llRetVal EXIT ENDIF & not llretval llRetVal=riupdate(借书证号,lcParentID,借书证信息表) ENDSCAN get all of the 还书登记表 records =rireuse(还书登记表,lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIFENDIF this parent id changedIF _triggerlevel=1 do riend with llRetValENDIF at th

温馨提示

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

最新文档

评论

0/150

提交评论