前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

作者头像
全栈程序员站长
发布2022-08-23 15:01:05
3.5K0
发布2022-08-23 15:01:05
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

文末附带数据库文件及数据库日志文件地址。

一. 需求分析

1、背景

(1) 待开发的系统名称:图书进货、销售管理系统

(2) 开发者:FriggaAZ

(3) 用户:书店管理人员

(4) 开发环境:

① 操作系统:Windows 10 专业版 Build17682

② 数据库:SQL Server 2017 Developer

2、系统总体功能分析需求

(1) 某书店图书进货、销售管理系统

(2) 实现图书类别、出版社、图书、仓库信息的管理;

(3)实现进货、入库管理;

(4)实现销售、出库管理;

(5)创建存储过程查询某段时间内各种图书的进货和销售情况;

(6)创建视图查询各类图书的库存总数;

(7)创建触发器当图书入库时自动修改相应图书的总量和存放仓库中该图书的数量;

(8)要求一单可以处理多种图书(比如销售设置销售单及其明细两个表);

建立数据库相关表之间的参照完整性约束。

二. 概念结构设计

1、概念结构设计步骤

① 进行局部E-R图设计。

② 进行视图的集成。

2、局部E-R图

① 出版社信息表

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图1 出版社信息E-R图

② 进货订单

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图2 进货订单E-R图

③ 进货详情单

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图3 进货详情的E-R图

④ 库存信息表

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图4 库存的E-R图

⑤ 图书类别表

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图5 图书类别的E-R图

⑥ 图书信息表

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图6 图书信息的E-R图

⑦ 销售订单

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图7 销售订单的E-R图

⑧ 销售订单详情表

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图8 销售详情表的E-R图

3、 整体E-R图

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

4、 物理结构设计

(1) 出版社信息表(出版社,出版社地址,电话,联系人)

表1 出版社信息表

字段名

数据类型

字段大小

是否允许空

备注

出版社

Char

20

N

主键

出版社地址

Char

20

Y

电话

Char

20

Y

联系人

Char

20

Y

表2 进货订单表

字段名

数据类型

字段大小

是否允许空

备注

进货单号

Char

20

N

主键

进货者

Char

20

Y

备注

Char

20

Y

表3 进货详情表

字段名

数据类型

字段大小

是否允许空

备注

进货项号

Char

20

N

主键

进货单号

Char

20

N

外键

图书号

Char

20

N

外键

图书数量

Char

20

N

进货日期

Date

N

进货价格

Char

20

N

表4 库存信息表

字段名

数据类型

字段大小

是否允许空

备注

图书号

Char

20

N

主键

图书数量

Char

20

N

入库信息

Char

20

N

出库信息

Char

20

N

表5 图书类别表

字段名

数据类型

字段大小

是否允许空

备注

类别号

Char

20

N

主键

类别

Char

20

Y

表6 图书信息表

字段名

数据类型

字段大小

是否允许空

备注

图书号

Char

20

N

主键

图书名

Char

20

N

出版社

Char

20

N

外键

类别号

Char

20

N

外键

作者

Char

20

Y

图7 销售订单表

字段名

数据类型

字段大小

是否允许空

备注

销售单号

Char

20

N

主键

购买者

Char

20

Y

备注

Char

20

Y

图8 销售详情表

字段名

数据类型

字段大小

是否允许空

备注

销售项号

Char

20

N

主键

销售单号

Char

20

N

外键

图书号

Char

20

N

外键

图书数量

Char

20

N

销售日期

Date

N

销售价格

Char

20

N

三. 数据库的实施

1、创建数据库

代码语言:javascript
复制
CREATE DATABASE 图书系统

2、创建出版社信息表

代码语言:javascript
复制
CREATE TABLE 出版社信息表(

出版社 char(20)primary key,

出版社地址 char(20),

电话 char(20),

联系人 char(20))

3、创建图书类别表

代码语言:javascript
复制
CREATE TABLE 图书类别表(

类别号 char(20) primary key,

类别 char(20),

类别信息 char(20),

备注 char(20))

4、创建图书信息表

代码语言:javascript
复制
图书号 char(20) primary key,

图书名 char(20),

出版社 char(20)CONSTRAINT FK_1 foreign key references 出版社信息表(出版社),

类别号 char(20)CONSTRAINT FK_2 foreign key references 图书类别表(类别号),

作者 char(20))

5、创建进货订单

代码语言:javascript
复制
CREATE TABLE 进货订单(

进货单号 char(20) primary key,

进货者 char(20),

备注 char(20))

6、创建销售订单

代码语言:javascript
复制
CREATE TABLE 销售订单(

销售单号 char(20) primary key,

购买者 char(20)

)

7、创建进货详情表

代码语言:javascript
复制
CREATE TABLE 进货详情表(

进货项号 char(20) primary key,

进货单号 char(20)CONSTRAINT FK_3 foreign key references 进货订单(进货单号),

图书号 char(20)CONSTRAINT FK_4 foreign key references 图书信息表(图书号) ,

图书数量 char(20),

进货日期 date,

进货价格 char(20))

8、创建销售详情表

代码语言:javascript
复制
销售项号 char(20) primary key,

销售单号 char(20)CONSTRAINT FK_5 foreign key references 销售订单(销售单号),

图书号 char(20)CONSTRAINT FK_6 foreign key references 图书信息表(图书号),

图书数量 char(20),

销售日期 date,

销售价格 char(20))

9、创建存储过程查询某段时间内各种图书的进货情况

代码语言:javascript
复制
CREATE procedure [dbo].[某段时间进货查询]

@起始时间 date,@结束时间date

as begin           

SELECT *      

from 进货详情表      

where   进货日期 >=@起始时间 and 进货日期<=@结束时间

end;

10、创建存储过程查询某段时间内各种图书的销售情况

代码语言:javascript
复制
CREATE procedure [dbo].[某段时间销售查询]

  @起始时间 date,@终止时间date

  as begin           

  SELECT *      

  from 销售详情表      

  where   销售日期 >=@起始时间 and 销售日期<=@终止时间         

  end;

11、创建视图查询各类图书的库存总数

代码语言:javascript
复制
CREATE VIEW [dbo].[V_各类图书库存总数]

AS

SELECT   dbo.库存信息表.图书号, dbo.图书信息表.类别号,dbo.库存信息表.图书数量, dbo.图书类别表.类别

FROM      dbo.库存信息表 INNERJOIN

                dbo.图书信息表 ON dbo.库存信息表.图书号 =dbo.图书信息表.图书号 INNER JOIN

                dbo.图书类别表 ON dbo.图书信息表.类别号 =dbo.图书类别表.类别号
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

12、创建触发器当图书入库时自动修改相应图书的总量和存放仓库中该图书的数量

代码语言:javascript
复制
Create Trigger [dbo].[进货]   On [dbo].[进货详情表] 

FOR Insert As   

declare @n int     Select @n=图书号 from inserted  

declare @num int    Select@num=图书数量 From inserted

Update 库存信息表   set 图书数量=图书数量+@num   Where 图书号=@n

13、创建触发器当图书销售时自动修改相应图书的总量和存放仓库中该图书的数量

代码语言:javascript
复制
Create Trigger [dbo].[销售]  On [dbo].[销售详情表] 

FOR Insert As    

declare @n int     Select @n=图书号 from inserted  

declare @num int    Select@num=图书数量 From inserted

Update 库存信息表   set 图书数量=图书数量-@num   Where 图书号=@n

四. 测试

(1) 出版社信息表

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图13 插入出版社信息

(2) 进货订单表

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图14 插入订单信息

(3) 进货详情表

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图15 插入进货详情

(4) 库存信息表

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图16 插入库存信息

(5) 图书类别表

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图17 插入类别信息

(6) 图书信息表

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图18 插入图书信息

(7) 销售订单

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图19 插入销售信息

(8) 销售详情表

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图20 插入销售详情

2、 测试

① 测试存储过程1:某段时间内的进货情况

代码语言:javascript
复制
exec 某段时间进货查询 @起始时间='2018-06-1',@结束时间='2018-07-1'

结果:

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图21 存储过程1

② 测试存储过程2:某段时间内的进货情况

代码语言:javascript
复制
exec 某段时间销售查询 @起始时间='2019-04-1',@终止时间='2019-07-1' 

结果:

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图22 存储过程2

③ 测试视图查询各类图书的库存总数

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图23 使用视图查询库存

④ 测试触发器1:入库修改图书总量和仓库中该图书数量入库前的库存信息

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图24 入库前库存信息

在入库详情表中插入777本图书号为1的图书

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

再次查看库存信息表,图书号为1的图书数量已经增加777 本,说明触发器正确运行。

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图25 入库后库存信息

⑤ 测试触发器2:销售修改图书总量和仓库中该图书数量销售前的库存信息

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图26 销售前库存信息

在销售详情表中插入700本图书号为4的图书

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

再次查看库存信息表,图书号为4的图书数量已经减少700 本,说明触发器正确运行。

SQL Server实现某书店图书进货、销售管理系统[通俗易懂]
SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

图27 销售后库存信息

五. 总结

通过本次的图书进货销售数据库系统的设计,我学到了之前在课程中不能学到的知识,并将平时所学所知的理论知识完全运用在实践中,这样的机会非常难得。

由于一开始对数据库相关知识掌握不牢固,所以面对题目中的“触发器”、“存储过程”、“视图”等相关名词比较陌生,通过搜索引擎搜索相关知识,利用书本学习相关概念,通过在线视频了解如何在一个数据库中创建和使用“触发器”、“存储过程”、“视图”,最终完成了题目要求。

因为没有实战经验,所以对图书系统中的各个部分的用处不了解,因而无法创建表。后来通过学习,画了数据流图,然后画了各个实体的局部E-R 图。在创建数据库的过程中,一开始使用了英文的表名,后来因为表和列的数量过多而导致混淆,所以改用了中文命名的表名和列名。通过E-R 图,能更清楚了解了各个部分的相关关系,理清了约束条件等,将基本的数据库框架搭建好,同时参考题目要求和数据流图,最终完善了数据库。

在整个过程中,最难的部分在于触发器的创建,由于教材中只是粗浅的介绍了概念和语法,所以我通过在线视频的方式,学习了触发器的知识,最终一步一步写出了题目要求的触发器。

通过这次亲自动手实践,我学会了分析需求,并按照要求去做出一个系统,并深知其不易。只有亲手去操作,才能知道在理论学习的过程中的不足,弥补这些不足的方法,可以通过搜索引擎,书本,以

及在线视频的讲解。我也更加期待下一次的动手实践课程。

数据库文件以及数据库日志文件地址:

https://github.com/FriggaAZ/BookManageDatabase

对你有用的话欢迎star嗷~

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/138638.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月6,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档