小型数据库系统开发作业


原文链接:https://zhanghan.xyz/posts/60088/

题目

自学上层应用访问数据库的方式(如ODBC、ADO、JDBC、MySQLi或者其它),根据您使用的上层语言(不限语言(但要求与自己完成的文件管理数据实验开发语言一致)),不限数据库(除ACCESS,SQLite 以外),选择并学习使用一种合适的访问数据库的方式。
基于文件管理数据实现,实现使用关系数据库管理课本中 P70-6 题中 SPJ 数据库。功能包括:
在这里插入图片描述
开发环境说明:

Python3.6
Mysql 8.0.26
Navicat Premium 15
Pyqt5
Qt-designer
pymysql

数据库设计

有一个SPJ数据库,包括S、P、J及SPJ4个关系模式∶
S(SNO,SNAME,STATUS,CITY);
P(PNO,PNAME,COLOR,WEIGHT):
J(JNO.JINAME,CrITY);
SPJ(SNO,PNO,NO,QTY)。

供应商表S由供应商代码(SNO)供应商姓名(SNAME)供应商状态(STATUS)供应商所在城市CITY组成。
零件表P由零件代码(PNO)零件名(PNAME)颜色(COLOR)重量(WEIGHT组成。
工程项目表J由工程项目代码(JNO)工程项目名(JNAME)工程项目所在城市(CITY组成。
供应情况表 SPJ由供应商代码(SNO)零件代码(PNO)工程项目代码(JNO)供应数量(OTY组成,表示某供应商供应某种零件给某工程项目的数量为QTY。
在这里插入图片描述

4个数据库表构建代码:

CREATE DEFINER=`root`@`localhost` PROCEDURE `spj`()
BEGIN
-- 定义 S 表
CREATE TABLE S(
	Sno CHAR(10) PRIMARY KEY, 
	Sname CHAR(10), 
	Sstatus int CHECK (Sstatus in (10,20,30,40)), 
	Scity CHAR(10)
);
INSERT INTO S(Sno, Sname, Sstatus, Scity) VALUES('S1', '精益', 20, '天津');
INSERT INTO S(Sno, Sname, Sstatus, Scity) VALUES('S2', '盛锡', 10, '北京');
INSERT INTO S(Sno, Sname, Sstatus, Scity) VALUES('S3', '东方红', 30, '北京');
INSERT INTO S(Sno, Sname, Sstatus, Scity) VALUES('S4', '丰泰盛', 20, '天津');
INSERT INTO S(Sno, Sname, Sstatus, Scity) VALUES('S5', '为民', 30, '上海');

-- 定义 P 表
CREATE TABLE P(
	Pno CHAR(10) PRIMARY KEY,
	Pname CHAR(10),
	Pcolor CHAR(10),
	Pweight INT
);
INSERT INTO P(Pno, Pname, Pcolor, Pweight) VALUES('P1', '螺母', '红', 12);
INSERT INTO P(Pno, Pname, Pcolor, Pweight) VALUES('P2', '螺栓', '绿', 17);
INSERT INTO P(Pno, Pname, Pcolor, Pweight) VALUES('P3', '螺丝刀', '蓝', 14);
INSERT INTO P(Pno, Pname, Pcolor, Pweight) VALUES('P4', '螺丝刀', '红', 14);
INSERT INTO P(Pno, Pname, Pcolor, Pweight) VALUES('P5', '凸轮', '蓝', 40);
INSERT INTO P(Pno, Pname, Pcolor, Pweight) VALUES('P6', '齿轮', '红', 30);
SELECT * FROM P;
-- 定义 J 表
CREATE TABLE J(
	Jno CHAR(10) PRIMARY KEY, 
	Jname CHAR(10) UNIQUE, 
	Jcity CHAR(10)
);
INSERT INTO J(Jno, Jname, Jcity) VALUES('J1', '三建','北京');
INSERT INTO J(Jno, Jname, Jcity) VALUES('J2', '一汽','长春');
INSERT INTO J(Jno, Jname, Jcity) VALUES('J3', '弹簧厂','天津');
INSERT INTO J(Jno, Jname, Jcity) VALUES('J4', '造船厂','天津');
INSERT INTO J(Jno, Jname, Jcity) VALUES('J5', '机车厂','唐山');
INSERT INTO J(Jno, Jname, Jcity) VALUES('J6', '无线电厂','常州');
INSERT INTO J(Jno, Jname, Jcity) VALUES('J7', '半导体厂','南京');
SELECT * FROM J;
-- 定义 SPJ 表
CREATE TABLE SPJ(
	Sno CHAR(10),
	Pno CHAR(10),
	Jno CHAR(10),
	QTY INT,
	PRIMARY KEY (Sno, Pno, Jno),
	FOREIGN KEY (Sno) REFERENCES S(Sno),
	FOREIGN KEY (Pno) REFERENCES P(Pno),
	FOREIGN KEY (Jno) REFERENCES J(Jno)
);
INSERT INTO SPJ VALUES('S1', 'P1', 'J1', 200);
INSERT INTO SPJ VALUES('S1', 'P1', 'J3', 100);
INSERT INTO SPJ VALUES('S1', 'P1', 'J4', 700);
INSERT INTO SPJ VALUES('S1', 'P2', 'J2', 100);
INSERT INTO SPJ VALUES('S2', 'P3', 'J1', 400);
INSERT INTO SPJ VALUES('S2', 'P3', 'J2', 200);
INSERT INTO SPJ VALUES('S2', 'P3', 'J4', 500);
INSERT INTO SPJ VALUES('S2', 'P3', 'J5', 400);
INSERT INTO SPJ VALUES('S2', 'P5', 'J1', 400);
INSERT INTO SPJ VALUES('S2', 'P5', 'J2', 100);
INSERT INTO SPJ VALUES('S3', 'P1', 'J1', 200);
INSERT INTO SPJ VALUES('S3', 'P3', 'J1', 200);
INSERT INTO SPJ VALUES('S4', 'P5', 'J1', 100);
INSERT INTO SPJ VALUES('S4', 'P6', 'J3', 300);
INSERT INTO SPJ VALUES('S4', 'P6', 'J4', 200);
INSERT INTO SPJ VALUES('S5', 'P2', 'J4', 100);
INSERT INTO SPJ VALUES('S5', 'P3', 'J1', 200);
INSERT INTO SPJ VALUES('S5', 'P6', 'J2', 200);
INSERT INTO SPJ VALUES('S5', 'P6', 'J4', 500);

SELECT * FROM S;
END

UI界面开发展示

这部分因为代码量比较大,所以只放了一些关键代码,完整代码链接在文末
软件开发流程图:
在这里插入图片描述
系统主界面展示:
在这里插入图片描述

  1. 浏览功能
  2. 连接数据库相关信息输入
  3. 其他功能子界面按钮
  4. 数据库数据展示区
  5. 交互终端区

系统功能展示——浏览功能
在这里插入图片描述
系统功能展示——信息录入功能
在这里插入图片描述
信息插入功能关键代码:

# 供应商表信息插入
self.insert_S = "INSERT INTO S(Sno,Sname,Sstatus,Scity) VALUES (\"{}\",\"{}\",\"{}\",\"{}\");".format(SNO,Sname,Sstatus, Scity)
self.SQL_exe(self.insert_S)
# 供应商情况表信息插入
self.insert_SPJ = "INSERT INTO SPJ(Sno,Pno,Jno,QTY) VALUES (\"{}\",\"{}\",\"{}\",\"{}\");".format(Sno,Pno,Jno, QTY)
self.SQL_exe(self.insert_SPJ)

系统功能展示——信息查询功能
在这里插入图片描述
信息查询功能关键代码:

self.select_SNO = "SELECT Sno,Sname,Sstatus,Scity FROM s WHERE SNO=\"{}\";".format(self.SELECT_SNO)
self.read(self.select_SNO)

系统功能展示——信息删除、查询功能
在这里插入图片描述
信息删除功能关键代码:

# 删除顺序很重要
self.delete_spj = "DELETE FROM SPJ WHERE SNO=\"{}\";".format(self.delete_SNO)
self.delete_s = "DELETE FROM S WHERE SNO=\"{}\";".format(self.delete_SNO)
self.read(self.delete_spj)
self.read(self.delete_s)

信息修改功能关键代码:

self.update_spj = "UPDATE SPJ SET QTY=QTY*1.1 WHERE SNO=\"{}\";".format(self.update_SNO)
self.read(self.update_spj)

系统功能展示——特殊情况触发
在这里插入图片描述

完整代码链接:https://gitee.com/zhgn2020814/small-database-management.git

  • 8
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

.别拖至春天.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值