数据库-MySQL 实战项目——学校超市管理系统数据库设计与实现(附源码)

一、前言

需求: 

学校超市管理系统主要要求完成以下功能:

  1. 商品类别管理(如:饮料、日用、零食、文具等)
  2. 商品信息管理
  3. 供货商管理
  4. 进货
  5. 库存
  6. 销售(请考虑教师刷卡消费情况,教师卡及金额管理)

备注:

        商品类别包含下列属性:类别编号,类别名称

        商品信息包含下列属性:商品编号,商品名字,商品单价

        供货商包含下列属性:供货商编号,联系人姓名,联系人电话,地址

        进货记录:进货编号,进货数量,进货单价,进货日期

        库存信息:  库存编号,库存数量

        教师卡:  教师卡号,教师姓名,账户余额

        销售记录:销售编号,销售数量,销售总价,销售日期

所需环境

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

二、E-R图849c9c8f83c0474aab1b97fa90b209cd.png

三、关系模式

商品类别:  (类别编号, 类别名称)

商品信息:(商品编号,商品名字,商品单价,类别编号,供货商编号)

供货商:(供货商编号,联系人姓名,联系人电话,地址)

进货记录:  (进货编号,进货数量,进货单价,进货日期,商品编号)

库存信息:  (库存编号,库存数量,商品编号)

教师卡:  (教师卡号,教师姓名,账户余额)

销售记录:(销售编号,销售数量,销售总价,销售日期,商品编号,教师卡号)

四、数据表的设计

表1 商品类别

字段

数据类型

长度

备注

类别编号

varchar

50

主键

类别名称

varchar

50

Not null

表2 商品信息

字段

数据类型

长度

备注

商品编号

varchar

50

主键

商品名字

varchar

50

Not null

商品单价

varchar

50

Not null

类别编号

Varchar

50

外键

供货商编号

Varchar

50

外键

表3 供货商

字段

数据类型

长度

备注

供货商编号

varchar

50

主键

供货商姓名

varchar

50

Not null

供货商电话

varchar

50

供货商地址

varchar

50

表4 进货记录

字段

数据类型

长度

备注

进货编号

varchar

50

主键

进货数量

varchar

50

Not null

进货单价

varchar

50

进货日期

date

商品编号

varchar

50

外键

供货商编号

varchar

50

外键

表5 库存信息

字段

数据类型

长度

备注

库存编号

varchar

50

主键

库存数量

varchar

50

Not null

商品编号

varchar

50

外键

表6 教师卡

字段

数据类型

长度

备注

教师卡号

varchar

50

主键

教师姓名

varchar

50

Not null

账户余额

varchar

50

Not null

表7 销售记录

字段

数据类型

长度

备注

销售编号

varchar

50

主键

销售数量

varchar

50

销售总价

varchar

50

Not null

销售日期

date

商品编号

varchar

50

外键

教师卡号

varchar

50

外键

五、创建数据库

创建各实体表:

Create database 学校超市管理系统 character set utf8 collate utf8_general_ci
-- 在新建表前选择数据库
Use 学校超市管理系统

  1.商品类别

CREATE TABLE 商品类别 (
  类别编号 VARCHAR(50) NOT NULL PRIMARY KEY,
  类别名称 VARCHAR(50) NOT NULL
);

  2.供货商

CREATE TABLE 供货商 (
  供货商编号 VARCHAR(50) NOT NULL PRIMARY KEY,
  联系人姓名 VARCHAR(50) NOT NULL,
  联系人电话 VARCHAR(50) NOT NULL,
  地址 VARCHAR(50) NOT NULL
);

  3.商品信息

CREATE TABLE 商品信息 (
  商品编号 VARCHAR(50) NOT NULL PRIMARY KEY,
  商品名字 VARCHAR(50) NOT NULL,
  商品单价 VARCHAR(50) NOT NULL,
  类别编号 VARCHAR(50) NOT NULL,
  供货商编号 VARCHAR(50) NOT NULL,
  FOREIGN KEY (类别编号) REFERENCES 商品类别(类别编号),
  FOREIGN KEY (供货商编号) REFERENCES 供货商(供货商编号)
);

  4.进货记录

CREATE TABLE 进货记录 (
  进货编号 VARCHAR(50) NOT NULL PRIMARY KEY,
  进货数量 VARCHAR(50) NOT NULL,
  进货单价 VARCHAR(50) NOT NULL,
  进货日期 DATE NOT NULL,
  商品编号 VARCHAR(50) NOT NULL,
  FOREIGN KEY (商品编号) REFERENCES 商品信息(商品编号)
);

  5.库存信息

CREATE TABLE 库存信息 (
  库存编号 VARCHAR(50) NOT NULL PRIMARY KEY,
  库存数量 VARCHAR(50) NOT NULL,
  商品编号 VARCHAR(50) NOT NULL,
  FOREIGN KEY (商品编号) REFERENCES 商品信息(商品编号)
);

  6.教师卡

CREATE TABLE 教师卡 (
  教师卡号 VARCHAR(50) NOT NULL PRIMARY KEY,
  教师姓名 VARCHAR(50) NOT NULL,
  账户余额 VARCHAR(50) NOT NULL
);

  7.销售记录

CREATE TABLE 销售记录 (
  销售编号 VARCHAR(50) NOT NULL PRIMARY KEY,
  销售数量 VARCHAR(50) NOT NULL,
  销售总价 VARCHAR(50) NOT NULL,
  销售日期 DATE NOT NULL,
  商品编号 VARCHAR(50) NOT NULL,
  教师卡号 VARCHAR(50) NOT NULL,
  FOREIGN KEY (商品编号) REFERENCES 商品信息(商品编号),
  FOREIGN KEY (教师卡号) REFERENCES 教师卡(教师卡号)
);

插入数据:

  1.商品类别

INSERT INTO 商品类别 VALUES ('N001', '数码产品');
INSERT INTO 商品类别 VALUES ('N002', '食品饮料');
INSERT INTO 商品类别 VALUES ('N003', '家居用品');
INSERT INTO 商品类别 VALUES ('N004', '服饰箱包');
INSERT INTO 商品类别 VALUES ('N005', '美容保健');
INSERT INTO 商品类别 VALUES ('N006', '母婴用品');
INSERT INTO 商品类别 VALUES ('N007', '运动健身');
INSERT INTO 商品类别 VALUES ('N008', '图书音像');
INSERT INTO 商品类别 VALUES ('N009', '汽车用品');
INSERT INTO 商品类别 VALUES ('N010', '珠宝饰品');

  2.供货商

INSERT INTO 供货商 VALUES ('G001', '张三', '13888888888', '北京市朝阳区朝阳路1号');
INSERT INTO 供货商 VALUES ('G002', '李四', '13999999999', '上海市浦东新区人民路2号');
INSERT INTO 供货商 VALUES ('G003', '王五', '13666666666', '广州市天河区天河路3号');
INSERT INTO 供货商 VALUES ('G004', '赵六', '13777777777', '深圳市福田区福田街4号');
INSERT INTO 供货商 VALUES ('G005', '钱七', '13666666666', '成都市高新区高科路5号');
INSERT INTO 供货商 VALUES ('G006', '马八', '13555555555', '重庆市渝北区渝北路6号');
INSERT INTO 供货商 VALUES ('G007', '刘九', '13777777777', '南京市鼓楼区鼓楼路7号');
INSERT INTO 供货商 VALUES ('G008', '孙十', '13333333333', '杭州市滨江区江南路8号');
INSERT INTO 供货商 VALUES ('G009', '周十一', '13111111111', '武汉市江汉区江汉路9号');
INSERT INTO 供货商 VALUES ('G010', '吴十二', '13000000000', '西安市雁塔区丈八路10');

  3.商品信息

INSERT INTO 商品信息 VALUES ('S001', 'iPhone 12', '6999', 'N001', 'G001');
INSERT INTO 商品信息 VALUES ('S002', '可口可乐', '3', 'N002', 'G002');
INSERT INTO 商品信息 VALUES ('S003', '毛巾', '9', 'N003', 'G003');
INSERT INTO 商品信息 VALUES ('S004', 'Adidas 运动鞋', '599', 'N007', 'G004');
INSERT INTO 商品信息 VALUES ('S005', 'SK-II 面霜', '1500', 'N005', 'G005');
INSERT INTO 商品信息 VALUES ('S006', '儿童玩具', '99', 'N006', 'G006');
INSERT INTO 商品信息 VALUES ('S007', '健身器材', '1999', 'N007', 'G007');
INSERT INTO 商品信息 VALUES ('S008', '平凡的世界', '89', 'N008', 'G008');
INSERT INTO 商品信息 VALUES ('S009', '汽车脚垫', '199', 'N009', 'G009');
INSERT INTO 商品信息 VALUES ('S010', '珍珠项链', '9999', 'N010', 'G010');

  4.进货记录

INSERT INTO 进货记录 VALUES ('JH001', '100', '2', '2023-05-01', 'S002');
INSERT INTO 进货记录 VALUES ('JH002', '50', '1300', '2023-05-02', 'S005');
INSERT INTO 进货记录 VALUES ('JH003', '200', '5', '2023-05-03', 'S003');
INSERT INTO 进货记录 VALUES ('JH004', '50', '399', '2023-05-04', 'S004') ;
INSERT INTO 进货记录 VALUES ('JH005', '500', '2', '2023-05-05', 'S002');
INSERT INTO 进货记录 VALUES ('JH006', '1000', '150', '2023-05-06', 'S009');
INSERT INTO 进货记录 VALUES ('JH007', '20', '5999', '2023-05-07', 'S001');
INSERT INTO 进货记录 VALUES ('JH008', '10', '599', '2023-05-08', 'S004');
INSERT INTO 进货记录 VALUES ('JH009', '200', '899', '2023-05-09', 'S007');
INSERT INTO 进货记录 VALUES ('JH010', '200', '299', '2023-05-10', 'S004');

  5.库存信息

INSERT INTO 库存信息 VALUES ('K001', '200', 'S002');
INSERT INTO 库存信息 VALUES ('K002', '500', 'S005');
INSERT INTO 库存信息 VALUES ('K003', '1000', 'S003');
INSERT INTO 库存信息 VALUES ('K004', '50', 'S004');
INSERT INTO 库存信息 VALUES ('K005', '1000', 'S002');
INSERT INTO 库存信息 VALUES ('K006', '2000', 'S009');
INSERT INTO 库存信息 VALUES ('K007', '30', 'S001');
INSERT INTO 库存信息 VALUES ('K008', '20', 'S004');
INSERT INTO 库存信息 VALUES ('K009', '500', 'S007');
INSERT INTO 库存信息 VALUES ('K010', '200', 'S004');

  6.教师卡

INSERT INTO 教师卡 VALUES ('JS001', '张老师', '500');
INSERT INTO 教师卡 VALUES ('JS002', '王老师', '1000');
INSERT INTO 教师卡 VALUES ('JS003', '李老师', '200');
INSERT INTO 教师卡 VALUES ('JS004', '赵老师', '800');
INSERT INTO 教师卡 VALUES ('JS005', '钱老师', '300');
INSERT INTO 教师卡 VALUES ('JS006', '马老师', '600');
INSERT INTO 教师卡 VALUES ('JS007', '刘老师', '50');
INSERT INTO 教师卡 VALUES ('JS008', '孙老师', '150');
INSERT INTO 教师卡 VALUES ('JS009', '周老师', '400');
INSERT INTO 教师卡 VALUES ('JS010', '吴老师', '700');

  7.销售记录

INSERT INTO 销售记录 VALUES ('XS001', '5', '15', '2023-05-01', 'S002', 'JS001');
INSERT INTO 销售记录 VALUES ('XS002', '3', '4500', '2023-05-02', 'S005', 'JS002');
INSERT INTO 销售记录 VALUES ('XS003', '10', '90', '2023-05-03', 'S003', 'JS003');
INSERT INTO 销售记录 VALUES ('XS004', '1', '599', '2023-05-04', 'S004', 'JS004');
INSERT INTO 销售记录 VALUES ('XS005', '8', '24', '2023-05-05', 'S002', 'JS005');
INSERT INTO 销售记录 VALUES ('XS006', '2', '398', '2023-05-06', 'S009', 'JS006');
INSERT INTO 销售记录 VALUES ('XS007', '1', '6999', '2023-05-07', 'S001', 'JS007');
INSERT INTO 销售记录 VALUES ('XS008', '3', '1797', '2023-05-08', 'S004', 'JS008');
INSERT INTO 销售记录 VALUES ('XS009', '2', '3998', '2023-05-09', 'S007', 'JS009');
INSERT INTO 销售记录 VALUES ('XS010', '5', '2995', '2023-05-10', 'S004', 'JS010');

六、创建触发器

1. 更新库存数量

        这个触发器在每次向进货记录表插入新行之后触发。它会获取插入的进货记录的进货数量和对应的商品编号,并更新库存信息表中对应商品的库存数量,将其加上进货数量。

CREATE TRIGGER 更新库存数量
AFTER INSERT ON 进货记录
FOR EACH ROW
BEGIN
  -- 声明变量
  DECLARE v_进货数量 INT;
  DECLARE v_商品编号 VARCHAR(50);
  
  -- 获取插入的进货记录信息
  SET v_进货数量 = NEW.进货数量;
  SET v_商品编号 = NEW.商品编号;
  
  -- 更新库存数量
  UPDATE 库存信息
  SET 库存数量 = 库存数量 + v_进货数量
  WHERE 商品编号 = v_商品编号;
END

插入进货数据: 

INSERT INTO 进货记录 VALUES ('JH015', '200', '310', '2023-05-23', 'S004');

 效果展示:a44d11ce5329499f93a673d1b6e59e64.png

2.更新教师卡账户余额 

        这个触发器在每次向销售记录表插入新行之后触发。它会获取插入的销售记录的销售总价和对应的教师卡号,并更新教师卡表中对应教师卡的账户余额,将其减去销售总价。

CREATE TRIGGER 更新账户余额
AFTER INSERT ON 销售记录
FOR EACH ROW
BEGIN
  -- 声明变量
  DECLARE v_销售总价 DECIMAL(10, 2);
  DECLARE v_教师卡号 VARCHAR(50);
  
  -- 获取插入的销售记录信息
  SET v_销售总价 = NEW.销售总价;
  SET v_教师卡号 = NEW.教师卡号;
  
  -- 更新教师卡账户余额
  UPDATE 教师卡
  SET 账户余额 = 账户余额 - v_销售总价
  WHERE 教师卡号 = v_教师卡号;
END;

插入销售数据:

INSERT INTO 销售记录 VALUES ('XS016', '5', '15', '2023-05-16', 'S002', 'JS010');

效果展示:f4ca42dd378948dd892a48962be6d03c.png

3.更新商品单价 

        这个触发器在每次向进货记录表插入新行之后触发。它会获取插入的进货记录的进货单价和对应的商品编号,并更新商品信息表中对应商品的商品单价,将其更新为最新的进货单价。

CREATE TRIGGER 更新商品单价
AFTER INSERT ON 进货记录
FOR EACH ROW
BEGIN
  -- 声明变量
  DECLARE v_进货单价 DECIMAL(10, 2);
  DECLARE v_商品编号 VARCHAR(50);
  
  -- 获取插入的进货记录信息
  SET v_进货单价 = NEW.进货单价;
  SET v_商品编号 = NEW.商品编号;
  
  -- 更新商品单价
  UPDATE 商品信息
  SET 商品单价 = v_进货单价
  WHERE 商品编号 = v_商品编号;
END;

插入进货数据:

INSERT INTO 进货记录 VALUES ('JH013', '200', '310', '2023-05-23', 'S004');

效果展示:da5498555e254954931445fb7bc0214d.png

七、跨表查询

1.查询销售数量、销售日期、教师姓名、账户余额

SELECT 销售数量,销售日期,教师姓名,账户余额 ,销售记录.教师卡号,教师卡.教师卡号 
FROM 销售记录,教师卡 
WHERE 销售记录.教师卡号 =教师卡.教师卡号

查询结果372124e7a0eb4386b8c9390f26d525aa.png

2.查询商品名字、商品单价、进货数量、进货日期

SELECT 商品信息.商品名字, 商品信息.商品单价, 进货记录.进货数量, 进货记录.进货日期, 商品信息.商品编号
FROM 进货记录
JOIN 商品信息 ON 进货记录.商品编号 = 商品信息.商品编号

查询结果fedcff9a45384bb8a248efa082cf8b55.png

3.查询

查询结果

八、答疑解惑

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

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

博主VX:18884281851

谢谢各位的支持~~

  • 91
    点赞
  • 211
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
本系统为中小型超市销售管理系统,因此系统需求分析阶段主要采取实地采访、调查学校周边超市,网上查找相关资料,请教老师等多种方式,尤其是仔细思考、分析超市购物发票。这一阶段大概了解了目前超市销售管理的现状,了解了超市销售方面的业务,同时也发现了其中存在的一些问题。经过近两天时间的实践,了解了很多关于超市的知识,收获挺多的。 需求分析成果如下。 系统要处理的基本对象包括营业员基本信息、会员基本信息、管理员基本信息、商品基本信息、货架基本信息、销售单基本信息、退货单基本信息等多个对象。各个基本对象包含信息如下所示: 营业员(营业员号,姓名,收银台位置,上班时间,下班时间,月薪,联系电话); 会员(会员卡号,会员姓名,卡密码,注册时间,累计消费); 商品(商品编号,货架编号,条形码,商品名称,商品价格,现有存量,存量底线,生产日期,保质期,供货商); 销售单(销售单编号,营业员编号,会员卡号,打印时间,有无折扣); 销售商品(销售单号,商品编号,销售数量); 货架(货架编号,管理员号,货架名称); 管理员(管理员号,姓名,联系电话,上班时间,下班时间,月薪); 退货单(退货单号,商品编号,退货数量); 打印(退货单号,销售单号,营业员号,打印时间)。 本中小型超市销售管理系统大体上包含三个模块,为前台收银业务处理,前台退货业务处理以及后台销售处理功能模块,具体如下所述。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花花´◡`

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值