论文部分内容阅读
摘要:在高校的文献管理过程当中,文献的借、还等工作的量大而重复烦琐,文献的管理管理难度大。而高校文献管理系统的开发使用,大大提高了高校文献资源管理的效率,尤其是在向管理自动化发展的时代,将极大地减轻资料管理的劳动力和提高工作效率。
关键词:ORACLE;FORM;图书;读者
中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)12-21523-02
The Uses and Techniques of Oracle Developer 2000 in the System of Literature Resource Management at the Colleges and Universities
ZHOU Ren-yun,WU Zong-yi
(Hainan Software Profession Institure, Qinghai 571400, China)
Abstract:The book documentation management is a difficult but repeated process in colleges and universities.It took many laber forces much time to manage data.However,the developement and use of the system of documentation management can improve the efficiency of management greatly.Especially at the age of the development of management automation,it can release the laber forces to manage the data and promote the work efficiency.
Key words:ORACLE;FORM;Book;Reader
ORACLE Developer/2000 及 ORACLE*FORM 是運行在ORACLE7和WINDOWS界面下的新一代数据协同工具,是ORACLE第二代的C/S应用开发工具,也是数据库的前端开发工具主要有以下特点:
(1)能够相互集成以创建综合应用
(2)提供了共同设计界面,包括对象导航器、布局编辑器,PL/SQL开发环境,属性调配器。
(3)集成了SQL和PL/SQL语言
(4)能存取ORACLE和非ORACLE数据库
(5)开发的产品容易移植到其他平台上
下面是高校文献资源管理系统中的主要功能模块的实现:
1 系统借书的设计与实现
在《高校文献资源管理系统》中借书模块是必不可少的,其数据流图如下图1所示。
在借书时,输入读者号之后,系统检测该读者号的合法性、判断其借书资格,同时显示该读者的姓名、身份、以借册数和借书权限(读者借书最大册数,根据读者的身份不同而不同)。并在每次输入读者号时起动一个计数器对当前读者借书册数进行记数,计算出还书时间,然后修改读者的相关数据并于显示出来。而计数器是为了显示而设定的。借书功能具体设计如下:
Declare
Id 读者号
Mark 借书资格标识
Borrownum 借书权限
lend 已借册数
Money 欠罚款数
alert_buttonnumber
Begin
:global.n=-1; /*定义计数器和处值*/
select 读者号.借书资格标识借书权限,已借册数,欠罚款数 into
id,mark,borrownum,lend,money
form 读者
where 读者号=:one.读者号;
:global.id1:=one.读者号;
ifmark=’有效’ /*检测借书资格*/
then if lend then select 姓名,类别号,借书权限,
已借册数 into:two.姓名,
:two.类别号,:two.借书权限,
:two.已借册数
from 读者
where 读者号=:one.读者号;
else message(‘该读者的借书权限已经用完’); /*显示警告*/
end if;
elseifmark=’挂失’
then if show_alert(‘alert_1’)=alert_button1
then raise form_trigger_failure;
end if
else mark=’停借’
then if show_alert(‘alert_2’)=alert_button1
then raise form_trigger_failure;
end if
end if;
exception
when NO_DATA_FOUND THEN
MESSAGE(‘非法读者号,请重新输入读者号’);
ALERT_BUTTON:=SHOW_ALERT(’ALERT5’);
RAISE form_trigger_faiture;End;
图1
在借书模块中比较困难的是显示读者所借的书。在这里使用了上面定义的计数器。当一输入读者的借书证号码就给计数器赋值。每输入所借图书号计数器就加一(计数器的值一直保持到清除或退出为止),如果输入的是非法的图书号或者该图书已借出去,则系统将给于警告并使计数器减一。
N:=:global.n;n:=n+1;:global.n:=n; /*加一*/
N:=:global.n:n:=n-1;:blobal.n:=n;/*减一*/
如果输入的是合法图书号并且该图书未借,则显示所借的图书信息。然后修改读者表里当前读者的相关信息既已借册数并把图书存入借书表中:
Update 读者 set 已借册数=已借册数+1 where 读者号one.读者号;
Select 已借册数 into:two.已借册数 :two.读者 where 读者号one.读者号;
Insert into 借 value(:global.id2,:global.id1,:global.num,sysdate,add_months(sysdate,2),
:global.lend,:global.bookname,:global.idwriter,:global.idminery,:global.idname)
sysdate是系统时间,add_months(sysdate,2)是当前时间加2个月为还书时间但此时图书并不是真正的存入服务器的基表中,而是存放在基表拥有当前PC机的内存块中。接着判断计数器,根据计数器的值显示在对应的模块中。在显示模块中一共设定了15(0-14)块,它的显示是根据读者所借的册数和计数器的值来进行判断显示的: If :global.n=0
then select 条码号,借书时间,还书时间,书名 into :0.条码号,:0.借书时间,:0.还书时间,:0书名
from 借书 where 条码号=:global.id1
/*:global.n是计数器的值,显示第一本*/
End if
If :global.n=1
Then Select 条码号,借书时间,还书时间,书名 Into:1.条码号,:1.借书时间,:1.还书时间,:1.书名
From 借书 Where 条码号=:global.id1; /*显示第一本*/
End if
2 查询功能的设计
所谓查询就是充许用户从数据库的基表或视图中选择行列数据写入工作空间并显示出来。但在使用Form 的内部查询功能中却发现在每次输入查询条件进行查询时都显示整个表的记录,同时也不完全支持SQL环境下的语法(SQL环境和Form环境有些不同),查询模块的具体设计思想如下:首先,建立一个和基表(查询时使用的表)完全一样的临时表temp。temp用于存放满足查询条件的记录,但不是真正的存放到temp中,而是存放在temp占用内存块之中,然后利用Form中的查询功能实现显示满足条件的记录。
Declare
N number;
Begin
:global.n=’%’;
If :Text_item1:=:global.n or :Text.item3:=:global.n
Then Insert into temp From 读者
Else
Iinsert Into temp From 读者 Where 读者号:=Text_item1 or 姓名:=:Text_item3
End if;
Execute_quert; /*查询并显示*/
End;
利用临时表的方法有一个优点就是把对基表的操作转为对temp的操作,不
但减少了对服务器的访问次数,并且提高了读取速度和系统的运行速度(因为如果基于表查询,而基表存放在服务器上,如果查询的记录较少则系统运行速度没有明显变化,但如果记录多则将严重影响系统的速度)。在查询显示记录的同时也利用了视图技术,并在基表与视图显示块中显示了对应读者所借图书的书名、作者、出版社、还书时间和价格。在定义视图时定义读者表的读者号为主键(Primary key)借书表的读者号为外部键(Foreign key)。
3 Form 的使用技巧
在使用Oracle*Form4.5设计《高校文献资源管理系统》过程中,通过自己的摸索和查找资料,总结出一些方法和体会:
3.1对象Alert(警告)
在设计中使用了大量的对象Alert(警告),报警是显示的常见窗口,若要警告用户或把当前执行的操作信息报告给用户时必须使用它。它的设计分两部分:一部分在SQL*FROMS的对象Alert中,另一部分在对象Block的Button(按钮)块项中(以删除警告为例子):
(1)在对象Alert中,需添加名为Delete_Alert的项并修改其属性如下:
Display
Title 删除警告
Functional
Button1确认
Button2取消
(2)在对象Block的Button块中,Delete项是一个显示为“删除”使用触发器
WHEN_BUTTON_PRESSED(表示点中按钮),当按下按钮时作如下工作:
Declare
Alert_buttonnumber;
Begin
Alert_button:=SHOW_ALERT(‘DELETE_ALERT’);
IFALERT_BUTTON:=ALERT_BUTTON1
Then DELETE_RECORD;
COMMIT——WORK; /*保存*/
END IF;
END;
3.2 触发子
在系统中很多地方运用了触发子。使用触发子的好处是它可以自动锁定、检验当前使用的项(Item)唯一性、合法性或非空性。在登录读者、图书和期刊中就利用了触发子WHEN_VALEDATE_RECORD被触发,它自动在服务器上检测,若在系统中已经存在该号码或输入的数据不达到规定的长度(号码为8位),则触发子失败并禁止下一步的操作,输入焦点返回项。而在输入其他的项时主要利用触发子的非空性。例如,在读者登录中的姓名一项就定义它是非空的,必须录入,否则将不能保存当前记录或点中该项之后锁定不能离开直到输入为止。
3.3图象
使用SQL*FORMS制作封面时调入图象后,一般的WINDOWS图象设置是256色,而调入的画布的图象是16色,所以调入图象时要进行设置:
Format->Drwing options->Image
Image Dither 将Image Dither 设置成On图象便为256色
3.4主表、子表互查
由于在Form提供的查询模式中可以实现由主表对子表的查询,但不能实现由子表对主表的查询,主表和子表互相查询的具体实现方法如下:
/*Tigger :when_button_pressde*/
Declare
Vid 读者.读者号%type;
Curosr c1 is selectvid Form 借书Where 条形码:=:id;
Begin
:global.tj:=’vid’;
Iif :姓名 is not null Then
:globa.tj:=:global.tj || ‘and 姓名 LIKE ‘%’’ || Ltrim(Rtrim(:姓名)) || ‘%’;
If :global.条码号.tj:=‘vid!=vid’;
Open c1;
Loop
FETCH C1 INTO vid;
EXIT WHEN C1 %NOTFOUND;
:global.条码号.tj:=:global.条码号.tj || ‘or id=’’’ || vid || ‘’’’
End loop;close c1;
:global.tj:=:global.tj || ‘and (‘||Ltrim(Rtrim(:global.条码号.tj))||’)’
End if;
:global.tj:=Ltrim(Rtrim(:global.tj));
NEW_RORM(’读者查询’);
END;
然后对查询结果表格编写以下PL/SQL语句;
Set_block_property(‘读者’,default_where, :global.tj);
Execute_query;
《高校文献管理系统》的开发采用Oracle for windws(7.3)作为开发工具,作为一个大型数据库,Oracle 有很多的优点。但Oracle 在查询方面的可用性比较低。系统设计时虽然对此作了一些研究,但很多方面还有待进一步的完善。
参考文献:
[1](美)Sott Urman.译友翻译组译.Oracle8 PL/SQL程序设计.机械工业出版社,1998.6.
[2](美)Sott Urman.译友翻译组译.Oracle8 构造工具使用指南.机械工业出版社,1998.6.
[3](美)Sott Urman.譯友翻译组译.Oracle8 开发人员指南.机械工业出版社,1998.6.
[4]北方交通大学自动化系统研究院.Oracle Developer/2000 使用技术与方法.科学出版社,1997.6.
“本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。”
关键词:ORACLE;FORM;图书;读者
中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)12-21523-02
The Uses and Techniques of Oracle Developer 2000 in the System of Literature Resource Management at the Colleges and Universities
ZHOU Ren-yun,WU Zong-yi
(Hainan Software Profession Institure, Qinghai 571400, China)
Abstract:The book documentation management is a difficult but repeated process in colleges and universities.It took many laber forces much time to manage data.However,the developement and use of the system of documentation management can improve the efficiency of management greatly.Especially at the age of the development of management automation,it can release the laber forces to manage the data and promote the work efficiency.
Key words:ORACLE;FORM;Book;Reader
ORACLE Developer/2000 及 ORACLE*FORM 是運行在ORACLE7和WINDOWS界面下的新一代数据协同工具,是ORACLE第二代的C/S应用开发工具,也是数据库的前端开发工具主要有以下特点:
(1)能够相互集成以创建综合应用
(2)提供了共同设计界面,包括对象导航器、布局编辑器,PL/SQL开发环境,属性调配器。
(3)集成了SQL和PL/SQL语言
(4)能存取ORACLE和非ORACLE数据库
(5)开发的产品容易移植到其他平台上
下面是高校文献资源管理系统中的主要功能模块的实现:
1 系统借书的设计与实现
在《高校文献资源管理系统》中借书模块是必不可少的,其数据流图如下图1所示。
在借书时,输入读者号之后,系统检测该读者号的合法性、判断其借书资格,同时显示该读者的姓名、身份、以借册数和借书权限(读者借书最大册数,根据读者的身份不同而不同)。并在每次输入读者号时起动一个计数器对当前读者借书册数进行记数,计算出还书时间,然后修改读者的相关数据并于显示出来。而计数器是为了显示而设定的。借书功能具体设计如下:
Declare
Id 读者号
Mark 借书资格标识
Borrownum 借书权限
lend 已借册数
Money 欠罚款数
alert_buttonnumber
Begin
:global.n=-1; /*定义计数器和处值*/
select 读者号.借书资格标识借书权限,已借册数,欠罚款数 into
id,mark,borrownum,lend,money
form 读者
where 读者号=:one.读者号;
:global.id1:=one.读者号;
ifmark=’有效’ /*检测借书资格*/
then if lend
已借册数 into:two.姓名,
:two.类别号,:two.借书权限,
:two.已借册数
from 读者
where 读者号=:one.读者号;
else message(‘该读者的借书权限已经用完’); /*显示警告*/
end if;
elseifmark=’挂失’
then if show_alert(‘alert_1’)=alert_button1
then raise form_trigger_failure;
end if
else mark=’停借’
then if show_alert(‘alert_2’)=alert_button1
then raise form_trigger_failure;
end if
end if;
exception
when NO_DATA_FOUND THEN
MESSAGE(‘非法读者号,请重新输入读者号’);
ALERT_BUTTON:=SHOW_ALERT(’ALERT5’);
RAISE form_trigger_faiture;End;
图1
在借书模块中比较困难的是显示读者所借的书。在这里使用了上面定义的计数器。当一输入读者的借书证号码就给计数器赋值。每输入所借图书号计数器就加一(计数器的值一直保持到清除或退出为止),如果输入的是非法的图书号或者该图书已借出去,则系统将给于警告并使计数器减一。
N:=:global.n;n:=n+1;:global.n:=n; /*加一*/
N:=:global.n:n:=n-1;:blobal.n:=n;/*减一*/
如果输入的是合法图书号并且该图书未借,则显示所借的图书信息。然后修改读者表里当前读者的相关信息既已借册数并把图书存入借书表中:
Update 读者 set 已借册数=已借册数+1 where 读者号one.读者号;
Select 已借册数 into:two.已借册数 :two.读者 where 读者号one.读者号;
Insert into 借 value(:global.id2,:global.id1,:global.num,sysdate,add_months(sysdate,2),
:global.lend,:global.bookname,:global.idwriter,:global.idminery,:global.idname)
sysdate是系统时间,add_months(sysdate,2)是当前时间加2个月为还书时间但此时图书并不是真正的存入服务器的基表中,而是存放在基表拥有当前PC机的内存块中。接着判断计数器,根据计数器的值显示在对应的模块中。在显示模块中一共设定了15(0-14)块,它的显示是根据读者所借的册数和计数器的值来进行判断显示的: If :global.n=0
then select 条码号,借书时间,还书时间,书名 into :0.条码号,:0.借书时间,:0.还书时间,:0书名
from 借书 where 条码号=:global.id1
/*:global.n是计数器的值,显示第一本*/
End if
If :global.n=1
Then Select 条码号,借书时间,还书时间,书名 Into:1.条码号,:1.借书时间,:1.还书时间,:1.书名
From 借书 Where 条码号=:global.id1; /*显示第一本*/
End if
2 查询功能的设计
所谓查询就是充许用户从数据库的基表或视图中选择行列数据写入工作空间并显示出来。但在使用Form 的内部查询功能中却发现在每次输入查询条件进行查询时都显示整个表的记录,同时也不完全支持SQL环境下的语法(SQL环境和Form环境有些不同),查询模块的具体设计思想如下:首先,建立一个和基表(查询时使用的表)完全一样的临时表temp。temp用于存放满足查询条件的记录,但不是真正的存放到temp中,而是存放在temp占用内存块之中,然后利用Form中的查询功能实现显示满足条件的记录。
Declare
N number;
Begin
:global.n=’%’;
If :Text_item1:=:global.n or :Text.item3:=:global.n
Then Insert into temp From 读者
Else
Iinsert Into temp From 读者 Where 读者号:=Text_item1 or 姓名:=:Text_item3
End if;
Execute_quert; /*查询并显示*/
End;
利用临时表的方法有一个优点就是把对基表的操作转为对temp的操作,不
但减少了对服务器的访问次数,并且提高了读取速度和系统的运行速度(因为如果基于表查询,而基表存放在服务器上,如果查询的记录较少则系统运行速度没有明显变化,但如果记录多则将严重影响系统的速度)。在查询显示记录的同时也利用了视图技术,并在基表与视图显示块中显示了对应读者所借图书的书名、作者、出版社、还书时间和价格。在定义视图时定义读者表的读者号为主键(Primary key)借书表的读者号为外部键(Foreign key)。
3 Form 的使用技巧
在使用Oracle*Form4.5设计《高校文献资源管理系统》过程中,通过自己的摸索和查找资料,总结出一些方法和体会:
3.1对象Alert(警告)
在设计中使用了大量的对象Alert(警告),报警是显示的常见窗口,若要警告用户或把当前执行的操作信息报告给用户时必须使用它。它的设计分两部分:一部分在SQL*FROMS的对象Alert中,另一部分在对象Block的Button(按钮)块项中(以删除警告为例子):
(1)在对象Alert中,需添加名为Delete_Alert的项并修改其属性如下:
Display
Title 删除警告
Functional
Button1确认
Button2取消
(2)在对象Block的Button块中,Delete项是一个显示为“删除”使用触发器
WHEN_BUTTON_PRESSED(表示点中按钮),当按下按钮时作如下工作:
Declare
Alert_buttonnumber;
Begin
Alert_button:=SHOW_ALERT(‘DELETE_ALERT’);
IFALERT_BUTTON:=ALERT_BUTTON1
Then DELETE_RECORD;
COMMIT——WORK; /*保存*/
END IF;
END;
3.2 触发子
在系统中很多地方运用了触发子。使用触发子的好处是它可以自动锁定、检验当前使用的项(Item)唯一性、合法性或非空性。在登录读者、图书和期刊中就利用了触发子WHEN_VALEDATE_RECORD被触发,它自动在服务器上检测,若在系统中已经存在该号码或输入的数据不达到规定的长度(号码为8位),则触发子失败并禁止下一步的操作,输入焦点返回项。而在输入其他的项时主要利用触发子的非空性。例如,在读者登录中的姓名一项就定义它是非空的,必须录入,否则将不能保存当前记录或点中该项之后锁定不能离开直到输入为止。
3.3图象
使用SQL*FORMS制作封面时调入图象后,一般的WINDOWS图象设置是256色,而调入的画布的图象是16色,所以调入图象时要进行设置:
Format->Drwing options->Image
Image Dither 将Image Dither 设置成On图象便为256色
3.4主表、子表互查
由于在Form提供的查询模式中可以实现由主表对子表的查询,但不能实现由子表对主表的查询,主表和子表互相查询的具体实现方法如下:
/*Tigger :when_button_pressde*/
Declare
Vid 读者.读者号%type;
Curosr c1 is selectvid Form 借书Where 条形码:=:id;
Begin
:global.tj:=’vid’;
Iif :姓名 is not null Then
:globa.tj:=:global.tj || ‘and 姓名 LIKE ‘%’’ || Ltrim(Rtrim(:姓名)) || ‘%’;
If :global.条码号.tj:=‘vid!=vid’;
Open c1;
Loop
FETCH C1 INTO vid;
EXIT WHEN C1 %NOTFOUND;
:global.条码号.tj:=:global.条码号.tj || ‘or id=’’’ || vid || ‘’’’
End loop;close c1;
:global.tj:=:global.tj || ‘and (‘||Ltrim(Rtrim(:global.条码号.tj))||’)’
End if;
:global.tj:=Ltrim(Rtrim(:global.tj));
NEW_RORM(’读者查询’);
END;
然后对查询结果表格编写以下PL/SQL语句;
Set_block_property(‘读者’,default_where, :global.tj);
Execute_query;
《高校文献管理系统》的开发采用Oracle for windws(7.3)作为开发工具,作为一个大型数据库,Oracle 有很多的优点。但Oracle 在查询方面的可用性比较低。系统设计时虽然对此作了一些研究,但很多方面还有待进一步的完善。
参考文献:
[1](美)Sott Urman.译友翻译组译.Oracle8 PL/SQL程序设计.机械工业出版社,1998.6.
[2](美)Sott Urman.译友翻译组译.Oracle8 构造工具使用指南.机械工业出版社,1998.6.
[3](美)Sott Urman.譯友翻译组译.Oracle8 开发人员指南.机械工业出版社,1998.6.
[4]北方交通大学自动化系统研究院.Oracle Developer/2000 使用技术与方法.科学出版社,1997.6.
“本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。”