基于 PHP + MySQL 图书库存管理系统

♻️ 资源

大小: 512KB

➡️ 资源下载: https://download.csdn.net/download/s1t16/87430323

图书库存管理系统

一、引言

对所设计的应用系统进行概要性的综述

管理者注册、登录后对图书的出库入库记录进行添加、删除、修改和查看,同时使得用户(读者)注册、登录后能够查看图书的一些信息。

设计开发的意义。

便于管理者和读者能够清楚地了解单位图书库存的情况。

所设计应用系统的任务及目标。

对图书的出库入库的情况进行记录。

设计开发及运行的软硬件环境。

操作系统为 Windows XP。

数据库管理系统为 Wamp Server 2。

程序设计语言为 PHP + MySQL。

二、系统分析与设计

系统需求分析(对系统的目标任务进行简单描述并给出数据流图和数据字典)

有待完成功能的主要有:

管理人员基本信息的增删改查,包括人员编号、人员名称、人员密码。

读者基本信息的增删改查,包括读者编号、读者名称、读者密码。

图书基本信息的增删改查,包括图书编号、名称、数量、单价。

入库图书基本信息的增删改查,包括图书编号、名称、数量、单价。

库存图书基本信息的增删改查,包括图书编号、名称、数量、单价。

出库图书基本信息的增删改查,包括图书编号、名称、数量、单价。

数据流图:

数据流图是用来表示系统的逻辑模型,可以用图形的方式描绘数据在系统中流动和处理。

查询信息 图书信息

图书信息

图 1.2.1 顶层数据流图

数据字典:

数据字典可以用来对数据流图中的各部分进行定义,为系统的分析,设计及以后的实现提供有关元素一致性定义和详细的描述。

|------------------------------------------------|---------------------------------------------------|
| 名字:图书编号;别名:;描述:唯一地标识每一本图书的关键域;定义:图书序列号=1{int}4 | 名字:图书名称;别名:;描述:标识每一本图书的实际名字;定义:图书名称=1{varchar}20 |
| 名字:图书数量;别名:;描述:某一种图书的数量;定义:图书名称=1{int}4 | 名字:图书单价;别名:;描述:某一种图书的单价;定义:图书名称=1{float}4 |
| 名字:人员编号;别名:;描述:唯一地标识每一个工作人员;定义:人员编号={int}4 | 名字:人员名称;别名:;描述:标识每一个工作人员的实际名字;定义:人员名称={varchar}20 |
| 名字:人员密码;别名:;描述:工作人员登录时用的口令;定义:人员密码={varchar}20 | |
| 名字:读者编号;别名:;描述:唯一地标识每一个读者;定义:人员编号={int}4 | 名字:人员名称;别名:;描述:标识每一个读者的实际名字;定义:人员名称={varchar}20 |
| 名字:读者密码;别名:;描述:读者登录时用的口令;定义:人员密码={varchar}20 | |

数据库概念结构设计(给出 E-R 图)

E-R 图可以根据需要实现的功能设计,描述系统中的实体,并建立实体之间的关系,从而实现逻辑结构功能。

图书库存管理系统可以划分的实体有:图书信息实体、管理人员信息实体、用户信息实体、以及出入库图书信息实体。

图书库存管理系统-总信息 E-R 图

图书库存管理系统-图书信息 E-R 图

图书库存管理系统-管理人员信息 E-R 图

图书库存管理系统-用户信息 E-R 图

2.2.5 图书库存管理系统-入库图书信息 E-R 图

图书库存管理系统-出库图书信息 E-R 图

数据库逻辑结构设计

(给出关系模式并用表格描述关系模式的属性名、类型、完整性约束等)

根据以上 E-R 图,可以转换成如下逻辑结构:

管理人员表(人员编号,人员名称,人员密码)

用户表(用户编号,用户名称,用户密码)

图书库存表(图书编号,图书名称,图书数量,图书单价)

图书入库表(图书编号,图书名称,图书数量,图书单价)

图书出库表(图书编号,图书名称,图书数量,图书单价)

管理人员表:

|------|-------------|------|------|
| 字段名 | 数据类型 | 字段长度 | 是否为空 |
| 人员编号 | Int | 4 | 否 |
| 人员名称 | Varchar(20) | 20 | 否 |
| 人员密码 | Varchar(20) | 20 | 否 |

用户表:

|------|-------------|------|------|
| 字段名 | 数据类型 | 字段长度 | 是否为空 |
| 用户编号 | Int | 4 | 否 |
| 用户名称 | Varchar(20) | 20 | 否 |
| 用户密码 | Varchar(20) | 20 | 否 |

图书库存表:

|------|-------------|------|------|
| 字段名 | 数据类型 | 字段长度 | 是否为空 |
| 图书编号 | int | 4 | 否 |
| 图书名称 | Varchar(20) | 20 | 否 |
| 图书数量 | int | 4 | 否 |
| 图书单价 | float | 4 | 否 |

图书入库表:

|------|-------------|------|------|
| 字段名 | 数据类型 | 字段长度 | 是否为空 |
| 图书编号 | int | 4 | 否 |
| 图书名称 | Varchar(20) | 20 | 否 |
| 图书数量 | int | 4 | 否 |
| 图书单价 | float | 4 | 否 |

图书出库表:

|------|-------------|------|------|
| 字段名 | 数据类型 | 字段长度 | 是否为空 |
| 图书编号 | Int | 4 | 否 |
| 书名 | Varchar(20) | 20 | 否 |
| 图书数量 | Int | 4 | 否 |
| 图书单价 | float | 4 | 否 |

  • 数据库物理结构设计(任选,可给出要创建的索引)
  • 数据库的物理设计是指对数据库的逻辑结构在指定的数据库管理系统(DBMS)上建立起适合应用环境的物理结构。
  • 通过上面的逻辑结构分析所得到表的关系,用 PHP 创建数据库和相应的表。

connect_to_db.php 中创建数据库的语句:

复制代码
mysql_query("CREATE DATABASE BookStock_Database",$con);

creat_table.php 中的 SQL 语句的数组:

复制代码
$creat_table_sql_array = array("
                               CREATE TABLE Admin
                               Admin_id   int NOT NULL auto_increment PRIMARY KEY,
                               Admin_name varchar(20) NOT NULL,
                               Admin_pwd  varchar(20) NOT NULL
                              )",
                         "CREATE TABLE Reader
                         Reader_id   int NOT NULL auto_increment PRIMARY KEY,
                         Reader_name varchar(20) NOT NULL,
                         Reader_pwd  varchar(20) NOT NULL
                         )",
"CREATE TABLE Book
Book_id     int NOT NULL auto_increment PRIMARY KEY,
Book_name   varchar(20) NOT NULL,
Book_number int NOT NULL,
Book_price  float NOT NULL
)",
"CREATE TABLE Book_in
Book_in_id  int	NOT NULL auto_increment PRIMARY KEY,
Book_in_name   varchar(20) NOT NULL,
Book_in_number  int,
Book_in_price  float NOT NULL
)",
"CREATE TABLE Book_out
Book_out_id int NOT NULL auto_increment PRIMARY KEY,
Book_out_name   varchar(20) NOT NULL,
Book_out_number int,
Book_out_price  float NOT NULL
)");

connect_to_db.php 中执行的执行语句:

复制代码
mysql_select_db("BookStock_Database", $con);
include 'creat_table.php';
foreach($creat_table_sql_array as $creat_sql)
    mysql_query($creat_sql, $con);

数据库创建(创建表的界面、创建外码的界面)

创建数据库 bookstock_database, 并建立相应的表:

初始化后的表的结构:

系统总体结构设计(给出系统总体结构图)

系统层次框图:

系统主要功能:

对图书入库的管理(更新、添加、修改和删除)

对图书出库的管理(更新、添加、修改和删除)

对图书进行入库统计

对图书进行出库统计

对图书入库结存报表的查询

对图书出库结存报表的查询

对用户权限的维护

三、系统开发及实现

论述设计开发采用的技术及设计效果(逐模块或主要模块)

系统主控界面:系统的主控界面既系统主窗体,它用于控制其他功能模块的运行。

在管理员登录后,进入需要处理的事务页面:

在读者登录后,进入需要处理的事务页面:

当 管理员或读者 注册后,可以进行登录:

当 管理员 或读者 注销后,也可以重新登录:

图书入库管理:由于图书入库是一个多次完成的过程,因此,需要用一个图书入库表与图书库存表进行关联。

库存表的记录:

入库表中的记录:

入库后,库存表更新为:

图书出库管理:由于图书出库也是一个多次完成的过程,因此,需要用一个图书出库表与图书库存表表进行关联。

库存表:

出库表:

出库后:

图书入库统计:图书入库是库存管理的重要内容之一,因此能否实现自动统计功能是非常重要的一个问题。图书管理员主要关心的是 全部图书的总数和总金额。

入库表:

图书总数:

图书总价:

图书出库统计:图书出库是库存管理的重要内容之一,因此能否实现自动统计功能是非常重要的一个问题。图书管理员主要关心的是 全部图书的总数和总金额。

出库表:

图书总数:

图书总价:

图书信息的输入:图书信息也是库存管理的重要内容之一,因此能否实现输入功能是非常重要的一个问题。图书管理员主要关心的是 信息的增删改查。

当管理员对 入库、库存、出库 的图书信息进行输入时,也可以对它们进行增删改查:

其中关于 图书库存的处理有:

添加一本名为 Book6 的书的信息:

删除编号为 4 的图书的信息:

将 编号为 3 的图书进行信息的修改:

查找编号为 2 的图书的信息:

用户权限维护的模块:作为一个完整的系统,往往需要对用户权限进行控制或认证。管理员可以通过这个模块进行 人员和读者 的增删改差。

其中 当管理员删除一个编号为 002 的读者的帐号后,这个帐号将无法登录。

对模块要论述要实现的功能、界面设计效果、实现方法)

系统主要功能:

  • 对图书入库的管理(更新、添加、修改和删除)
  • 对图书出库的管理(更新、添加、修改和删除)
  • 对图书进行入库统计
  • 对图书进行出库统计
  • 对图书入库结存报表的查询
  • 对图书出库结存报表的查询
  • 对用户权限的维护

界面设计的效果可以由每个网页中 CSS 设定的样式进行修饰:

其中 主页 index.php 的效果为:

样式部分的代码为:

复制代码
<style type="text/css">
            html{font-size:12px;}
            fieldset{width:300px; margin: 0 auto;}
legend{font-weight:bold; font-size:14px;}
.label{float:left; width:70px; margin-left:10px;}
.left{margin-left:80px;}
.input{width:150px;}
span{color: #666666;}
</style>

实现的方法:涉及到 (0)WampServer 的连接 (1)数据库的建立 (2)表的建立、初始化 (3)入库表和出库表对库存表的更新 (4)图书信息、人员信息、读者信息的增删该查。(在附录部分)

四、总结

对设计开发过程作一个小结(收获、问题、体会等)。

通过这次课程设计,我发现这其中需要的很多知识没有接触过,同时也发现有很多已经学过的东西没有理解到位,不能灵活运用于实际,不能很好的用来解决问题。自己所设计的 关系模式 中考虑的属性太少,实现的功能太简单,太缺乏实际意义。

从各种文档的阅读到开始的需求分析、概念结构设计、逻辑结构设计、物理结构设计。很多事情不是想象中的那么简单的,它涉及到的各种实体、属性、数据流程、数据处理等等。很多时候感觉后面的设计根本无法继续,感觉像是被前面做的各种图限制了。

在开发过程中,自己不断地对程序及各模块进行修改、调试、运行,其间遇到很多问题:由于忘记了一些 PHP 语言的规范使得在调试过程中一些错误没有发现,通过这次课程设计,我也意识到了程序语言的规范性以及编程时要有严谨的态度,同时在写程序时如有一定量的注释,既增加了程序的可读性,也可以使自己在读程序时更容易。

同时对数据库的创建、修改、删除的实现方法也有了进一步的理解,通过导入表和删除表、更改表学会了对于表的一些操作。意识到为了建立一个关系数据库信息管理系统,必须得经过系统调研、需求分析、概念设计、逻辑设计、物理设计、系统调试、维护以及系评价的一般过程,才能为进一步的实施打下基础。

参考文献(不少于 5 篇 )

数据库系统概论(第 4 版) 高等教育出版社

SQL Server 2008 基础教程 清华大学出版社

Web 程序设计(第 6 版) 清华大学出版社

软件工程(第 3 版) 人民邮电出版社

UML 面向对象建模与设计 人民邮电出版社

附录(附部分源代码)

连接 Wamp Server 前需要进行的配置:

安装好 WampServer 后,通过 左击图标 --> Apache 选项 --> Services 选项 --> Test port 80,查看 80 端口是否被其他进程占用。

如果未被占用,可以用 127.0.0.1 直接访问 Wamp Server 主页。

如果被占用,通过 左击图标--> Apache 选项 --> Services 选项 --> httpd.conf 选项,打开 httpd.conf 文件,查找到语句 listen 80。可以改为 listen 8080,用 127.0.0.1:8080 访问 Wamp Server 主页。

访问数据库 phpmyadmin 前,需要将 wamp\apps\phpmyadmin3.4.10.1 下的 config.inc.php 文件中 auth_type 改为 http。

所建的数据库配置文件是 wamp\bin\mysql\mysql5.5.20\data\bookstock_database\下的.opt 文件,所建的表是.frm 文件。

连接 WampServer 的部分代码:

connect_to_db.php:

复制代码
$con = mysql_connect("localhost","root","");

建立数据库的部分代码:

connect_to_db.php:

复制代码
// Create database
mysql_query("CREATE DATABASE BookStock_Database",$con);

对所有表进行初始化的部分代码:

复制代码
init_table.php:
<?php
$init_table_sql_array = array(
                            "INSERT INTO Admin VALUES ('001', 'Admin1', '001')",
                            "INSERT INTO Admin VALUES ('002', 'Admin2', '002')",
                            "INSERT INTO Admin VALUES ('003', 'Admin3', '003')",
                            "INSERT INTO Reader VALUES ('001', 'Reader1', '001')",
                            "INSERT INTO Reader VALUES ('002', 'Reader2', '002')",
                            "INSERT INTO Reader VALUES ('003', 'Reader3', '003')",
                            "INSERT INTO Book VALUES (001, 'Book1', 3, 1.0)",
                            "INSERT INTO Book VALUES (002, 'Book2', 3, 2.0)",
                            "INSERT INTO Book VALUES (003, 'Book3', 3, 3.0)",
                            "INSERT INTO Book_in VALUES (001, 'Book1', 1, 1.0)",
                            "INSERT INTO Book_in VALUES (002, 'Book4', 1, 4.0)",
                            "INSERT INTO Book_in VALUES (003, 'Book5', 1, 5.0)"	,
                            "INSERT INTO Book_out VALUES (001, 'Book2', 1, 2.0)",
                            "INSERT INTO Book_out VALUES (002, 'Book3', 1, 3.0)",
                            "INSERT INTO Book_out VALUES (003, 'Book4', 1, 4.0)"
                        );
?>
connect_to_db.php:
include 'init_table.php';
foreach($init_table_sql_array as $init_sql)
    mysql_query($init_sql, $con);

用入库表 更新 库存表的部分代码:

复制代码
BookStock\Admin\Book_into_stock\update_stock_Book.php:
$result=mysql_query("update(Book t1 inner join Book_in t2 on t1.Book_name=t2.Book_in_name)
                    set t1.Book_number=t1.Book_number+t2.Book_in_number");
                                       $result = mysql_query("insert into Book(Book_name, Book_number, Book_price)
                                               select Book_in_name, Book_in_number, Book_in_price
                                               from Book_in
                                               where Book_in_name
                                               not in
                                               (select Book_name from Book)");

用出库表 更新 库存表的部分代码:

复制代码
BookStock\Admin\Book_out_stock\update_stock_Book.php:
$result = mysql_query("update (Book t1 inner join Book_out t2 on t1.Book_name=t2.Book_out_name)
                      set t1.Book_number=t1.Book_number-t2.Book_out_number
                              ");
                              $result = mysql_query("insert into Book(Book_name, Book_number, Book_price)
                                        select Book_out_name, 0, Book_out_price
                                        from Book_out
                                        where Book_out_name
                                        not in
                                        (select Book_name from Book)");

对 库存图书 信息的增删该查的部分代码:

复制代码
BookStock\Admin\Book_on_stock\insertBook.php:
$result = mysql_query("insert into Book(Book_name,Book_number,Book_price) values
                      ('$bookname',$booknumber,$bookprice)");
                      BookStock\Admin\Book_on_stock\deleteBook.php:
                      $result = mysql_query("delete from Book where Book_id = $bookid");
                      BookStock\Admin\Book_on_stock\modifyBook.php:
                      $result = mysql_query("update Book set Book_name='$bookname', Book_number=$booknumber, Book_price=$bookprice where Book_id=$bookid");
                      BookStock\Admin\Book_on_stock\selectBook.php:
                      $result = mysql_query("select * from Book where Book_id=$bookid");
                      BookStock\Admin\Book_on_stock\selectAllBook.php:
                      $result = mysql_query("select * from Book");
相关推荐
zhangphil1 小时前
Android内存回收:GC、kswapd 和 mm_vmscan_direct_reclaim概述
android
plainGeekDev1 小时前
ContentProvider → Room + Repository
android·java·kotlin
plainGeekDev2 小时前
SQLite 手动升级 → Room Migration
android·java·kotlin
MemoriKu2 小时前
Flutter 相册 APP 视频模态稳定化实战:从视频抽帧、Embedding 元数据到 Android 真机启动修复
android·开发语言·前端·flutter·架构·音视频·embedding
Che2n3JigW2 小时前
Now in Android:它不是最佳实践,而是大型 Android 工程实践的展示
android·architecture·now in android
故渊at2 小时前
第三板块:Android 图形渲染与窗口体系 | 第十三篇:SurfaceFlinger 与 VSYNC 信号机制
android·图形渲染·surfaceflinger·帧率·窗口体系
Che2n3JigW2 小时前
Now in Android Feature 模块分析:一个功能是如何被组织起来的?
android·udf·architecture·now in android·modularization·feature module
2601_961845152 小时前
2026四级作文预测题|英语四级写作押题+提纲PDF
java·c语言·数据库·c++·python·pdf·php
Che2n3JigW2 小时前
Now in Android 项目结构分析:这个 App 是如何搭建起来的?
android·architecture·now in android·modularization·structure