数据库-MySQL 实战项目——书店图书进销存管理系统数据库设计与实现(附源码)

一、前言

        该项目非常适合MySQL入门学习的小伙伴,博主提供了源码、数据和一些查询语句,供大家学习和参考,代码和表设计有什么不恰当还请各位大佬多多指点。

所需环境

  1.  MySQL可视化工具:navicat;
  2.  数据库:MySql 5.7/8.0等版本均可;

需求: 

        1:每个书店有多家供应商,每家供应商给多个书店供货。

        2:每个书店聘用多名员工,每个员工只属于一个书店每个书店存放多本图书,多本图书存放在一家书店。

        4: 每本图书可以被任何会员购买,一名会员可以购买任意一本图书。

 备注:

        书店包含下列属性: 编号,地址,书店名字,老板电话;

        员工包含下列属性: 身份证,名字,性别,年龄;

        图书包含下列属性: 编号,书名,价格,库存量;

        会员包含下列属性: 编号,姓名,电话,积分;

        关于某供应商给书店供货要描述供货日期;

        关于书店聘用员工要描述聘用日期:

        关于会员购买图书需要描述购买数量;

        关于书店存放图书需要描述存放位置。

二、E-R图

1248276d26ad43a4838669cdeb169f48.png

三、关系模式

        供应商:(供应商编号,供应商地址,供应商联系人,供应商联系电话,供应商名字,供应商备注)。

        书店:(书店编号,书店地址,书店名字,书店老板电话)

        员工:(身份证,员工名字,员工性别,员工年龄,书店编号,聘用时期)

        图书:(图书编号,书名,价格,库存量,书店编号,存放位置)

        会员:(会员编号,会员姓名,会员电话,积分)。

        供应信息:(供应商编号,书店编号,供应时间)

        购买信息:(会员编号,图书编号,购买数量)

 备注:

        下划线为主键,红色字为外键;

四、数据表的设计

表1 供应商

字段

数据类型

长度

备注

 

供应商编号

varchar

50

主键

 

供应商地址

varchar

50

 

 

供应商联系人

varchar

50

 

 

供应商联系电话

varchar

50

 

 

供应商名字

varchar

50

Not null

 

供应商备注

varchar

50

 

 

 表2 书店

字段

数据类型

长度

备注

 

书店编号

varchar

50

主键

 

书店地址

varchar

50

 

 

书店名字

varchar

50

Not null

 

书店老板电话

Varchar

50

 

 

表3 员工

字段

数据类型

长度

备注

 

身份证

varchar

20

主键

 

员工性别

varchar

50

 

 

员工年龄

Int

3

 

 

员工名字

varchar

50

Not null

 

书店编号

varchar

50

外键

 

聘用时间

date

 

Not null

 

表4 图书

字段

数据类型

长度

备注

 

图书编号

varchar

50

主键

 

书名

varchar

50

Not null

 

价格

float

8

 

 

库存量

int

8

 

 

书店编号

varchar

50

外键

 

存放位置

varchar

50

Not null

 

表5 会员

字段

数据类型

长度

备注

 

会员编号

varchar

50

主键

 

会员姓名

varchar

50

Not null

 

会员电话

varchar

50

 

 

积分

int

50

 

 

表6 供应信息

字段

数据类型

长度

备注

 

供应商编号

varchar

50

主键

 

书店编号

varchar

50

主键

 

供货时间

date

 

Not null

 

表7 购买信息

字段

数据类型

长度

备注

 

图书编号

varchar

50

主键

 

会员编号

varchar

50

主键

 

购买数量

int

8

Not null

 

五、创建数据库

Create database 书店图书进销存管理系统 character set utf8 collate utf8_general_ci
-- 在新建表前选择数据库
Use 书店图书进销存管理系统

创建各实体表:

1. 供应商

create table 供应商
(供应商编号 VARCHAR(50) PRIMARY KEY,供应商地址 VARCHAR(50),供应商联系人 VARCHAR(50),供应商联系电话 VARCHAR(50),供应商名字 VARCHAR(50) NOT NULL,供应商备注 VARCHAR(50)
)

2.书店

CREATE TABLE 书店
(书店编号 varchar(50) PRIMARY KEY,书店地址 VARCHAR(50),书店名字 VARCHAR(50) NOT NULL,书店老板电话 VARCHAR(50)
)

3.员工

CREATE TABLE 员工
(身份证 VARCHAR(50) PRIMARY KEY,员工姓名 VARCHAR(50) NOT NULL,员工性别 VARCHAR(50),员工年龄 int(3),书店编号 VARCHAR(50),聘用时间 DATE NOT NULL,CONSTRAINT FK书店编号 FOREIGN KEY(书店编号) REFERENCES 书店(书店编号)
)

4.图书

CREATE TABLE 图书
(图书编号 VARCHAR(50) PRIMARY KEY,书名 VARCHAR(50) NOT NULL,价格 FLOAT(8),库存量 INT(8),书店编号 VARCHAR(50),存放位置 VARCHAR(50) NOT NULL,CONSTRAINT FK_书店编号 FOREIGN KEY (书店编号) REFERENCES 书店(书店编号)
)

5.会员

CREATE TABLE 会员
(会员编号 VARCHAR(50) PRIMARY KEY,会员姓名 VARCHAR(50) NOT NULL,会员电话 VARCHAR(50),积分 INT(5)
)

6. 供应信息

CREATE TABLE 供应信息
(供应商编号 VARCHAR(50),书店编号 VARCHAR(50),供应时间 DATE NOT NULL,PRIMARY KEY(供应商编号,书店编号)
)

7. 购买信息

CREATE TABLE 购买信息
(图书编号 VARCHAR(50),会员编号 VARCHAR(50),购买数量 INT(8) NOT NULL,PRIMARY KEY(图书编号,会员编号)
)

插入数据:

1. 供应商

INSERT INTO 供应商 VALUES ('G001','春熙路12号','李明','13123451234','邮电出版社','优等')
INSERT INTO 供应商 VALUES ('G002','天府路85号','薛鹏','15198762347','工业出版社','良好')
INSERT INTO 供应商 VALUES ('G003','太升路35号','林波','15823140987','机械出版社','良好')
INSERT INTO 供应商 VALUES ('G004','民航路94号','苏珊','18078651234','民航出版社','优等')
INSERT INTO 供应商 VALUES ('G005','芙蓉路53号','林达','18698704563','商务出版社','良好')
INSERT INTO 供应商 VALUES ('G006','天府三街6号','小野','19382069330','三街出版社','优等')
INSERT INTO 供应商 VALUES ('G007','十三区43号','成龙','17865989988','符咒出版社','优等')
INSERT INTO 供应商 VALUES ('G008','成华大道66号','谭警官','16666666666','成华出版社','良好')
INSERT INTO 供应商 VALUES ('G009','天益街83号','橙汁','18765498596','橙汁出版社','优等')
INSERT INTO 供应商 VALUES ('G0010','二仙桥23号','二大爷','15465989586','大爷版社','优等')

2.书店

INSERT INTO 书店 VALUES ('S001', '长城路5号', '求实书店', '13612345678')
INSERT INTO 书店 VALUES ('S002', '长江路64号', '上进书店', '13703456784')
INSERT INTO 书店 VALUES ('S003', '黄河路93号', '梦想书店', '13882346743')
INSERT INTO 书店 VALUES ('S004', '泰山路59路', '书虫书店', '13998762345')
INSERT INTO 书店 VALUES ('S005', '青城山路23号', '创业书店', '13976543214')
INSERT INTO 书店 VALUES ('S006', '春熙路13号', '邮电书店', '13598657412')
INSERT INTO 书店 VALUES ('S007', '天府路86号', '工业书店', '15146523698')
INSERT INTO 书店 VALUES ('S008', '太升路36号', '机械书店', '14756329833')
INSERT INTO 书店 VALUES ('S009', '民航路95号', '民航书店', '16654233322')
INSERT INTO 书店 VALUES ('S010', '芙蓉路54号', '商务书店', '13322336655')

3.员工

INSERT INTO 员工 VALUES ('511001199001011234', '张三', '男', 33, 'S001', '2009-07-01')
INSERT INTO 员工 VALUES ('510102199102032345', '李四', '男', 32, 'S002', '2008-03-01')
INSERT INTO 员工 VALUES ('510101199203033456', '王丽', '女', 31, 'S003', '2007-04-01')
INSERT INTO 员工 VALUES ('510101199303033456', '王宝玉', '男', 30, 'S004', '2007-04-01')
INSERT INTO 员工 VALUES ('510104199408095678', '秦松', '男', 29, 'S005', '2006-08-01')
INSERT INTO 员工 VALUES ('510001199105079965', '丁真', '男', 32, 'S006', '2010-06-28')
INSERT INTO 员工 VALUES ('510011199304261355', '李明', '男', 30, 'S007', '2009-01-15')
INSERT INTO 员工 VALUES ('510010199512140932', '李华', '女', 28, 'S008', '2012-05-29')
INSERT INTO 员工 VALUES ('510110199811230623', '王明', '男', 25, 'S009', '2013-04-30')
INSERT INTO 员工 VALUES ('510023199407112556', '林琬茹', '女', 29, 'S010', '2009-09-01')

4.图书

INSERT INTO 图书 VALUES ('T001', '围城', 58, 31, 'S001', '一楼')
INSERT INTO 图书 VALUES ('T002', '边城', 46, 12, 'S002', '二楼')
INSERT INTO 图书 VALUES ('T003', '平凡的世界', 32, 87, 'S003', '三楼')
INSERT INTO 图书 VALUES ('T004', '撒野', 36, 67, 'S004', '二楼')
INSERT INTO 图书 VALUES ('T005', '人间失格', 28, 28, 'S005', '二楼')
INSERT INTO 图书 VALUES ('T006', '狂人日记', 99, 16, 'S006', '三楼')
INSERT INTO 图书 VALUES ('T007', '乌合之众', 32, 86, 'S007', '一楼')
INSERT INTO 图书 VALUES ('T008', '自卑与超越', 42, 66, 'S008', '二楼')
INSERT INTO 图书 VALUES ('T009', '人生', 66, 74, 'S009', '三楼')
INSERT INTO 图书 VALUES ('T010', '活着', 78, 33, 'S010', '一楼')

5.会员

INSERT INTO 会员 VALUES ('V001', '林丹', '17109872345', 654)
INSERT INTO 会员 VALUES ('V002', '十三', '17209874321', 1368)
INSERT INTO 会员 VALUES ('V003', '陈羽', '17308763456', 69)
INSERT INTO 会员 VALUES ('V004', '杨帆', '17408765467', 743)
INSERT INTO 会员 VALUES ('V005', '小白', '17567431298', 475)
INSERT INTO 会员 VALUES ('V006', '小黑', '17632684456', 216)
INSERT INTO 会员 VALUES ('V007', '黑大帅', '17698978445', 448)
INSERT INTO 会员 VALUES ('V008', '潇洒哥', '17544748596', 666)
INSERT INTO 会员 VALUES ('V009', '格林', '17488932254', 1473)
INSERT INTO 会员 VALUES ('V010', '路遥', '17588141121', 187)

6. 供应信息

INSERT INTO 供应信息 VALUES ('G001', 'S001', '2020-04-21')
INSERT INTO 供应信息 VALUES ('G002', 'S002', '2020-04-22')
INSERT INTO 供应信息 VALUES ('G003', 'S003', '2020-04-23')
INSERT INTO 供应信息 VALUES ('G004', 'S004', '2020-04-20')
INSERT INTO 供应信息 VALUES ('G005', 'S005', '2020-04-21')
INSERT INTO 供应信息 VALUES ('G006', 'S006', '2020-04-22')
INSERT INTO 供应信息 VALUES ('G007', 'S007', '2020-04-22')
INSERT INTO 供应信息 VALUES ('G008', 'S008', '2020-04-21')
INSERT INTO 供应信息 VALUES ('G009', 'S009', '2020-04-24')
INSERT INTO 供应信息 VALUES ('G010', 'S010', '2020-04-23')

7. 购买信息

INSERT INTO 购买信息 VALUES ('T001', 'V010', 2)
INSERT INTO 购买信息 VALUES ('T002', 'V009', 4)
INSERT INTO 购买信息 VALUES ('T003', 'V008', 5)
INSERT INTO 购买信息 VALUES ('T004', 'V007', 2)
INSERT INTO 购买信息 VALUES ('T005', 'V006', 1)
INSERT INTO 购买信息 VALUES ('T006', 'V005', 6)
INSERT INTO 购买信息 VALUES ('T007', 'V004', 7)
INSERT INTO 购买信息 VALUES ('T008', 'V003', 3)
INSERT INTO 购买信息 VALUES ('T009', 'V002', 2)
INSERT INTO 购买信息 VALUES ('T010', 'V001', 1)

 六、主要查询命令

 

  1. 查询所有书店地址信息结果

    select 书店地址 from 书店

    0a678663b52c4fcea76fd4a777683539.png

  2. 查询四月所有供应商中哪些供应过书籍。(查看供应商编号)

    select DISTINCT 供应商编号 from 供应信息 where 供应时间 like '2020-04%'

    8182ef8443e14eee82ab6898ddc0d34c.png

  3. 查询所有书店中年龄最大的男员工姓名。

    select 员工姓名 from 员工 where 员工性别 = '男' ORDER BY 员工年龄 desc limit 1

    a4bcc3d454854665b6b08e2a893d09db.png

  4. 查询书店老板电话为139开头的书店名字。

    select 书店名字 from 书店 where 书店老板电话 like '139%'

    f8cd4e04dedc4045aea3ddc68ae6712d.png

  5. 查询价格低于平均价格的书籍名字。

    SELECT 书名 FROM 图书 WHERE 价格 < (SELECT AVG(价格) FROM 图书)

    54fedc47488245259a24c2df095e5c2f.png

  6. 查询购买书籍数量最多的会员名字。

    SELECT 会员姓名 FROM 会员 WHERE 会员编号 = (select 会员编号 from 购买信息 GROUP BY 会员编号 ORDER BY(购买数量) desc limit 1)

    d26fb54425db4e77a7248f06b6b1a3b6.png

  7. 查询员工人数最少的书店所在地址。

    select 书店地址 from 书店 where 书店编号 = (select 书店编号 from 员工 GROUP BY 书店编号 ORDER BY count(*) asc limit 1)

    a105774eb6b04938ac475d865a05069c.png

  8. 查询优等供应商给哪些书店供货过,并按照供货时间从早到晚排序。

    select * from 供应信息 where 供应商编号 in (select 供应商编号 from 供应商 where 供应商备注 = '优等') ORDER BY 供应时间

    aa6b908bcaa5496f9be501385cbf3d33.png

  9. 查询价格最贵的三种图书,存放在哪些书店里。(查看书店名字)。

    select 书店名字 from 书店 where 书店编号 = (select 书店编号 from 图书 ORDER BY 价格 desc limit 1) or 书店编号 = (select 书店编号 from 图书 ORDER BY 价格 desc limit 1,1)or 书店编号 = (select 书店编号 from 图书 ORDER BY 价格 desc limit 2,1)

    9fc657a877ce47fc930218bd5665fad0.png

  10. 查询人生这本书,被哪些会员购买过。

    select 会员姓名 from 会员 where 会员编号 in (select 会员编号 from 购买信息 where 图书编号 in (select 图书编号 from 图书 where 书名 = '人生'))

    f5f4ad3756e249e4843b2f5fb9349980.png

七、答疑解惑 

        代码有问题或需要其他的查询语句,都可以随时评论留言或联系博主。

        还多请各位小伙伴多多点赞支持,你们的支持是我最大的动力。

博主VX:18884281851

谢谢各位的支持~~

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/370246.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL:如何在已经使用的数据表中增加一个自动递增的字段

目录 一、需求 二、实现步骤 &#xff08;一&#xff09;数据表students &#xff08;二&#xff09;添加整型字段 &#xff08;三&#xff09;更新SID字段的值 1、使用用户定义的变量和JOIN操作 2、用SET语句和rownum变量 &#xff08;1&#xff09;操作方法 &#x…

使用antd的<Form/>组件获取富文本编辑器输入的数据

前端开发中&#xff0c;嵌入富文本编辑器时&#xff0c;可以通过富文本编辑器自身的事件处理函数将数据传输给后端。有时候&#xff0c;场景稍微复杂点&#xff0c;比如一个输入页面除了要保存富文本编辑器的内容到后端&#xff0c;可能还有一些其他输入组件获取到的数据也一并…

MySQL篇三:数据类型

文章目录 前言1. 数值类型1.1 tinyint类型1.2 bit类型1.3 小数类型1.3.1 float1.3.2 decimal 2. 字符串类型2.1 char2.2 varchar2.3 char和varchar比较 3. 日期类型4. enum和set 前言 数据类型分类&#xff1a; 1. 数值类型 1.1 tinyint类型 在MySQL中&#xff0c;整型可以指…

如何第一次从零上传项目到GitLab

嗨&#xff0c;我是兰若&#xff0c;今天想给大家说下&#xff0c;如何上传一个完整的项目到与LDAP集成的GitLab&#xff0c;也就是说这个项目之前是不在git上面的&#xff0c;这是第一次上传&#xff0c;这样上传上去之后&#xff0c;其他小伙伴就可以根据你这个项目的git地址…

自动批量将阿里云盘文件发布成WordPress文章脚本源码(以RiPro主题为例含付费信息下载地址SEO等自动设置)源码

背景 很多资源下载站&#xff0c;付费资源下载站&#xff0c;付费内容查看等都可以用WordPress站点发布内容&#xff0c;这些站点一般会基于一个主题&#xff0c;付费信息作为文章附属的信息发布&#xff0c;底层存储在WP表里&#xff0c;比如日主题&#xff0c;子比主题等。 …

2-5 softmax 回归的简洁实现

我们发现通过深度学习框架的高级API能够使实现线性回归变得更加容易。 同样&#xff0c;通过深度学习框架的高级API也能更方便地实现softmax回归模型。 本节如在上节中一样&#xff0c; 继续使用Fashion-MNIST数据集&#xff0c;并保持批量大小为256。 import torch from torc…

【基础篇】第4章 Elasticsearch 查询与过滤

在Elasticsearch的世界里&#xff0c;高效地从海量数据中检索出所需信息是其核心价值所在。本章将深入解析查询与过滤的机制&#xff0c;从基础查询到复合查询&#xff0c;再到全文搜索与分析器的定制&#xff0c;为你揭开数据检索的神秘面纱。 4.1 基本查询 4.1.1 Match查询…

多语言版在线出租车预订完整源码+用户应用程序+管理员 Laravel 面板+ 司机应用程序最新版源码

源码带PHP后台客户端源码 Flutter 是 Google 开发的一款开源移动应用开发 SDK。它用于开发 Android 和 iOS 应用&#xff0c;也是为 Google Fuchsia 创建应用的主要方法。Flutter 小部件整合了所有关键的平台差异&#xff0c;例如滚动、导航、图标和字体&#xff0c;可在 iOS 和…

如何在前端网页实现live2d的动态效果

React如何在前端网页实现live2d的动态效果 业务需求&#xff1a; 因为公司需要做机器人相关的业务&#xff0c;主要是聊天形式的内容&#xff0c;所以需要一个虚拟的卡通形象。而且为了更直观的展示用户和机器人对话的状态&#xff0c;该live2d动画的嘴型需要根据播放的内容来…

昇思25天学习打卡营第08天 | 模型训练

昇思25天学习打卡营第08天 | 模型训练 文章目录 昇思25天学习打卡营第08天 | 模型训练超参数损失函数优化器优化过程 训练与评估总结打卡 模型训练一般遵循四个步骤&#xff1a; 构建数据集定义神经网络模型定义超参数、损失函数和优化器输入数据集进行训练和评估 构建数据集和…

【Excel、RStudio计算T检测的具体操作步骤】

目录 一、基础知识1.1 显著性检验1.2 等方差T检验、异方差T检验1.3 单尾p、双尾p1.3.1 检验目的不同1.3.2 用法不同1.3.3 如何选择 二、Excel2.1 统计分析工具2.1.1 添加统计分析工具2.1.2 数据分析 2.2 公式 -> 插入函数 -> T.TEST 三、RStudio 一、基础知识 参考: 1.…

无人机运营合格证及无人机驾驶员合格证(AOPA)技术详解

无人机运营合格证及无人机驾驶员合格证&#xff08;AOPA&#xff09;技术详解如下&#xff1a; 一、无人机运营合格证 无人机运营合格证是无人机运营企业或个人必须获得的证书&#xff0c;以确保无人机在运营过程中符合相关法规和标准。对于无人机运营合格证的具体要求和申请…

【React】React18 Hooks之useState

目录 useState案例1&#xff08;直接修改状态&#xff09;案例2&#xff08;函数式更新&#xff09;案例3&#xff08;受控表单绑定&#xff09;注意事项1&#xff1a;set函数不会改变正在运行的代码的状态注意事项2&#xff1a;set函数自动批量处理注意事项3&#xff1a;在下次…

【反悔堆 优先队列 临项交换 决策包容性】630. 课程表 III

本文涉及知识点 贪心 反悔堆 优先队列 临项交换 Leetcode630. 课程表 III 这里有 n 门不同的在线课程&#xff0c;按从 1 到 n 编号。给你一个数组 courses &#xff0c;其中 courses[i] [durationi, lastDayi] 表示第 i 门课将会 持续 上 durationi 天课&#xff0c;并且必…

E4.【C语言】练习:while和getchar的理解

#include <stdio.h> int main() {int ch 0;while ((ch getchar()) ! EOF){if (ch < 0 || ch>9)continue;putchar(ch);}return 0; } 理解上述代码 0-->48 9-->57 if行判断是否为数字&#xff0c;打印数字&#xff0c;不打印非数字

Selenium 切换 frame/iframe

环境&#xff1a; Python 3.8 selenium3.141.0 urllib31.26.19说明&#xff1a; driver.switch_to.frame() # 将当前定位的主体切换为frame/iframe表单的内嵌页面中 driver.switch_to.default_content() # 跳回最外层的页面# 判断元素是否在 frame/ifame 中 # 126 邮箱为例 # …

k8s公网集群安装(1.23.0)

网上搜到的公网搭建k8s都不太一致, 要么说的太复杂, 要么镜像无法下载, 所以写了一个简洁版,小白也能一次搭建成功 使用的都是centos7,k8s版本为1.23.0 使用二台机器搭建的, 三台也是一样的思路1.所有节点分别设置对应主机名 hostnamectl set-hostname master hostnamectl set…

javaSwing图书管理系统

一、 引言 图书管理系统是一个用于图书馆或书店管理图书信息、借阅记录和读者信息的应用程序。本系统使用Java Swing框架进行开发&#xff0c;提供直观的用户界面&#xff0c;方便图书馆管理员或书店工作人员对图书信息进行管理。以下是系统的设计、功能和实现的详细报告。 二…

Matplotlib Artist 1 概览

Matplotlib API中有三层 matplotlib.backend_bases.FigureCanvas&#xff1a;绘制区域matplotlib.backend_bases.Renderer&#xff1a;控制如何在FigureCanvas上绘制matplotlib.artist.Artist&#xff1a;控制render如何进行绘制 开发者95%的时间都是在使用Artist。Artist有两…

【C语言】自定义类型:联合和枚举

前言 前面我们学习了一种自定义类型&#xff0c;结构体&#xff0c;现在我们学习另外两种自定义类型&#xff0c;联合 和 枚举。 目录 一、联合体 1. 联合体类型的声明 2. 联合体的特点 3. 相同成员联合体和结构体对比 4. 联合体大小的计算 5. 用联合体判断当前机…