小型数据库系统开发作业

文章目录

  • 题目
  • 数据库设计
  • UI界面开发展示

题目

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

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。
小型数据库系统开发作业_第2张图片

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界面开发展示

这部分因为代码量比较大,所以只放了一些关键代码,完整代码链接在文末
软件开发流程图:
小型数据库系统开发作业_第3张图片
系统主界面展示:
小型数据库系统开发作业_第4张图片

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

系统功能展示——浏览功能
小型数据库系统开发作业_第5张图片
系统功能展示——信息录入功能
小型数据库系统开发作业_第6张图片
信息插入功能关键代码:

# 供应商表信息插入
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)

系统功能展示——信息查询功能
小型数据库系统开发作业_第7张图片
信息查询功能关键代码:

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

系统功能展示——信息删除、查询功能
小型数据库系统开发作业_第8张图片
信息删除功能关键代码:

# 删除顺序很重要
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)

系统功能展示——特殊情况触发
小型数据库系统开发作业_第9张图片

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

你可能感兴趣的:(数据库,数据库,sqlite)