• 小型数据库系统开发作业



    原文链接: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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

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

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

    # 删除顺序很重要
    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    信息修改功能关键代码:

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

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

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

  • 相关阅读:
    【0227】smgr设计机制之新建一个磁盘表文件
    如何用 CMake 生成 C++ 库(支持 find_package 机制)
    学嵌入式好还是java好?
    HarmonyOS NEXT应用开发之MpChart图表实现案例
    uniapp 中app通过视频链接获取封面
    软件设计模式系列之三———工厂方法模式
    Spring Boot 常用注解汇总
    Sql server语句练习
    低码筑梦,扬帆起航|湘潭大学万应低代码实训营圆满结营!
    使用 🧨 Diffusers 实现 ControlNet 高速推理
  • 原文地址:https://blog.csdn.net/qq_52118067/article/details/127624360