|
图书馆查询系统
作者:溪湖区后石小学 刘希 李忠凯
引 言
当今数据库技术已成为计算机应用的核心技术,可以认为当今任何计算机信息系统和计算机应用系统都与数据库的应用分不开,数据库已成为其核心和基础。建立数据库应用系统是要充分利用数据库中的数据。对数据库中的数据进行的操作除增加(insert)、更改(update)和删除(delete)外,最常用,也是重要的是查询操作。即便是最简单的数据库应用系统,也离不开查询功能,查询可以说是进行数据管理的重要手段,不过也是数据库应用系统开发过程中较困难、花时间、有一定难度的部分。
美国微软公司的visual foxproj foxpro 3.0版本之后的称谓(包括visual foxpro 5.0、6.0、7.0等),visual
即“可视”之意。它是fox数据库管理系统以其强大的功能、最快的运行速度和极好的兼容性取代了dbase的地位,成为xbase类数据库的工业标准之后又一上台阶的革命性产品,受到广大用户的青睐。
可视化编程是visual foxpro的最大特点,它改善了dbase在编程过程中无法看到界面这个缺点,它使得编程人员所编的程序更为直观,编程人员可以通过视图、界面来修正自己程序中存在的不足,使自己的程序更加完美。
本文正是依据visual foxpro可视化编程这一特点,根据本校图书馆的实际情况,编写了图书馆查寻系统这一程序。改善原有图书查寻系统的不足,使图书馆理人员的工作更为简洁、直观;读者查寻图书更加方便、快捷。
本文也可以做为小型图书馆建立自己的查寻系统的参考用书。因本人学识不足,如有缺点还请见谅!
项目说明:
为方便对图书馆书籍,读者资料,借还书等进行高效的管理,特编写该程序以提高图书馆的管理效率。使用该程序之后,管理人员可以查询某位读者、某种图书的借阅情况,还可以对当前图书借阅情况进行一些统计,给出参考资料。
系统环境:
windows 95系统或windows nt工作站;
内存 12mb以上;
硬盘 190mb以上;
cd-rom驱动器;
super vga;
关键词:
控件:工具箱中的每一个图标。
事件:由系统事先设置好的、某一对象可以识别的动作。
方法:特殊子程序用来完成一定的操作。
对象;控件和窗体的总称。
属性:对象的一些特征。
表单:据有自己的事件和方法的对象。
显示格式:表、视图、表与表之间的关系。
查寻:可通过查寻设计器、查寻向导、交叉表向导、本地视图向导、远程视图向导建立。
设计思路
建立图书信息表,每一类图书拥有唯一的图书编码和唯一的条形码。再建立一个图书库表,每一本书拥有唯一的序列号,每一个图书编码对应一个或多个图书序列号。新建读者级别表,该表中定义了该级别的基本信息(最多可借本数,可保存多长时间,超期每日罚金)。新建一个读者表,每位读者拥有唯一的读者号,每个读者级别对应一位或多位读者。新建图书借还明细表,每一次借书的操作,都会向该表中插入一条信息。每一次还书操作会更新对应的借书记录,同时更必“最后修改日期”为当天的日期。
程序说明
在基本信息维护窗口中,添加三个单选钮,分别用来操作图书状态信息维护,图书类型信息维护,读者级别信息维护。它们是写在程序中的,不能随着用户对信息的修改跟着改变。读者级别维护信息包括:最多可借本数,可保存天数,超期罚金数(以天计)等信息。在读者信息维护窗口中可添加、删除读者信息,只有拥有读者号的用户才可以借书。图书的具体维护包括:图书入库,图书出库,图书外借归还处理。在图书入库窗口中可以生成新的图书信息,也可以追加库中已有的某类图书(可以通过条形码或图书编码检索出读书的基本信息)。图书借还处理窗口用于记录每一次图书序列号的有效性,同时会关联到该书的状态和该读者已借的书,可以看到当天的所有借还操作。
制作步骤
一、新建表
新建图书信息维护表、图书编码表,图书类型表、图书状态表、读者信息表、读者级别表、图书借还明细表。分别如表1、2、3、4、5、6和7所示。
表1、 图书信息维护表
|
colum-name
|
type/length
|
null
|
tag
|
|
bid
|
varchar(2)
|
not null
|
编码(每类书唯一)
|
|
bar-code
|
numeric(15,0)
|
not null
|
条形码
|
|
name
|
varchar(60)
|
null
|
书名
|
|
auther
|
varchar(40)
|
null
|
作者
|
|
pub-name
|
varchar(60)
|
null
|
出版社
|
|
pub-date
|
date
|
null
|
出版日期
|
|
brief
|
varchar(200)
|
null
|
内容简介
|
|
price
|
numberic(8,2)
|
null
|
单价
|
|
book-type
|
varchar(4)
|
not null
|
类型
|
注:bid字段为该表的主键。
表2 图书编码表
|
colum-name
|
type/length
|
null
|
tag
|
|
bseq
|
numerric(10,0)
|
not null
|
图书序列号(每本书唯一)
|
|
bid
|
varchar(12)
|
not null
|
图书编码
|
|
colum-name
|
type/length
|
null
|
tag
|
|
in-date
|
date
|
null
|
入库日期
|
|
colum-name
|
type/length
|
null
|
tag
|
|
book-sts
|
varchar(4)
|
not null
|
状态
|
注:bseq字段为该表的主键。
表3 图书类型表
|
colum-name
|
type/length
|
null
|
tag
|
|
book-type
|
varchar(4)
|
not null
|
类型编号
|
|
name
|
varchar(20)
|
not null
|
类型描述
|
注:book-type字段为该表的主键。
表4 图书状态表
|
colum-name
|
type/length
|
null
|
tag
|
|
book-sts
|
varchar(4)
|
not null
|
状态编码
|
|
name
|
varchar(20)
|
not null
|
状态描述:'01'库中'09'借出
|
注:book-sts字段为该表的主键。
表5 读者信息表
|
colum-name
|
type/length
|
null
|
tag
|
|
rid
|
numeric(10,0)
|
not null
|
读者证编码
|
|
name
|
varchar(60)
|
null
|
读者姓名
|
|
idno
|
varchar(18)
|
null
|
身份证号
|
|
level
|
numeric(2,0)
|
null
|
级别
|
|
address
|
varchar(100)
|
null
|
住址
|
|
colum-name
|
type/length
|
null
|
tag
|
|
colum-name
|
type/length
|
null
|
tag
|
|
telephone
|
varchar(12)
|
null
|
联系电话
|
|
brief
|
varchar(1000)
|
null
|
简介
|
注:rid字段为该表主键。
表6 读者级别表
|
colum-name
|
type/length
|
null
|
tag
|
|
level
|
numer(2,0)
|
null
|
级别
|
|
name
|
varchar(2,0)
|
null
|
名称
|
|
bor-days
|
number(3,0)
|
null
|
可以保存天数
|
|
fine
|
number(5,3)
|
null
|
超期后每天的罚金
|
|
bor-cnt
|
number(2,0)
|
null
|
最多可以借几本书
|
注:level字段为该表的主键。
表7 图书借还明细表
|
colum-name
|
type/length
|
null
|
tag
|
|
seq
|
number(2,0)
|
not null
|
流水号
|
|
bseq
|
numerric(10,0)
|
not null
|
图书序列号
|
|
bid
|
varchar(12)
|
null
|
图书编码
|
|
rid
|
numeric(10,0)
|
null
|
读者证编码
|
|
out-date
|
date
|
null
|
借入日期
|
|
due-date
|
date
|
null
|
应还日肴
|
|
in-date
|
date
|
null
|
归还日期
|
|
fee
|
numberic(8,2)
|
null
|
罚金
|
|
icd
|
date
|
null
|
最后修改日期
|
注;seq字段为该表的主键。
二、新建应用
1、 单击菜单"file/new"项,在弹出的对话框中选取"workspace"标签下的"workspace",填入路径保存;然后单击菜单"file/new"项,选取"target"标签下的"application",建立a-sample
94应用。在该应用的open事件中添加如下脚本,用于连接数据库,打开运行主窗口。
profile konglong
sqlca.dbms="odbc"
sqlca.autovommit=false
sqlca.dbparm=coonnectstring=dsn=konglong; uid=kl;pwd=klol
connect using sqlca;
if sqlca,sqlcode<>0 then
//出错处理
message (box"提示!","连接数据库失败 原因:"+sqlca,sqlerrtext)
return
end if
opencw_main
2、 在应用的close脚本中,添加如下脚本,用于断开与数据加的连接。
disconnect unsing sqlca;
三、 新建立主窗口
窗口的属性高为dihelp!,在程序运行过程中,该窗口作为主窗口。该窗口不需任何脚本。
四、 定义数据窗口
1、 新建用于维护图书状态的数据窗口d_book_sts。
选freedom显示格式。quick select数据源,选择book_sts表的book_sts、name列。
2、 新建用于维护图书类型的数据窗口d_book_type。
选择freedom显示格式。quick select数据源,选择book_type,name列。
3、 新建用于维护读者级别信息的数据窗口d_reader_level。
选择freedom显示格式。quick select数据源,选择book_reader_level表的 level,name,bor_date,bor_cnt,finei列。
4、 新建成用于维护读者信息的数据窗口d_reader_info.
选择freedom显示格式。quick select数据源,选择book_reader表的id , name , level
, telephone , address , brief , st_dateidon列。
5、 新建用于维护图书出库,入库的数据窗口d_book_lib。
选择grid显示格式,sql slecte数据源,选择book_info表的bar_code,name,auther,pub_name,pub_date,price,book_type,列和book_seq表的bseq,bid,in_date,book_sts列。两表通过bid字段关联。
6、 新建用于维护借还图书明细的数据窗口d_book_io_detail。
选择grid显示格式,sql select数据源,选择book_info表的bar- code,name,author,pub_name,pub_date列book_io_detail表的seq,bseq,bid,out_date,due_date,in_date,fee列。
五、 新建用于维护基本信息的窗口w_base-info。
1、 在三个单选按钮的clicked事件中添加脚本,用于选中该项时,动态修改数据窗口的内容。例如,在"读者级别信息维护按钮的clicked事件中添加如下脚本:
if this checked = true then
dw_1.dataobject = 'd_reader_level'
cb_del.enabled = true
cb_rtv.trlggererent(clicked!)
end if
2、 在"检索"按钮中的clicked事件中添加脚本,用于检索选项的数据窗口的信息。
dw-l.seltransobject(sqlca)
dw_l.retrieve()
3、 在"增加"按钮的事件中添加脚本,用于添加选定信息。
longllw_row
ii_row_dw_l.inserlrow(0)
dw_l.scrolltorow(ll_row)
4、 在"删除"按钮的事件中添加脚本,用于删除选定信息。
dw_l.deleterow(dw_l.getselectedrow(0))
5、 在"保存"按钮的事件中添加脚本,用于保存选定信息。
int ret
dw_l.accepttext()
ret_dw_l.uppdate()
if ret = 1 then
commnit using sqlca;
eles
rollback using salca;
end if
六、 新建用于维护读者信息的窗口。
1、 在窗口的open事件中添加如下脚本,用于检索出已定义的读者级别信息。
str iogls_nm,ls_tmp
int li_l
declare cur_bt cursorfor
//定义游标,检索读者级别和姓名
select level.name from book_reader_level;
open cur_bt; //打开游标
fetch cur_bt into:li-l;ls_nm;
do while salca.sqlcode = 0
1s_tup = string(li_l)+""+ls_nm
ddlb_reader_level.additem(ls_tmp)
//动态添加到下拉列表框中
fetch cur_bt into;li_l;ls_nm;
loop
dose cur_bt;
ddlb_reader_level.sorted = true
//对下拉列表框排序
ddlb_reader_level.selectitem(1)
2、 在检索按钮的clicked事件中添加如下脚本,用于检索。
string ls_d_st , ls_d_nd . ls_tmp
string ls_select
int li_st , ld_nd
dw_l.settrun subject(sqlca)
dw_l.rest()
//数据窗口初始化
li_flag = 0
is_select = "select rid , name , idno , level , st_sate
, telephone , address , bridf from book_reader"
//设置动态检索语句头部
is _tmp = trim(sle_id_text)
if len (ls_tmp)>0 then
ii-flag = 1
is_select + "where"
if rb_rid . checked = true then
//输入参数为:读者编码
is_select + "rid="+ls_tmp+"
else if rb_rnm.checked = true then
//输入参数为:读者姓名(可模糊检索)
is_select +=" name like% "+ls_tmp+" % "
//输参数为:读者身份证号
else
is _select +="idno="+ls_tmp+""
end if
end if
if cbx_in_date.checked = true then
//需要添加"加入时间"检索参数
is _d_st = em_d_st.text
is_d_nd = em_d_nd.text
if li_flag = 1 then
is_select + ="and"
else
is_select + ="where"
end if
is_select + = " st_date > = " + ls_s_st + "
" + & " and st_date<="ls_d_nd + " "
ii_flag = 1
end if
if cbx_reader_level.checked = true then
//需要添加"读者级别"检索参数
if li_flag = 1 then
is_select + ="and"
else
is_select + ="where"
end if
ii_rl=imteger(mid(ddlb_reader_level.text,(pos(ddlb_reader_level.
text,")-1)))
is_select + ="level="+string(li_rl)
end if
dw_l.setsqlselect(ls_select)
//设置检索语句
dw-l.retriore()
//检索数据
3、 在"增加"按钮的clicked事件中添加脚本,用于删除选定信息。
lon ll_row
ii_row = dw_l.instertrow(0)
dw_i.scrolltorrow(ll_row)
4、 在"删除"按钮的clicked事件中添加脚本,用于删除选定信息。
dw_l.deleterow(dw_l.getselected row(10))
5、 在"保存"按钮的clidcked事件中添加脚本,用于保存对数据的修改。
int ret
dw_l.accpettext()
ret = dw_l.updte()
if ret = 1 then
commit using sqglca;
else
rollback using sqlca;
end if
6、 在"退出"按钮的clicked事件中添加如下脚本,用于退出该窗口。
close (parent)
七、 新建图书入库的操作窗口w_i_lib
1、 在窗口的open事件中添加如下的脚本,用于检索出已定义的图书类型信息,并设置控件的妆始状态。
string is_bt , is_bnm , is_tmp
declare cur_bt cursor for
select book_type , name from book_type
open cur_bt;
fetch our_bt into : is_bt , is_bnm;
do while squa . squode = 0
is tmp = is_bt +""+is_bnm
ddlb_bt . additem(is_tmp)
fetch cur_bt into : is_bt , :is_bnm;
loop
close cur_bt;
ddlb_bt . sorted = true
ddlb_bt . selectitem(1)
this . triggerevent("ue_init")
2、 在"检查"按钮的clicked事件中,添加如下脚本,根据输入的图书编码或条形码检索库中已有的该类图书的信息。
string is_bc , is_bid , is_pub , is_cut , is_bt , is_brief ,
is_bnm
date id_pub
real_ir_price
is_bc = trim(sle_bur_code . text)
//得到条形码
is_bid = trim(sle_bid . text)
//得到图书编码
if len(is_bc) < 1 and len(is_bid) < 1 then
return
dw_1.settrcnsobject(sqlca)
dw_1.veset()
dw_1.veerieve(is_bid , is_bc)
//数据窗口初始化
if dw_1.rowcoano() < 1 then
return //检索数据
is_bid = dw_1.getitemstring (1,2)
//得到图书编码
select bar_code , name , author , pub_name , pub_date , brief
, price , book_type
into : is_bc , : is_bnm, : is_aut , :is_pub, : is_brief, :is_price
, : is_bt
//检索指定图书的基本信息
from book_info
where bid = : is_bid
sle_bar_code . text = is_bc
sle_bum . text = is_bnm
sle_author . text = is_aut
sle_publish . text = is_pub
sle_brief . text = is_brief
sle_price . text = string(ir_price ,'####### . ## ')
em_pub_date . text = string(ld_pub,'yyyy_mm_dd')
ddlb_bt . selectitem(ddlb_bt . finditem(is_bt))
3、 在入库按钮的clicked事件中添加如下脚本,用于对录入的图书信息时行入库操作.
string is_bc , is_bt , is_aut , is_pub , is_pub_date , is_in_date
string is_bn , is_brief , is_id , is_tmp
real ir_price
int li_price
long ii_tmp
is_bc = trtm(sle_bar_code . text)
//条形码
is_bt = mtd(ddlb_bt . text . l.poscddlb_bt . text,'',( )_1)
//图书类型
is_aut = trim(sle_author . text)
//作者
is_pub = trim(sle_publish . text)
//出版社
is_pub_date = trim(em_pub_date . text)
//出版时间
is_in_date = trim(em_in_date . text)
//入库时间
is_bn = trim(sle_bnm . text)
//图书名字
ir_price = real(trim(sle_price . text))
//身份
it_num = integer(trim(sle_amt . text))
//入库数量
if len(is_be) < 1 then
messagebox("入库错误!" "书名不能为空!")
return
end if
if li_num < 1 then
message box("入库错误!","入库数量不能为空!")
return
end if
注:检索该图书的最大编码,用来生成该类书的图书编码。
select max(bid) into : is_tmp from book_info where book_type
= : is_bt
if is null(is_tmp) then
is_id = is_bt + fill('0' , 7) + '1'
else
il_tmp = long(mid(is_tmp , len(is_tmp)) + is_tmp
end if
注:把该类图书信息插入到图书信息库中。
inset into book_info(bid , bar_code , name , auther , pub_name
, pub_date , book_type , brief )
values ( : is_id , : is_bc , : is_bn , : is_aut , : is_pub)
date( : is_pub_date ( ) , : is_bt , : is_brief )
using sqlca;
if sqlca , sqlcode < > 0 then
message box("插入数据错误(insert into book_info)!" , sqlca
, dqlerrtext)
rolback using sqlca;
return
else
commit using sqlca;
end if
注:检索最大的图书序列号,准备生成每本书的入库信息。
select max (bseq) into : ll_tmp from book_seq;
if is null ( : ll_tmp )then ll_tmp = 1001
for i = 1 to li_num
ll_tmp + = 1
insere into book_seq(bseq , bid , book_sts)
valuse ( : ll_tmp , : is_id , '01')
using sqlca;
if sqlca , dqlcode < > 0 then
message box("插入数据错误(insert into book_info)!", sqlca,salerrtext)
rollback using sqlca;
return
end if
next
commit using sqlca;
cb_rtv , triggerevent ( clicked!)
//重新检索数据
messae box("成功入库","已生成"+ string(li_num)
+"本图书记录,请根据系统生成的图书序列号绘图书编号!")
八、 新建用于图书出库的窗口w_o_lib
窗口的控件设置见下所示
1、 定义实例变量long it_bseq,用于标识得出库的图书的序列号。
2、 在窗口open事件中,添加如下脚本,用于初始化实例变量。
it_bseq = 0
3、 在clicked事件中添加如下脚本,用于选定单击的行,并设置实例变量。
if row < 1 then
return
this . selectrow (0 , false )
this . selectrow (row , true )
il_bseq = this . get (te mnumber(row , 1)
4、 在"检索"按钮的clicked事件中添加如下脚本,用于根据输入的参数,检索图书信息。
string ls_tmp
long ll_tmp
is_tmp = trim (sle_id . text )
if len (ls_tmp) < 1 then
return
dw_1 . settrandobject (sqlca )
dw_1 . reset ( )
if rb_bid . checked = true then
ll_tmp = long (ts_tmp)
dw_1 . retrieve (ll_tmp , '')
else if rb_bc . checked = true then
dw_1 . retrieve ('',ts_tmp)
end if
5、 在"出库"按钮的clicked事件中添加如下脚本,用于对选定的图书做出库处理。
if il_bseq < 1 then
return
int ret
ret = message box("出库确认!","是否出库: book_seq : "
+ stringlil_bseq), question! , yes no ! , ( )
if ret = 1 then
delete from book_seq where bseq = : il_bseq using sqlca;
if sqlca , sqlcode < >0 then
message box("删除数据错误(delete book_lib)?" , sqlca , sqlen
. text)
rollback using sqlca;
return
else
commit using sqlca;
end if
end if
cb_rtv . tringgerevevent (clicked!)
6、 在"借书"按钮的clicked事件中,添加如下脚本,用于借书操作(图书序列号和读者编码均不能为空)。
string ls_bseq , ls_rid , ls_seq , ls_bsts , ls_tmp , ls_bid
long ll_bsea , ll_tmp , ll_rid
date ld_out , ld_dise
int li_bdays , lt_days , lt_cnt , lt_max__cnt , ret
real lr_fee , lr_fine , lr_tmp
ll_bseq = long (trim(sle_bseq . text))
//图书序列号
ll_rid = long (trim(sle_rid . text))
//读者编号
if ll_bseq < 1 or ll_rid < 1 then
return
ls_seq = string(today ( ) , 'yyyy _m m _ dd ' ) + string ( now
)1 ,' hhmmss')
//操作流水号
select book-sts , btd into : ls_bsts , : ls_bid_from book_seq
where bseq = : ll_bseq
注:检索该书的状态和图书编码信息
using sqlca;
if sqlca , sqlcode < > 0 then
if sqlca . sqlcoke = 100 then
//未找到
message box("未找到数据","请核实图书序列号")
return
else
message box("检索数据错误(retricve book_sts from book_sea err!",sqlca
, sqlerr . text)
end if
else
if ls_bsts . < > '01' then
//图书状态错误
message box("数据错误!","该书不在库中")
return
注:检索该类读者的借书期限和本书限制等信息
else
select bor_days , bor_cnt into : li_bdays , :li_max_cnt from
book-reader_level where =(select level from book_reader where
rid = : ll_rid;
if is null (li_bdays) then
li_bdays = 0
ld_due = relativedate(today( ) , lt_bdays)
select count (*)into : li_cnt from book_to_detcil where rid
= : ll_rid and in_date is null;
if li_cnt >= li_max_cnt then
//借书数目已到上限
message box("借书已满","该读者已借:" +string(li_cnt)
+"本书不能再借")
return
end if
注:把借书信息插入到图书借还明细表中
insert into book_to_detail (seq , bseq , bid , rid , out_date
, due_date , tcd)
valucs( :ls_seq ,: ll_bseq ,: ls_bud ,: ll_rid , today( ) ,
:ld_due)today( ))
注:更新图书库中该本图书的信息
update book seq set book_sts = '0 9' where bseq = : ll_bseq
if sqlca . sqlcode < > 0 or is null (ll_tmp) then
message box ("数据更新失败!",sqlca . sq(errtext)
rollback using sqlca;
return
else
commit using sqlca;
end if
end if
end if
dw_1.settransobject (sqlca)
dw_1.veset( )
//数据窗口初始化
dw_1.vetrieve( )
//重新检索数据
7、 在"还书"按钮的clicked事件中,添加如下脚本,用于还书操作(图书序列号不能为空)。
string ls-bsea . is_rid , ls_seq , ls_bsts , ls_tmp
long ll_bseq , ll_tmp
date ld_out
int li_bdays , li_bdays , ret
real lr_fee , lr_fine , lr_tmp
ll_bseq = long (trim(sle_bseq . text)
//图书序列号
ll_bseq < 1 then
return
select book_sts into : ls_bsts from book_seq where bsea = :
ll_bseq
using sqlca ;
if sqlca . sqlcode < > 0 then
if sqlca . sqlcode = 100 then
//未找到记录
message box("未找到数据","请核实图书序列号")
return
else
message box("检查数据错误(retrieve book_sts from book_seq err)!
",sqlca.sqlerr . text)
return
end if
else
if ls_bsts < > '0 9' then
//图书状态不对
message box ("数据错误!","该书非借出状态")
return
注:检查出指定图书的最大的流水号(上次的借书记录)
else
select max (seq) into : ls_tmp from book_to_detakl_where bseq
. = :ll_bseq)
if sqlca . sqlcode < > 0 or is null (ll_tmp) then
message box("数据错误!","未找到该书的借出信息!")
return
end if
注:检索出该书借出的日期等信息。
select out_date , rid , bseq into : ld_out ; ls_rid , :ll_bseq
from book_io_detail where seq =:ls_temp;
注:检索出该类读者的借书期限和本书限制等信息。
select bor_days , fine into ; li_bdays , lr_fine from book_reader_level
where level = (select level from book__reader where rid = : ls_rid);
li_days = days after (ld_out , today ( ) )_li_bdays
if li_days < 1 then
li_days = 0
lr_tmp = li_days * lr_fine
//计算罚金
if lr_tmp > 0 . 1 then
re = message box ("增收罚金提示!","该用户借书超期,需收罚金"+strin(lr_tmp
, '###### . ##) + , question! , yse no ! , 1)+"是否收取?",question
?,yes no !,1)
if ret < >1 then
lr_tmp = 0 . 0
//免收罚金
end if
update book_to_detail
//更新图书借还明细表中该书的记录
set in_date = today ( ) ,
fee = : lr-tmp,
lcd = today ( )
where seq = : ls_tmp;
update book_seq
set book_sts = '0 1' where bseq = : ll-bseq
注:更新书库中该书的状态
if sqlca . sqlcode < > o or is null (ll_tmp) then
message box ,sqlca , sq(err . text)
rollback using sqlca;
return
else
commit using sqlca;
end if
end if
end if
dw_1 . set tran sobject (sqlca)
dw_1 . reset ( )
//数据窗口初始化
dw_1 . retrieve ( )
//重新检索数据
结论
当今数据库技术已成为计算机应用的核心技术,可以认为当今任何计算机信息系统和计算机应用系统都与数据库的应用分不开,数据库已成为其核心和基础。建立数据库应用系统是要充分利用数据库中的数据。对数据库中的数据进行的操作除增加(insert)、更改(update)和删除(delete)外,最常用,也是重要的是查询操作。即便是最简单的数据库应用系统,也离不开查询功能,查询可以说是进行数据管理的重要手段,不过也是数据库应用系统开发过程中较困难、花时间、有一定难度的部分。
可视化编程是visual foxpro的最大特点,它改善了dbase在编程过程中无法看到界面这个缺点,它使得编程人员所编的程序更为直观,编程人员可以通过视图、界面来修正自己程序中存在的不足,使自己的程序更加完美。
本文正是依据visual foxpro可视化编程这一特点。就学校图书馆的具体环境,利用学过的visual foxpro的编程知识,以面向对象为理念,实现对图书馆的书籍进行查寻这一功能。帮助图书管理员更好的管理图书。
根据本校图书馆的实际情况,编写了图书馆查寻系统这一程序。改善原有图书查寻系统的不足,使图书馆理人员的工作更为简洁、直观;读者查寻图书更加方便、快捷。
为方便对图书馆书籍,读者资料,借还书等进行高效的管理,特编写该程序以提高图书馆的管理效率。使用该程序之后,管理人员可以查询某位读者、某种图书的借阅情况,还可以对当前图书借阅情况进行一些统计,给出参考资料。
再在新兴起许多可视化编程的软件,像vb,vc,与它们相比,vf 在视觉效果上可能有些单一,但对于图书馆查寻系统这样比较实用的程序来说用vf来编写程序无疑是个更好的选择。
本文不仅可以为各学校建立自己的图书查寻系统做参考,也可成为各中小型图书馆的示范。
编写图书查寻系统的过程是一个很大的工程,如有不足还请谅解!
希望读者多提出宝贵意见!
也希望有人能喜欢这一程序,并对您的需要的一定的帮助!
2003-11-18
|