图书馆书籍管理系统说明书附代码.docx
- 文档编号:23764220
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:22
- 大小:263.34KB
图书馆书籍管理系统说明书附代码.docx
《图书馆书籍管理系统说明书附代码.docx》由会员分享,可在线阅读,更多相关《图书馆书籍管理系统说明书附代码.docx(22页珍藏版)》请在冰豆网上搜索。
图书馆书籍管理系统说明书附代码
大型数据库应用课程设计
课程设计说明书
图书馆书籍管理系统
起止日期:
2014年12月1日至2014年12月7日
学生姓名
肖魁
班级
计算机1102班
学号
11408100214
成绩
指导教师(签字)
计算机与通信学院
2012年12月7日
图书馆书籍管理系统
一、课题的介绍和课题的任务
图书馆书籍管理系统主要对图书馆中书籍进行管理,包括对书籍的添加,删除,修改,各种方式的查询等操作,用于管理员对图书馆书籍库的管理;采用Oracle作为数据库,应用了Java,Jsp,JavaScript,SQL等编程语言以及Struts2,JDBC等等技术,另外系统采用B/S结构,MVC的设计模式进行设计,在数据库方面,多处应用了存储过程和触发器;
二、课程设计的要求
1、书籍的添加:
通过触发器和索引,使图书的编号按照自动增长的方式进行添加,其他字段还有:
书籍名称,作者,出版社,页数,藏书地址等;并且通过定义触发器,使每增加一条图书信息,在图书状态表中给其增加对应的图书状态信息;
2、书籍的删除:
通过存储过程来实现,如果该书的状态为已借出,就不能删除书籍,并发出提示信息;书籍的删除,通过定义before触发器,假如该书籍能够删除,就在其删除之前,删掉该书籍的状态信息;
3、书籍的修改:
修改除了书籍主键外的其他信息;
4、书籍的查询:
可根据图书的索引号进行精确查询,可以根据图书的书名,作者,出版社,藏书地址等进行模糊查询,基于系统的需求,还提供系统中以所有字段作为关键字的模糊查询;
5、用户身份验证,管理员通过用户登录,输入验证信息,若经过系统验证后,若正确,则进入图书管理主页,若出现错误,则跳到登录界面,并返回相应的友好的错误提示信息;
三、系统的分析和系统中数据库的分析(ER图等)
1、系统设计
1.1.系统概要设计-流程图
系统总体设计如图1.1所示
图1-1
实现用户的登录,管理员登录后对图书进行书籍的添加,书籍各种方式的查询,书籍的修改,书籍的删除;
1.2.系统的详细设计
1.2.1.用户的登录
图书管理员通过输入管理员和密码进行验证,若验证正确,则进入系统。
图1.2
1.2.2.书籍的添加
书籍的添加,用户在表单中输入书籍的信息,点击录入,数据通过Struts2的过滤器,自动提交数据,在Struts的Action类中进行获取数据,然后进行检测,如果检测输入信息有误,则跳转到添加页面,并返回相应的错误提示;如果信息正确,则调用添加数据存储过程进行数据的持久化;具体流程如图1-3所示;
图1.3
1.2.3.书籍的修改
书籍的修改,首先查询出需要修改的书籍,点击修改,跳转到书籍修改页面,顺便通过session对象,将原有的书籍对象带过去;在书籍修改页面表单中修改相应属性,提交到Struts2的Action类中,首先进行数据的校验,校验失败,跳转到修改页面,返回相应的出错信息,校验成功,则进行书籍的更新处理;具体流程如图1.4所示;
图1.4
1.2.4.书籍的删除
书籍的删除,首先查询出需要修改的书籍,点击删除,提交到Struts2中的Action类,顺便传入书籍编号这个值(主键,唯一),首先访问书籍库进行查询该书籍的状态是否是“在馆”,是则返回true,进入书籍的删除环节;调用数据库中的存储过程和触发器,进行书籍的删除,确保系统数据的一致性;具体流程如图1.5所示
图1.5
1.2.5.书籍的查询
书籍的查询,本系统中书籍的查询设定了多种方式,包括按索书号查询,按书名查询,按书籍作者查询,按出版社查询,还有按所有字段进行查询;先选择查询的方式,输入关键字,然后进行数据的提交,经数据过滤校验后,进入控制层,通过判断其查询类型,进行数据的查询,将符合条件的数据查询出来,装入集合框架ArrayList中,传入显示层进行数据的显示,具体流程如图1.6所示;
图1.6
2.数据库的设计
2.1.数据库建模
2.1.1.E-R图
2.1.1.1.图书信息建模
系统中书籍信息建模如E-R图2.1所示:
图2.1
2.1.1.2用户信息的建模
用户信息的建模如图2.2所示:
图2.2
3系统前台的设计
3.1、系统的结构
本系统使用MVC模式作为系统的设计结构,以JSP作为视图层;采用struts2框架,以其Acation类作为其控制层,以各种JavaBean,FormBean作为模型层;
3.2、界面的设计和布局
3.2.1登录界面
如图3.1所示
图3.1
3.2.2图书管理界面
图书管理主页中提供了集书籍添加,书籍修改,书籍删除,书籍详情查询及多功能的图书检索功能,使用方便,操作简单,并设有完善友好的错误提示功能,具体展示如图3.2所示;
图3.2
3.2.3图书修改界面
书籍修改界面如图3.3所示;
图3.3
3.2.4.图书详情界面
由于数据量比较大,在查询主页中不便显示,通过图书详情界面,将对应图书信息进行显示;其界面及运行结果如图3.4所示;
图3.4
四、系统的数据库实现
1.1.书籍信息表和书籍状态表的设计
书籍信息表中包括书籍编号,书籍名称,作者,出版社,页数,藏书地址等字段,书籍编号通过触发器的方式,以自动增长的方式进行添加;页数为Number类型,其他的都为字符串行;
图书馆中书籍的各个字段的设计如图4.1所示分为图书表(book)和图书状态表(bookstate);
图4.1
表4-1book表的设计
bnum
Number
Notnull,自动生成,主键
bname
Character(256)
Notnull
writer
Character(256)
Notnull
publish
Character(256)
Notnull
page
Number
Notnull
place
Character(256)
Notnull
表4-2bookstate表的设计
bnum
Number
Notnull外键,主键
state
Character(256)
Notnulldefault‘wait’
cardid
Character(256)
null
borrow
Date
null
1.2.管理员验证信息的设计
如图4.2所示
CreatetableManager(
Usernamevarchar2(20),
Pwdvarchar2(20)
);
图4.2
表4-3manage表的设计
username
Character(256)
Notnull主键
pwd
Character(256)
Notnull
1.3.触发器,存储过程的设计
1.3.1.图书信息添加触发器的设计
先创建一个索引,计算出前一个字段的最大值,然后创建before触发器,每增加一项书籍记录,给书籍编号这一字段赋值;
图书的管理--创建图书表:
Createtablebook(
bnumnumber(11),
bnamevarchar2(20),
writervarchar2(20),
publishvarchar2(50),
pagenumber(11),
placevarchar2(20),
);
--创建序列:
createsequencebook_seq
incrementby1
startwith1
maxvalue1.0E28
minvalue1
nocache
----创建触发器
createorreplacetriggertr_book
beforeinsertbook
foreachrow
begin
selectbook_seq.nextvalinto:
new.bnumfromdual;
endtr_book;
--测试,插入数据
Insertintobook(bname,writer,publish,page,place)values('compute','liusi','China',342,'一楼库');
insertintobook(bname,writer,publish,page,place)values('computerr','liusi','湖工大',842,'二楼库');
1.3.2.添加书籍状态信息触发器trigger_state
每创建一项书籍记录后,自动在图书状态信息表中,添加一条对应的图书状态信息;
创初始触发器
createorreplacetrigger_state
afterinsertbook
foreachrow
begin--如何用到bnum的值----->
insertintobookstate(bnum)values()
end;
1.3.3.删除存储过程的创建pro_del
先判断图书状态State是否为”已借出”,如果是,则不能进行删除操作,与此同时,发出提示信息;如果不是,则先删除bookstate表中对应的那条记录,再将相应的图书信息记录删除。
--------删除,过程
Createorreplaceprocedurepro_del(
bnumberINnumber(11),
sayoutvarchar2(20)
)as
Num1number
stavarchar2
date1=date
Begin
selectstateintostafrombookstatewherebnum=bnumber;
ifsta='wait'then
deletefrombookstatewherebnum=bnumber;
deletefrombookwherebnum=bnumber;
say='yes';
else
say='no';
endif;
end;
1.3.4.更新书籍存储过程的创建pro_update
---更新书籍存储过程
Createorreplaceprocedurepro_update(
bnum1INnumber(11),
bname1INvarchar2(20),
writer1INvarchar2(20),
publish1INvarchar2(50),
page1INnumber(11),
place1INvarchar2(20),
)as
Begin
updatebooksetbname=bname1,writer=writer1,publish=publish1,page=page1,place=place1wherebnum=bnum1;
end;
1.3.5.用户登录存储过程的创建pro_login
--------登录
Createorreplaceprocedurepro_login(
mnameINvarchar2(20),
mpwdINvarchar2(20),
sayoutvarchar2(20)
)as
countnumber=0;
Begin
selectcount(*)intocountfromManagewhereusername=mname&&pwd=mpwd;
ifsta=0then
say='yes';
else
say='no';
endif;
end;
五、系统的实现及调试
1.实现数据库的连接
publicDBoracle(){
try{
Class.forName("oracle.jdbc.driver.OracleDriver");//oracle名称还需填写
ct=DriverManager.getConnection("jdbc:
oracle:
thin:
@10.0.0.248:
1521:
orcl","orcl","orcl");
}catch(ClassNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
2.系统功能的实现
2.1通过在前台JSP页面中书籍信息,由Struts2的过滤器,将其数据自动封装成对应的JavaBean,在对应的Action中进行处理;
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEstrutsPUBLIC
"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"
"http:
//struts.apache.org/dtds/struts-2.0.dtd">
2.2.图书的添加
在图书管理主界面中,录入各项图书信息,通过Struts2过滤器,在Action中进行数据的校验,若出现数据格式等方面的错误,将错误信息写入一个HashMap集合中,并将所有出错信息的集合返回到图书管理主界面;如果数据符合要求,则向数据库图书表中增加一条记录,同时往图书状态表中也写入相应的记录;
publicbooleanaddBook(Bookb){
…..
}
2.3.图书的修改
先通过查询,找到要修改的记录,点击进入图书信息修改界面,完成后,输入新的值,进行数据的修改;
publicbooleanupdateBook(Bookb){
try{
CallableStatementcstmt=null;
Stringprocedure="{callpro_update(?
?
?
?
?
?
)}";
cstmt.setString(1,b.getBname());
cstmt.setString(2,b.getWriter());
cstmt.setString(3,b.getPublish());
cstmt.setInt(4,b.getPage());
cstmt.setString(5,b.getPlace());
cstmt.setInt(6,b.getBnum());
cstmt=ct.prepareCall(procedure);
cstmt.executeUpdate();
returntrue;
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returnfalse;
}
2.4.图书的删除
publicbooleandeleteBook(Bookb){
try{
//pstmt=ct.prepareStatement("deletefrombookstatewherebnum=?
");
pstmt=ct.prepareCall("{callpro_del(?
)}");
pstmt.setInt(1,b.getBnum());
//pstmt.executeUpdate();
//pstmt=ct.prepareStatement("deletefrombookwherebnum=?
");
//pstmt.setInt(1,b.getBnum());
pstmt.execute();
returntrue;
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
returnfalse;
}
}
2.5.图书的查询
系统中提供了图书索引号,图书名称,作者,出版社,等多种方式的查询,并且为了方便起见,还设立通过所有字段进行模糊查询的功能;
publicArrayListgetLibBooks(Bookb,intchoice){
ArrayListal=newArrayList();
Stringsql="select*frombookwhere";
Stringstr=null;
try{
//按照各种查询
if(choice==1){
sql="select*frombookwherebnum=?
";
pstmt=ct.prepareStatement(sql);
pstmt.setInt(1,b.getBnum());
}elseif(choice==2){
sql="select*frombookwherebnamelike?
";
pstmt=ct.prepareStatement(sql);
pstmt.setString(1,"%"+b.getBname()+"%");
}elseif(choice==3){
sql="select*frombookwherewriter=?
";
pstmt=ct.prepareStatement(sql);
pstmt.setString(1,b.getWriter());
}elseif(choice==4){
sql="select*frombookwherepublishlike?
";
pstmt=ct.prepareStatement(sql);
pstmt.setString(1,"%"+b.getPublish()+"%");
}else{
sql="select*frombookwherebnamelike?
ORwriterlike?
ORpublishlike?
";
pstmt=ct.prepareStatement(sql);
pstmt.setString(1,"%"+b.getPublish()+"%");//将所有信息写入publish这一栏中
pstmt.setString(2,"%"+b.getPublish()+"%");//将所有信息写入publish这一栏中
pstmt.setString(3,"%"+b.getPublish()+"%");//将所有信息写入publish这一栏中
}
ResultSetrs=pstmt.executeQuery();
while(rs.next()){
Bookbk=newBook();
bk.setBnum(rs.getInt
(1));
bk.setBname(rs.getString
(2));
bk.setWriter(rs.getString(3));
bk.setPublish(rs.getString(4));
bk.setPage(rs.getInt(5));
bk.setPlace(rs.getString(6));
al.add(bk);
}
returnal;
}catch(S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书馆 书籍 管理 系统 说明书 代码