学校图书馆管理系统设计与实现
【摘要】本论文主要运用了PHP+Mysql+Apache的设计模式,实现了对图书的查询、归还、借阅的操作,及读者档案的管理,口令的修改等功能。
【关键词】系统概述 数据库设计 代码实现
第一章 系统概述
当今时代是飞速发展的信息时代。因为计算机的最大好处在于利用它能够进行信息管理,使用肌酸机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开在各行各业中都离不开信息处理,这正是计算机被广泛应用于信息管理系统的原发密切相关,系统的开发是系统管理的前提。
图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理,现今,有很多的图书馆都是初步开始使用,甚至尚未使用计算机进行信息管理。根据调查得知,他们以前对信息管理的主要方式是基于文本,表格等纸介质的手工处理,对于图书借阅情况(如借书天数,超过限定借书时间的天数)的统计和核实等往往采用对借书卡的人工检查进行,对借阅者的借阅权限,以及借阅天数等用人工计算,手抄进行。数据处理工作量大,容易出错。由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统规范的图书管理手段。尽管有的图书馆有计算机,但是尚未用于图书管理,没有发挥它的效力,资源闲置比较突出,这就是图书管理系统的开发的基于环境。下面对系统的部分功能进行划分讲解:
1、管理员登陆
只有输入正确的管理员用户密码,才能进入系统及对系统的各个功能进行操作。如图1.1所示:


2、管理员权限设计
选择管理员的权限后,赋予管理员相应的管理职能,如图1.2所示:
3、管理员口令修改
填写原密码及新密码跟确认密码一致后可以修改管理员的密码,如图1.3:

4、图书档案管理
此模块可以对图书进行修改、删除、查看、添加等操作。点击修改、删除、添加、书名链接后可以进行相应的操作,如图1.4:

第二章 数据库设计
合理的数据库结构设计可以提高数据存储的效率,保证数据的完整性和一致性。因此数据库在一个信息管理系统中占有非常重要的地位,数据库设计在一个应用系统的开发过程中也占有非常大的比重。设计数据库系统时应该首先充分了解用户各个方面的需求,包括现有的及将来可能增加的需求。本系统使用Mysql数据库。总共包含11张表:管理员表、书架表、图书表、图书类型表、图书借阅表、图书馆信息表、参数表、出版社表、管理员权限表、读者档案表、读者档案类型表。
下面分别介绍这些表结构:
1、管理员表(tb_manager)
用于存储用户信息(包括:用户编号、用户名称、用户密码)。如图2.1所示:


以下是建表语句:
CREATE TABLE `tb_manager` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(30) default NULL,
`pwd` varchar(30) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
2、书架表(tb_bookcase)
用于存放图书所属的书架(包括:书架编号、书架名称)。如图2.2所示:


以下是建表语句:
CREATE TABLE `tb_bookcase` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(30) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
3、图书表(tb_bookinfo)
用于存放图书的信息。如图2.3所示:


以下是建表语句:
CREATE TABLE `tb_bookinfo` (
`barcode` varchar(30) default NULL,
`bookname` varchar(70) default NULL,
`typeid` int(10) unsigned default NULL,
`author` varchar(30) default NULL,
`translator` varchar(30) default NULL,
`ISBN` varchar(20) default NULL,
`price` float(8,2) default NULL,
`page` int(10) unsigned default NULL,
`bookcase` int(10) unsigned default NULL,
`storage` int(10) unsigned default NULL,
`inTime` date default NULL,
`operator` varchar(30) default NULL,
`del` tinyint(1) default '0',
`id` int(11) NOT NULL auto_increment,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
4、图书类型表(tb_booktype)
用于存放图书的类型信息。如图2.4所示:


以下是建表语句:
CREATE TABLE `tb_booktype` (
`id` int(10) unsigned NOT NULL auto_increment,
`typename` varchar(30) default NULL,
`days` int(10) unsigned default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
5、图书借阅表(tb_borrow)
用于存放图书的借阅、续阅、归还等信息。如图2.5所示:


以下是建表语句:
CREATE TABLE `tb_borrow` (
`id` int(10) unsigned NOT NULL auto_increment,
`readerid` int(10) unsigned default NULL,
`bookid` int(10) default NULL,
`borrowTime` date default NULL,
`backTime` date default NULL,
`operator` varchar(30) default NULL,
`ifback` tinyint(1) default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
6、图书馆信息表(tb_library)
用于存放图书馆信息。如图2.6所示:


以下是建表语句:
CREATE TABLE `tb_library` (
`id` int(10) unsigned NOT NULL auto_increment,
`libraryname` varchar(50) default NULL,
`curator` varchar(10) default NULL,
`tel` varchar(20) default NULL,
`address` varchar(100) default NULL,
`email` varchar(100) default NULL,
`url` varchar(100) default NULL,
`createDate` date default NULL,
`introduce` text,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
7、参数表(tb_parameter)
用于存放办证费及到期时间。如图2.7所示:


以下是建表语句:
CREATE TABLE `tb_parameter` (
`id` int(10) unsigned NOT NULL auto_increment,
`cost` int(10) unsigned default NULL,
`validity` int(10) unsigned default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
8、出版社表(tb_publishing)
用于存放图书的出版信息。如图2.8所示:


以下是建表语句:
CREATE TABLE `tb_publishing` (
`ISBN` varchar(20) default NULL,
`pubname` varchar(30) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
- 管理员权限表(tb_purview)
用于存放管理员的权限设计信息。如图2.9所示:


以下是建表语句:
CREATE TABLE `tb_purview` (
`id` int(11) NOT NULL default '0',
`sysset` tinyint(1) default '0',
`readerset` tinyint(1) default '0',
`bookset` tinyint(1) default '0',
`borrowback` tinyint(1) default '0',
`sysquery` tinyint(1) default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
9、读者档案表(tb_reader)
用于存放读者的个人档案信息。如图2.10所示:


以下是建表语句:
CREATE TABLE `tb_reader` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(20) default NULL,
`sex` varchar(4) default NULL,
`barcode` varchar(30) default NULL,
`vocation` varchar(50) default NULL,
`birthday` date default NULL,
`paperType` varchar(10) default NULL,
`paperNO` varchar(20) default NULL,
`tel` varchar(20) default NULL,
`email` varchar(100) default NULL,
`createDate` date default NULL,
`operator` varchar(30) default NULL,
`remark` mediumtext,
`typeid` int(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
10、读者档案类型表(tb_readertype)
用于存放读者的档案类型。如图2.11所示:

|
|
以下是建表语句:
CREATE TABLE `tb_readertype` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(50) default NULL,
`number` int(4) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
第三章 程序设计与实现
本系统主要对图书馆的管理员权限,读者信息,图书信息,图书借阅、续借、归还,图书借阅、归还查询等进行管理。
1、图书借阅模块代码实现
<?php
if($_POST[inputkey]!=""){
$f=$_POST[f];
$inputkey=trim($_POST[inputkey]);
$barcode=$_POST[barcode];
$readerid=$_POST[readerid];
$borrowTime=date('Y-m-d');
$backTime=date("Y-m-d",(time()+3600*24*30)); //归还图书日期为当前期日期+30天期限
$query=mysql_query("select * from tb_bookinfo where $f='$inputkey'");
$result=mysql_fetch_array($query); //检索图书信息是否存在
if($result==false){
echo "<script language='javascript'>alert('该图书不存在!');window.location.href='bookBorrow.php?barcode=$barcode';</script>";
}
else{
$query1=mysql_query("select r.*,borr.borrowTime,borr.backTime,book.bookname,book.price,pub.pubname,bc.name as bookcase from tb_borrow as borr join tb_reader as r on borr.readerid=r.id join tb_bookinfo as book on book.id=borr.bookid join tb_publishing as pub on book.ISBN=pub.ISBN join tb_bookcase as bc on book.bookcase=bc.id where borr.bookid=$result[id] and borr.readerid=$readerid and ifback=0"); //检索该读者所借阅的图书是否与再借图书重复
$result1=mysql_fetch_array($query1);
if($result1==true){ //如果借阅的图书已被该读者借阅,那么提示不能重复借阅
echo "<script language='javascript'>alert('该图书已经借阅!');window.location.href='bookBorrow.php?barcode=$barcode';</script>";
}
else{ //否则,完成图书借阅操作
$bookid=$result[id];
mysql_query("insert into tb_borrow(readerid,bookid,borrowTime,backTime,operator,ifback)values('$readerid','$bookid','$borrowTime','$backTime','$_SESSION[admin_name]',0)");
echo "<script language='javascript'>alert('图书借阅操作成功!');window.location.href='bookBorrow.php?barcode=$barcode';</script>";
}}}?>
2、图书续借模块代码实现
<?php
session_start();
include("conn/conn.php");
$barcode=$_GET[barcode];
$new=$_GET[backTime];
$newbackTime=date("Y-m-d",(mktime(0, 0, 0, substr($new,5,2), substr($new,8,2), substr($new,0,4))+3600*24*30)); //更新续借期,将动态获取的还书期日转化为时间截,然后再求出续借后的还书日期
$borrid=$_GET[borrid];
mysql_query("update tb_borrow set backTime='$newbackTime',ifback=0,operator='$_SESSION[admin_name]' where bookid=$borrid");
echo "<script language='javascript'>alert('图书续借操作成功!');window.location.href='bookRenew.php?barcode=$barcode';</script>";
?>
3、图书归还模块代码实现
<?php
session_start();
include("conn/conn.php");
$backTime=date("Y-m-d"); //归还图书日期
$borrid=$_GET[borrid];
mysql_query("update tb_borrow set backTime='$backTime',ifback=1,operator='$_SESSION[admin_name]' where bookid=$borrid");
echo "<script language='javascript'>alert('图书归还操作成功!');window.location.href='bookBack.php?barcode=$barcode';</script>";
?>
4、图书档案查询模块代码实现
<?php session_start();?>
<html><head>
<title>图书馆管理系统</title>
<link href="CSS/style.css" rel="stylesheet">
</head>
<body>
<table width="776" border="0" align="center" cellpadding="0" cellspacing="0" class="tableBorder">
<tr>
<td>
<?php include ("navigation.php"); ?>
</td>
</tr>
<td>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top" bgcolor="#FFFFFF"><table width="99%" height="510" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="tableBorder_gray">
<tr>
<td height="510" align="center" valign="top" style="padding:5px;"><table width="98%" height="487" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="center" valign="top">
<table width="723" height="37" border="0" cellpadding="0" cellspacing="0">
<tr>
<td background="Images/dangan.gif"> </td>
</tr>
</table>
<form name="form1" method="post" action="">
<table width="98%" height="38" border="1" cellpadding="1" cellspacing="0" bordercolor="#FFFFFF" bgcolor="#9ECFEE" class="tableBorder_gray">
<tr>
<td align="center">
<img src="Images/search.gif" width="37" height="29"></td>
<td> 请选择查询依据:
<select name="f" class="wenbenkuang" id="f">
<option value="<?php echo "b.barcode";?>">条形码</option>
<option value="<?php echo "t.typename";?>">类别</option>
<option value="<?php echo "b.bookname";?>" selected>书名</option>
<option value="<?php echo "b.author";?>">作者</option>
<option value="<?php echo "p.pubname";?>">出版社</option>
<option value="<?php echo "c.name";?>">书架</option>
</select>
<input name="key1" type="text" id="key1" size="50">
<input name="Submit" type="submit" class="btn_grey" value="查询"></td>
</tr>
</table>
</form>
<?php
include("conn/conn.php");
$query=mysql_query("select b.*,c.name as bookcasename,p.pubname,t.typename from tb_bookinfo b left join tb_bookcase c on b.bookcase=c.id join tb_publishing p on b.ISBN=p.ISBN join tb_booktype t on b.typeid=t.id");
$result=mysql_fetch_array($query);
if($result==false){
?>
<table width="100%" height="30" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="36" align="center">暂无图书信息!</td>
</tr>
</table>
<?php
}
else{
?>
<table width="98%" border="1" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF" bordercolordark="#D2E3E6" bordercolorlight="#FFFFFF">
<tr align="center" bgcolor="#D0E9F8">
<td width="13%">条形码</td>
<td width="26%">图书名称</td>
<td width="15%">图书类型</td>
<td width="14%">出版社</td>
<td width="12%">书架</td>
</tr>
<?php
if($_POST[key1]==""){
do{
?>
<tr>
<td style="padding:5px;"> <?php echo $result[barcode];?></td>
<td style="padding:5px;"><a href="book_look.php?id=<?php echo $result[id]; ?>"><?php echo $result[bookname];?></a></td>
<td style="padding:5px;"> <?php echo $result[typename];?></td>
<td style="padding:5px;"> <?php echo $result[pubname];?></td>
<td style="padding:5px;"> <?php echo $result[bookcasename];?></td>
</tr>
<?php
}while($result=mysql_fetch_array($query));
}else{
$f=$_POST[f];
$key1=$_POST[key1];
$sql=mysql_query("select b.*,c.name as bookcasename,p.pubname,t.typename from tb_bookinfo b left join tb_bookcase c on b.bookcase=c.id join tb_publishing p on b.ISBN=p.ISBN join tb_booktype t on b.typeid=t.id where $f like '%$key1%'");
$info=mysql_fetch_array($sql);
if($info==true){
do{
?>
<tr>
<td style="padding:5px;"> <?php echo $info[barcode]; ?></td>
<td style="padding:5px;"><a href="book_look.php?id=<?php echo $info[id]; ?>"><?php echo $info[bookname]; ?></a></td>
<td style="padding:5px;"> <?php echo $info[typename]; ?></td>
<td style="padding:5px;"> <?php echo $info[pubname]; ?></td>
<td style="padding:5px;"> <?php echo $info[bookcasename]; ?></td>
</tr>
<?php
}while($info=mysql_fetch_array($sql));
}else{
?>
<table width="100%" height="30" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="36" align="center">您检索的图书信息不存在,请重新检索!</td>
</tr>
</table>
<?php
}}}
?>
</table></td>
</tr>
</table></td>
</tr>
</table><?php include("copyright.php");?></td>
</tr>
</table>
</td>
</tr></table></body></html>
5、图书借阅查询模块代码实现
<?php
include("conn/conn.php");
$sql=mysql_query("select b.borrowTime,b.backTime,b.ifback,r.barcode as readerbarcode,r.name,k.id,k.barcode,k.bookname from tb_borrow b join tb_reader r on b.readerid=r.id join tb_bookinfo k on b.bookid=k.id");
if($_POST[Submit]!=""){
$f=$_POST[f];
$key1=$_POST[key1];
$sdate=$_POST[sdate];
$edate=$_POST[edate];
$flag1=$_POST[flag1];
$flag2=$_POST[flag2];
if($flag1=="a"){
$sql=mysql_query("select b.borrowTime,b.backTime,b.ifback,r.barcode as readerbarcode,r.name,k.id,k.barcode,k.bookname from tb_borrow b join tb_reader r on b.readerid=r.id join tb_bookinfo k on b.bookid=k.id where $f like '%$key1%'");
}
if($flag2=="b"){
$sql=mysql_query("select b.borrowTime,b.backTime,b.ifback,r.barcode as readerbarcode,r.name,k.id,k.barcode,k.bookname from tb_borrow b join tb_reader r on b.readerid=r.id join tb_bookinfo k on b.bookid=k.id where borrowTime between '$sdate' and '$edate'");
}
if($flag1=="a" && $flag2=="b"){
$sql=mysql_query("select b.borrowTime,b.backTime,b.ifback,r.barcode as readerbarcode,r.name,k.id,k.barcode,k.bookname from tb_borrow b join tb_reader r on b.readerid=r.id join tb_bookinfo k on b.bookid=k.id where borrowTime between '$sdate' and '$edate' and $f like '%$key1%'");
}
}
$result=mysql_fetch_array($sql);
if($result==false){
?>
<table width="100%" height="30" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="36" align="center">暂无图书借阅信息!</td>
</tr>
</table>
<?php
}
else{
?>
<table width="723" border="1" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF" bordercolordark="#D2E3E6" bordercolorlight="#FFFFFF">
<tr align="center" bgcolor="#D0E9F8">
<td width="13%">图书条形码</td>
<td width="27%">图书名称</td>
<td width="15%">读者条形码</td>
<td width="11%">读者名称</td>
<td width="13%">借阅时间</td>
<td width="11%">归还时间</td>
<td width="10%">是否归还</td>
</tr>
<?php
do{
if($result[ifback]=="0"){
$ifbackstr="未归还";
}else{
$ifbackstr="已归还";
}
?>
<tr>
<td style="padding:5px;"> <?php echo $result[barcode];?></td>
<td style="padding:5px;"><a href="book_look.php?id=<?php echo $result[id]; ?>"><?php echo $result[bookname];?></a></td>
<td style="padding:5px;"> <?php echo $result[readerbarcode];?></td>
<td style="padding:5px;"> <?php echo $result[name];?></td>
<td style="padding:5px;"> <?php echo $result[borrowTime];?></td>
<td style="padding:5px;"> <?php echo $result[backTime];?></td>
<td style="padding:5px;"> <?php echo $ifbackstr;?></td>
</tr>
<?php
}while($result=mysql_fetch_array($sql));
}
?>
6、借阅到期提醒模块代码实现
<?php
include("conn/conn.php");
$time=date("Y-m-d");
$sql=mysql_query("select book.barcode,book.bookname,reader.barcode as readerbarcode,reader.name,borr.borrowTime,borr.backTime,borr.ifback from tb_bookinfo book join tb_borrow as borr on book.id=borr.bookid join tb_reader as reader on borr.readerid=reader.id where borr.backTime<='$time' and borr.ifback=0");
$info=mysql_fetch_array($sql);
if($info==false){
?>
<table width="100%" height="30" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="36" align="center">暂无到期提醒信息!</td>
</tr>
</table>
<?php
}else{
?>
<table width="98%" border="1" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF" bordercolordark="#D2E3E6" bordercolorlight="#FFFFFF">
<tr align="center" bgcolor="#e3F4F7">
<td width="15%">图书条形码</td>
<td width="28%">图书名称</td>
<td width="17%">读者条形码</td>
<td width="9%">读者名称</td>
<td width="15%">借阅时间</td>
<td width="16%">应还时间</td>
</tr>
<?php
do{
?>
<tr>
<td style="padding:5px;"> <?php echo $info[barcode];?></td>
<td style="padding:5px;"><?php echo $info[bookname];?></td>
<td style="padding:5px;"> <?php echo $info[readerbarcode];?></td>
<td style="padding:5px;"> <?php echo $info[name];?></td>
<td style="padding:5px;"> <?php echo $info[borrowTime];?></td>
<td style="padding:5px;"> <?php echo $info[backTime];?></td>
</tr>
<?php
}while($info=mysql_fetch_array($sql));
}
?>
7、更改口令模块代码实现
<?php
session_start();
$newpwd=$_POST[pwd];
include("conn/conn.php");
$sql=mysql_query("update tb_manager set pwd='$newpwd' where name='$_SESSION[admin_name]'");
?>
<script language="javascript">alert("口令更改成功!");window.location.href="pwd_modify.php";</script>
8、注销模块代码实现
<?php
session_start();
session_unset();
session_destroy();
header("location:login.php");
?>
第四章 小结
学校图书馆管理系统采用php+MySQL+apache开发完成,系统功能就要有:管理员登录、图书馆信息、管理员信息、参数设计、书架设计、读者类型管理、读者档案管理、图书档案管理、图书借阅模块、系统查询模块、口令修改模块、注销用户模块。实现了一个接近于现实生活中图书管理模式系统。
在本次学校图书馆管理系统开发中,让我懂得了怎么去与团员合作,锻炼了自身沟通能力。其次,学到了解决问题的方法。
致谢
本论文是在郑艳娟老师的悉心指导下完成的。在论文设计中,郑老师细心的查看论文,清楚的指出我论文的各处错误,让我修正,使我的论文设计的更好,最后完成本次论文。老师渊博的专业知识,严谨的治学态度,精益求精的工作作风,朴实无华、平易近人的人格魅力对我影响深远。不仅使我树立了远大的学术目标,还使我明白了许多待人接物与为人处世的道理。在此,谨向郑老师表示崇高的敬意和衷心的感谢!
本论文的顺利完成,离不开各位老师、同学和朋友的关心和帮助。在次感谢老师对我的栽培,同学和朋友对我的帮助。
参考文献
1.php开发王 作者:张亚飞 出版社:电子工业出版社
2.php从入门到精通 作者:孙鹏 邹天思 出版社:清华大学出版社
3.php web开发快速入门及实例精选 作者:熊帅 刘瑞涛 陆昌辉 出版社:电子工业出版社
学校图书馆管理系统设计与实现

5133

被折叠的 条评论
为什么被折叠?



