图书销售管理系统的设计与实现
调查一个书店的图书销售业务,设计的图书销售系统主要包括进货、退货、统计、销售、查询功能。
①进货:根据某种书籍的库存量及销售情况确定进货数量,根据供应商报价选择供应商。输出一份进货单并自动修改库存量,把本次进货的信息添加到进货库中。
②退货:顾客把已买的书籍退还给书店。输出一份退货单并自动修改库存量,把本次退货的信息添加到退货库中。
③统计:根据销售情况输出统计的报表。一般内容为每月的销售总额、销售总量及排行榜等信息。
④销售:输入顾客要买书籍的信息,自动显示此书的库存量,如果可以销售,打印销售单并修改库存,同时把此次销售的有关信息添加到日销售库中。
⑤查询:允许用户设置条件进行进货、退货、统计、销售和库存书籍的信息查询。
⑥系统维护:如数据安全管理(含备份与恢复)、操作员管理、权限设置等;
书籍表(books):用于存储所有书籍的信息,包括书籍名称、作者、出版社、ISBN号码、库存量、进价、售价等。
字段 类型 描述
id int 书籍ID,自增长主键
name varchar(255) 书籍名称
author varchar(255) 作者
publisher varchar(255) 出版社
isbn varchar(20) ISBN号码
stock int 库存量
cost decimal(10,2) 进价
price decimal(10,2) 售价
进货单表(purchase_orders):用于存储所有进货单的信息,包括进货单号、供应商、进货日期等。
字段 类型 描述
id int 进货单ID,自增长主键
order_no varchar(20) 进货单号
supplier varchar(255) 供应商
purchase_date datetime 进货日期
进货明细表(purchase_order_items):用于存储每个进货单中书籍的明细信息,包括书籍ID、进货单ID、数量、进价等。
字段 类型 描述
id int 进货明细ID,自增长主键
purchase_order_id int 进货单ID,外键到进货单表
book_id int 书籍ID,外键到书籍表
quantity int 进货数量
cost decimal(10,2) 进货单价
退货单表(return_orders):用于存储所有退货单的信息,包括退货单号、顾客信息、退货日期等。
字段 类型 描述
id int 退货单ID,自增长主键
order_no varchar(20) 退货单号
customer_name varchar(255) 顾客姓名
customer_phone varchar(20) 顾客电话
return_date datetime 退货日期
退货明细表(return_order_items):用于存储每个退货单中书籍的明细信息,包括书籍ID、退货单ID、数量、退货单价等。
字段 类型 描述
id int 退货明细ID,自增长主键
return_order_id int 退货单ID,外键到退货单表
book_id int 书籍ID,外键到书籍表
quantity int 退货数量
price decimal(10,2) 退货单价
销售单表(sales_orders):用于存储所有销售单的信息,包括销售单号、顾客信息、销售日期等。
字段 类型 描述
id int 销售单ID,自增长主键
order_no varchar(20) 销售单号
customer_name varchar(255) 顾客姓名
customer_phone varchar(20) 顾客电话
sale_date datetime 销售日期
销售明细表(sales_order_items):用于存储每个销售单中书籍的明细信息,包括书籍ID、销售单ID、数量、销售单价等。
字段 类型 描述
id int 销售明细ID,自增长主键
sales_order_id int 销售单ID,外键到销售单表
book_id int 书籍ID,外键到书籍表
quantity int 销售数量
price decimal(10,2) 销售单价
统计表(statistics):用于存储各种统计报表的信息,包括统计日期、销售总额、销售总量等。
字段 类型 描述
id int 统计ID,自增长主键
stat_date date 统计日期
total_sales decimal(10,2) 销售总额
total_quantity int 销售总量
操作员表(operators):用于存储系统的操作员信息,包括用户名、密码等。
字段 类型 描述
id int 操作员ID,自增长主键
username varchar(255) 用户名
password varchar(255) 密码
权限表(permissions):用于存储系统的操作员权限信息,包括操作员ID、权限等级等。
字段 类型 描述
id int 权限ID,自增长主键
operator_id int 操作员ID,外键到操作员表
level int 权限等级
下载之后 通过此处即可查看是否下载完成
2 在配置文件里面 增加配置数据源参数
spring:
jpa:
hibernate:
ddl-auto: update
show-sql: true
我可以提供以下实现方案:
首先,需要根据需求设计相应的数据库表,例如:
在数据库中创建相应的表,例如:
CREATE TABLE book (
book_id INT AUTO_INCREMENT PRIMARY KEY,
book_name VARCHAR(255),
author VARCHAR(255),
publisher VARCHAR(255),
price DECIMAL(10, 2)
);
CREATE TABLE supplier (
supplier_id INT AUTO_INCREMENT PRIMARY KEY,
supplier_name VARCHAR(255),
contact VARCHAR(255)
);
CREATE TABLE purchase (
purchase_id INT AUTO_INCREMENT PRIMARY KEY,
purchase_date DATE,
book_id INT,
purchase_quantity INT,
purchase_price DECIMAL(10, 2),
supplier_id INT,
FOREIGN KEY (book_id) REFERENCES book(book_id),
FOREIGN KEY (supplier_id) REFERENCES supplier(supplier_id)
);
CREATE TABLE sale (
sale_id INT AUTO_INCREMENT PRIMARY KEY,
sale_date DATE,
book_id INT,
sale_quantity INT,
sale_price DECIMAL(10, 2),
FOREIGN KEY (book_id) REFERENCES book(book_id)
);
CREATE TABLE stock (
book_id INT,
stock_quantity INT,
FOREIGN KEY (book_id) REFERENCES book(book_id)
);
进货功能需要根据库存量和销售情况确定进货数量以及选择供应商,同时需要生成进货单并修改库存量和添加进货信息到进货库中。
(1)展示所有图书信息供用户选择,并输入进货数量。
SELECT book_id, book_name, author, price FROM book;
INSERT INTO purchase (purchase_date, book_id, purchase_quantity) VALUES ('2021-09-01', book_id, purchase_quantity);
(2)根据库存量和销售情况确定进货数量,并显示建议进货数量。
可以通过以下语句获取当前库存量:
SELECT stock_quantity FROM stock WHERE book_id = book_id;
可以通过以下语句获取最近一个月的销售量:
SELECT SUM(sale_quantity) FROM sale WHERE sale_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH) AND book_id = book_id;
结合当前库存量和最近一个月的销售量,可以确定建议进货数量。
(3)选择供应商,并将供应商信息插入进货单中。
SELECT supplier_id, supplier_name, contact FROM supplier;
UPDATE purchase SET supplier_id = supplier_id WHERE purchase_id = purchase_id;
(4)生成进货单并修改库存量和添加进货信息到进货库中。
INSERT INTO purchase (purchase_date, book_id, purchase_quantity, purchase_price, supplier_id) VALUES ('2021-09-01', book_id, purchase_quantity, purchase_price, supplier_id);
UPDATE stock SET stock_quantity = stock_quantity + purchase_quantity WHERE book_id = book_id;
查询功能需要实现根据图书名称、作者、ISBN、出版社等条件进行查询,并可以展示图书信息、库存量、销售量等信息。
可以通过以下语句实现查询功能:
SELECT b.book_name, b.author, b.publisher, b.price, s.stock_quantity, SUM(sale_quantity) AS total_sales
FROM book b
JOIN stock s ON b.book_id = s.book_id
LEFT JOIN sale ON b.book_id = sale.book_id
WHERE b.book_name LIKE '%search_text%' OR b.author LIKE '%search_text%' OR b.ISBN LIKE '%search_text%' OR b.publisher LIKE '%search_text%'
GROUP BY b.book_id;
其中,search_text需要根据用户输入的查询条件进行替换。
统计功能需要实现根据时间范围进行销售额、进货额、销售数量、进货数量的统计,并可以按月份或周进行汇总展示。
可以通过以下语句实现统计功能:
-- 按月份统计销售额
SELECT DATE_FORMAT(sale_date, '%Y-%m') AS month, SUM(sale_quantity * sale_price) AS sales
FROM sale
WHERE sale_date >= start_date AND sale_date <= end_date
GROUP BY MONTH(sale_date), YEAR(sale_date);
-- 按周统计进货额
SELECT DATE_FORMAT(purchase_date, '%Y-%u') AS week, SUM(purchase_quantity * purchase_price) AS purchases
FROM purchase
WHERE purchase_date >= start_date AND purchase_date <= end_date
GROUP BY YEARWEEK(purchase_date, 1);
-- 按月份统计销售数量
SELECT DATE_FORMAT(sale_date, '%Y-%m') AS month, SUM(sale_quantity) AS sales_quantity
FROM sale
WHERE sale_date >= start_date AND sale_date <= end_date
GROUP BY MONTH(sale_date), YEAR(sale_date);
-- 按周统计进货数量
SELECT DATE_FORMAT(purchase_date, '%Y-%u') AS week, SUM(purchase_quantity) AS purchase_quantity
FROM purchase
WHERE purchase_date >= start_date AND purchase_date <= end_date
GROUP BY YEARWEEK(purchase_date, 1);
其中,start_date和end_date需要根据用户输入的时间范围进行替换。
系统维护功能需要实现数据库备份、恢复、密码重置等功能。
备份功能可以通过以下命令进行备份:
mysqldump -h localhost -u root -p bookdb > /path/to/backup.sql
恢复功能可以通过以下命令进行恢复:
mysql -h localhost -u root -p bookdb < /path/to/backup.sql
密码重置可以通过以下命令进行重置:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');