PHP图书管理平台课程报告

article/2025/10/9 9:07:00

图书管理平台

1 项目概述

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

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

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

我在此次小组中承担的任务有:数据库的设计、图书信息查询展示用户管理的部分功能代码编写等;

2 图书管理系统描述

2.1 课题简介

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

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

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

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 主要模块的详细设计

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("",$bookInfo)){

            $this->sendJsonMessage("请输入完整信息",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,"LIMIT {$offset},{$eachPerPage}");        

        //分页

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

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

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

        $this->smarty->assign("pageStr",$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,"id={$id}")){

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

        }else{

            $this->sendJsonMessage("修改失败",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),"id={$id}")){

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

        }else{

            $this->sendJsonMessage("修改失败",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("删除成功",0);

        }else{

            $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 结果展示

图2 登录界面图

图3 图书展示图

图4 图书详情图

图5 图书添加图

图6 用户管理图

图7 修改用户信息图

4 总结与反思


http://chatgpt.dhexx.cn/article/bOxTNE0m.shtml

相关文章

jquery的$.ajax()利用FormData数据类型与php后台交互

可能孤陋寡闻&#xff0c;现在才知道MDN的存在&#xff1a;https://developer.mozilla.org/zh-CN/ 的MDN全名容易理解他是什么意思&#xff1a;MDN Web Docs 好了&#xff0c;自行学习&#xff0c;上一篇讲了jquery的$.ajax()利用json数据类型与php后台交互 那么从MDN上了解到…

微信公众号发送模板消息 -- PHP后台

微信公众号发送模板消息 – PHP后台 注意&#xff1a;这里的用户openid必须是和你的appid&#xff0c;appsecret是一整套的&#xff0c;所谓一整套的意思就是&#xff0c;openid是通过你当前的这个appid获取到的&#xff0c;如果是通过其他appid获取到的用户openid&#xff0c…

微信小程序获取openid(php后台)

微信小程序已经开放了越来越多的功能&#xff0c;所能实现的用户需求也越多了&#xff0c;但是微信提供的wx.getUserInfo()只能获取用户的表面信息&#xff0c;想要是先发送模板消息或者支付功能&#xff0c;就需要获取用户的openid&#xff08;微信提供给每个微信用户独一无二…

搭建一个PHP后台的开发环境你所需要配置东西都有哪些?XAMPP问题

安装的工具&#xff1a; 1. Mysql workbench / Navicat 2. Postman 3. Visual Studio Code / Sublime Text 4. PHP开发环境 5. Nodejs开发环境 6. xampp 注意&#xff08;mysql版本 5.7以上 php版本&#xff1a;7.0以上&#xff09;/wampserver 工具下载地址&#xff…

PHP后台管理登录界面代码

1&#xff0c;自学PHP&#xff0c;编写一个简单的后台登录管理系统&#xff1b; 2&#xff0c;代码中少部分借用网上开源代码&#xff0c;如有不规范的地方请指正&#xff0c;如有更好的方法&#xff0c;多谢分享&#xff1b; 3&#xff0c;享受编程的乐趣并得到知识的提高&a…

php后台登录,实现后台管理员登录功能

上一章节我们选择了后台登录页面,并且将验证码成功的加入到了登录页 login.html 文件中。并且创建了数据库表admin,加入一条用户名和密码的测试数据。这一节我们就来实现登录功能。 先看一个简单功能实现流程图: 有了流程图就有了思路,顺着思路就知道自己一步一步需要做什么…

微信小程序之from表单提交数据到PHP后台

主要内容&#xff1a;实现微信小程序与PHP后台之间的数据传递 本文通过from表单提交到后台存入数据库来展现 需要注意的有&#xff1a; 勾选 代码如下&#xff1a; demo1.wxml <!--pages/demo1/demo1.wxml--> <form bindsubmitformSubmit bindresetformReset>…

PHP后台发送微信小程序订阅信息(较详细)

最近微信小程序甲方需新增下单提醒功能&#xff0c;于是我去微信文章看接入模板信息&#xff0c;但是看到最新公告&#xff08;模板消息接口将下线&#xff0c;推荐使用订阅信息&#xff09;官方通知&#xff1a; 1. 小程序订阅信息分为一次性订阅信息和长期性订阅信息&#x…

php后台框架整理

1、 fastadmin FastAdmin是一款基于ThinkPHPBootstrap开发的快速后台开发框架。FastAdmin基于Apache2.0开源协议发布&#xff0c;免费且不限制商业使用&#xff0c;目前被广泛应用于各大行业应用后台管理。 官网地址&#xff1a;FastAdmin – 基于ThinkPHP和Bootstrap的极速后…

【OpenCV】在Python环境下安装OpenCV并检测是否安装成功

一、OpenCV概述 OpenCV是一个开源的计算机视觉库&#xff0c;可以在Windows、Linux、MacOS等操作系统上运行。它起源于英特尔性能实验室的实验研究&#xff0c;由俄罗斯的专家负责实现和优化&#xff0c;并以为计算机视觉提供通用性接口为目标。 1.1、计算机视觉 计算机视觉…

安装CV2,安装opencv

几经尝试&#xff0c;发现并没有所谓的"cv2"包&#xff0c; 需要安装的是opencv这个包&#xff0c;安装后就可以import cv2了。方法如下&#xff1a; 方法一&#xff1a; 直接用pip安装&#xff0c;按windows r 输入cmd&#xff0c;在cmd环境下输入&#xff1a; …

opencv的安装及使用

文章目录 一、opencv的安装二、图片示例三.视频示例四、录制视频五、总结六、参考资料 一、opencv的安装 参考该链接https://blog.csdn.net/ssj925319/article/details/109231145完成OpenCV3.4.11 的安装。 二、图片示例 创建code目录&#xff0c;并进入 在该目录下创建te…

Ubuntu下Opencv安装与使用

Opencv 前言一、Opencv的功能二、安装Opencv1.下载 OpenCV 3.4.11 数据包2.解压安装包3.安装cmake和依赖库 三、配置编译环境1.创建编译文件夹2.使用make创建编译3.配置编译环境 四、Opencv使用例程1.图片处理2.视频处理1.虚拟机获取摄像头权限2.播放视频3.录制视频 总结 前言 …

OpenCV库安装

OpenCV库安装 OpenCV库的调用名是cv2 所以会看到这样的import语句 import cv2这句话就是对openCV库的调用 openCV库的下载安装 First 好像不需要像网上的教程那样, 首先去官网下载exe执行文件, 然后在VS中进行配置 直接在teminal中, 进入要指定的conda环境, 然后输入pip…

如何安装OpenCV?OpenCV下载安装流程

安装OpenCV需要以下步骤&#xff1a; 下载OpenCV&#xff1a;首先需要从OpenCV官网&#xff08;https://opencv.org/releases/&#xff09;上下载适合自己操作系统版本的OpenCV。 安装依赖项&#xff1a;在安装OpenCV之前&#xff0c;需要先安装一些必要的依赖项&#xff0c;例…

opencv的安装

记得之前看博客的时候看过很多大佬写过opencv的各种安装方法&#xff0c;有使用网站先下载对应文件进行安装的&#xff0c;不过这个还像还得配置一些环境&#xff0c;也有一些大佬使用prompt命令进行安装的&#xff0c;在本人想要安装opencv时大体看了看大佬们的安装教程&#…

OpenCV安装教程:Windows 安装 Visual Studio + OpenCV + OpenCV contrib

目录 0.写作背景 1.安装visual studio 2.下载OpenCV相关的源码 下载OpenCV原始的源码 下载OpenCV contrib的源码 下载安装cmake 3.cmake编译OpenCV 初始编译 CmakeDownload的bug修复 OpenCV-crontrib编译&#xff1a; Generate生成代码 VS生成代码&#xff1a; 报…

openCV-python安装

同样在anaconda下创建一个opencv-python环境 首先&#xff0c;打开anaconda navigator,然后创建一个环境来放opencv-python。 先点击下面的create&#xff0c;然后创建一个新环境。 选择你的python版本&#xff0c;这里我选择的是Python3.6。你也可以根据你的需要和习惯来选择…

opencv安装教程(通用过程说明)

文章目录 环境说明安装方式说明预编译版本从OpenCV团队获取从第三方开发者获取 从源码编译步骤0&#xff1a;安装准备步骤1&#xff1a;获取源代码步骤2&#xff1a;配置构建环境步骤3&#xff1a;构建步骤4&#xff1a;安装&#xff08;可选&#xff09;步骤5&#xff1a;构建…

【安装】安装OpenCV简易教程

&#xff08;1&#xff09;安装opencv-python 执行命令&#xff1a;pip install opencv-python3.4.1.15 博主指定安装的3.4.1.15版本&#xff0c;根据需求可以自己决定需要什么版本。出现successfly字样即安装成功&#xff0c;如果不放心可以验证&#xff0c;在python解释器下…