图书馆管理系统PHP期末报告


一项目概述

 进入21世纪以来,信息技术从根本上推动了图书馆的飞速发展,计算机和计算机管理系统已成为图书馆进行图书管理的主要设备和系统。虽然目前很多大型的图书馆已经有一整套比较完善的管理系统,但是在一些中小型的图书馆中,大部分工作仍需手工完成,工作起来效率比较低,不便于动态、及时地调整图书结构。为了更好地适应当前图书馆的管理需求,解决手工管理中存在的弊端,越来越多的中小型图书馆正在逐步向计算机信息化管理转变。高校拥有一个小型图书馆,为全校师生提供一个阅读、学习的空间。近年来,随着生源不断扩大,图书馆的规模也随之扩大,图书数量也相应地大量增加,有关图书的各种信息成倍增加。面对如此庞大的信息量,校领导决定使用一套合理、有效、规范、实用的图书馆管理系统,对校内图书资料进行统一、 集中的管理。随着现代化的发展,开发一个图书馆管理系统,其开发宗旨是实现图书管理的系统化、规范化和自动化,达成图书资料集中、统一管理的目标。因此,本次项目的目的就是为高校开发一个图书管理系统。

图书管理系统是基于PHP框架的系统。用于在短期内快速搭建系统应用。整个系统大致可分为五个模块,分别是登录模块、图书管理、用户管理、借阅管理个人信息模块。结合老师课堂的讲解,将对系统做进一步的完善。

本次项目课题拟解诀的主要问题就是如何通过我们所学知识设计一个切实可行的系统来实现一些为高校实现图书的管理功能。本次软件开发工具是Eclipse服务器是Xampps后台数据库采用mysql本学期目的要求我们有熟练掌握的PHP架构知识以及HTML框架,还要有通过搜索资料补充完善系统的能力。


提示:以下是本篇文章正文内容,下面案例可供参考

二 图书管理系统描述

2.1 课题简介

本系统主要应用于部分高校的图书馆,总体任务是实现对大学生图书的借阅等进行一些基本功能,如利用对图书信息的查询、修改、增加、删除等基本功能。

本系统主要实现的登录、图书信息展示、用户的管理、图书的借阅等部分。其主要功能主要有:

  1. 登录功能:通过输入不同的账号、密码以及验证码进入不同权限的管理界面,还可以通过管理员添加用户功能实现账号的注册。
  2. 个人中心功能:此项功能是针对于用户开发的个人信息查看功能,包括查看用户的信息,如姓名、班级等,并且实现个人密码修改功能。
  3. 图书信息展示功能:此项功能是本平台的重要功能,包括图书信息的详细信息,如图书名称、作者、图书号、价格、图书简介等,这些信息都是可以更新的。
  4. 用户的管理功能:此项功能主要是针对于管理员设置的,可以对用户的个人信息、账号状态等信息进行修改查询。

图书的借阅功能:此项功能主要是针对于管理员设置的,可以实现对用户的图书借阅及归还等功能。

2.2 模块简介

图1 图书管理系统模块图

本系统分为五大模块,分为登录模块、个人中心、图书管理、用户管理、图书借阅模块。

2.3 数据库结构设计

我所负责的模块中涉及的数据表的相关信息如下:

表1  用户登陆信息表 

字段名称

数据类型

字段长度

字段说明

备注

id

int

50

用户ID

主键(非空)

name

varchar

50

用户名

pwd

varchar

50

用户密码

status

tinyint

3

用户状态

class

varchar

50

班级

admin

tinyint

3

是否为管理员

last_login_time

datetime

10

上次登录时间

2  图书信息表

字段名称

数据类型

字段长度

字段说明

备注

id

varchar

50

书号

主键(非空)

name

varchar

50

图书名

autho

varchar

50

作者

press

varchar

50

出版社

press_time

varchar

50

出版时间

price

varchar

50

价格

ISBN

varchar

50

ISBN

desc

text

50

作品简介

3  图书借阅

字段名称

数据类型

字段长度

字段说明

备注

book_id

int

50

书号

主键(非空)

user_id

int

50

用户ID

borrow_date

date

50

借阅日期

back_date

date

50

归还日期

三 主要模块的详细设计

3.1 主要技术点说明

(1)登录

//登录验证,添加有验证码功能

 //Json登陆接口   

 public function login(){

        header("Content-Type:application/json");



        $rightCode  =   strtolower($_SESSION['verifyCode']);//正确的验证码

        $code       =   strtolower($_POST['verify']);   //输入的验证码

        $userId     =   htmlentities($_POST['userId']);     //账号

        $password   =   md5($_POST['password']);            //密码

        //先验证验证码,正确再验证账号密码,减小数据库压力     

        if($code != $rightCode){

            $this->sendJsonMessage("验证码错误",1);

        }

        //验证账号密码      

  $userModel = new UserModel;

        $where = "id='{$userId}' and pwd='{$password}'";

        $result = $userModel->fetchOne($where);

        if(!empty($result) && $result['status'] == 1){



            $_SESSION['userId']           =     $userId;

            $_SESSION['admin']            =     $result['admin'];

            $_SESSION['last_login_time']  =     $result['last_login_time'];



            $message = array("message"=>"OK","code"=>0,"admin"=>"{$result['admin']}");

(2)图书管理

//展示图书详细信息以及增删改

    //获取每页图书信息        

$offset = ($currentPage - 1) * $eachPerPage;

        $books = $bookModel->fetchAllWithJoin($where,"LIMIT {$offset},{$eachPerPage}");

        //分页     

   $pager = new Pager($currentPage,$count,$eachPerPage,"?p=Admin&c=Book&a=index",$parms);

        

        $this->smarty->assign("books",$books);

        $this->smarty->assign("mode",$mode);

        $this->smarty->assign("pageStr",$pager->page());

        $this->smarty->display("Book/index.html");

    }

    //显示图书详情页面   

 public function detail(){

        $this->accessPage();



        $id = $_GET['id'];



        $bookModel = new BookModel;

        $result = $bookModel->fetchOneWithJoin("book_info.id={$id}");

        

        $this->smarty->assign("book",$result);

        $this->smarty->display("Book/detail.html");

    }

    //显示添加图书页面    

public function add(){

        $this->accessPage();



        $this->smarty->display("Book/add.html");

    }

    //显示编辑图书页面    

public function edit(){

        $this->accessPage();



        $id = $_GET['id'];



        $bookModel =    new BookModel;

        $book      =    $bookModel->fetchOne("id={$id}");

        

        $this->smarty->assign("book",$book);

        $this->smarty->display("Book/edit.html");

    }

    //Json添加图书接口   

 public function insert(){

        $this->accessJson();

        $bookInfo['name']       =    $_POST['name'];

        $bookInfo['author']     =    $_POST['author'];

        $bookInfo['press']      =    $_POST['press'];

        $bookInfo['press_time']  =   $_POST['pressTime'];

        $bookInfo['price']      =    $_POST['price'];

        $bookInfo['ISBN']       =    $_POST['ISBN'];

        $bookInfo['desc']       =    $_POST['desc'];

        //验证信息是否填写完整       

 if(in_array("",$bookInfo)){

            $this->sendJsonMessage("请输入完整信息",1);

        }



        $bookModel = new BookModel;

        if($bookModel->insert($bookInfo)){

            $this->sendJsonMessage("添加成功",0);

        }else{

            $this->sendJsonMessage("添加失败",1);

        }

    }

    //Json接口修改图书  

  public function update(){

        $this->accessJson();

        

        $id                      =    $_POST['id'];

        $bookInfo['name']        =    $_POST['name'];

        $bookInfo['author']      =    $_POST['author'];

        $bookInfo['press']       =    $_POST['press'];

        $bookInfo['press_time']  =    $_POST['press_time'];

        $bookInfo['price']       =    $_POST['price'];

        $bookInfo['ISBN']        =    $_POST['ISBN'];

        $bookInfo['desc']        =    $_POST['desc'];



        //验证信息是否填写完整

        if(in_array("",1);

        }



        $bookModel = new BookModel;

        if($bookModel->update($bookInfo,"id={$id}")){

            $this->sendJsonMessage("修改成功",0);

        }else{

            $this->sendJsonMessage("修改失败",1);

        }

    }

    //Json删除图书接口   

 public function delete(){

        $this->accessJson();



        $id = $_POST['id'];



        $bookModel   = new BookModel;

        $borrowModel = new BorrowModel;

        if($bookModel->delete("id={$id}") && $borrowModel->delete("book_id={$id}")){

            $this->sendJsonMessage("删除成功",0);

        }else{

            $this->sendJsonMessage("删除失败",1);

        }

    }

}

(3)用户管理

//对用户信息进行管理

//获取每页用户信息

        $offset = ($currentPage - 1) * $eachPerPage;

        $users = $userModel->fetchAllUser($where,{$eachPerPage}");        



        //分页

        $pager = new Pager($currentPage,"?p=Admin&c=User&a=index",$parms);



        $this->smarty->assign("users",$users);

        $this->smarty->assign("mode",$pager->page());

        $this->smarty->display("User/index.html");

    }



    //显示添加用户界面

    public function add(){

        $this->accessPage();



        $this->smarty->display("User/add.html");

    }



    //显示管理用户界面

    public function manage(){

        $this->accessPage();



        $id = $_GET['id'];



        $userModel = new UserModel;

        //获取用户信息

        $userInfo  = $userModel->fetchOne("id={$id}");

        

        //阻止url非法传参

        if(empty($userInfo)){

            echo "<script>alert('该用户不存在');</script>";

            die();

        }



        $borrowModel = new BorrowModel;

        //获取用户借阅信息

        $borrowInfo = $borrowModel->getBorrowInfo("borrow_list.user_id={$id}");

        

        $this->smarty->assign("userInfo",$userInfo);

        $this->smarty->assign("borrowInfo",$borrowInfo);

        $this->smarty->display("User/manage.html");

    }



    //Json添加用户接口

    public function insert(){

        $this->accessJson();



        $user['id']      =  $_POST['userId'];

        $user['pwd']     =  md5($_POST['password']);

        $user['name']    =  $_POST['name'];

        $user['class']   =  $_POST['class'];

        $user['status']  =  $_POST['status'] ? 1 : 0;



        $usermodel = new UserModel;



        if(in_array("",$user)){

            $this->sendJsonMessage("请将信息填写完整",1);

        }



        if($usermodel->rowCount("id={$user['id']}")){

            $this->sendJsonMessage("该用户ID已存在",1);

        }



        if($usermodel->insert($user)){

            $this->sendJsonMessage("添加用户成功",0);

        }else{

            $this->sendJsonMessage("添加用户失败",1);

        }

    }



    //Json修改用户接口

    public function changeInfo(){

        $this->accessJson();



        $id             =  $_POST['userId'];

        $data['name']   =  $_POST['name'];

        $data['class']  =  $_POST['class'];



        if(in_array("",$data)){

            $this->sendJsonMessage("请填写完整信息",1);

        }



        $userModel = new UserModel;



        if($userModel->update($data,1);

        }

    }



    //Json挂失用户接口

    public function lost(){

        $this->accessJson();



        $id  =  $_POST['userId'];



        $userModel = new UserModel;

        if($userModel->update(array("status"=>0),"id={$id}")){

            $this->sendJsonMessage("挂失成功",0);

        }else{

            $this->sendJsonMessage("挂失失败",1);

        }

    }



    //Json启用用户接口

    public function open(){

        $this->accessJson();



        $id  =  $_POST['userId'];



        $userModel = new UserModel;

        if($userModel->update(array("status"=>1),"id={$id}")){

            $this->sendJsonMessage("启用成功",0);

        }else{

            $this->sendJsonMessage("启用失败",1);

        }

    }



    //Json修改用户密码接口

    public function changePwd(){

        $this->accessJson();



        if(!$_POST['pwd']){

            $this->sendJsonMessage("请输入密码",1);

        }



        $id   = $_POST['userId'];

        $pwd  = md5($_POST['pwd']);



        $userModel = new UserModel;

        if($userModel->update(array("pwd"=>$pwd),1);

        }

    }



    //Json删除用户接口

    public function delete(){

        $this->accessJson();



        $id  =  $_POST['userId'];



        $userModel   = new UserModel;

        $borrowModel = new BorrowModel;

        if($userModel->delete("id={$id}") && $borrowModel->delete("user_id={$id}")){

            $this->sendJsonMessage("删除成功",1);

        }

}

(4)借阅管理

//完成用户的结束还书工作 

//Json借书和还书接口

    public function manage(){

        $this->accessJson();



        $bookId  =  $_POST['bookId'];

        $userId  =  $_POST['userId'];

        $action  =  $_POST['action'];



        if($userId == "" || $bookId == ""){

            $this->sendJsonMessage("请填写完整信息",1);

        }



        $borrowModel = new BorrowModel;

        if($action == "borrow"){

            //借书

            if($borrowModel->canBorrow($bookId,$userId)){

                $data = array(

                    "book_id"     =>  $bookId,                    "user_id"     =>  $userId,                    "borrow_date" =>  date("Y-m-d"),                    "back_date"   =>  date("Y-m-d",strtotime("+2 month"))

                );

                if($borrowModel->insert($data)){

                    $this->sendJsonMessage("借书成功",0);

                }else{

                    $this->sendJsonMessage("借书失败",1);

                }

            }else{

                $this->sendJsonMessage("信息错误或该书已借出",1);

            }

        }else if($action == "return"){

            //还书

            if($borrowModel->canReturn($bookId,$userId)){

                if($borrowModel->delete("book_id={$bookId} AND user_id={$userId}")){

                    $this->sendJsonMessage("还书成功",0);

                }else{

                    $this->sendJsonMessage("还书失败",1);

                }

            }else{

                $this->sendJsonMessage("信息错误或该用户未借此书",1);

            }

        }else{

            $this->sendJsonMessage("参数错误",1);

        }

    }



    //Json续借接口

    public function prolong(){

        $this->accessJson();



        //未传参中断

        if(!isset($_POST['bookId']) || !isset($_POST['userId'])){

            $this->sendJsonMessage("缺少参数",1);

        }



        $bookId = $_POST['bookId'];

        $userId = $_POST['userId'];



        $borrowModel = new BorrowModel;

        $result = $borrowModel->fetchOne("book_id={$bookId} AND user_id={$userId}");



        //没有借书就不能续借

        if(empty($result)){

            $this->sendJsonMessage("该用户没有借阅此书",1);

        }

        //超期不能续借

        if(strtotime($result['back_date']) < time()){

            $this->sendJsonMessage("超期的书不能续借",1);

        }



        //计算应还时间

        $backTime = date("Y-m-d",strtotime("+1 month",strtotime($result['back_date'])));

        $data = array("back_date"=>$backTime);

        if($borrowModel->update($data,"book_id={$bookId} AND user_id={$userId}")){

            $this->sendJsonMessage("续借成功",0);

        }else{

            $this->sendJsonMessage("续借失败",1);

        }

    }



    //Json还书接口

    public function returnBook(){

        $this->accessJson();



        $bookId = $_POST['bookId'];

        $userId = $_POST['userId'];



        $borrowModel = new BorrowModel;

        if($borrowModel->canReturn($bookId,$userId)){

            if($borrowModel->delete("book_id={$bookId} AND user_id={$userId}")){

                $this->sendJsonMessage("还书成功",0);

            }else{

                $this->sendJsonMessage("还书失败",1);

            }

        }else{

            $this->sendJsonMessage("信息错误或该用户未借此书",1);

        }

}

3.2 结果展示

总结与反思

由于本次项目相关知识课堂上已经强调过好多次,老师讲的很好,很认真,但是做项目的时间较短,本次开发的“图书管理系统”并没有完全的完成,但是经过小组学习项目制作让我了解了利用PHP开发网页的流程,并且熟悉了Eclipse这款软件的一些操作流程,并且针对于HTML和数据库的运用,以及一些框架的调用都有了很大的提高,相比于之前的web网页开发,本次项目的内容和专业性都有所提升,而且相对来说更加简单便捷

原文地址:https://blog.csdn.net/weixin_43823589

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读8.4k次,点赞8次,收藏7次。SourceCodester Online Tours & Travels Management System pay.php sql injectionLine 16 of pay.php invokes a SQL query built using unvalidated input. This call could allow an attacker to modify the statement’s meaning or to execute arbitrary SQL commands.SQL
文章浏览阅读3.4k次,点赞46次,收藏51次。本文为大家介绍在windwos系统搭建typecho博客+cpolar内网穿透工具将博客发布到公共网络环境,实现远程也可以访问和操作。_windows搭建typecho
文章浏览阅读1.1k次。- php是最优秀, 最原生的模板语言, 替代语法,让php更加的优雅的与html生活在一起 -->请放心, 最终生成的,或者说用户最终看到的,仍然是一个html文档, php代码中的内容不会被泄漏的。-- 将php与html代码混编的时候,大括号很容易造成配对错误,最好杜绝它 -->php标签内部代码由php.exe解释, php标签之外的代码原样输出,仍由web服务器解析。-- 所以php的流程控制语句, 都提供了替代语法,用冒号代替大括号 -->php echo '百变鹏仔'?_利用php将静态页面修改为动态页面
文章浏览阅读1.1k次,点赞18次,收藏15次。整理K8s网络相关笔记博文内容涉及 Linux network namespace 认知以及彼此通信Demo,实际中的应用理解不足小伙伴帮忙指正不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已经和从前不一样了。——村上春树。_linux network namespace 多端通信 模式认知
文章浏览阅读1.2k次,点赞22次,收藏19次。此网络模型提供了一个逻辑二层(L2)网络,该网络封装在跨 Kubernetes 集群节点的现有三层(L3)网络拓扑上。使用此模型,可以为容器提供一个隔离的 L2 网络,而无需分发路由。封装网络带来了少量的处理开销以及由于覆盖封装生成 IP header 造成的 IP 包大小增加。封装信息由 Kubernetes worker 之间的 UDP 端口分发,交换如何访问 MAC 地址的网络控制平面信息。此类网络模型中常用的封装是 VXLAN、Internet 协议安全性 (IPSec) 和 IP-in-IP。_k8s网络组件对比
文章浏览阅读1.1k次,点赞14次,收藏19次。当我们谈论网络安全时,我们正在讨论的是保护我们的在线空间,这是我们所有人的共享责任。网络安全涉及保护我们的信息,防止被未经授权的人访问、披露、破坏或修改。
文章浏览阅读1.3w次,点赞3次,收藏7次。尽管您可以通过 ping 命令解析出网站的 IP 地址,但是可能在浏览器中访问时仍然遇到问题,这可能是因为浏览器使用的 DNS 解析结果不同于 ping 命令使用的解析结果。可能是因为您的网络或设备上设置了防火墙,阻止了对特定网站的访问。有些国家或组织可能会对特定的域名进行屏蔽,从而阻止访问相关网站。如果您的网络使用代理服务器进行访问控制,可能会由于代理服务器的配置问题导致无法访问某些网站。即使您的网络和设备一切正常,目标网站本身可能也存在问题,例如服务器故障、维护或过载,导致无法访问。_能ping通打不开网页
文章浏览阅读839次,点赞22次,收藏19次。本系统带文档lw万字以上文末可领取本课题的JAVA源码参考。
文章浏览阅读2.1k次,点赞31次,收藏22次。基于微信小程序奶茶点餐外卖系统设计与实现(PHP后台+Mysql)可行性分析毕设源代码毕业设计,数据安全和系统稳定性以及团队能力和资源配备方面都具备较好的条件。因此,该项目的可行性较高。:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;微信小程序作为一种快捷、方便的移动应用形式,成为很多用户点餐外卖的首选。项目的界面和功能都可以定制,包安装运行!项目配有对应开发文档、开题报告、任务书、PPT、论文模版等。
文章浏览阅读1.8k次,点赞52次,收藏38次。本文主要通过对系统的前台系统和后台管理系统进行了功能性需求分析,对系统的安全性和可扩展性进行了非功能性需求分析。在详细的需求分析的基础上,根据系统的功能设计确定了数据库结构,实现完整的代码编写。Lucky+Baby母婴用品网站使用 Dreamweaver、HBuilder代码编辑器、Apache服务器等开发工具,完成了系统的主要模块的页面设计和功能实现。本文展示了首页页面的实现效果图,并通过代码和页面介绍了用户注册功能、商品搜索功能、生成订单和查看我的订单功能、在线付款功能功能的实现过程。
文章浏览阅读1.5k次,点赞45次,收藏40次。本设计主要实现集人性化、高效率、便捷等优点于一身的人事信息管理系统,完成首页、系统用户、通知公告、部门信息、员工薪资、考勤签到、员工请假、招聘信息、应聘信息等功能模块。
文章浏览阅读1k次。该错误通常出现在数据库读取结果集数据时,比如当我们写好SQL语句从数据库读取数据时,本身应该返回结果集,再给结果集中读取数据。解决思路:这种错误一般是因为echo后面输出了一个数组导致的,或者是数组作为字符串进行拼接运算时导致的。该错误直译为:警告:mysqli_fetch_assoc函数期望参数1是mysqli的结果集,但是给了一个布尔值。这种错误是PHP解析器在解析时遇到了语法错误,直译为:解析错误:语法错误,意料之外的...该错误直译为:提示:未定义的索引:username。_array to string conversion in
文章浏览阅读2.7w次。解决http请求报错context deadline exceeded (Client.Timeout exceeded while awaiting headers)_context deadline exceeded (client.timeout exceeded while awaiting headers)
文章浏览阅读1.3k次,点赞26次,收藏24次。复杂网络是一种由大量相互连接的元素(节点或顶点)组成的网络结构,这些连接通常是非常复杂和动态的。这些网络可以在各种领域中发现,包括社交网络、生物学系统、信息技术和交通系统等。_代理建模
文章浏览阅读2.6k次,点赞76次,收藏71次。epoll详解,事件模型,ET/LT模式,并通过三个示例进行代码实现。
文章浏览阅读3.3k次。罗拉ROLA-IP是一家来自纽约的代理IP提供商,由李嘉诚先生投资建设,韩国人工智能、自动驾驶、虚拟现实方面的领军企业World IT Show投资入股,由美国纽约大学IT管理教授团队研究开发,进入中国市场6年多,全世界设有多个分子公司。接下来,我们要检查代理和防火墙的设置,因为在绝大多数情况下,它们是导致这个错误的原因,尤其是当用户使用免费代理时。对网站的访问受阻实际上是一个非常常见的错误,它既可能是由于物理原因(硬件问题)造成的,也可能是由于软件错误引起的。检查代理设置,并确保其正确配置。_无法访问此网站,检查代理服务器和防火墙
文章浏览阅读1.1k次,点赞14次,收藏20次。本系统带文档lw万字以上文末可领取本课题的JAVA源码参考。_php洗车服务预约管理系统php源码
文章浏览阅读1.1k次。桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。
文章浏览阅读936次,点赞22次,收藏17次。本系统带文档lw万字以上文末可领取本课题的JAVA源码参考。
文章浏览阅读822次,点赞15次,收藏14次。在整个设计过程中,要确定可能的具体解决方案,以实现每一个小的最终目标,对于每一个小目标,我们首先必须了解一些相关的需求分析信息。除了以上作品下面是2023-2024年最新100套计算机专业原创的毕业设计源码+数据库,是近期作品,如果你的题目刚好在下面可以文末领取java源码参考。springboot基于springboot的在线考试系统。springboot基于springboot的商城购物系统。springboot基于微信小程序的智慧校园设计与实现。springboot基于用户的协同过滤算法的话题推荐。