> # ♻️ 资源
> **大小:** 1.77MB
> **文档链接:**[**https://www.yuque.com/sxbn/ks/100010635**](https://www.yuque.com/sxbn/ks/100010635)
> **➡️ 资源下载:**[**https://download.csdn.net/download/s1t16/87415795**](https://download.csdn.net/download/s1t16/87415795)
> **注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!**
> ![qrcode_for_gh_d52056803b9a_344.jpg](https://cdn.nlark.com/yuque/0/2023/jpeg/2469055/1692147256036-49ec7e0c-5434-4963-b805-47e7295c9cbc.jpeg#averageHue=%23a3a3a3&clientId=u8fb96484-770e-4&from=paste&height=140&id=u237e511a&originHeight=344&originWidth=344&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=8270&status=done&style=none&taskId=ud96bf5f7-fe85-4848-b9c2-82251181297&title=&width=140.1999969482422)
# 小型商品后台管理数据库系统设计
## **1)项目简介:意义,卖点,功能等**
该项目用 MySQL 和 PHP 实现零售管理系统,通过添加员工信息、消费者信息、商品信息和供应商信息后可以存储在对应的 MySQL 数据库中,用户可以通过添加销售记录来对相应的数据进行操作达到管理零售记录的目的。同时该项目利用 MySQL 的存储过程和触发器,可以实现对数据的接口化操作,即用 PHP 简单调用函数便能完成一系列操作,以及实现对于某些特定情况下的数据库自动触发的操作。在存储过程内部使用了 prepare stmt 以防止非法输入导致的 SQL 注入,且对于传入的不符合规定的字符串也会有检查,有效地防范了脚本攻击。
项目采用 html+js+php+mysql 模式,得益于 ajax,呈现在用户面前的只有一个 index.html 页面,其他交互数据通过异步加载和局部刷新获得,体现了页面的简洁性和用户体验的一致性。后台 PHP 和 SQL 分离,增强了开发的层次性和可维护性。
## **2)项目架构:(E-R 图,模块,流程,各大功能的描述)**
**E-R 图如下:**
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1713839396562-77511ee7-2b8a-40cc-ad8d-431d7c84e835.png#averageHue=%23f8f8f8&from=url&id=p8SQ9&originHeight=461&originWidth=595&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
**函数:**
is_number:对于存储过程中输入的参数,大多以数字为规范,但是数据库中存储类型则多为 varchar 类型,这时便需要判断该字符串是否合法,利用正则表达式可以判断当前字符串是否全为数字,如果是则返回 1 否则返回 0。
```
DELIMITER $$
CREATE FUNCTION `is_number`(`str` VARCHAR(25)) RETURNS int(11)
BEGIN
DECLARE res INT DEFAULT 0;
SELECT str REGEXP '^[0-9]+$' INTO res;
IF res = 1 THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END$$
```
**存储过程:**
add_customers:添加消费者 customers 的存储过程如下,通过传入相应的参数 c_id,c_name,c_city 可以实现向 customers 表中插入对应的消费者记录。为了防止用户违法 SQL 注入,所以使用 MySQL 的 prepare stmt 语句对传进来的参数进行操作,同时为了程序的友好性,当用户输入的 c_id 已存在或者为非法字符时将提示错误信息并作为返回参数传出去。
```
DELIMITER $$
CREATE PROCEDURE `add_customers`(IN `c_id` VARCHAR(4), IN `c_name` VARCHAR(15), IN `c_city` VARCHAR(15), OUT `message` VARCHAR(50))
begin
set @sqlcmd = 'select count(*) into @C from customers where cid=?';
prepare stmt from @sqlcmd;
set @a=c_id;
execute stmt using @a;
deallocate prepare stmt;
set @sqlcmd = 'select is_number(?) into @N';
prepare stmt from @sqlcmd;
set @a=c_id;
execute stmt using @a;
deallocate prepare stmt;
if @C>0 then
set message="Illegal cid in employees.";
else
set @sqlcmd = 'insert into customers values(?,?,?,0,null)';
prepare stmt from @sqlcmd;
set @a=c_id;
set @b=c_name;
set @c=c_city;
execute stmt using @a,@b,@c;
deallocate prepare stmt;
set message="Insert sucessed.";
end if;
end$$
```
add_employees:增加员工 employee 的存储过程中,传入参数为 e_id,e_name,e_city,传出提示信息 message,在插入之前需要判断传入的 e_id 是否已经存在,是否为全数字,合法后才能插入,否则提示错误信息。
```
DELIMITER $$
CREATE PROCEDURE `add_employees`(IN `e_id` VARCHAR(3), IN `e_name` VARCHAR(15), IN `e_city` VARCHAR(15), OUT `message` VARCHAR(50))
begin
set @sqlcmd = 'select count(*) into @E from employees where eid=?';
prepare stmt from @sqlcmd;
set @a=e_id;
execute stmt using @a;
deallocate prepare stmt;
set @sqlcmd = 'select is_number(?) into @N';
prepare stmt from @sqlcmd;
set @a=e_id;
execute stmt using @a;
deallocate prepare stmt;
if @E>0 then
set message="Illegal eid in employees.";
else
set @sqlcmd = 'insert into employees values(?,?,?)';
prepare stmt from @sqlcmd;
set @a=e_id;
set @b=e_name;
set @c=e_city;
execute stmt using @a,@b,@c;
deallocate prepare stmt;
set message="Insert sucessed.";
end if;
end$$
```
add_suppliers:添加供应商 supplier 的存储过程,传入 s_id,s_name,s_sity,s_tel,传出提示信息 message,先检查 s_id 是否已经存在以及 s_id 是否合法,由于 s_name 要求唯一性,所以 s_name 也需要检查是否已经存在,对于 s_tel 也应当检查其合法性,最后再插入到 suppliers 表中。
```
DELIMITER $$
CREATE PROCEDURE `add_suppliers`(IN `s_id` VARCHAR(2), IN `s_name` VARCHAR(15), IN `s_city` VARCHAR(15), IN `s_tel` VARCHAR(10), OUT `message` VARCHAR(50))
begin
set @sqlcmd = 'select count(*) into @S from suppliers where sid=?';
prepare stmt from @sqlcmd;
set @a=s_id;
execute stmt using @a;
deallocate prepare stmt;
if @S>0 then
set message="Existing sid.";
else
set @sqlcmd1 = 'select count(*) into @SN from suppliers where sname=?';
prepare stmt1 from @sqlcmd1;
set @a1=s_name;
execute stmt1 using @a1;
deallocate prepare stmt1;
if @SN>0 then
set message="Existing sname.";
elseif char_length(s_tel)>0 and !is_number(s_tel) then
set message="Illegal telephone_no in suppliers.";
else
set @sqlcmd2 = 'insert into suppliers values(?,?,?,?)';
prepare stmt2 from @sqlcmd2;
set @a2=s_id;
set @b2=s_name;
set @c2=s_city;
set @d2=s_tel;
execute stmt2 using @a2,@b2,@c2,@d2;
deallocate prepare stmt2;
set message="Insert sucessed.";
end if;
end if;
end$$
```
add_product:添加产品 product 的存储过程,传入参数为 p_id,p_name,prod_qoh, prod_qoh_threshold,prod_original_price,prod_discnt_rate,s_id,传出提示信息 message,在该存储过程中,需要检擦传入 p_id 是否已经存在且为合法字符,并且不允许 p_name 传入空值,同样的 prod_qoh 和 prod_qoh_threshold 都应当为小数字符,并且传入初值 prod_qoh_threshold 应当小于等于 prod_qoh,最后检查传入的 s_id 应当为已经存在 suppliers 表中的记录,否则都应当提示错误信息。
```
DELIMITER $$
CREATE PROCEDURE `add_product`(IN `p_id` VARCHAR(4), IN `p_name` VARCHAR(15), IN `prod_qoh` INT, IN `prod_qoh_threshold` INT, IN `prod_original_price` DECIMAL(6,2), IN `prod_discnt_rate` DECIMAL(3,2), IN `s_id` VARCHAR(2), OUT `message` VARCHAR(50))
begin
set @sqlcmd = 'select count(*) into @P from products where pid=?';
prepare stmt from @sqlcmd;
set @a=p_id;
execute stmt using @a;
deallocate prepare stmt;
set @sqlcmd = 'select count(*) into @S from suppliers where sid=?';
prepare stmt from @sqlcmd;
set @a=s_id;
execute stmt using @a;
deallocate prepare stmt;
if @P>0 then
set message="Existing pid.";
elseif char_length(p_name)<1 then
set message="Need pname in
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
详情介绍:https://www.yuque.com/sxbn/ks/100010635 该项目用MySQL和PHP实现零售管理系统,通过添加员工信息、消费者信息、商品信息和供应商信息后可以存储在对应的MySQL数据库中,用户可以通过添加销售记录来对相应的数据进行操作达到管理零售记录的目的。同时该项目利用MySQL的存储过程和触发器,可以实现对数据的接口化操作,即用PHP简单调用函数便能完成一系列操作,以及实现对于某些特定情况下的数据库自动触发的操作。
资源推荐
资源详情
资源评论
收起资源包目录
100010635-基于PHP+MySQL实现(Web)零售管理系统.zip (32个子文件)
littlegood
rbms_demo.sql 17KB
LICENSE 1KB
rbms
showTable.php 9KB
mostSales.php 769B
addPurchase.php 2KB
reportMonthlySale.php 1KB
addProduct.php 1KB
newestSales.php 760B
js
global.js 14KB
showProduct.php 1KB
addCustomer.php 744B
img
robot.png 468B
example.png 252KB
user_icon.jpg 4KB
my.ico 6KB
search_button.png 460B
product
pr02.png 96KB
pr00.png 70KB
pr04.png 30KB
pr03.png 114KB
pr05.png 28KB
pr01.png 74KB
icon.png 1KB
addEmployee.php 705B
css
index.css 5KB
defaultSales.php 761B
conn.php 197B
index.html 2KB
addSupplier.php 785B
演示数据.txt 2KB
README.md 23KB
数据库课程期末设计.doc 1.31MB
共 32 条
- 1
资源评论
- 不归路°2023-05-11这个资源值得下载,资源内容详细全面,与描述一致,受益匪浅。
- guangcheng1232023-03-30这个资源值得下载,资源内容详细全面,与描述一致,受益匪浅。
神仙别闹
- 粉丝: 2674
- 资源: 7640
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功