枯木逢春犹再发,人无两度再少年🍂
系统主要模块如下:
(1) 书店销售管理系统设计与实现—图书入库管理及查询统计
图书入库管理:维护入库图书信息(如图书编号、书名、作者、价格、图书分类、出版社等)。自动计算库存。
图书查询统计:按图书分类,出版社、书名、作者等条件查询图书的详细信息。支持模糊查询。
(2) 书店销售管理系统设计与实现—销售管理
销售管理:销售过的图书都记录在销售列表中,方便统计收入。图书销售后,实时记录图书库存,按每天统计销售额、按每个月或季度统计销售额并生成报表,并能根据销售数量统计生成畅销书名单。
(3) 书店销售管理系统设计与实现—书店会员管理
书店会员管理:提供会员信息的维护功能,可设置会员等级,不同级别的会员享受不同的折扣,可以变更折扣额度。
目录
一、数据字典
1. 图书实体表
字段名别名数据类型长度约束图书编号bookIsbn字符型20位主码图书名称bookName字符型20位not null作者bookAuthor字符型20位not null图书类别bookType字符型20位not null价格bookPrice浮点型\not null出版社bookPublisher字符型20位not null库存bookCount整型\not null
2.会员实体表
字段名别名数据类型长度约束会员idvipId字符型20位主码会员等级vipLevel整型\外键会员名字vipName字符型20位not null会员性别vipSex字符型20位not null会员年龄vipAge字符型20位not null会员电话vipTel字符型20位not null
3. 会员类型表
字段名别名数据类型长度约束会员等级vipId字符型20位主键会员等级名vipName字符型20位not null会员等级折扣vipLevelDisCountfloat\not null
4. 销售实体表
字段名别名数据类型长度约束销售单号saleId字符型20位主键会员IDvipId字符型20位外键销售日期saleDate日期型\not null
5. 销售明细实体表
字段名别名数据类型长度约束销售明细idsaleDetailId字符型20位主键销售单号saleId字符型20位外键图书编号bookIsbn字符型20位外键销售数量bookSaleCount整型\not null
二、概念模型设计
1. 图书基本信息E-R图
2. 会员实体E-R图
3.会员类型E-R图
4.销售实体E-R图
5.销售明细E-R图
6.总体E-R图
三、逻辑结构设计
E-R图向关系模型的转换(主键用下划线标出)
图书(图书编号,图书名称,作者,图书类别,价格,出版社,库存)
会员(会员id,会员等级,会员名字,会员性别,会员年龄,会员电话)
会员类型(会员等级,会员等级名,会员等级折扣)
销售(销售单号,会员ID,销售日期)
销售明细(销售明细id,销售单号,图书编号,销售数量)
逻辑模型图
四、物理结构设计
设计与实现
1. 创建book表
/*==============================================================*//* Table: book *//*==============================================================*/createtable book (
bookIsbn char(20)notnull,
bookName char(20)null,
bookAuthor char(20)null,
bookType char(20)null,
bookPrice floatnull,
bookPublisher char(20)null,
bookCount intnull,constraint PK_BOOK primarykeynonclustered(bookIsbn))
2.创建会员表
/*==============================================================*//* Table: vip *//*==============================================================*/createtable vip (
vipId char(20)notnull,
vipLevel intnull,
vipName char(20)null,
vipSex char(20)null,
vipAge char(20)null,
vipTel char(20)null,constraint PK_VIP primarykeynonclustered(vipId))
3.创建会员类型表
/*==============================================================*//* Table: vipType *//*==============================================================*/createtable vipType (
vipLevel intnotnull,
vipLevelName char(20)null,
vipLevelDisCount floatnull,constraint PK_VIPTYPE primarykeynonclustered(vipLevel))
4.创建销售实体表
/*==============================================================*//* Table: sale *//*==============================================================*/createtable sale (
saleId char(20)notnull,
vipId char(20)null,
saleDate datetimenull,constraint PK_SALE primarykeynonclustered(saleId))
5.创建销售明细表
/*==============================================================*//* Table: saleDetail *//*==============================================================*/createtable saleDetail (
saleDetailId char(20)notnull,
saleId char(20)null,
bookIsbn char(20)null,
bookSaleCount intnull,constraint PK_SALEDETAIL primarykeynonclustered(saleDetailId))
6.创建表整体脚本如下:
/*==============================================================*//* DBMS name: Microsoft SQL Server 2012 *//* Created on: 2022/11/18 8:12:35 *//*==============================================================*/ifexists(select1from sys.sysreferences r join sys.sysobjects o on(o.id = r.constid and o.type='F')where r.fkeyid = object_id('sale')and o.name ='FK_SALE_BUY_VIP')altertable sale
dropconstraint FK_SALE_BUY_VIP
go
ifexists(select1from sys.sysreferences r join sys.sysobjects o on(o.id = r.constid and o.type='F')where r.fkeyid = object_id('saleDetail')and o.name ='FK_SALEDETA_RELATIONS_SALE')altertable saleDetail
dropconstraint FK_SALEDETA_RELATIONS_SALE
go
ifexists(select1from sys.sysreferences r join sys.sysobjects o on(o.id = r.constid and o.type='F')where r.fkeyid = object_id('saleDetail')and o.name ='FK_SALEDETA_RELATIONS_BOOK')altertable saleDetail
dropconstraint FK_SALEDETA_RELATIONS_BOOK
go
ifexists(select1from sys.sysreferences r join sys.sysobjects o on(o.id = r.constid and o.type='F')where r.fkeyid = object_id('vip')and o.name ='FK_VIP_参照_VIPTYPE')altertable vip
dropconstraint FK_VIP_参照_VIPTYPE
go
ifexists(select1from sysobjects
where id = object_id('SysManageUser')andtype='U')droptable SysManageUser
go
ifexists(select1from sysobjects
where id = object_id('book')andtype='U')droptable book
go
ifexists(select1from sysindexes
where id = object_id('sale')and name ='buy_FK'and indid >0and indid <255)dropindex sale.buy_FK
go
ifexists(select1from sysobjects
where id = object_id('sale')andtype='U')droptable sale
go
ifexists(select1from sysindexes
where id = object_id('saleDetail')and name ='Relationship_4_FK'and indid >0and indid <255)dropindex saleDetail.Relationship_4_FK
go
ifexists(select1from sysindexes
where id = object_id('saleDetail')and name ='Relationship_6_FK'and indid >0and indid <255)dropindex saleDetail.Relationship_6_FK
go
ifexists(select1from sysobjects
where id = object_id('saleDetail')andtype='U')droptable saleDetail
go
ifexists(select1from sysindexes
where id = object_id('vip')and name ='参照_FK'and indid >0and indid <255)dropindex vip.参照_FK
go
ifexists(select1from sysobjects
where id = object_id('vip')andtype='U')droptable vip
go
ifexists(select1from sysobjects
where id = object_id('vipType')andtype='U')droptable vipType
go
/*==============================================================*//* Table: SysManageUser *//*==============================================================*/createtable SysManageUser (
SMUId char(20)notnull,
SMUName char(20)null,
SMUPassword char(20)null,
SMUType char(20)null,constraint PK_SYSMANAGEUSER primarykeynonclustered(SMUId))
go
/*==============================================================*//* Table: book *//*==============================================================*/createtable book (
bookIsbn char(20)notnull,
bookName char(20)null,
bookAuthor char(20)null,
bookType char(20)null,
bookPrice floatnull,
bookPublisher char(20)null,
bookCount intnull,constraint PK_BOOK primarykeynonclustered(bookIsbn))
go
/*==============================================================*//* Table: sale *//*==============================================================*/createtable sale (
saleId char(20)notnull,
vipId char(20)null,
saleDate datetimenull,constraint PK_SALE primarykeynonclustered(saleId))
go
/*==============================================================*//* Index: buy_FK *//*==============================================================*/createindex buy_FK on sale (
vipId ASC)
go
/*==============================================================*//* Table: saleDetail *//*==============================================================*/createtable saleDetail (
saleDetailId char(20)notnull,
saleId char(20)null,
bookIsbn char(20)null,
bookSaleCount intnull,constraint PK_SALEDETAIL primarykeynonclustered(saleDetailId))
go
/*==============================================================*//* Index: Relationship_6_FK *//*==============================================================*/createindex Relationship_6_FK on saleDetail (
bookIsbn ASC)
go
/*==============================================================*//* Index: Relationship_4_FK *//*==============================================================*/createindex Relationship_4_FK on saleDetail (
saleId ASC)
go
/*==============================================================*//* Table: vip *//*==============================================================*/createtable vip (
vipId char(20)notnull,
vipLevel intnull,
vipName char(20)null,
vipSex char(20)null,
vipAge char(20)null,
vipTel char(20)null,constraint PK_VIP primarykeynonclustered(vipId))
go
/*==============================================================*//* Index: 参照_FK *//*==============================================================*/createindex 参照_FK on vip (
vipLevel ASC)
go
/*==============================================================*//* Table: vipType *//*==============================================================*/createtable vipType (
vipLevel intnotnull,
vipLevelName char(20)null,
vipLevelDisCount floatnull,constraint PK_VIPTYPE primarykeynonclustered(vipLevel))
go
altertable sale
addconstraint FK_SALE_BUY_VIP foreignkey(vipId)references vip (vipId)
go
altertable saleDetail
addconstraint FK_SALEDETA_RELATIONS_SALE foreignkey(saleId)references sale (saleId)
go
altertable saleDetail
addconstraint FK_SALEDETA_RELATIONS_BOOK foreignkey(bookIsbn)references book (bookIsbn)
go
altertable vip
addconstraint FK_VIP_参照_VIPTYPE foreignkey(vipLevel)references vipType (vipLevel)
go
向book表中插入数据:
INSERTINTO[dbo].[book]([bookIsbn],[bookName],[bookAuthor],[bookType],[bookPrice],[bookPublisher],[bookCount])VALUES(N'isbn2103001 ', N'恋人拍卖行 ', N'Tom ', N'社会科学 ', N'12', N'商务印书馆 ', N'15')
GO
INSERTINTO[dbo].[book]([bookIsbn],[bookName],[bookAuthor],[bookType],[bookPrice],[bookPublisher],[bookCount])VALUES(N'isbn2103002 ', N'俄狄浦斯王 ', N'Kit ', N'工具书 ', N'3', N'人民出版社 ', N'11')
GO
INSERTINTO[dbo].[book]([bookIsbn],[bookName],[bookAuthor],[bookType],[bookPrice],[bookPublisher],[bookCount])VALUES(N'isbn2103003 ', N'至尊女王爷 ', N'xiaoming ', N'工具书 ', N'7', N'中华书局 ', N'16')
GO
INSERTINTO[dbo].[book]([bookIsbn],[bookName],[bookAuthor],[bookType],[bookPrice],[bookPublisher],[bookCount])VALUES(N'isbn2103004 ', N'天是红尘岸 ', N'zhaoyun ', N'专业书 ', N'14', N'商务印书馆 ', N'7')
GO
INSERTINTO[dbo].[book]([bookIsbn],[bookName],[bookAuthor],[bookType],[bookPrice],[bookPublisher],[bookCount])VALUES(N'isbn2103005 ', N'逐日追风剑 ', N'huatuo ', N'小说 ', N'1', N'商务印书馆 ', N'2')
GO
INSERTINTO[dbo].[book]([bookIsbn],[bookName],[bookAuthor],[bookType],[bookPrice],[bookPublisher],[bookCount])VALUES(N'isbn2103006 ', N'雪中悍刀行 ', N'machao ', N'儿童读物 ', N'4', N'商务印书馆 ', N'3')
GO
INSERTINTO[dbo].[book]([bookIsbn],[bookName],[bookAuthor],[bookType],[bookPrice],[bookPublisher],[bookCount])VALUES(N'isbn2103007 ', N'神级大魔头 ', N'sunbin ', N'小说 ', N'6', N'商务印书馆 ', N'14')
GO
INSERTINTO[dbo].[book]([bookIsbn],[bookName],[bookAuthor],[bookType],[bookPrice],[bookPublisher],[bookCount])VALUES(N'isbn2103008 ', N'宿主请留步 ', N'shangguan ', N'工具书 ', N'13', N'人民出版社 ', N'93')
GO
INSERTINTO[dbo].[book]([bookIsbn],[bookName],[bookAuthor],[bookType],[bookPrice],[bookPublisher],[bookCount])VALUES(N'isbn2103009 ', N'巴黎圣母院 ', N'zhouyu ', N'工具书 ', N'11', N'人民出版社 ', N'3')
GO
INSERTINTO[dbo].[book]([bookIsbn],[bookName],[bookAuthor],[bookType],[bookPrice],[bookPublisher],[bookCount])VALUES(N'isbn2103010 ', N'徐霞客游记 ', N'xiaoqiao ', N'社会科学 ', N'19', N'人民出版社 ', N'12')
GO
INSERTINTO[dbo].[book]([bookIsbn],[bookName],[bookAuthor],[bookType],[bookPrice],[bookPublisher],[bookCount])VALUES(N'isbn2103011 ', N'喧哗与骚动 ', N'baili ', N'社会科学 ', N'10', N'人民出版社 ', N'18')
GO
INSERTINTO[dbo].[book]([bookIsbn],[bookName],[bookAuthor],[bookType],[bookPrice],[bookPublisher],[bookCount])VALUES(N'isbn2103012 ', N'苏菲的世界 ', N'make ', N'社会科学 ', N'8', N'人民出版社 ', N'5')
GO
向vipType表中插入数据
INSERTINTO[dbo].[vipType]([vipLevel],[vipLevelName],[vipLevelDisCount])VALUES(N'0', N'普通会员 ', N'0.95')
GO
INSERTINTO[dbo].[vipType]([vipLevel],[vipLevelName],[vipLevelDisCount])VALUES(N'1', N'一级会员 ', N'0.9')
GO
INSERTINTO[dbo].[vipType]([vipLevel],[vipLevelName],[vipLevelDisCount])VALUES(N'2', N'二级会员 ', N'0.85')
GO
INSERTINTO[dbo].[vipType]([vipLevel],[vipLevelName],[vipLevelDisCount])VALUES(N'3', N'三级会员 ', N'0.8')
GO
INSERTINTO[dbo].[vipType]([vipLevel],[vipLevelName],[vipLevelDisCount])VALUES(N'4', N'四级会员 ', N'0.75')
GO
INSERTINTO[dbo].[vipType]([vipLevel],[vipLevelName],[vipLevelDisCount])VALUES(N'5', N'五级会员 ', N'0.7')
GO
INSERTINTO[dbo].[vipType]([vipLevel],[vipLevelName],[vipLevelDisCount])VALUES(N'6', N'六级会员 ', N'0.65')
GO
INSERTINTO[dbo].[vipType]([vipLevel],[vipLevelName],[vipLevelDisCount])VALUES(N'7', N'七级会员 ', N'0.6')
GO
向vip表中插入数据
INSERTINTO[dbo].[vip]([vipId],[vipLevel],[vipName],[vipSex],[vipAge],[vipTel])VALUES(N'v001 ', N'7', N'张三丰 ', N'男 ', N'21 ', N'19907078888 ')
GO
INSERTINTO[dbo].[vip]([vipId],[vipLevel],[vipName],[vipSex],[vipAge],[vipTel])VALUES(N'v002 ', N'6', N'杨暖昕 ', N'女 ', N'22 ', N'19803038888 ')
GO
INSERTINTO[dbo].[vip]([vipId],[vipLevel],[vipName],[vipSex],[vipAge],[vipTel])VALUES(N'v003 ', N'0', N'凌秋子 ', N'男 ', N'36 ', N'17806069999 ')
GO
INSERTINTO[dbo].[vip]([vipId],[vipLevel],[vipName],[vipSex],[vipAge],[vipTel])VALUES(N'v004 ', N'4', N'李楠 ', N'男 ', N'18 ', N'17806068888 ')
GO
INSERTINTO[dbo].[vip]([vipId],[vipLevel],[vipName],[vipSex],[vipAge],[vipTel])VALUES(N'v005 ', N'6', N'文春雪 ', N'男 ', N'36 ', N'18808089999 ')
GO
INSERTINTO[dbo].[vip]([vipId],[vipLevel],[vipName],[vipSex],[vipAge],[vipTel])VALUES(N'v006 ', N'3', N'陆亦思 ', N'男 ', N'46 ', N'17801010000 ')
GO
INSERTINTO[dbo].[vip]([vipId],[vipLevel],[vipName],[vipSex],[vipAge],[vipTel])VALUES(N'v007 ', N'1', N'代迎海 ', N'男 ', N'18 ', N'13109787777 ')
GO
INSERTINTO[dbo].[vip]([vipId],[vipLevel],[vipName],[vipSex],[vipAge],[vipTel])VALUES(N'v008 ', N'2', N'白紫玉 ', N'男 ', N'17 ', N'13120200897 ')
GO
INSERTINTO[dbo].[vip]([vipId],[vipLevel],[vipName],[vipSex],[vipAge],[vipTel])VALUES(N'v009 ', N'6', N'韩若初 ', N'女 ', N'26 ', N'17809271234 ')
GO
向sale表中插入数据
INSERTINTO[dbo].[sale]([saleId],[vipId],[saleDate])VALUES(N'saleid010 ', N'v001 ', N'2020-12-01 04:06:21.000')
GO
INSERTINTO[dbo].[sale]([saleId],[vipId],[saleDate])VALUES(N'saleid009 ', N'v002 ', N'2020-01-03 08:15:12.000')
GO
INSERTINTO[dbo].[sale]([saleId],[vipId],[saleDate])VALUES(N'saleid001 ', N'v001 ', N'2020-12-01 04:06:21.000')
GO
INSERTINTO[dbo].[sale]([saleId],[vipId],[saleDate])VALUES(N'saleid002 ', N'v002 ', N'2020-01-03 08:15:12.000')
GO
INSERTINTO[dbo].[sale]([saleId],[vipId],[saleDate])VALUES(N'saleid003 ', N'v005 ', N'2020-01-05 02:45:00.000')
GO
INSERTINTO[dbo].[sale]([saleId],[vipId],[saleDate])VALUES(N'saleid004 ', N'v009 ', N'2020-01-06 02:45:00.000')
GO
INSERTINTO[dbo].[sale]([saleId],[vipId],[saleDate])VALUES(N'saleid005 ', N'v007 ', N'2020-01-06 02:45:00.000')
GO
INSERTINTO[dbo].[sale]([saleId],[vipId],[saleDate])VALUES(N'saleid006 ', N'v003 ', N'2020-01-06 02:45:00.000')
GO
INSERTINTO[dbo].[sale]([saleId],[vipId],[saleDate])VALUES(N'saleid007 ', N'v004 ', N'2020-02-27 00:00:00.000')
GO
INSERTINTO[dbo].[sale]([saleId],[vipId],[saleDate])VALUES(N'saleid008 ', N'v001 ', N'2020-03-11 00:00:00.000')
GO
向saleDetail表中插入数据
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'HAWGPIXSQBPRW6IA1TD4', N'saleid001 ', N'isbn2103001 ', N'19')
GO
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'52SU70BURCAMS50F5QFD', N'saleid001 ', N'isbn2103004 ', N'9')
GO
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'7FVQ0GKT5G9QB0P6TUA4', N'saleid001 ', N'isbn2103003 ', N'2')
GO
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'C6VNTSXDUCOQKE37ER14', N'saleid001 ', N'isbn2103002 ', N'1')
GO
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'UKA4710SMLJKWSQO389H', N'saleid002 ', N'isbn2103009 ', N'1')
GO
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'970CM5NUN54WDHXNUYQ8', N'saleid002 ', N'isbn2103001 ', N'2')
GO
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'P6G5AHGVYCGJBHD8NU9L', N'saleid002 ', N'isbn2103006 ', N'2')
GO
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'WX1RIJJMQYACA4Y3FL69', N'saleid001 ', N'isbn2103004 ', N'15')
GO
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'YF9G7JP86C3OVSE1AQR4', N'saleid003 ', N'isbn2103007 ', N'3')
GO
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'UPH2K75GBCQI68W3NLXC', N'saleid006 ', N'isbn2103006 ', N'11')
GO
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'V7OLOUXQ5WM9AIF96NSS', N'saleid005 ', N'isbn2103003 ', N'17')
GO
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'5Q6MB5S4HA3Y0TNC HO ', N'saleid004 ', N'isbn2103002 ', N'8')
GO
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'VWLWUACJQ36G0N7SVSCN', N'saleid002 ', N'isbn2103005 ', N'8')
GO
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'8MFJ3SREX7OJ9D0GC69U', N'saleid006 ', N'isbn2103001 ', N'2')
GO
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'ELK8E2O5E0W4Q4YHA0QK', N'saleid004 ', N'isbn2103007 ', N'7')
GO
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'1 ', N'saleid001 ', N'isbn2103008 ', N'1')
GO
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'2 ', N'saleid001 ', N'isbn2103008 ', N'6')
GO
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'ELK8E2O5t68UQ4YHA0QK', N'saleid005 ', N'isbn2103007 ', N'2')
GO
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'PA31CORBOML5W9MPLP88', N'saleid007 ', N'isbn2103001 ', N'2')
GO
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'D16V7L1PD 19JI7GGDJN', N'saleid007 ', N'isbn2103002 ', N'1')
GO
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'CPQKT SXWO LEL10 KFW', N'saleid008 ', N'isbn2103011 ', N'1')
GO
INSERTINTO[dbo].[saleDetail]([saleDetailId],[saleId],[bookIsbn],[bookSaleCount])VALUES(N'28N9LUIDU37HAWMCFC3 ', N'saleid008 ', N'isbn2103012 ', N'1')
GO
SQL查询
1.图书查询统计:按图书分类,出版社、书名、作者等条件查询图书的详细信息。支持模糊查询。
select bookType '图书分类'from book groupby bookType;select bookpublisher '出版社'from book groupby bookpublisher;select*from book where booktype like'%工具%';select*from book where bookPublisher like'%商务印书馆%'select*from book where bookname like'%王%'
2.天销售额(这里的销售额我算的是销售数量,也有人说是算销售金额)
select
book.bookname,sum(booksalecount) day_sale_count
from(select
bookisbn,
booksalecount
from
saledetail
where
saleid in(select
saleid
from
sale
where
datepart(year, saledate)=2020and datepart(month, saledate)=1and datepart(day, saledate)=6)) t1
leftjoin book on book.bookIsbn = t1.bookisbn
groupby
book.bookname;
3.天销售榜前三
selecttop3 book.bookname,sum(booksalecount) sale_count
from(select
bookisbn,
booksalecount
from
saledetail
where
saleid in(select
saleid
from
sale
where
datepart(year, saledate)=2020and datepart(month, saledate)=1and datepart(day, saledate)=6)) t1
leftjoin book on book.bookIsbn = t1.bookisbn
groupby
book.bookname
orderby
sale_count desc;
4.月销售额
select
book.bookname,sum(booksalecount) book_count
from(select
bookisbn,
booksalecount
from
saledetail
where
saleid in(select
saleid
from
sale
where
datepart(year, saledate)=2020and datepart(month, saledate)=1)) t1
leftjoin book on book.bookisbn = t1.bookisbn
groupby
book.bookname;
5.月销售榜前三
selecttop3 book.bookname,sum(booksalecount) book_count
from(select
bookisbn,
booksalecount
from
saledetail
where
saleid in(select
saleid
from
sale
where
datepart(year, saledate)=2020and datepart(month, saledate)=1)) t1
leftjoin book on book.bookisbn = t1.bookisbn
groupby
book.bookname
orderby
book_count desc;
6.自动计算库存,支付金额(触发器)
createtrigger auto_update_bookcount_money on saleDetail
afterinsertasbegindeclare@booksalecountint;declare@bookisbnchar(20);declare@bookcountint;select@bookisbn=bookisbn from inserted;select@booksalecount=bookSaleCount from inserted;select@bookcount=bookcount from book where bookisbn=@bookisbn;if(@booksalecount>@bookcount)beginprint('购买数量:'+convert(varchar,@booksalecount)+', 库存量:'+convert(varchar,@bookcount)+'。 库存不足,订单支付失败!')rollbacktransaction;endelsebegindeclare@newCountintupdate book set bookcount=(bookcount-@booksalecount)where bookisbn=@bookisbn;select@newCount=bookcount from book where bookisbn=@bookisbn;declare@saleIdchar(20);select@saleId=saleId,@bookIsbn=bookIsbn,@bookSaleCount=bookSaleCount from inserted;declare@bookPricefloat;declare@bookNamechar(20);select@bookPrice=bookPrice,@bookName=bookName from book where bookIsbn=@bookIsbn;declare@vipIdchar(20);select@vipId=vipId from sale where saleId=@saleId;declare@vipNamechar(20);declare@vipLevelint;select@vipName=vipName,@vipLevel=vipLevel from vip where vipId=@vipIddeclare@vipLevelDiscountfloat;select@vipLevelDiscount=vipLevelDisCount from vipType where vipLevel=@vipLevelprint(convert(varchar(6),@vipName)+'购买《'+convert(varchar(10),@bookName)+'》的消费金额为:'+convert(varchar,@bookSaleCount*@bookPrice*@vipLevelDiscount)+', 购买数量:'+convert(varchar,@bookSaleCount)+', 单价:'+convert(varchar,@bookPrice)+', 会员等级:'+convert(varchar,@vipLevel)+', 会员折扣:'+convert(varchar,@vipLevelDiscount)+', 更新后的库存量为:'+convert(varchar,@newCount))endend
向销售明细表中插入一条数据测试,库存量和金额是否正确。
insertinto saledetail values('3','saleid001','isbn2103002',1);
说明:销售明细id为3,这条销售明细属于saleid001销售id,售出的书id是isbn2103002,数量是1。
版权归原作者 阿年、嗯啊 所有, 如有侵权,请联系我们删除。