Mysql实现数据库开发设计

图书销售管理系统的设计与实现

调查一个书店的图书销售业务,设计的图书销售系统主要包括进货、退货、统计、销售、查询功能。

①进货:根据某种书籍的库存量及销售情况确定进货数量,根据供应商报价选择供应商。输出一份进货单并自动修改库存量,把本次进货的信息添加到进货库中。

②退货:顾客把已买的书籍退还给书店。输出一份退货单并自动修改库存量,把本次退货的信息添加到退货库中。

③统计:根据销售情况输出统计的报表。一般内容为每月的销售总额、销售总量及排行榜等信息。

④销售:输入顾客要买书籍的信息,自动显示此书的库存量,如果可以销售,打印销售单并修改库存,同时把此次销售的有关信息添加到日销售库中。

⑤查询:允许用户设置条件进行进货、退货、统计、销售和库存书籍的信息查询。

⑥系统维护:如数据安全管理(含备份与恢复)、操作员管理、权限设置等;

书籍表(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 权限等级

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/378131
  • 除此之外, 这篇博客: SpringBoot 六 数据库连接池配置中的 连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。 [1] 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    在这里插入图片描述
    下载之后 通过此处即可查看是否下载完成

    2 在配置文件里面 增加配置数据源参数

    spring:
    jpa:
    hibernate:
    ddl-auto: update
    show-sql: true

  • 以下回答来自chatgpt:

    我可以提供以下实现方案:

    1. 数据库设计

    首先,需要根据需求设计相应的数据库表,例如:

    • book 表:包括图书编号、图书名称、作者、出版社、价格等字段。
    • supplier 表:包括供应商编号、供应商名称、联系方式等字段。
    • purchase 表:包括进货单号、进货日期、图书编号、进货数量、进货单价、供应商编号等字段。
    • sale 表:包括销售单号、销售日期、图书编号、销售数量、销售单价等字段。
    • stock 表:包括图书编号、库存数量等字段。

    在数据库中创建相应的表,例如:

    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. 进货功能实现

    进货功能需要根据库存量和销售情况确定进货数量以及选择供应商,同时需要生成进货单并修改库存量和添加进货信息到进货库中。

    (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;
    
    1. 查询功能实现

    查询功能需要实现根据图书名称、作者、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需要根据用户输入的查询条件进行替换。

    1. 统计功能实现

    统计功能需要实现根据时间范围进行销售额、进货额、销售数量、进货数量的统计,并可以按月份或周进行汇总展示。

    可以通过以下语句实现统计功能:

    -- 按月份统计销售额
    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需要根据用户输入的时间范围进行替换。

    1. 系统维护功能实现

    系统维护功能需要实现数据库备份、恢复、密码重置等功能。

    备份功能可以通过以下命令进行备份:

    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');
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^