├── .gitattributes ├── 2020春《数据库系统》期末试题C-v1.2.pdf ├── lab1_1171800312 ├── .idea │ ├── inspectionProfiles │ │ └── profiles_settings.xml │ ├── lab1_1171800312.iml │ ├── misc.xml │ ├── modules.xml │ └── workspace.xml ├── 1171800312-王荐芃-实验1.doc ├── 1171800312-王荐芃-实验1.pdf ├── __pycache__ │ ├── admin.cpython-37.pyc │ ├── querygrade.cpython-37.pyc │ ├── runadmin.cpython-37.pyc │ ├── selectcourse.cpython-37.pyc │ ├── studentreg.cpython-37.pyc │ ├── teacherreg.cpython-37.pyc │ └── updategrade.cpython-37.pyc ├── admin.py ├── admin.ui ├── createdatabase.py ├── main.py ├── main.ui ├── querygrade.py ├── querygrade.ui ├── runadmin.py ├── school.db ├── selectcourse.py ├── selectcourse.ui ├── studentreg.py ├── studentreg.ui ├── teacherreg.py ├── teacherreg.ui ├── updategrade.py └── updategrade.ui └── lab2_1171800312 ├── .idea ├── inspectionProfiles │ └── profiles_settings.xml ├── lab2_1171800312.iml ├── misc.xml ├── modules.xml └── workspace.xml ├── Readme.txt ├── __pycache__ ├── extmem.cpython-37.pyc ├── main_mem.cpython-37.pyc ├── relation.cpython-37.pyc ├── syntaxtree.cpython-37.pyc ├── untitled.cpython-37.pyc └── untitled2.cpython-37.pyc ├── blks ├── 0.blk ├── 1.blk ├── 10.blk ├── 11.blk ├── 12.blk ├── 13.blk ├── 14.blk ├── 15.blk ├── 16.blk ├── 17.blk ├── 18.blk ├── 19.blk ├── 2.blk ├── 20.blk ├── 21.blk ├── 22.blk ├── 23.blk ├── 24.blk ├── 25.blk ├── 26.blk ├── 27.blk ├── 28.blk ├── 29.blk ├── 3.blk ├── 30.blk ├── 31.blk ├── 32.blk ├── 33.blk ├── 34.blk ├── 35.blk ├── 36.blk ├── 37.blk ├── 38.blk ├── 39.blk ├── 4.blk ├── 40.blk ├── 41.blk ├── 42.blk ├── 43.blk ├── 44.blk ├── 45.blk ├── 46.blk ├── 47.blk ├── 5.blk ├── 6.blk ├── 7.blk ├── 8.blk └── 9.blk ├── extmem.py ├── hash_temp ├── R0_0.blk ├── R0_1.blk ├── R0_2.blk ├── R0_3.blk ├── R1_0.blk ├── R1_1.blk ├── R2_0.blk ├── R2_1.blk ├── R3_0.blk ├── R3_1.blk ├── R3_2.blk ├── R4_0.blk ├── R4_1.blk ├── R4_2.blk ├── R5_0.blk ├── R5_1.blk ├── R5_2.blk ├── R5_3.blk ├── S0_0.blk ├── S0_1.blk ├── S0_2.blk ├── S0_3.blk ├── S0_4.blk ├── S0_5.blk ├── S0_6.blk ├── S1_0.blk ├── S1_1.blk ├── S1_2.blk ├── S1_3.blk ├── S1_4.blk ├── S1_5.blk ├── S2_0.blk ├── S2_1.blk ├── S2_2.blk ├── S2_3.blk ├── S2_4.blk ├── S2_5.blk ├── S3_0.blk ├── S3_1.blk ├── S3_2.blk ├── S3_3.blk ├── S3_4.blk ├── S4_0.blk ├── S4_1.blk ├── S4_2.blk ├── S4_3.blk ├── S4_4.blk ├── S4_5.blk ├── S5_0.blk ├── S5_1.blk ├── S5_2.blk ├── S5_3.blk └── S5_4.blk ├── main_mem.py ├── main_optim.py ├── relation.py ├── result.txt ├── sort_temp ├── 0.blk ├── 1.blk ├── 10.blk ├── 11.blk ├── 12.blk ├── 13.blk ├── 14.blk ├── 15.blk ├── 16.blk ├── 17.blk ├── 18.blk ├── 19.blk ├── 2.blk ├── 20.blk ├── 21.blk ├── 22.blk ├── 23.blk ├── 24.blk ├── 25.blk ├── 26.blk ├── 27.blk ├── 28.blk ├── 29.blk ├── 3.blk ├── 30.blk ├── 31.blk ├── 32.blk ├── 33.blk ├── 34.blk ├── 35.blk ├── 36.blk ├── 37.blk ├── 38.blk ├── 39.blk ├── 4.blk ├── 40.blk ├── 41.blk ├── 42.blk ├── 43.blk ├── 44.blk ├── 45.blk ├── 46.blk ├── 47.blk ├── 5.blk ├── 6.blk ├── 7.blk ├── 8.blk └── 9.blk ├── syntaxtree.py ├── untitled.py ├── untitled.ui ├── untitled2.py └── untitled2.ui /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /2020春《数据库系统》期末试题C-v1.2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1171800312/hit_database_2020/f8caa95b5438993cb0cd5a8a380767b2f254c6a1/2020春《数据库系统》期末试题C-v1.2.pdf -------------------------------------------------------------------------------- /lab1_1171800312/.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /lab1_1171800312/.idea/lab1_1171800312.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /lab1_1171800312/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /lab1_1171800312/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /lab1_1171800312/.idea/workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 16 | 17 | 18 | 19 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 55 | 56 | 57 | 76 | 77 | 78 | 97 | 98 | 99 | 118 | 119 | 120 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 1584712325065 163 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | file://$PROJECT_DIR$/teacherreg.py 244 | 125 245 | 247 | 248 | 249 | 250 | -------------------------------------------------------------------------------- /lab1_1171800312/1171800312-王荐芃-实验1.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1171800312/hit_database_2020/f8caa95b5438993cb0cd5a8a380767b2f254c6a1/lab1_1171800312/1171800312-王荐芃-实验1.doc -------------------------------------------------------------------------------- /lab1_1171800312/1171800312-王荐芃-实验1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1171800312/hit_database_2020/f8caa95b5438993cb0cd5a8a380767b2f254c6a1/lab1_1171800312/1171800312-王荐芃-实验1.pdf -------------------------------------------------------------------------------- /lab1_1171800312/__pycache__/admin.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1171800312/hit_database_2020/f8caa95b5438993cb0cd5a8a380767b2f254c6a1/lab1_1171800312/__pycache__/admin.cpython-37.pyc -------------------------------------------------------------------------------- /lab1_1171800312/__pycache__/querygrade.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1171800312/hit_database_2020/f8caa95b5438993cb0cd5a8a380767b2f254c6a1/lab1_1171800312/__pycache__/querygrade.cpython-37.pyc -------------------------------------------------------------------------------- /lab1_1171800312/__pycache__/runadmin.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1171800312/hit_database_2020/f8caa95b5438993cb0cd5a8a380767b2f254c6a1/lab1_1171800312/__pycache__/runadmin.cpython-37.pyc -------------------------------------------------------------------------------- /lab1_1171800312/__pycache__/selectcourse.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1171800312/hit_database_2020/f8caa95b5438993cb0cd5a8a380767b2f254c6a1/lab1_1171800312/__pycache__/selectcourse.cpython-37.pyc -------------------------------------------------------------------------------- /lab1_1171800312/__pycache__/studentreg.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1171800312/hit_database_2020/f8caa95b5438993cb0cd5a8a380767b2f254c6a1/lab1_1171800312/__pycache__/studentreg.cpython-37.pyc -------------------------------------------------------------------------------- /lab1_1171800312/__pycache__/teacherreg.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1171800312/hit_database_2020/f8caa95b5438993cb0cd5a8a380767b2f254c6a1/lab1_1171800312/__pycache__/teacherreg.cpython-37.pyc -------------------------------------------------------------------------------- /lab1_1171800312/__pycache__/updategrade.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1171800312/hit_database_2020/f8caa95b5438993cb0cd5a8a380767b2f254c6a1/lab1_1171800312/__pycache__/updategrade.cpython-37.pyc -------------------------------------------------------------------------------- /lab1_1171800312/admin.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'admin.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.9.2 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | import sqlite3 11 | import traceback 12 | 13 | class Ui_MainWindow(object): 14 | def adddepartment(self): 15 | dname = self.deptname.text() 16 | dno = self.deptnum.text() 17 | try: 18 | conn = sqlite3.connect("school.db") 19 | cursor = conn.cursor() 20 | # 注意单双引号 21 | cursor.execute('insert into dept values(?,?)',(dno,dname)) 22 | # cursor.execute("select * from user") 23 | # print(cursor.fetchone()) 24 | # print(cursor.fetchmany(100)) 25 | cursor.execute("") 26 | conn.commit() 27 | cursor.close() 28 | conn.close() 29 | self.label_5.setText("追加"+dname+"成功") 30 | except Exception: 31 | traceback.print_exc() 32 | self.label_5.setText("不满足完整性约束") 33 | conn.rollback() 34 | cursor.close() 35 | conn.close() 36 | 37 | def addclass(self): 38 | clsno = self.clsnum.text() 39 | clsname= self.clsname.text() 40 | try: 41 | conn = sqlite3.connect("school.db") 42 | cursor = conn.cursor() 43 | # 注意单双引号 44 | cursor.execute('insert into cls values(?,?)', (clsno, clsname))#要更改插入的表 45 | # cursor.execute("select * from user") 46 | # print(cursor.fetchone()) 47 | # print(cursor.fetchmany(100)) 48 | conn.commit() 49 | cursor.close() 50 | conn.close() 51 | self.label_5.setText("追加" + clsname + "成功") 52 | except Exception: 53 | traceback.print_exc() 54 | self.label_5.setText("不满足完整性约束") 55 | conn.rollback() 56 | cursor.close() 57 | conn.close() 58 | 59 | def setupUi(self, MainWindow): 60 | MainWindow.setObjectName("MainWindow") 61 | MainWindow.resize(378, 368) 62 | self.centralwidget = QtWidgets.QWidget(MainWindow) 63 | self.centralwidget.setObjectName("centralwidget") 64 | self.formLayoutWidget = QtWidgets.QWidget(self.centralwidget) 65 | self.formLayoutWidget.setGeometry(QtCore.QRect(100, 90, 160, 80)) 66 | self.formLayoutWidget.setObjectName("formLayoutWidget") 67 | self.formLayout = QtWidgets.QFormLayout(self.formLayoutWidget) 68 | self.formLayout.setContentsMargins(0, 0, 0, 0) 69 | self.formLayout.setObjectName("formLayout") 70 | self.label = QtWidgets.QLabel(self.formLayoutWidget) 71 | self.label.setObjectName("label") 72 | self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label) 73 | self.label_2 = QtWidgets.QLabel(self.formLayoutWidget) 74 | self.label_2.setObjectName("label_2") 75 | self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_2) 76 | self.adddept = QtWidgets.QPushButton(self.formLayoutWidget) 77 | self.adddept.setObjectName("adddept") 78 | self.adddept.clicked.connect(self.adddepartment) 79 | self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.adddept) 80 | self.deptnum = QtWidgets.QLineEdit(self.formLayoutWidget) 81 | self.deptnum.setObjectName("deptnum") 82 | self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.deptnum) 83 | self.deptname = QtWidgets.QLineEdit(self.formLayoutWidget) 84 | self.deptname.setObjectName("deptname") 85 | self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.deptname) 86 | self.formLayoutWidget_2 = QtWidgets.QWidget(self.centralwidget) 87 | self.formLayoutWidget_2.setGeometry(QtCore.QRect(100, 200, 160, 80)) 88 | self.formLayoutWidget_2.setObjectName("formLayoutWidget_2") 89 | self.formLayout_2 = QtWidgets.QFormLayout(self.formLayoutWidget_2) 90 | self.formLayout_2.setContentsMargins(0, 0, 0, 0) 91 | self.formLayout_2.setObjectName("formLayout_2") 92 | self.label_3 = QtWidgets.QLabel(self.formLayoutWidget_2) 93 | self.label_3.setObjectName("label_3") 94 | self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_3) 95 | self.label_4 = QtWidgets.QLabel(self.formLayoutWidget_2) 96 | self.label_4.setObjectName("label_4") 97 | self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_4) 98 | self.addcls = QtWidgets.QPushButton(self.formLayoutWidget_2) 99 | self.addcls.setObjectName("addcls") 100 | self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.addcls) 101 | self.addcls.clicked.connect(self.addclass) 102 | self.clsnum = QtWidgets.QLineEdit(self.formLayoutWidget_2) 103 | self.clsnum.setObjectName("clsnum") 104 | self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.clsnum) 105 | self.clsname = QtWidgets.QLineEdit(self.formLayoutWidget_2) 106 | self.clsname.setObjectName("clsname") 107 | self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.clsname) 108 | self.label_5 = QtWidgets.QLabel(self.centralwidget) 109 | self.label_5.setGeometry(QtCore.QRect(120, 20, 180, 50)) 110 | self.label_5.setObjectName("label_5") 111 | MainWindow.setCentralWidget(self.centralwidget) 112 | self.menubar = QtWidgets.QMenuBar(MainWindow) 113 | self.menubar.setGeometry(QtCore.QRect(0, 0, 378, 21)) 114 | self.menubar.setObjectName("menubar") 115 | MainWindow.setMenuBar(self.menubar) 116 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 117 | self.statusbar.setObjectName("statusbar") 118 | MainWindow.setStatusBar(self.statusbar) 119 | 120 | self.retranslateUi(MainWindow) 121 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 122 | def getinfo(self): 123 | try: 124 | conn = sqlite3.connect("school.db") 125 | #指定访问的数据库文件名称 126 | cursor = conn.cursor() 127 | cursor.execute("SELECT count(*),dept.dno FROM dept left outer NATURAL join student group by dept.dno having count(*)>=3") 128 | #把这一块换成你的SQL语句 129 | res =(cursor.fetchall()) 130 | #fetchall函数可以返回所有的查询结果,以元组的格式体现 131 | tag ="" 132 | #输出的临时字符串 133 | for temp in res: 134 | tag+=("系号:"+str(temp[1])+" 当前注册人数:"+str(temp[0])+"\n") 135 | #把fetchall得到的结果转换成字符串 136 | conn.commit() 137 | #保存更改 138 | cursor.close() 139 | #关闭数据库 140 | conn.close() 141 | self.label_5.setText(tag) 142 | except Exception: 143 | traceback.print_exc() 144 | self.label_5.setText("程序出现异常") 145 | conn.rollback() 146 | cursor.close() 147 | conn.close() 148 | def retranslateUi(self, MainWindow): 149 | _translate = QtCore.QCoreApplication.translate 150 | MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 151 | self.label.setText(_translate("MainWindow", "系号")) 152 | self.label_2.setText(_translate("MainWindow", "系名")) 153 | self.adddept.setText(_translate("MainWindow", "追加系")) 154 | self.label_3.setText(_translate("MainWindow", "班号")) 155 | self.label_4.setText(_translate("MainWindow", "班级名称")) 156 | self.addcls.setText(_translate("MainWindow", "追加班级")) 157 | self.label_5.setText(_translate("MainWindow", "教务视角")) 158 | self.getinfo() 159 | 160 | -------------------------------------------------------------------------------- /lab1_1171800312/admin.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 378 10 | 368 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 100 21 | 90 22 | 160 23 | 80 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 | 100 60 | 200 61 | 160 62 | 80 63 | 64 | 65 | 66 | 67 | 68 | 69 | 班号 70 | 71 | 72 | 73 | 74 | 75 | 76 | 班长学号 77 | 78 | 79 | 80 | 81 | 82 | 83 | 追加班级 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 160 99 | 40 100 | 47 101 | 13 102 | 103 | 104 | 105 | 教务视角 106 | 107 | 108 | 109 | 110 | 111 | 112 | 0 113 | 0 114 | 378 115 | 21 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /lab1_1171800312/createdatabase.py: -------------------------------------------------------------------------------- 1 | import sqlite3 2 | #创建连接对象 3 | conn = sqlite3.connect("school.db") 4 | cursor = conn.cursor() 5 | #cursor.execute("create table student(sno bigint primary key,sname varchar(30), ssex char(4), password varchar(30), qq bigint, tel bigint, dno int, clsno int,foreign key(dno) references dept(dno),foreign key(clsno) references cls(clsno))") 6 | #cursor.execute("create table teacher(tno bigint primary key, tname varchar(30),tsex char(4),password varchar(30),dept int,foreign key(dept) references dept(dno))") 7 | #cursor.execute("create table course(cno bigint primary key, credit decimal(6,2),tno bigint,coursename varchar(30),foreign key(tno) references teacher(tno))") 8 | 9 | #cursor.execute("create table sel(sno bigint,cno bigint, grade decimal(6,2),primary key (sno,cno),foreign key(sno) references student(sno),foreign key(cno) references course(cno))") 10 | #cursor.execute("create table edu(sno bigint, level varchar(30),school varchar(100),sdate varchar(30),primary key(sno,level),foreign key(sno) references student(sno))") 11 | #cursor.execute("create table parents(sno bigint, pname varchar(30), psex char(4),ptel bigint,primary key(sno,pname),foreign key(sno) references student(sno))") 12 | #cursor.execute("create view studentview as select ) 13 | #cursor.execute("create table dept(dno int primary key,dname varchar(30))") 14 | cursor.execute("create table cls(clsno int primary key,clsname varchar(30))") 15 | 16 | #注意单双引号 17 | #cursor.execute('insert into user values(?,?)',(3,"你好")) 18 | #cursor.execute("select * from user") 19 | #print(cursor.fetchone()) 20 | #print(cursor.fetchmany(100)) 21 | conn.commit() 22 | cursor.close() 23 | conn.close() -------------------------------------------------------------------------------- /lab1_1171800312/main.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'main.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.9.2 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | import sys 9 | import runadmin 10 | from PyQt5 import QtCore, QtGui, QtWidgets 11 | from PyQt5.QtWidgets import QApplication,QMainWindow,QMessageBox 12 | from tkinter.simpledialog import askinteger 13 | class Ui_MainWindow(object): 14 | def setupUi(self, MainWindow): 15 | MainWindow.setObjectName("MainWindow") 16 | MainWindow.resize(664, 487) 17 | self.centralwidget = QtWidgets.QWidget(MainWindow) 18 | self.centralwidget.setObjectName("centralwidget") 19 | self.gridLayoutWidget = QtWidgets.QWidget(self.centralwidget) 20 | self.gridLayoutWidget.setGeometry(QtCore.QRect(110, 140, 431, 251)) 21 | self.gridLayoutWidget.setObjectName("gridLayoutWidget") 22 | self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget) 23 | self.gridLayout.setContentsMargins(0, 0, 0, 0) 24 | self.gridLayout.setObjectName("gridLayout") 25 | self.shangchengji = QtWidgets.QPushButton(self.gridLayoutWidget) 26 | self.shangchengji.setMaximumSize(QtCore.QSize(150, 50)) 27 | self.shangchengji.setObjectName("shangchengji") 28 | self.gridLayout.addWidget(self.shangchengji, 2, 1, 1, 1) 29 | self.chachengji = QtWidgets.QPushButton(self.gridLayoutWidget) 30 | self.chachengji.setMaximumSize(QtCore.QSize(150, 50)) 31 | self.chachengji.setObjectName("chachengji") 32 | self.gridLayout.addWidget(self.chachengji, 3, 1, 1, 1) 33 | self.jiaoshizhuce = QtWidgets.QPushButton(self.gridLayoutWidget) 34 | self.jiaoshizhuce.setMaximumSize(QtCore.QSize(150, 50)) 35 | self.jiaoshizhuce.setObjectName("jiaoshizhuce") 36 | self.gridLayout.addWidget(self.jiaoshizhuce, 3, 0, 1, 1) 37 | self.xueshengxuanke = QtWidgets.QPushButton(self.gridLayoutWidget) 38 | self.xueshengxuanke.setMaximumSize(QtCore.QSize(150, 50)) 39 | self.xueshengxuanke.setObjectName("xueshengxuanke") 40 | self.gridLayout.addWidget(self.xueshengxuanke, 0, 1, 1, 1) 41 | self.xueshengzhuce = QtWidgets.QPushButton(self.gridLayoutWidget) 42 | self.xueshengzhuce.setMaximumSize(QtCore.QSize(150, 50)) 43 | self.xueshengzhuce.setObjectName("xueshengzhuce") 44 | self.gridLayout.addWidget(self.xueshengzhuce, 2, 0, 1, 1) 45 | self.yuanxiguanli = QtWidgets.QPushButton(self.gridLayoutWidget) 46 | self.yuanxiguanli.setMaximumSize(QtCore.QSize(150, 50)) 47 | self.yuanxiguanli.setObjectName("yuanxiguanli") 48 | self.gridLayout.addWidget(self.yuanxiguanli, 0, 0, 1, 1) 49 | self.label = QtWidgets.QLabel(self.centralwidget) 50 | self.label.setGeometry(QtCore.QRect(160, 50, 411, 51)) 51 | font = QtGui.QFont() 52 | font.setPointSize(22) 53 | self.label.setFont(font) 54 | self.label.setObjectName("label") 55 | MainWindow.setCentralWidget(self.centralwidget) 56 | self.menubar = QtWidgets.QMenuBar(MainWindow) 57 | self.menubar.setGeometry(QtCore.QRect(0, 0, 664, 21)) 58 | self.menubar.setObjectName("menubar") 59 | MainWindow.setMenuBar(self.menubar) 60 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 61 | self.statusbar.setObjectName("statusbar") 62 | MainWindow.setStatusBar(self.statusbar) 63 | 64 | self.retranslateUi(MainWindow) 65 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 66 | 67 | def updategrade(self): 68 | runadmin.startApp(5) 69 | def querygrade(self): 70 | print(6) 71 | def teacherreg(self): 72 | print(3) 73 | def selectcourse(self): 74 | print(4) 75 | def studentreg(self): 76 | print(2) 77 | def deptadmin(self): 78 | print(1) 79 | 80 | 81 | def retranslateUi(self, MainWindow): 82 | _translate = QtCore.QCoreApplication.translate 83 | MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 84 | self.shangchengji.setText(_translate("MainWindow", "上成绩")) 85 | self.shangchengji.clicked.connect(self.updategrade) 86 | self.chachengji.setText(_translate("MainWindow", "查成绩")) 87 | self.chachengji.clicked.connect(self.querygrade) 88 | self.jiaoshizhuce.setText(_translate("MainWindow", "教师注册")) 89 | self.jiaoshizhuce.clicked.connect(self.teacherreg) 90 | self.xueshengxuanke.setText(_translate("MainWindow", "学生选课")) 91 | self.xueshengxuanke.clicked.connect(self.selectcourse) 92 | self.xueshengzhuce.setText(_translate("MainWindow", "学生注册")) 93 | self.xueshengzhuce.clicked.connect(self.studentreg) 94 | self.yuanxiguanli.setText(_translate("MainWindow", "院系管理")) 95 | self.yuanxiguanli.clicked.connect(self.deptadmin) 96 | self.label.setText(_translate("MainWindow", "学生成绩管理系统 by WJP")) 97 | 98 | #var_int = askinteger("hello","world") 99 | #runadmin.startApp(var_int) 100 | 101 | 102 | import tkinter as tk 103 | 104 | # 设置窗口 105 | 106 | window = tk.Tk() 107 | window.title('学生管理系统by WJP') 108 | window.geometry('350x200') 109 | l = tk.Label(window,text="请选择功能:\n 1.院系管理 \n 2.学生注册 \n 3.教师注册 \n 4.学生选课 \n 5.上成绩 \n 6.查成绩") 110 | l.pack() 111 | e = tk.Entry() 112 | e.pack() 113 | def insert_point(): 114 | var1 = int(e.get()) 115 | print(var1) 116 | runadmin.startApp(var1) 117 | b1 = tk.Button(text='启动', width=20, height=2, command=insert_point) 118 | b1.pack() 119 | window.mainloop() 120 | 121 | -------------------------------------------------------------------------------- /lab1_1171800312/main.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 664 10 | 487 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 110 21 | 140 22 | 431 23 | 251 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 150 32 | 50 33 | 34 | 35 | 36 | 上成绩 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 150 45 | 50 46 | 47 | 48 | 49 | 查成绩 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 150 58 | 50 59 | 60 | 61 | 62 | 教师注册 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 150 71 | 50 72 | 73 | 74 | 75 | 学生选课 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 150 84 | 50 85 | 86 | 87 | 88 | 学生注册 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 150 97 | 50 98 | 99 | 100 | 101 | 院系管理 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 130 111 | 50 112 | 411 113 | 51 114 | 115 | 116 | 117 | 118 | 26 119 | 120 | 121 | 122 | 学生成绩管理系统 by WJP 123 | 124 | 125 | 126 | 127 | 128 | 129 | 0 130 | 0 131 | 664 132 | 21 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | -------------------------------------------------------------------------------- /lab1_1171800312/querygrade.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'querygrade.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.9.2 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | import sqlite3 9 | import traceback 10 | 11 | from PyQt5 import QtCore, QtGui, QtWidgets 12 | 13 | class Ui_MainWindow(object): 14 | def setupUi(self, MainWindow): 15 | MainWindow.setObjectName("MainWindow") 16 | MainWindow.resize(645, 477) 17 | self.centralwidget = QtWidgets.QWidget(MainWindow) 18 | self.centralwidget.setObjectName("centralwidget") 19 | self.xuehao = QtWidgets.QLineEdit(self.centralwidget) 20 | self.xuehao.setGeometry(QtCore.QRect(90, 20, 158, 20)) 21 | self.xuehao.setObjectName("xuehao") 22 | self.label = QtWidgets.QLabel(self.centralwidget) 23 | self.label.setGeometry(QtCore.QRect(50, 10, 31, 39)) 24 | self.label.setObjectName("label") 25 | self.mima = QtWidgets.QLineEdit(self.centralwidget) 26 | self.mima.setGeometry(QtCore.QRect(310, 20, 158, 20)) 27 | self.mima.setText("") 28 | self.mima.setEchoMode(QtWidgets.QLineEdit.Password) 29 | self.mima.setObjectName("mima") 30 | self.label_2 = QtWidgets.QLabel(self.centralwidget) 31 | self.label_2.setGeometry(QtCore.QRect(270, 10, 31, 39)) 32 | self.label_2.setObjectName("label_2") 33 | self.chachengji = QtWidgets.QPushButton(self.centralwidget) 34 | self.chachengji.setGeometry(QtCore.QRect(500, 20, 75, 23)) 35 | self.chachengji.setObjectName("chachengji") 36 | self.chengjixianshi = QtWidgets.QLabel(self.centralwidget) 37 | self.chengjixianshi.setGeometry(QtCore.QRect(90, 70, 451, 201)) 38 | self.chengjixianshi.setObjectName("chengjixianshi") 39 | self.chengjifenxi = QtWidgets.QLabel(self.centralwidget) 40 | self.chengjifenxi.setGeometry(QtCore.QRect(90, 320, 431, 71)) 41 | self.chengjifenxi.setObjectName("chengjifenxi") 42 | MainWindow.setCentralWidget(self.centralwidget) 43 | self.menubar = QtWidgets.QMenuBar(MainWindow) 44 | self.menubar.setGeometry(QtCore.QRect(0, 0, 645, 21)) 45 | self.menubar.setObjectName("menubar") 46 | MainWindow.setMenuBar(self.menubar) 47 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 48 | self.statusbar.setObjectName("statusbar") 49 | MainWindow.setStatusBar(self.statusbar) 50 | 51 | self.retranslateUi(MainWindow) 52 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 53 | def seecourses(self): 54 | snumber = (self.xuehao.text()) 55 | password = (self.mima.text()) 56 | try: 57 | conn = sqlite3.connect("school.db") 58 | cursor = conn.cursor() 59 | # 注意单双引号 60 | cursor.execute("PRAGMA foreign_keys = ON") 61 | #cursor.execute('insert into course values(?,?,?,?)',(cno,credit,tno,coursename)) 62 | cursor.execute("select password from student where sno = ?",(snumber,)) 63 | res = cursor.fetchone() 64 | if res== None: 65 | self.chengjixianshi.setText("学生不存在") 66 | return 67 | if res[0] == password: 68 | self.chengjixianshi.setText("输入正确") 69 | cursor.execute("select * from course natural join teacher natural join sel where sno = ?",(snumber,)) 70 | result = "" 71 | for temp in cursor.fetchall(): 72 | result+=("课程号:"+str(temp[0])+" 课程名:"+str(temp[3])+" 学分:"+str(temp[1])+" 任课教师:"+str(temp[4])) 73 | if temp[9]==-1: 74 | result+=(" 未上成绩") 75 | else: 76 | result+=(" 成绩:"+str(temp[9])) 77 | result+="\n" 78 | self.chengjixianshi.setText(result) 79 | else: 80 | self.chengjixianshi.setText("密码错误") 81 | # print(cursor.fetchall()) 82 | conn.commit() 83 | cursor.close() 84 | conn.close() 85 | except sqlite3.IntegrityError: 86 | traceback.print_exc() 87 | self.kexuankecheng.setText("完整性约束不符合") 88 | conn.rollback() 89 | cursor.close() 90 | conn.close() 91 | 92 | def retranslateUi(self, MainWindow): 93 | _translate = QtCore.QCoreApplication.translate 94 | MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 95 | self.label.setText(_translate("MainWindow", "学号")) 96 | self.label_2.setText(_translate("MainWindow", "密码")) 97 | self.chachengji.setText(_translate("MainWindow", "查成绩")) 98 | self.chachengji.clicked.connect(self.seecourses) 99 | self.chengjixianshi.setText(_translate("MainWindow", "成绩将显示在这里")) 100 | self.chengjifenxi.setText(_translate("MainWindow", "成绩分析")) 101 | 102 | -------------------------------------------------------------------------------- /lab1_1171800312/querygrade.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 645 10 | 477 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 90 21 | 20 22 | 158 23 | 20 24 | 25 | 26 | 27 | 28 | 29 | 30 | 50 31 | 10 32 | 31 33 | 39 34 | 35 | 36 | 37 | 学号 38 | 39 | 40 | 41 | 42 | 43 | 310 44 | 20 45 | 158 46 | 20 47 | 48 | 49 | 50 | 51 | 52 | 53 | QLineEdit::Password 54 | 55 | 56 | 57 | 58 | 59 | 270 60 | 10 61 | 31 62 | 39 63 | 64 | 65 | 66 | 密码 67 | 68 | 69 | 70 | 71 | 72 | 500 73 | 20 74 | 75 75 | 23 76 | 77 | 78 | 79 | 查成绩 80 | 81 | 82 | 83 | 84 | 85 | 90 86 | 70 87 | 451 88 | 201 89 | 90 | 91 | 92 | 成绩将显示在这里 93 | 94 | 95 | 96 | 97 | 98 | 90 99 | 320 100 | 431 101 | 71 102 | 103 | 104 | 105 | 成绩分析 106 | 107 | 108 | 109 | 110 | 111 | 112 | 0 113 | 0 114 | 645 115 | 21 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /lab1_1171800312/runadmin.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import admin 3 | import studentreg 4 | import teacherreg 5 | import selectcourse 6 | import updategrade 7 | import querygrade 8 | from PyQt5.QtWidgets import QApplication,QMainWindow,QMessageBox 9 | 10 | def startApp(a): 11 | if a==1: 12 | app = QApplication(sys.argv) 13 | mainWindow = QMainWindow() 14 | ui = admin.Ui_MainWindow() 15 | # 向主窗口上添加控件 16 | ui.setupUi(mainWindow) 17 | mainWindow.setWindowTitle("院系管理") 18 | mainWindow.show() 19 | sys.exit(app.exec_()) 20 | elif a==2: 21 | app = QApplication(sys.argv) 22 | mainWindow = QMainWindow() 23 | ui = studentreg.Ui_MainWindow() 24 | # 向主窗口上添加控件 25 | ui.setupUi(mainWindow) 26 | mainWindow.setWindowTitle("学生注册") 27 | mainWindow.show() 28 | sys.exit(app.exec_()) 29 | elif a==3: 30 | app = QApplication(sys.argv) 31 | mainWindow = QMainWindow() 32 | ui = teacherreg.Ui_MainWindow() 33 | # 向主窗口上添加控件 34 | ui.setupUi(mainWindow) 35 | mainWindow.setWindowTitle("教师注册") 36 | mainWindow.show() 37 | sys.exit(app.exec_()) 38 | elif a==4: 39 | app = QApplication(sys.argv) 40 | mainWindow = QMainWindow() 41 | ui = selectcourse.Ui_MainWindow() 42 | # 向主窗口上添加控件 43 | ui.setupUi(mainWindow) 44 | mainWindow.setWindowTitle("学生选课") 45 | mainWindow.show() 46 | sys.exit(app.exec_()) 47 | elif a==5: 48 | app = QApplication(sys.argv) 49 | mainWindow = QMainWindow() 50 | ui = updategrade.Ui_MainWindow() 51 | # 向主窗口上添加控件 52 | ui.setupUi(mainWindow) 53 | mainWindow.setWindowTitle("上成绩") 54 | mainWindow.show() 55 | sys.exit(app.exec_()) 56 | elif a==6: 57 | app = QApplication(sys.argv) 58 | mainWindow = QMainWindow() 59 | ui = querygrade.Ui_MainWindow() 60 | # 向主窗口上添加控件 61 | ui.setupUi(mainWindow) 62 | mainWindow.setWindowTitle("查成绩") 63 | mainWindow.show() 64 | sys.exit(app.exec_()) 65 | else: 66 | print("error") -------------------------------------------------------------------------------- /lab1_1171800312/school.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1171800312/hit_database_2020/f8caa95b5438993cb0cd5a8a380767b2f254c6a1/lab1_1171800312/school.db -------------------------------------------------------------------------------- /lab1_1171800312/selectcourse.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'selectcourse.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.9.2 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | import sqlite3 9 | import traceback 10 | 11 | from PyQt5 import QtCore, QtGui, QtWidgets 12 | 13 | class Ui_MainWindow(object): 14 | def setupUi(self, MainWindow): 15 | MainWindow.setObjectName("MainWindow") 16 | MainWindow.resize(645, 401) 17 | self.centralwidget = QtWidgets.QWidget(MainWindow) 18 | self.centralwidget.setObjectName("centralwidget") 19 | self.xuehao = QtWidgets.QLineEdit(self.centralwidget) 20 | self.xuehao.setGeometry(QtCore.QRect(90, 20, 158, 20)) 21 | self.xuehao.setObjectName("xuehao") 22 | self.label = QtWidgets.QLabel(self.centralwidget) 23 | self.label.setGeometry(QtCore.QRect(50, 10, 31, 39)) 24 | self.label.setObjectName("label") 25 | self.mima = QtWidgets.QLineEdit(self.centralwidget) 26 | self.mima.setGeometry(QtCore.QRect(310, 20, 158, 20)) 27 | self.mima.setText("") 28 | self.mima.setEchoMode(QtWidgets.QLineEdit.Password) 29 | self.mima.setObjectName("mima") 30 | self.label_2 = QtWidgets.QLabel(self.centralwidget) 31 | self.label_2.setGeometry(QtCore.QRect(270, 10, 31, 39)) 32 | self.label_2.setObjectName("label_2") 33 | self.chaxunkexuankecheng = QtWidgets.QPushButton(self.centralwidget) 34 | self.chaxunkexuankecheng.setGeometry(QtCore.QRect(500, 20, 75, 23)) 35 | self.chaxunkexuankecheng.setObjectName("chaxunkexuankecheng") 36 | self.kexuankecheng = QtWidgets.QLabel(self.centralwidget) 37 | self.kexuankecheng.setGeometry(QtCore.QRect(90, 70, 461, 201)) 38 | self.kexuankecheng.setObjectName("kexuankecheng") 39 | self.label_4 = QtWidgets.QLabel(self.centralwidget) 40 | self.label_4.setGeometry(QtCore.QRect(80, 310, 47, 13)) 41 | self.label_4.setObjectName("label_4") 42 | self.kehao = QtWidgets.QLineEdit(self.centralwidget) 43 | self.kehao.setGeometry(QtCore.QRect(150, 310, 113, 20)) 44 | self.kehao.setObjectName("kehao") 45 | self.xuanke = QtWidgets.QPushButton(self.centralwidget) 46 | self.xuanke.setGeometry(QtCore.QRect(300, 310, 75, 23)) 47 | self.xuanke.setObjectName("xuanke") 48 | MainWindow.setCentralWidget(self.centralwidget) 49 | self.menubar = QtWidgets.QMenuBar(MainWindow) 50 | self.menubar.setGeometry(QtCore.QRect(0, 0, 645, 21)) 51 | self.menubar.setObjectName("menubar") 52 | MainWindow.setMenuBar(self.menubar) 53 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 54 | self.statusbar.setObjectName("statusbar") 55 | MainWindow.setStatusBar(self.statusbar) 56 | 57 | self.retranslateUi(MainWindow) 58 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 59 | def seecourses(self): 60 | snumber = (self.xuehao.text()) 61 | password = (self.mima.text()) 62 | try: 63 | conn = sqlite3.connect("school.db") 64 | cursor = conn.cursor() 65 | # 注意单双引号 66 | cursor.execute("PRAGMA foreign_keys = ON") 67 | #cursor.execute('insert into course values(?,?,?,?)',(cno,credit,tno,coursename)) 68 | cursor.execute("select password from student where sno = ?",(snumber,)) 69 | res = cursor.fetchone() 70 | if res== None: 71 | self.kexuankecheng.setText("学生不存在") 72 | return 73 | if res[0] == password: 74 | self.kexuankecheng.setText("输入正确") 75 | #体现嵌套查询 76 | cursor.execute("select * from course natural join teacher where dept in(select dno from student where sno = ?)",(snumber,)) 77 | result = "" 78 | for temp in cursor.fetchall(): 79 | result+=("课程号:"+str(temp[0])+" 课程名:"+str(temp[3])+" 学分:"+str(temp[1])+" 任课教师:"+str(temp[4])+"\n") 80 | self.kexuankecheng.setText(result) 81 | else: 82 | self.kexuankecheng.setText("密码错误") 83 | # print(cursor.fetchall()) 84 | conn.commit() 85 | cursor.close() 86 | conn.close() 87 | except sqlite3.IntegrityError: 88 | traceback.print_exc() 89 | self.kexuankecheng.setText("完整性约束不符合") 90 | conn.rollback() 91 | cursor.close() 92 | conn.close() 93 | def selectcourse(self): 94 | sno = self.xuehao.text() 95 | cno = self.kehao.text() 96 | try: 97 | conn = sqlite3.connect("school.db") 98 | cursor = conn.cursor() 99 | # 注意单双引号 100 | cursor.execute("PRAGMA foreign_keys = ON") 101 | cursor.execute("select * from sel where sno =? and cno = ?",(sno,cno)) 102 | res = cursor.fetchall() 103 | if res!=[]: 104 | cursor.execute("delete from sel where sno = ? and cno = ?",(sno,cno)) 105 | self.xuanke.setText("退课成功") 106 | else: 107 | cursor.execute('insert into sel values(?,?,?)', (sno,cno,-1)) 108 | self.xuanke.setText("选课成功") 109 | # cursor.execute("select * from user") 110 | # print(cursor.fetchone()) 111 | # print(cursor.fetchmany(100)) 112 | conn.commit() 113 | cursor.close() 114 | conn.close() 115 | 116 | except sqlite3.IntegrityError: 117 | traceback.print_exc() 118 | self.xuanke.setText("选课失败") 119 | conn.rollback() 120 | cursor.close() 121 | conn.close() 122 | def retranslateUi(self, MainWindow): 123 | _translate = QtCore.QCoreApplication.translate 124 | MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 125 | self.label.setText(_translate("MainWindow", "学号")) 126 | self.label_2.setText(_translate("MainWindow", "密码")) 127 | self.chaxunkexuankecheng.setText(_translate("MainWindow", "查询可选课程")) 128 | self.chaxunkexuankecheng.clicked.connect(self.seecourses) 129 | self.kexuankecheng.setText(_translate("MainWindow", "输入学号和密码,可查询可选课程")) 130 | self.label_4.setText(_translate("MainWindow", "课号")) 131 | self.xuanke.setText(_translate("MainWindow", "选课")) 132 | self.xuanke.clicked.connect(self.selectcourse) 133 | -------------------------------------------------------------------------------- /lab1_1171800312/selectcourse.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 645 10 | 401 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 90 21 | 20 22 | 158 23 | 20 24 | 25 | 26 | 27 | 28 | 29 | 30 | 50 31 | 10 32 | 31 33 | 39 34 | 35 | 36 | 37 | 学号 38 | 39 | 40 | 41 | 42 | 43 | 310 44 | 20 45 | 158 46 | 20 47 | 48 | 49 | 50 | 51 | 52 | 53 | QLineEdit::Password 54 | 55 | 56 | 57 | 58 | 59 | 270 60 | 10 61 | 31 62 | 39 63 | 64 | 65 | 66 | 密码 67 | 68 | 69 | 70 | 71 | 72 | 500 73 | 20 74 | 75 75 | 23 76 | 77 | 78 | 79 | 查询可选课程 80 | 81 | 82 | 83 | 84 | 85 | 90 86 | 70 87 | 461 88 | 201 89 | 90 | 91 | 92 | TextLabel 93 | 94 | 95 | 96 | 97 | 98 | 80 99 | 310 100 | 47 101 | 13 102 | 103 | 104 | 105 | 课号 106 | 107 | 108 | 109 | 110 | 111 | 150 112 | 310 113 | 113 114 | 20 115 | 116 | 117 | 118 | 119 | 120 | 121 | 300 122 | 310 123 | 75 124 | 23 125 | 126 | 127 | 128 | 选课 129 | 130 | 131 | 132 | 133 | 134 | 135 | 0 136 | 0 137 | 645 138 | 21 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | -------------------------------------------------------------------------------- /lab1_1171800312/studentreg.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'studentreg.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.9.2 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | import sqlite3 11 | import traceback 12 | 13 | class Ui_MainWindow(object): 14 | def studentregister(self): 15 | sno = self.number.text() 16 | sname = self.name.text() 17 | ssex = self.sex.currentText() 18 | psword = self.password.text() 19 | qq = self.QQnum.text() 20 | telnum = self.tel.text() 21 | dno = self.deptnum.text() 22 | clsno = self.classnum.text() 23 | try: 24 | conn = sqlite3.connect("school.db") 25 | cursor = conn.cursor() 26 | # 注意单双引号 27 | cursor.execute("PRAGMA foreign_keys = ON") 28 | cursor.execute('insert into student values(?,?,?,?,?,?,?,?)',(sno,sname,ssex,psword,qq,telnum,dno,clsno)) 29 | # cursor.execute("select * from user") 30 | # print(cursor.fetchone()) 31 | # print(cursor.fetchmany(100)) 32 | conn.commit() 33 | cursor.close() 34 | conn.close() 35 | self.registerreact.setText("追加"+sname+"成功") 36 | except sqlite3.IntegrityError: 37 | traceback.print_exc() 38 | self.registerreact.setText("不满足完整性约束") 39 | conn.rollback() 40 | cursor.close() 41 | conn.close() 42 | 43 | def setupUi(self, MainWindow): 44 | MainWindow.setObjectName("MainWindow") 45 | MainWindow.resize(472, 323) 46 | self.centralwidget = QtWidgets.QWidget(MainWindow) 47 | self.centralwidget.setObjectName("centralwidget") 48 | self.formLayoutWidget = QtWidgets.QWidget(self.centralwidget) 49 | self.formLayoutWidget.setGeometry(QtCore.QRect(50, 30, 160, 204)) 50 | self.formLayoutWidget.setObjectName("formLayoutWidget") 51 | self.formLayout = QtWidgets.QFormLayout(self.formLayoutWidget) 52 | self.formLayout.setContentsMargins(0, 0, 0, 0) 53 | self.formLayout.setObjectName("formLayout") 54 | self.label = QtWidgets.QLabel(self.formLayoutWidget) 55 | self.label.setObjectName("label") 56 | self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label) 57 | self.number = QtWidgets.QLineEdit(self.formLayoutWidget) 58 | self.number.setObjectName("number") 59 | self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.number) 60 | self.label_2 = QtWidgets.QLabel(self.formLayoutWidget) 61 | self.label_2.setObjectName("label_2") 62 | self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_2) 63 | self.name = QtWidgets.QLineEdit(self.formLayoutWidget) 64 | self.name.setObjectName("name") 65 | self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.name) 66 | self.label_3 = QtWidgets.QLabel(self.formLayoutWidget) 67 | self.label_3.setObjectName("label_3") 68 | self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_3) 69 | self.sex = QtWidgets.QComboBox(self.formLayoutWidget) 70 | self.sex.setObjectName("sex") 71 | self.sex.addItem("") 72 | self.sex.addItem("") 73 | self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.sex) 74 | self.label_4 = QtWidgets.QLabel(self.formLayoutWidget) 75 | self.label_4.setObjectName("label_4") 76 | self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_4) 77 | self.label_6 = QtWidgets.QLabel(self.formLayoutWidget) 78 | self.label_6.setObjectName("label_6") 79 | self.formLayout.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.label_6) 80 | self.label_7 = QtWidgets.QLabel(self.formLayoutWidget) 81 | self.label_7.setObjectName("label_7") 82 | self.formLayout.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.label_7) 83 | self.label_8 = QtWidgets.QLabel(self.formLayoutWidget) 84 | self.label_8.setObjectName("label_8") 85 | self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_8) 86 | self.label_5 = QtWidgets.QLabel(self.formLayoutWidget) 87 | self.label_5.setObjectName("label_5") 88 | self.formLayout.setWidget(7, QtWidgets.QFormLayout.LabelRole, self.label_5) 89 | self.password = QtWidgets.QLineEdit(self.formLayoutWidget) 90 | self.password.setEchoMode(QtWidgets.QLineEdit.Password) 91 | self.password.setObjectName("password") 92 | self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.password) 93 | self.QQnum = QtWidgets.QLineEdit(self.formLayoutWidget) 94 | self.QQnum.setObjectName("QQnum") 95 | self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.QQnum) 96 | self.tel = QtWidgets.QLineEdit(self.formLayoutWidget) 97 | self.tel.setObjectName("tel") 98 | self.formLayout.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.tel) 99 | self.deptnum = QtWidgets.QLineEdit(self.formLayoutWidget) 100 | self.deptnum.setObjectName("deptnum") 101 | self.formLayout.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.deptnum) 102 | self.classnum = QtWidgets.QLineEdit(self.formLayoutWidget) 103 | self.classnum.setObjectName("classnum") 104 | self.formLayout.setWidget(7, QtWidgets.QFormLayout.FieldRole, self.classnum) 105 | self.registerbutton = QtWidgets.QPushButton(self.centralwidget) 106 | self.registerbutton.setGeometry(QtCore.QRect(140, 240, 75, 23)) 107 | self.registerbutton.setObjectName("registerbutton") 108 | self.registerbutton.clicked.connect(self.studentregister) 109 | self.registerreact = QtWidgets.QLabel(self.centralwidget) 110 | self.registerreact.setGeometry(QtCore.QRect(40, 240, 101, 31)) 111 | self.registerreact.setObjectName("registerreact") 112 | self.formLayoutWidget_2 = QtWidgets.QWidget(self.centralwidget) 113 | self.formLayoutWidget_2.setGeometry(QtCore.QRect(240, 30, 160, 80)) 114 | self.formLayoutWidget_2.setObjectName("formLayoutWidget_2") 115 | self.formLayout_2 = QtWidgets.QFormLayout(self.formLayoutWidget_2) 116 | self.formLayout_2.setContentsMargins(0, 0, 0, 0) 117 | self.formLayout_2.setObjectName("formLayout_2") 118 | self.label_10 = QtWidgets.QLabel(self.formLayoutWidget_2) 119 | self.label_10.setObjectName("label_10") 120 | self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_10) 121 | self.label_11 = QtWidgets.QLabel(self.formLayoutWidget_2) 122 | self.label_11.setObjectName("label_11") 123 | self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_11) 124 | self.label_12 = QtWidgets.QLabel(self.formLayoutWidget_2) 125 | self.label_12.setObjectName("label_12") 126 | self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_12) 127 | self.enrolldate = QtWidgets.QDateEdit(self.formLayoutWidget_2) 128 | self.enrolldate.setObjectName("enrolldate") 129 | self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.enrolldate) 130 | self.school = QtWidgets.QLineEdit(self.formLayoutWidget_2) 131 | self.school.setObjectName("school") 132 | self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.school) 133 | self.edulevel = QtWidgets.QComboBox(self.formLayoutWidget_2) 134 | self.edulevel.setObjectName("edulevel") 135 | self.edulevel.addItem("") 136 | self.edulevel.addItem("") 137 | self.edulevel.addItem("") 138 | self.edulevel.addItem("") 139 | self.edulevel.addItem("") 140 | self.edulevel.addItem("") 141 | self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.edulevel) 142 | self.addedubutton = QtWidgets.QPushButton(self.centralwidget) 143 | self.addedubutton.setGeometry(QtCore.QRect(330, 120, 75, 23)) 144 | self.addedubutton.setObjectName("addedubutton") 145 | self.edureaction = QtWidgets.QLabel(self.centralwidget) 146 | self.edureaction.setGeometry(QtCore.QRect(230, 120, 101, 31)) 147 | self.edureaction.setObjectName("edureaction") 148 | self.formLayoutWidget_3 = QtWidgets.QWidget(self.centralwidget) 149 | self.formLayoutWidget_3.setGeometry(QtCore.QRect(240, 150, 160, 80)) 150 | self.formLayoutWidget_3.setObjectName("formLayoutWidget_3") 151 | self.formLayout_3 = QtWidgets.QFormLayout(self.formLayoutWidget_3) 152 | self.formLayout_3.setContentsMargins(0, 0, 0, 0) 153 | self.formLayout_3.setObjectName("formLayout_3") 154 | self.label_14 = QtWidgets.QLabel(self.formLayoutWidget_3) 155 | self.label_14.setObjectName("label_14") 156 | self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_14) 157 | self.label_15 = QtWidgets.QLabel(self.formLayoutWidget_3) 158 | self.label_15.setObjectName("label_15") 159 | self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_15) 160 | self.label_16 = QtWidgets.QLabel(self.formLayoutWidget_3) 161 | self.label_16.setObjectName("label_16") 162 | self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_16) 163 | self.relationship = QtWidgets.QComboBox(self.formLayoutWidget_3) 164 | self.relationship.setObjectName("relationship") 165 | self.relationship.addItem("") 166 | self.relationship.addItem("") 167 | self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.relationship) 168 | self.parentname = QtWidgets.QLineEdit(self.formLayoutWidget_3) 169 | self.parentname.setObjectName("parentname") 170 | self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.parentname) 171 | self.parenttel = QtWidgets.QLineEdit(self.formLayoutWidget_3) 172 | self.parenttel.setObjectName("parenttel") 173 | self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.parenttel) 174 | self.parentreaction = QtWidgets.QLabel(self.centralwidget) 175 | self.parentreaction.setGeometry(QtCore.QRect(230, 240, 101, 31)) 176 | self.parentreaction.setObjectName("parentreaction") 177 | self.addedubutton_2 = QtWidgets.QPushButton(self.centralwidget) 178 | self.addedubutton_2.setGeometry(QtCore.QRect(330, 240, 75, 23)) 179 | self.addedubutton_2.setObjectName("addedubutton_2") 180 | MainWindow.setCentralWidget(self.centralwidget) 181 | self.menubar = QtWidgets.QMenuBar(MainWindow) 182 | self.menubar.setGeometry(QtCore.QRect(0, 0, 472, 21)) 183 | self.menubar.setObjectName("menubar") 184 | MainWindow.setMenuBar(self.menubar) 185 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 186 | self.statusbar.setObjectName("statusbar") 187 | MainWindow.setStatusBar(self.statusbar) 188 | 189 | self.retranslateUi(MainWindow) 190 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 191 | def addeducation(self): 192 | sno = self.number.text() 193 | level = self.edulevel.currentText() 194 | schoolname = self.school.text() 195 | date = self.enrolldate.text() 196 | try: 197 | conn = sqlite3.connect("school.db") 198 | cursor = conn.cursor() 199 | # 注意单双引号 200 | cursor.execute("PRAGMA foreign_keys = ON") 201 | cursor.execute('insert into edu values(?,?,?,?)',(sno,level,schoolname,date)) 202 | # cursor.execute("select * from user") 203 | # print(cursor.fetchone()) 204 | # print(cursor.fetchmany(100)) 205 | conn.commit() 206 | cursor.close() 207 | conn.close() 208 | self.edureaction.setText("追加"+schoolname+"成功") 209 | except sqlite3.IntegrityError: 210 | traceback.print_exc() 211 | self.edureaction.setText("不满足完整性约束") 212 | conn.rollback() 213 | cursor.close() 214 | conn.close() 215 | def addrelations(self): 216 | sno = self.number.text() 217 | pname = self.parentname.text() 218 | psex = self.relationship.currentText() 219 | ptel = self.parenttel.text() 220 | try: 221 | conn = sqlite3.connect("school.db") 222 | cursor = conn.cursor() 223 | # 注意单双引号 224 | cursor.execute("PRAGMA foreign_keys = ON") 225 | cursor.execute('insert into parents values(?,?,?,?)',(sno,pname,psex,ptel)) 226 | # cursor.execute("select * from user") 227 | # print(cursor.fetchone()) 228 | # print(cursor.fetchmany(100)) 229 | conn.commit() 230 | cursor.close() 231 | conn.close() 232 | self.parentreaction.setText("追加"+pname+"成功") 233 | except sqlite3.IntegrityError: 234 | traceback.print_exc() 235 | self.parentreaction.setText("不满足完整性约束") 236 | conn.rollback() 237 | cursor.close() 238 | conn.close() 239 | def retranslateUi(self, MainWindow): 240 | _translate = QtCore.QCoreApplication.translate 241 | MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 242 | self.label.setText(_translate("MainWindow", "学生学号")) 243 | self.label_2.setText(_translate("MainWindow", "学生姓名")) 244 | self.label_3.setText(_translate("MainWindow", "学生性别")) 245 | self.sex.setItemText(0, _translate("MainWindow", "男")) 246 | self.sex.setItemText(1, _translate("MainWindow", "女")) 247 | self.label_4.setText(_translate("MainWindow", "QQ号")) 248 | self.label_6.setText(_translate("MainWindow", "电话号码")) 249 | self.label_7.setText(_translate("MainWindow", "所属系号")) 250 | self.label_8.setText(_translate("MainWindow", "登录密码")) 251 | self.label_5.setText(_translate("MainWindow", "所属班号")) 252 | self.registerbutton.setText(_translate("MainWindow", "学生注册")) 253 | self.registerreact.setText(_translate("MainWindow", "学生注册->")) 254 | self.label_10.setText(_translate("MainWindow", "教育等级")) 255 | self.label_11.setText(_translate("MainWindow", "学校")) 256 | self.label_12.setText(_translate("MainWindow", "入学日期")) 257 | self.edulevel.setItemText(0, _translate("MainWindow", "小学")) 258 | self.edulevel.setItemText(1, _translate("MainWindow", "初中")) 259 | self.edulevel.setItemText(2, _translate("MainWindow", "高中")) 260 | self.edulevel.setItemText(3, _translate("MainWindow", "本科")) 261 | self.edulevel.setItemText(4, _translate("MainWindow", "研究生")) 262 | self.edulevel.setItemText(5, _translate("MainWindow", "博士")) 263 | self.addedubutton.setText(_translate("MainWindow", "添加教育经历")) 264 | self.addedubutton.clicked.connect(self.addeducation) 265 | self.edureaction.setText(_translate("MainWindow", "添加教育经历->")) 266 | self.label_14.setText(_translate("MainWindow", "亲属姓名")) 267 | self.label_15.setText(_translate("MainWindow", "关系")) 268 | self.label_16.setText(_translate("MainWindow", "亲属电话")) 269 | self.relationship.setItemText(0, _translate("MainWindow", "父")) 270 | self.relationship.setItemText(1, _translate("MainWindow", "母")) 271 | self.parentreaction.setText(_translate("MainWindow", "添加亲属->")) 272 | self.addedubutton_2.setText(_translate("MainWindow", "添加亲属")) 273 | self.addedubutton_2.clicked.connect(self.addrelations) 274 | 275 | -------------------------------------------------------------------------------- /lab1_1171800312/studentreg.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 472 10 | 323 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 50 21 | 30 22 | 160 23 | 204 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 | QQ号 72 | 73 | 74 | 75 | 76 | 77 | 78 | 电话号码 79 | 80 | 81 | 82 | 83 | 84 | 85 | 所属系号 86 | 87 | 88 | 89 | 90 | 91 | 92 | 登录密码 93 | 94 | 95 | 96 | 97 | 98 | 99 | 所属班号 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 140 124 | 240 125 | 75 126 | 23 127 | 128 | 129 | 130 | 学生注册 131 | 132 | 133 | 134 | 135 | 136 | 40 137 | 240 138 | 101 139 | 31 140 | 141 | 142 | 143 | 学生注册-> 144 | 145 | 146 | 147 | 148 | 149 | 240 150 | 30 151 | 160 152 | 80 153 | 154 | 155 | 156 | 157 | 158 | 159 | 教育等级 160 | 161 | 162 | 163 | 164 | 165 | 166 | 学校 167 | 168 | 169 | 170 | 171 | 172 | 173 | 入学日期 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 小学 188 | 189 | 190 | 191 | 192 | 初中 193 | 194 | 195 | 196 | 197 | 高中 198 | 199 | 200 | 201 | 202 | 本科 203 | 204 | 205 | 206 | 207 | 研究生 208 | 209 | 210 | 211 | 212 | 博士 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 330 223 | 120 224 | 75 225 | 23 226 | 227 | 228 | 229 | 添加教育经历 230 | 231 | 232 | 233 | 234 | 235 | 230 236 | 120 237 | 101 238 | 31 239 | 240 | 241 | 242 | 添加教育经历-> 243 | 244 | 245 | 246 | 247 | 248 | 240 249 | 150 250 | 160 251 | 80 252 | 253 | 254 | 255 | 256 | 257 | 258 | 亲属姓名 259 | 260 | 261 | 262 | 263 | 264 | 265 | 关系 266 | 267 | 268 | 269 | 270 | 271 | 272 | 亲属电话 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 230 302 | 240 303 | 101 304 | 31 305 | 306 | 307 | 308 | 添加亲属-> 309 | 310 | 311 | 312 | 313 | 314 | 330 315 | 240 316 | 75 317 | 23 318 | 319 | 320 | 321 | 添加教育经历 322 | 323 | 324 | 325 | 326 | 327 | 328 | 0 329 | 0 330 | 472 331 | 21 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | -------------------------------------------------------------------------------- /lab1_1171800312/teacherreg.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'teacherreg.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.9.2 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | import traceback 9 | 10 | from PyQt5 import QtCore, QtGui, QtWidgets 11 | import sqlite3 12 | 13 | class Ui_MainWindow(object): 14 | def setupUi(self, MainWindow): 15 | MainWindow.setObjectName("MainWindow") 16 | MainWindow.resize(376, 381) 17 | self.centralwidget = QtWidgets.QWidget(MainWindow) 18 | self.centralwidget.setObjectName("centralwidget") 19 | self.formLayoutWidget = QtWidgets.QWidget(self.centralwidget) 20 | self.formLayoutWidget.setGeometry(QtCore.QRect(100, 40, 160, 126)) 21 | self.formLayoutWidget.setObjectName("formLayoutWidget") 22 | self.formLayout = QtWidgets.QFormLayout(self.formLayoutWidget) 23 | self.formLayout.setContentsMargins(0, 0, 0, 0) 24 | self.formLayout.setObjectName("formLayout") 25 | self.label = QtWidgets.QLabel(self.formLayoutWidget) 26 | self.label.setObjectName("label") 27 | self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label) 28 | self.label_2 = QtWidgets.QLabel(self.formLayoutWidget) 29 | self.label_2.setObjectName("label_2") 30 | self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_2) 31 | self.label_3 = QtWidgets.QLabel(self.formLayoutWidget) 32 | self.label_3.setObjectName("label_3") 33 | self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_3) 34 | self.label_4 = QtWidgets.QLabel(self.formLayoutWidget) 35 | self.label_4.setObjectName("label_4") 36 | self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_4) 37 | self.label_5 = QtWidgets.QLabel(self.formLayoutWidget) 38 | self.label_5.setObjectName("label_5") 39 | self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_5) 40 | self.zhigonghao = QtWidgets.QLineEdit(self.formLayoutWidget) 41 | self.zhigonghao.setObjectName("zhigonghao") 42 | self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.zhigonghao) 43 | self.jiaoshixingming = QtWidgets.QLineEdit(self.formLayoutWidget) 44 | self.jiaoshixingming.setObjectName("jiaoshixingming") 45 | self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.jiaoshixingming) 46 | self.jiaoshixingbie = QtWidgets.QComboBox(self.formLayoutWidget) 47 | self.jiaoshixingbie.setObjectName("jiaoshixingbie") 48 | self.jiaoshixingbie.addItem("") 49 | self.jiaoshixingbie.addItem("") 50 | self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.jiaoshixingbie) 51 | self.mima = QtWidgets.QLineEdit(self.formLayoutWidget) 52 | self.mima.setEchoMode(QtWidgets.QLineEdit.Password) 53 | self.mima.setObjectName("mima") 54 | self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.mima) 55 | self.suoshuxihao = QtWidgets.QLineEdit(self.formLayoutWidget) 56 | self.suoshuxihao.setObjectName("suoshuxihao") 57 | self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.suoshuxihao) 58 | self.jiaoshizhuce = QtWidgets.QLabel(self.centralwidget) 59 | self.jiaoshizhuce.setGeometry(QtCore.QRect(100, 170, 91, 31)) 60 | self.jiaoshizhuce.setObjectName("jiaoshizhuce") 61 | self.zhuce = QtWidgets.QPushButton(self.centralwidget) 62 | self.zhuce.setGeometry(QtCore.QRect(180, 170, 75, 23)) 63 | self.zhuce.setObjectName("zhuce") 64 | self.formLayoutWidget_2 = QtWidgets.QWidget(self.centralwidget) 65 | self.formLayoutWidget_2.setGeometry(QtCore.QRect(100, 200, 160, 80)) 66 | self.formLayoutWidget_2.setObjectName("formLayoutWidget_2") 67 | self.formLayout_2 = QtWidgets.QFormLayout(self.formLayoutWidget_2) 68 | self.formLayout_2.setContentsMargins(0, 0, 0, 0) 69 | self.formLayout_2.setObjectName("formLayout_2") 70 | self.label_7 = QtWidgets.QLabel(self.formLayoutWidget_2) 71 | self.label_7.setObjectName("label_7") 72 | self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_7) 73 | self.label_8 = QtWidgets.QLabel(self.formLayoutWidget_2) 74 | self.label_8.setObjectName("label_8") 75 | self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_8) 76 | self.label_9 = QtWidgets.QLabel(self.formLayoutWidget_2) 77 | self.label_9.setObjectName("label_9") 78 | self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_9) 79 | self.kechenghao = QtWidgets.QLineEdit(self.formLayoutWidget_2) 80 | self.kechenghao.setObjectName("kechenghao") 81 | self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.kechenghao) 82 | self.kechengming = QtWidgets.QLineEdit(self.formLayoutWidget_2) 83 | self.kechengming.setObjectName("kechengming") 84 | self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.kechengming) 85 | self.xuefen = QtWidgets.QComboBox(self.formLayoutWidget_2) 86 | self.xuefen.setObjectName("xuefen") 87 | self.xuefen.addItem("") 88 | self.xuefen.addItem("") 89 | self.xuefen.addItem("") 90 | self.xuefen.addItem("") 91 | self.xuefen.addItem("") 92 | self.xuefen.addItem("") 93 | self.xuefen.addItem("") 94 | self.xuefen.addItem("") 95 | self.xuefen.addItem("") 96 | self.xuefen.addItem("") 97 | self.xuefen.addItem("") 98 | self.xuefen.addItem("") 99 | self.xuefen.addItem("") 100 | self.xuefen.addItem("") 101 | self.xuefen.addItem("") 102 | self.xuefen.addItem("") 103 | self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.xuefen) 104 | self.jiaoshikaike = QtWidgets.QLabel(self.centralwidget) 105 | self.jiaoshikaike.setGeometry(QtCore.QRect(100, 280, 81, 31)) 106 | self.jiaoshikaike.setObjectName("jiaoshikaike") 107 | self.kaike = QtWidgets.QPushButton(self.centralwidget) 108 | self.kaike.setGeometry(QtCore.QRect(180, 280, 75, 23)) 109 | self.kaike.setObjectName("kaike") 110 | MainWindow.setCentralWidget(self.centralwidget) 111 | self.menubar = QtWidgets.QMenuBar(MainWindow) 112 | self.menubar.setGeometry(QtCore.QRect(0, 0, 376, 21)) 113 | self.menubar.setObjectName("menubar") 114 | MainWindow.setMenuBar(self.menubar) 115 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 116 | self.statusbar.setObjectName("statusbar") 117 | MainWindow.setStatusBar(self.statusbar) 118 | 119 | self.retranslateUi(MainWindow) 120 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 121 | def teacherregister(self): 122 | tno = (self.zhigonghao.text()) 123 | tname = (self.jiaoshixingming.text()) 124 | tsex = (self.jiaoshixingbie.currentText()) 125 | password = (self.mima.text()) 126 | dept = (self.suoshuxihao.text()) 127 | try: 128 | conn = sqlite3.connect("school.db") 129 | cursor = conn.cursor() 130 | # 注意单双引号 131 | cursor.execute("PRAGMA foreign_keys = ON") 132 | cursor.execute('insert into teacher values(?,?,?,?,?)',(tno,tname,tsex,password,dept)) 133 | # cursor.execute("select * from user") 134 | # print(cursor.fetchone()) 135 | # print(cursor.fetchmany(100)) 136 | conn.commit() 137 | cursor.close() 138 | conn.close() 139 | self.jiaoshizhuce.setText("追加"+tname+"成功") 140 | except sqlite3.IntegrityError: 141 | traceback.print_exc() 142 | self.jiaoshizhuce.setText("不满足完整性约束") 143 | conn.rollback() 144 | cursor.close() 145 | conn.close() 146 | def setupcourse(self): 147 | tno = (self.zhigonghao.text()) 148 | cno = self.kechenghao.text() 149 | credit = self.xuefen.currentText() 150 | coursename = self.kechengming.text() 151 | try: 152 | conn = sqlite3.connect("school.db") 153 | cursor = conn.cursor() 154 | # 注意单双引号 155 | cursor.execute("PRAGMA foreign_keys = ON") 156 | cursor.execute('insert into course values(?,?,?,?)',(cno,credit,tno,coursename)) 157 | # cursor.execute("select * from user") 158 | # print(cursor.fetchone()) 159 | # print(cursor.fetchmany(100)) 160 | conn.commit() 161 | cursor.close() 162 | conn.close() 163 | self.jiaoshikaike.setText("追加"+cno+"成功") 164 | except sqlite3.IntegrityError: 165 | traceback.print_exc() 166 | self.jiaoshikaike.setText("不满足完整性约束") 167 | conn.rollback() 168 | cursor.close() 169 | conn.close() 170 | def retranslateUi(self, MainWindow): 171 | _translate = QtCore.QCoreApplication.translate 172 | MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 173 | self.label.setText(_translate("MainWindow", "职工号")) 174 | self.label_2.setText(_translate("MainWindow", "教师姓名")) 175 | self.label_3.setText(_translate("MainWindow", "教师性别")) 176 | self.label_4.setText(_translate("MainWindow", "密码")) 177 | self.label_5.setText(_translate("MainWindow", "所属系号")) 178 | self.jiaoshixingbie.setItemText(0, _translate("MainWindow", "男")) 179 | self.jiaoshixingbie.setItemText(1, _translate("MainWindow", "女")) 180 | self.jiaoshizhuce.setText(_translate("MainWindow", "教师注册->")) 181 | self.zhuce.setText(_translate("MainWindow", "注册")) 182 | self.zhuce.clicked.connect(self.teacherregister) 183 | self.label_7.setText(_translate("MainWindow", "课程号")) 184 | self.label_8.setText(_translate("MainWindow", "课程名")) 185 | self.label_9.setText(_translate("MainWindow", "学分")) 186 | self.xuefen.setItemText(0, _translate("MainWindow", "0.5")) 187 | self.xuefen.setItemText(1, _translate("MainWindow", "1")) 188 | self.xuefen.setItemText(2, _translate("MainWindow", "1.5")) 189 | self.xuefen.setItemText(3, _translate("MainWindow", "2")) 190 | self.xuefen.setItemText(4, _translate("MainWindow", "2.5")) 191 | self.xuefen.setItemText(5, _translate("MainWindow", "3")) 192 | self.xuefen.setItemText(6, _translate("MainWindow", "3.5")) 193 | self.xuefen.setItemText(7, _translate("MainWindow", "4")) 194 | self.xuefen.setItemText(8, _translate("MainWindow", "4.5")) 195 | self.xuefen.setItemText(9, _translate("MainWindow", "5")) 196 | self.xuefen.setItemText(10, _translate("MainWindow", "5.5")) 197 | self.xuefen.setItemText(11, _translate("MainWindow", "6")) 198 | self.xuefen.setItemText(12, _translate("MainWindow", "6.5")) 199 | self.xuefen.setItemText(13, _translate("MainWindow", "7")) 200 | self.xuefen.setItemText(14, _translate("MainWindow", "7.5")) 201 | self.xuefen.setItemText(15, _translate("MainWindow", "8")) 202 | self.jiaoshikaike.setText(_translate("MainWindow", "教师开课->")) 203 | self.kaike.setText(_translate("MainWindow", "开课")) 204 | self.kaike.clicked.connect(self.setupcourse) 205 | 206 | -------------------------------------------------------------------------------- /lab1_1171800312/teacherreg.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 376 10 | 381 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 100 21 | 40 22 | 160 23 | 126 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 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | QLineEdit::Password 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 100 98 | 170 99 | 91 100 | 31 101 | 102 | 103 | 104 | 教师注册-> 105 | 106 | 107 | 108 | 109 | 110 | 180 111 | 170 112 | 75 113 | 23 114 | 115 | 116 | 117 | 注册 118 | 119 | 120 | 121 | 122 | 123 | 100 124 | 200 125 | 160 126 | 80 127 | 128 | 129 | 130 | 131 | 132 | 133 | 课程号 134 | 135 | 136 | 137 | 138 | 139 | 140 | 课程名 141 | 142 | 143 | 144 | 145 | 146 | 147 | 学分 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 0.5 162 | 163 | 164 | 165 | 166 | 1 167 | 168 | 169 | 170 | 171 | 1.5 172 | 173 | 174 | 175 | 176 | 2 177 | 178 | 179 | 180 | 181 | 2.5 182 | 183 | 184 | 185 | 186 | 3 187 | 188 | 189 | 190 | 191 | 3.5 192 | 193 | 194 | 195 | 196 | 4 197 | 198 | 199 | 200 | 201 | 4.5 202 | 203 | 204 | 205 | 206 | 5 207 | 208 | 209 | 210 | 211 | 5.5 212 | 213 | 214 | 215 | 216 | 6 217 | 218 | 219 | 220 | 221 | 6.5 222 | 223 | 224 | 225 | 226 | 7 227 | 228 | 229 | 230 | 231 | 7.5 232 | 233 | 234 | 235 | 236 | 8 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 100 247 | 280 248 | 81 249 | 31 250 | 251 | 252 | 253 | 教师开课-> 254 | 255 | 256 | 257 | 258 | 259 | 180 260 | 280 261 | 75 262 | 23 263 | 264 | 265 | 266 | 开课 267 | 268 | 269 | 270 | 271 | 272 | 273 | 0 274 | 0 275 | 376 276 | 21 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | -------------------------------------------------------------------------------- /lab1_1171800312/updategrade.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'updategrade.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.9.2 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | import sqlite3 9 | import traceback 10 | 11 | from PyQt5 import QtCore, QtGui, QtWidgets 12 | 13 | class Ui_MainWindow(object): 14 | def setupUi(self, MainWindow): 15 | MainWindow.setObjectName("MainWindow") 16 | MainWindow.resize(742, 531) 17 | self.centralwidget = QtWidgets.QWidget(MainWindow) 18 | self.centralwidget.setObjectName("centralwidget") 19 | self.chaxunchengji = QtWidgets.QPushButton(self.centralwidget) 20 | self.chaxunchengji.setGeometry(QtCore.QRect(570, 60, 75, 23)) 21 | self.chaxunchengji.setObjectName("chaxunchengji") 22 | self.label_2 = QtWidgets.QLabel(self.centralwidget) 23 | self.label_2.setGeometry(QtCore.QRect(270, 50, 31, 39)) 24 | self.label_2.setObjectName("label_2") 25 | self.jiaoshihao = QtWidgets.QLineEdit(self.centralwidget) 26 | self.jiaoshihao.setGeometry(QtCore.QRect(160, 60, 101, 20)) 27 | self.jiaoshihao.setText("") 28 | self.jiaoshihao.setObjectName("jiaoshihao") 29 | self.chengji = QtWidgets.QLabel(self.centralwidget) 30 | self.chengji.setGeometry(QtCore.QRect(160, 110, 461, 201)) 31 | self.chengji.setObjectName("chengji") 32 | self.label_4 = QtWidgets.QLabel(self.centralwidget) 33 | self.label_4.setGeometry(QtCore.QRect(410, 64, 47, 13)) 34 | self.label_4.setObjectName("label_4") 35 | self.label = QtWidgets.QLabel(self.centralwidget) 36 | self.label.setGeometry(QtCore.QRect(120, 50, 31, 39)) 37 | self.label.setObjectName("label") 38 | self.mima = QtWidgets.QLineEdit(self.centralwidget) 39 | self.mima.setGeometry(QtCore.QRect(300, 60, 101, 20)) 40 | self.mima.setText("") 41 | self.mima.setEchoMode(QtWidgets.QLineEdit.Password) 42 | self.mima.setObjectName("mima") 43 | self.xiugaichengji = QtWidgets.QPushButton(self.centralwidget) 44 | self.xiugaichengji.setGeometry(QtCore.QRect(380, 350, 75, 23)) 45 | self.xiugaichengji.setObjectName("xiugaichengji") 46 | self.kehao = QtWidgets.QLineEdit(self.centralwidget) 47 | self.kehao.setGeometry(QtCore.QRect(447, 61, 101, 20)) 48 | self.kehao.setText("") 49 | self.kehao.setObjectName("kehao") 50 | self.label_3 = QtWidgets.QLabel(self.centralwidget) 51 | self.label_3.setGeometry(QtCore.QRect(150, 360, 47, 13)) 52 | self.label_3.setObjectName("label_3") 53 | self.xuehao = QtWidgets.QLineEdit(self.centralwidget) 54 | self.xuehao.setGeometry(QtCore.QRect(220, 360, 113, 20)) 55 | self.xuehao.setObjectName("xuehao") 56 | self.label_5 = QtWidgets.QLabel(self.centralwidget) 57 | self.label_5.setGeometry(QtCore.QRect(380, 390, 191, 71)) 58 | self.label_5.setObjectName("label_5") 59 | self.label_6 = QtWidgets.QLabel(self.centralwidget) 60 | self.label_6.setGeometry(QtCore.QRect(150, 390, 47, 13)) 61 | self.label_6.setObjectName("label_6") 62 | self.chengji_2 = QtWidgets.QLineEdit(self.centralwidget) 63 | self.chengji_2.setGeometry(QtCore.QRect(220, 390, 113, 20)) 64 | self.chengji_2.setObjectName("chengji_2") 65 | MainWindow.setCentralWidget(self.centralwidget) 66 | self.menubar = QtWidgets.QMenuBar(MainWindow) 67 | self.menubar.setGeometry(QtCore.QRect(0, 0, 742, 21)) 68 | self.menubar.setObjectName("menubar") 69 | MainWindow.setMenuBar(self.menubar) 70 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 71 | self.statusbar.setObjectName("statusbar") 72 | MainWindow.setStatusBar(self.statusbar) 73 | 74 | self.retranslateUi(MainWindow) 75 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 76 | def seecourses(self): 77 | tnumber = (self.jiaoshihao.text()) 78 | password = (self.mima.text()) 79 | coursenum = self.kehao.text() 80 | print(tnumber,password,coursenum) 81 | try: 82 | conn = sqlite3.connect("school.db") 83 | cursor = conn.cursor() 84 | # 注意单双引号 85 | cursor.execute("PRAGMA foreign_keys = ON") 86 | #cursor.execute('insert into course values(?,?,?,?)',(cno,credit,tno,coursename)) 87 | cursor.execute("select password from teacher where tno = ?",(tnumber,)) 88 | res = cursor.fetchone() 89 | if res== None: 90 | self.chengji.setText("教师不存在") 91 | return 92 | if res[0] == password: 93 | self.chengji.setText("输入正确") 94 | cursor.execute("select sno,sname,grade from course natural join sel natural join student where cno=? and tno=?",(coursenum,tnumber)) 95 | result = "" 96 | for temp in cursor.fetchall(): 97 | result+=("学号:") 98 | result+=str(temp[0]) 99 | result+=(" 姓名:") 100 | result+=str(temp[1]) 101 | result+=(" 当前成绩:") 102 | if temp[2] == -1: 103 | result+="未上成绩" 104 | else: 105 | result+=str(temp[2]) 106 | 107 | result+=str("\n") 108 | # result+=("课程号:"+str(temp[0])+" 课程名:"+str(temp[3])+" 学分:"+str(temp[1])+" 任课教师:"+str(temp[4])+"\n") 109 | self.chengji.setText(result) 110 | else: 111 | self.chengji.setText("密码错误") 112 | # print(cursor.fetchall()) 113 | conn.commit() 114 | cursor.close() 115 | conn.close() 116 | except sqlite3.IntegrityError: 117 | traceback.print_exc() 118 | self.kexuankecheng.setText("完整性约束不符合") 119 | conn.rollback() 120 | cursor.close() 121 | conn.close() 122 | def modifygrade(self): 123 | sno = (self.xuehao.text()) 124 | grade = (self.chengji_2.text()) 125 | cno = (self.kehao.text()) 126 | try: 127 | conn = sqlite3.connect("school.db") 128 | cursor = conn.cursor() 129 | # 注意单双引号 130 | cursor.execute("PRAGMA foreign_keys = ON") 131 | cursor.execute('update sel set grade=? where sno=? and cno=?',(grade,sno,cno)) 132 | # cursor.execute("select * from user") 133 | # print(cursor.fetchone()) 134 | # print(cursor.fetchmany(100)) 135 | conn.commit() 136 | cursor.close() 137 | conn.close() 138 | self.label_5.setText("成功") 139 | self.seecourses() 140 | except sqlite3.IntegrityError: 141 | traceback.print_exc() 142 | self.edureaction.setText("不满足完整性约束") 143 | conn.rollback() 144 | cursor.close() 145 | conn.close() 146 | 147 | def retranslateUi(self, MainWindow): 148 | _translate = QtCore.QCoreApplication.translate 149 | MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 150 | self.chaxunchengji.setText(_translate("MainWindow", "查询成绩")) 151 | self.chaxunchengji.clicked.connect(self.seecourses) 152 | self.label_2.setText(_translate("MainWindow", "密码")) 153 | self.chengji.setText(_translate("MainWindow", "输入教师号和密码查看学生成绩")) 154 | self.label_4.setText(_translate("MainWindow", "课号")) 155 | self.label.setText(_translate("MainWindow", "教师号")) 156 | self.xiugaichengji.setText(_translate("MainWindow", "修改成绩")) 157 | self.xiugaichengji.clicked.connect(self.modifygrade) 158 | self.label_3.setText(_translate("MainWindow", "学号")) 159 | self.label_5.setText(_translate("MainWindow", "修改情况将在这里显示")) 160 | self.label_6.setText(_translate("MainWindow", "成绩")) 161 | 162 | -------------------------------------------------------------------------------- /lab1_1171800312/updategrade.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 742 10 | 531 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 570 21 | 60 22 | 75 23 | 23 24 | 25 | 26 | 27 | 查询成绩 28 | 29 | 30 | 31 | 32 | 33 | 270 34 | 50 35 | 31 36 | 39 37 | 38 | 39 | 40 | 密码 41 | 42 | 43 | 44 | 45 | 46 | 160 47 | 60 48 | 101 49 | 20 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 160 60 | 110 61 | 461 62 | 201 63 | 64 | 65 | 66 | 输入教师号和密码查看学生成绩 67 | 68 | 69 | 70 | 71 | 72 | 410 73 | 64 74 | 47 75 | 13 76 | 77 | 78 | 79 | 课号 80 | 81 | 82 | 83 | 84 | 85 | 120 86 | 50 87 | 31 88 | 39 89 | 90 | 91 | 92 | 教师号 93 | 94 | 95 | 96 | 97 | 98 | 300 99 | 60 100 | 101 101 | 20 102 | 103 | 104 | 105 | 106 | 107 | 108 | QLineEdit::Password 109 | 110 | 111 | 112 | 113 | 114 | 380 115 | 350 116 | 75 117 | 23 118 | 119 | 120 | 121 | 修改成绩 122 | 123 | 124 | 125 | 126 | 127 | 447 128 | 61 129 | 101 130 | 20 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 150 141 | 360 142 | 47 143 | 13 144 | 145 | 146 | 147 | 学号 148 | 149 | 150 | 151 | 152 | 153 | 220 154 | 360 155 | 113 156 | 20 157 | 158 | 159 | 160 | 161 | 162 | 163 | 380 164 | 390 165 | 191 166 | 71 167 | 168 | 169 | 170 | 修改情况将在这里显示 171 | 172 | 173 | 174 | 175 | 176 | 150 177 | 390 178 | 47 179 | 13 180 | 181 | 182 | 183 | 成绩 184 | 185 | 186 | 187 | 188 | 189 | 220 190 | 390 191 | 113 192 | 20 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 0 201 | 0 202 | 742 203 | 21 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | -------------------------------------------------------------------------------- /lab2_1171800312/.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /lab2_1171800312/.idea/lab2_1171800312.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /lab2_1171800312/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /lab2_1171800312/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /lab2_1171800312/.idea/workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 16 | 17 | 18 | 19 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 55 | 56 | 57 | 76 | 77 | 78 | 97 | 98 | 99 | 118 | 119 | 120 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 1587385911230 156 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | -------------------------------------------------------------------------------- /lab2_1171800312/Readme.txt: -------------------------------------------------------------------------------- 1 | 请运行main_mem.py和main_optim.py查看实验结果! 2 | 其他文件不可运行。 3 | 4 | extmem.py 外存模拟器 5 | main_mem.py 实现连接、投影、选择算法 6 | main_optim.py 实现查询优化算法 7 | relation.py 定义关系 8 | syntaxtree.py 定义语法树 9 | untitled.py与untitled2.py是GUI文件 10 | result.txt 保存运算结果 -------------------------------------------------------------------------------- /lab2_1171800312/__pycache__/extmem.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1171800312/hit_database_2020/f8caa95b5438993cb0cd5a8a380767b2f254c6a1/lab2_1171800312/__pycache__/extmem.cpython-37.pyc -------------------------------------------------------------------------------- /lab2_1171800312/__pycache__/main_mem.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1171800312/hit_database_2020/f8caa95b5438993cb0cd5a8a380767b2f254c6a1/lab2_1171800312/__pycache__/main_mem.cpython-37.pyc -------------------------------------------------------------------------------- /lab2_1171800312/__pycache__/relation.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1171800312/hit_database_2020/f8caa95b5438993cb0cd5a8a380767b2f254c6a1/lab2_1171800312/__pycache__/relation.cpython-37.pyc -------------------------------------------------------------------------------- /lab2_1171800312/__pycache__/syntaxtree.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1171800312/hit_database_2020/f8caa95b5438993cb0cd5a8a380767b2f254c6a1/lab2_1171800312/__pycache__/syntaxtree.cpython-37.pyc -------------------------------------------------------------------------------- /lab2_1171800312/__pycache__/untitled.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1171800312/hit_database_2020/f8caa95b5438993cb0cd5a8a380767b2f254c6a1/lab2_1171800312/__pycache__/untitled.cpython-37.pyc -------------------------------------------------------------------------------- /lab2_1171800312/__pycache__/untitled2.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1171800312/hit_database_2020/f8caa95b5438993cb0cd5a8a380767b2f254c6a1/lab2_1171800312/__pycache__/untitled2.cpython-37.pyc -------------------------------------------------------------------------------- /lab2_1171800312/blks/0.blk: -------------------------------------------------------------------------------- 1 | 33 260 37 862 35 271 34 484 20 171 1 864 1 5 1 -------------------------------------------------------------------------------- /lab2_1171800312/blks/1.blk: -------------------------------------------------------------------------------- 1 | 34 160 18 674 38 585 14 170 22 25 23 817 30 571 2 -------------------------------------------------------------------------------- /lab2_1171800312/blks/10.blk: -------------------------------------------------------------------------------- 1 | 40 545 39 887 10 295 8 428 3 109 40 545 35 83 11 -------------------------------------------------------------------------------- /lab2_1171800312/blks/11.blk: -------------------------------------------------------------------------------- 1 | 23 294 1 163 11 217 3 223 13 970 5 873 1 491 12 -------------------------------------------------------------------------------- /lab2_1171800312/blks/12.blk: -------------------------------------------------------------------------------- 1 | 18 108 14 578 17 220 27 101 21 57 9 82 5 749 13 -------------------------------------------------------------------------------- /lab2_1171800312/blks/13.blk: -------------------------------------------------------------------------------- 1 | 36 905 33 269 14 48 35 76 18 751 14 95 31 429 14 -------------------------------------------------------------------------------- /lab2_1171800312/blks/14.blk: -------------------------------------------------------------------------------- 1 | 8 192 38 618 35 838 33 40 20 47 5 137 2 162 15 -------------------------------------------------------------------------------- /lab2_1171800312/blks/15.blk: -------------------------------------------------------------------------------- 1 | 4 701 6 974 7 484 37 911 24 788 28 240 24 669 0 -------------------------------------------------------------------------------- /lab2_1171800312/blks/16.blk: -------------------------------------------------------------------------------- 1 | 43 120 42 880 43 806 58 142 45 848 24 837 30 653 17 -------------------------------------------------------------------------------- /lab2_1171800312/blks/17.blk: -------------------------------------------------------------------------------- 1 | 43 236 46 674 49 146 29 657 49 327 23 69 28 513 18 -------------------------------------------------------------------------------- /lab2_1171800312/blks/18.blk: -------------------------------------------------------------------------------- 1 | 41 698 22 73 26 839 35 347 33 938 37 33 26 176 19 -------------------------------------------------------------------------------- /lab2_1171800312/blks/19.blk: -------------------------------------------------------------------------------- 1 | 58 634 26 147 49 780 21 601 57 691 22 480 24 390 20 -------------------------------------------------------------------------------- /lab2_1171800312/blks/2.blk: -------------------------------------------------------------------------------- 1 | 35 957 35 578 38 699 35 172 29 302 2 512 31 156 3 -------------------------------------------------------------------------------- /lab2_1171800312/blks/20.blk: -------------------------------------------------------------------------------- 1 | 36 793 43 824 41 728 41 192 28 447 34 588 41 739 21 -------------------------------------------------------------------------------- /lab2_1171800312/blks/21.blk: -------------------------------------------------------------------------------- 1 | 48 135 45 244 37 729 36 904 60 194 47 377 50 101 22 -------------------------------------------------------------------------------- /lab2_1171800312/blks/22.blk: -------------------------------------------------------------------------------- 1 | 53 106 22 278 21 870 55 92 38 553 36 32 28 719 23 -------------------------------------------------------------------------------- /lab2_1171800312/blks/23.blk: -------------------------------------------------------------------------------- 1 | 39 354 59 23 33 125 38 131 38 483 42 887 50 476 24 -------------------------------------------------------------------------------- /lab2_1171800312/blks/24.blk: -------------------------------------------------------------------------------- 1 | 52 274 36 98 30 478 50 758 30 741 22 126 28 221 25 -------------------------------------------------------------------------------- /lab2_1171800312/blks/25.blk: -------------------------------------------------------------------------------- 1 | 56 59 35 685 33 829 28 674 57 612 34 707 38 963 26 -------------------------------------------------------------------------------- /lab2_1171800312/blks/26.blk: -------------------------------------------------------------------------------- 1 | 32 465 26 173 26 499 30 854 42 804 50 711 51 105 27 -------------------------------------------------------------------------------- /lab2_1171800312/blks/27.blk: -------------------------------------------------------------------------------- 1 | 41 402 47 4 57 493 45 713 48 880 50 774 41 759 28 -------------------------------------------------------------------------------- /lab2_1171800312/blks/28.blk: -------------------------------------------------------------------------------- 1 | 47 365 28 75 41 693 38 339 42 851 54 622 27 360 29 -------------------------------------------------------------------------------- /lab2_1171800312/blks/29.blk: -------------------------------------------------------------------------------- 1 | 49 980 47 498 42 864 31 635 60 332 36 110 21 855 30 -------------------------------------------------------------------------------- /lab2_1171800312/blks/3.blk: -------------------------------------------------------------------------------- 1 | 38 604 39 917 19 842 19 739 21 811 35 817 25 425 4 -------------------------------------------------------------------------------- /lab2_1171800312/blks/30.blk: -------------------------------------------------------------------------------- 1 | 59 632 49 525 49 545 20 675 37 430 27 509 34 394 31 -------------------------------------------------------------------------------- /lab2_1171800312/blks/31.blk: -------------------------------------------------------------------------------- 1 | 53 375 44 781 35 598 50 982 36 731 56 484 32 774 32 -------------------------------------------------------------------------------- /lab2_1171800312/blks/32.blk: -------------------------------------------------------------------------------- 1 | 56 962 27 225 59 386 31 208 26 856 31 943 22 57 33 -------------------------------------------------------------------------------- /lab2_1171800312/blks/33.blk: -------------------------------------------------------------------------------- 1 | 33 63 41 150 60 261 25 68 24 132 34 80 26 811 34 -------------------------------------------------------------------------------- /lab2_1171800312/blks/34.blk: -------------------------------------------------------------------------------- 1 | 36 590 50 585 56 431 38 699 45 138 32 350 20 938 35 -------------------------------------------------------------------------------- /lab2_1171800312/blks/35.blk: -------------------------------------------------------------------------------- 1 | 24 900 20 132 22 568 55 52 53 506 36 871 49 550 36 -------------------------------------------------------------------------------- /lab2_1171800312/blks/36.blk: -------------------------------------------------------------------------------- 1 | 60 60 46 922 39 31 50 150 33 173 22 845 31 47 37 -------------------------------------------------------------------------------- /lab2_1171800312/blks/37.blk: -------------------------------------------------------------------------------- 1 | 30 858 60 389 35 94 53 173 36 133 26 923 37 955 38 -------------------------------------------------------------------------------- /lab2_1171800312/blks/38.blk: -------------------------------------------------------------------------------- 1 | 32 984 31 909 56 680 31 470 36 915 31 235 55 651 39 -------------------------------------------------------------------------------- /lab2_1171800312/blks/39.blk: -------------------------------------------------------------------------------- 1 | 47 237 55 159 34 30 55 133 35 739 27 81 51 218 40 -------------------------------------------------------------------------------- /lab2_1171800312/blks/4.blk: -------------------------------------------------------------------------------- 1 | 31 155 14 909 20 804 10 803 21 858 30 936 12 919 5 -------------------------------------------------------------------------------- /lab2_1171800312/blks/40.blk: -------------------------------------------------------------------------------- 1 | 33 558 57 372 20 966 36 659 54 210 57 409 29 684 41 -------------------------------------------------------------------------------- /lab2_1171800312/blks/41.blk: -------------------------------------------------------------------------------- 1 | 37 830 54 889 50 809 52 353 25 594 21 781 30 491 42 -------------------------------------------------------------------------------- /lab2_1171800312/blks/42.blk: -------------------------------------------------------------------------------- 1 | 29 471 51 515 29 592 24 920 32 122 37 475 51 576 43 -------------------------------------------------------------------------------- /lab2_1171800312/blks/43.blk: -------------------------------------------------------------------------------- 1 | 59 250 40 592 24 947 24 897 25 322 23 387 58 854 44 -------------------------------------------------------------------------------- /lab2_1171800312/blks/44.blk: -------------------------------------------------------------------------------- 1 | 58 451 48 843 21 467 44 28 55 407 51 290 37 21 45 -------------------------------------------------------------------------------- /lab2_1171800312/blks/45.blk: -------------------------------------------------------------------------------- 1 | 31 283 43 285 40 372 33 848 52 810 47 702 43 849 46 -------------------------------------------------------------------------------- /lab2_1171800312/blks/46.blk: -------------------------------------------------------------------------------- 1 | 54 472 29 346 32 371 52 330 52 82 34 459 43 431 47 -------------------------------------------------------------------------------- /lab2_1171800312/blks/47.blk: -------------------------------------------------------------------------------- 1 | 49 894 31 760 57 990 52 517 28 632 51 453 32 177 0 -------------------------------------------------------------------------------- /lab2_1171800312/blks/5.blk: -------------------------------------------------------------------------------- 1 | 16 606 20 274 27 797 7 381 13 76 24 444 19 100 6 -------------------------------------------------------------------------------- /lab2_1171800312/blks/6.blk: -------------------------------------------------------------------------------- 1 | 22 366 22 973 15 721 12 42 14 10 24 575 12 433 7 -------------------------------------------------------------------------------- /lab2_1171800312/blks/7.blk: -------------------------------------------------------------------------------- 1 | 27 789 27 806 32 325 18 123 4 740 5 426 35 830 8 -------------------------------------------------------------------------------- /lab2_1171800312/blks/8.blk: -------------------------------------------------------------------------------- 1 | 11 624 40 950 37 517 21 106 13 313 27 318 5 94 9 -------------------------------------------------------------------------------- /lab2_1171800312/blks/9.blk: -------------------------------------------------------------------------------- 1 | 26 963 7 143 14 170 7 894 26 396 38 472 33 343 10 -------------------------------------------------------------------------------- /lab2_1171800312/extmem.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | 4 | def dropBlockOnDisk(addr): 5 | """ 6 | 从磁盘上删除地址为addr的磁盘块内的数据。 7 | :return:若删除成功,则返回True;否则,返回False。 8 | """ 9 | filename = "./blks/%s.blk" % addr 10 | if os.path.exists(filename): 11 | os.remove(filename) 12 | print("删除成功") 13 | return True 14 | print("删除失败") 15 | return False 16 | 17 | 18 | class Buffer: 19 | def __init__(self, buf_size, blk_size): 20 | """ 21 | 初始化 22 | """ 23 | self.ioCounter = 0 24 | self.bufferSize = buf_size 25 | self.blockSize = blk_size 26 | self.blockTotalNumber = buf_size / blk_size 27 | self.blockFreeNumber = self.blockTotalNumber 28 | self.data = [] 29 | #置空所有块 30 | for i in range(int(self.blockTotalNumber)): 31 | self.data.append([False]) 32 | 33 | def __del__(self): 34 | print("缓冲区已释放") 35 | 36 | ''' 37 | 试图申请一个块,成功返回块号,否则返回-1 38 | ''' 39 | def getNewBlockInBuffer(self): 40 | if self.blockFreeNumber == 0: 41 | print("Buffer is full!") 42 | return -1 43 | 44 | for i in range(int(self.blockTotalNumber)): 45 | if not self.data[i][0]: 46 | self.data[i][0] = True 47 | self.blockFreeNumber -= 1 48 | return i 49 | 50 | '''释放一个块''' 51 | def freeBlockInBuffer(self, index): 52 | self.data[index] = [False] 53 | self.blockFreeNumber += 1 54 | '''将某一个块导入内存''' 55 | def readBlockFromDisk(self, addr): 56 | if self.blockFreeNumber == 0: 57 | print("缓存区已满") 58 | return -1 59 | #找到第一个空闲的块 60 | index = 0 61 | for i in range(int(self.blockTotalNumber)): 62 | if not self.data[i][0]: 63 | index = i 64 | 65 | filename = "./blks/%s.blk" % addr 66 | f = open(filename) 67 | if not f: 68 | print("打开文件失败") 69 | return -1 70 | 71 | self.data[index] = [True] 72 | self.blockFreeNumber -= 1 73 | self.ioCounter += 1 74 | #逐行读入文件 75 | data = [] 76 | lines = f.readlines() 77 | for line in lines: 78 | line = line.split() # 去掉blk文件中的空格 79 | data.extend(line) 80 | self.data[index].append(data) 81 | f.close() 82 | return index 83 | 84 | def writeBlockToDisk(self, addr, index): 85 | filename = "./blks/%s.blk" % addr 86 | f = open(filename, 'w') 87 | if not f: 88 | print("打开文件失败") 89 | return False 90 | f.writelines(self.data[index][1]) 91 | f.close() 92 | self.data[index] = [False] # 写入后该块释放 93 | self.blockFreeNumber += 1 94 | self.ioCounter += 1 95 | return True 96 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/R0_0.blk: -------------------------------------------------------------------------------- 1 | 36 349 2 | 18 306 3 | 18 520 4 | 12 689 5 | 12 204 6 | 30 396 7 | 30 744 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/R0_1.blk: -------------------------------------------------------------------------------- 1 | 24 153 2 | 24 845 3 | 36 385 4 | 36 46 5 | 18 146 6 | 30 672 7 | 24 873 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/R0_2.blk: -------------------------------------------------------------------------------- 1 | 30 303 2 | 36 633 3 | 6 336 4 | 36 166 5 | 36 977 6 | 12 393 7 | 24 456 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/R0_3.blk: -------------------------------------------------------------------------------- 1 | 6 258 2 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/R1_0.blk: -------------------------------------------------------------------------------- 1 | 7 596 2 | 1 232 3 | 31 732 4 | 1 874 5 | 13 363 6 | 1 403 7 | 25 217 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/R1_1.blk: -------------------------------------------------------------------------------- 1 | 31 721 2 | 19 459 3 | 37 378 4 | 25 360 5 | 37 873 6 | 25 167 7 | 25 256 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/R2_0.blk: -------------------------------------------------------------------------------- 1 | 32 702 2 | 2 926 3 | 32 522 4 | 2 433 5 | 20 232 6 | 32 728 7 | 26 683 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/R2_1.blk: -------------------------------------------------------------------------------- 1 | 26 509 2 | 8 152 3 | 8 455 4 | 8 444 5 | 38 941 6 | 2 743 7 | 14 662 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/R3_0.blk: -------------------------------------------------------------------------------- 1 | 3 267 2 | 9 975 3 | 15 931 4 | 33 409 5 | 33 131 6 | 3 159 7 | 21 555 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/R3_1.blk: -------------------------------------------------------------------------------- 1 | 9 715 2 | 3 315 3 | 33 99 4 | 39 961 5 | 27 708 6 | 27 175 7 | 39 33 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/R3_2.blk: -------------------------------------------------------------------------------- 1 | 33 834 2 | 39 475 3 | 3 634 4 | 27 301 5 | 33 557 6 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/R4_0.blk: -------------------------------------------------------------------------------- 1 | 22 384 2 | 4 108 3 | 40 315 4 | 4 896 5 | 40 114 6 | 10 932 7 | 10 425 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/R4_1.blk: -------------------------------------------------------------------------------- 1 | 16 449 2 | 34 277 3 | 40 383 4 | 28 51 5 | 4 184 6 | 4 143 7 | 28 642 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/R4_2.blk: -------------------------------------------------------------------------------- 1 | 16 621 2 | 16 282 3 | 4 650 4 | 4 489 5 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/R5_0.blk: -------------------------------------------------------------------------------- 1 | 11 960 2 | 29 369 3 | 29 256 4 | 5 557 5 | 35 925 6 | 29 15 7 | 5 664 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/R5_1.blk: -------------------------------------------------------------------------------- 1 | 29 167 2 | 23 500 3 | 29 60 4 | 11 91 5 | 5 152 6 | 17 46 7 | 23 256 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/R5_2.blk: -------------------------------------------------------------------------------- 1 | 17 471 2 | 29 457 3 | 5 561 4 | 29 713 5 | 29 551 6 | 29 405 7 | 5 222 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/R5_3.blk: -------------------------------------------------------------------------------- 1 | 29 245 2 | 29 999 3 | 35 690 4 | 11 241 5 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S0_0.blk: -------------------------------------------------------------------------------- 1 | 60 501 2 | 36 517 3 | 36 473 4 | 36 424 5 | 30 460 6 | 42 275 7 | 48 375 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S0_1.blk: -------------------------------------------------------------------------------- 1 | 24 483 2 | 24 444 3 | 48 273 4 | 42 103 5 | 36 934 6 | 36 732 7 | 48 734 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S0_2.blk: -------------------------------------------------------------------------------- 1 | 42 857 2 | 36 900 3 | 36 553 4 | 54 738 5 | 24 321 6 | 30 71 7 | 24 708 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S0_3.blk: -------------------------------------------------------------------------------- 1 | 48 259 2 | 24 755 3 | 24 222 4 | 24 530 5 | 42 206 6 | 36 52 7 | 48 129 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S0_4.blk: -------------------------------------------------------------------------------- 1 | 42 41 2 | 60 101 3 | 36 589 4 | 36 285 5 | 42 808 6 | 30 164 7 | 24 521 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S0_5.blk: -------------------------------------------------------------------------------- 1 | 54 523 2 | 60 742 3 | 30 827 4 | 60 334 5 | 30 71 6 | 60 547 7 | 30 529 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S0_6.blk: -------------------------------------------------------------------------------- 1 | 48 254 2 | 48 540 3 | 36 47 4 | 42 320 5 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S1_0.blk: -------------------------------------------------------------------------------- 1 | 25 367 2 | 43 940 3 | 25 667 4 | 55 757 5 | 49 279 6 | 31 531 7 | 37 477 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S1_1.blk: -------------------------------------------------------------------------------- 1 | 43 213 2 | 37 24 3 | 55 193 4 | 43 428 5 | 55 117 6 | 55 623 7 | 37 220 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S1_2.blk: -------------------------------------------------------------------------------- 1 | 31 456 2 | 37 751 3 | 49 762 4 | 49 661 5 | 31 517 6 | 37 602 7 | 37 418 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S1_3.blk: -------------------------------------------------------------------------------- 1 | 31 711 2 | 37 834 3 | 31 835 4 | 31 237 5 | 49 242 6 | 25 3 7 | 25 768 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S1_4.blk: -------------------------------------------------------------------------------- 1 | 31 308 2 | 37 17 3 | 49 528 4 | 55 905 5 | 43 915 6 | 25 740 7 | 49 524 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S1_5.blk: -------------------------------------------------------------------------------- 1 | 43 406 2 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S2_0.blk: -------------------------------------------------------------------------------- 1 | 50 39 2 | 50 569 3 | 20 245 4 | 50 192 5 | 26 63 6 | 44 266 7 | 56 718 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S2_1.blk: -------------------------------------------------------------------------------- 1 | 50 197 2 | 32 537 3 | 44 735 4 | 38 257 5 | 32 105 6 | 26 327 7 | 56 750 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S2_2.blk: -------------------------------------------------------------------------------- 1 | 56 489 2 | 50 436 3 | 26 578 4 | 32 331 5 | 50 611 6 | 44 236 7 | 32 799 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S2_3.blk: -------------------------------------------------------------------------------- 1 | 32 181 2 | 26 209 3 | 26 669 4 | 38 672 5 | 38 389 6 | 38 173 7 | 26 790 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S2_4.blk: -------------------------------------------------------------------------------- 1 | 38 966 2 | 56 345 3 | 32 868 4 | 38 68 5 | 20 952 6 | 20 216 7 | 20 546 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S2_5.blk: -------------------------------------------------------------------------------- 1 | 32 600 2 | 20 864 3 | 56 587 4 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S3_0.blk: -------------------------------------------------------------------------------- 1 | 57 243 2 | 33 532 3 | 45 387 4 | 27 564 5 | 33 801 6 | 33 96 7 | 51 388 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S3_1.blk: -------------------------------------------------------------------------------- 1 | 33 456 2 | 45 911 3 | 33 729 4 | 51 834 5 | 39 265 6 | 33 858 7 | 27 591 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S3_2.blk: -------------------------------------------------------------------------------- 1 | 45 42 2 | 39 849 3 | 27 642 4 | 57 8 5 | 33 165 6 | 33 906 7 | 27 737 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S3_3.blk: -------------------------------------------------------------------------------- 1 | 39 801 2 | 57 11 3 | 33 503 4 | 21 547 5 | 39 71 6 | 33 360 7 | 51 751 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S3_4.blk: -------------------------------------------------------------------------------- 1 | 27 332 2 | 51 911 3 | 27 371 4 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S4_0.blk: -------------------------------------------------------------------------------- 1 | 46 28 2 | 28 243 3 | 40 171 4 | 52 499 5 | 58 877 6 | 58 995 7 | 58 498 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S4_1.blk: -------------------------------------------------------------------------------- 1 | 22 364 2 | 52 324 3 | 58 966 4 | 52 708 5 | 34 744 6 | 58 81 7 | 52 228 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S4_2.blk: -------------------------------------------------------------------------------- 1 | 34 381 2 | 52 753 3 | 40 533 4 | 58 737 5 | 34 428 6 | 46 456 7 | 46 613 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S4_3.blk: -------------------------------------------------------------------------------- 1 | 28 304 2 | 34 979 3 | 52 984 4 | 34 606 5 | 46 487 6 | 22 117 7 | 34 941 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S4_4.blk: -------------------------------------------------------------------------------- 1 | 40 860 2 | 28 586 3 | 52 183 4 | 28 760 5 | 34 532 6 | 22 355 7 | 22 792 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S4_5.blk: -------------------------------------------------------------------------------- 1 | 28 394 2 | 34 882 3 | 52 424 4 | 52 582 5 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S5_0.blk: -------------------------------------------------------------------------------- 1 | 29 589 2 | 59 773 3 | 47 301 4 | 29 545 5 | 59 679 6 | 53 256 7 | 53 448 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S5_1.blk: -------------------------------------------------------------------------------- 1 | 35 518 2 | 41 134 3 | 53 408 4 | 23 333 5 | 35 400 6 | 47 270 7 | 59 443 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S5_2.blk: -------------------------------------------------------------------------------- 1 | 23 683 2 | 23 495 3 | 59 510 4 | 29 554 5 | 47 239 6 | 35 766 7 | 29 839 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S5_3.blk: -------------------------------------------------------------------------------- 1 | 23 978 2 | 35 159 3 | 29 989 4 | 35 247 5 | 29 162 6 | 29 176 7 | 23 173 8 | -------------------------------------------------------------------------------- /lab2_1171800312/hash_temp/S5_4.blk: -------------------------------------------------------------------------------- 1 | 53 169 2 | 23 980 3 | 41 902 4 | 59 808 5 | 35 14 6 | 35 293 7 | -------------------------------------------------------------------------------- /lab2_1171800312/main_optim.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | from PyQt5.QtWidgets import QApplication, QMainWindow 4 | 5 | import untitled2 6 | from syntaxtree import SyntaxTree 7 | 8 | employee = ["ESSN" "ENAME", "DNO"] 9 | department = ["DNO", "DNAME"] 10 | project = ["PNAME", "PNO","DNO"], 11 | works_on = ["ESSN", "PNO"] 12 | 13 | def parse(sql_statement): 14 | sql = sql_statement.split() 15 | execute_tree = SyntaxTree() 16 | index = 0 17 | while True: 18 | if index >= len(sql): 19 | break 20 | #处理一元运算符 21 | elif sql[index] == 'SELECT' or sql[index] == 'PROJECTION': 22 | execute_tree.operator = sql[index] 23 | index += 2 # 从[开始到]里面的全部记录下来 24 | condition = '' 25 | while sql[index] != ']': 26 | condition += sql[index] 27 | condition += ' ' 28 | index += 1 29 | index += 1 30 | execute_tree.condition = condition 31 | #处理二元运算符 32 | elif sql[index] == 'JOIN': 33 | # 连接操作需要创建子树,所以分开写 34 | execute_tree.operator = sql[index] 35 | execute_tree.left_child = SyntaxTree() 36 | execute_tree.left_child.attribute = sql[index - 1] 37 | execute_tree.right_child = SyntaxTree() 38 | execute_tree.right_child.attribute = sql[index + 1] 39 | index += 1 40 | #处理子查询,进行递归 41 | elif sql[index] == '(': 42 | index += 1 43 | statement = '' 44 | while index < len(sql) and sql[index] != ')': 45 | statement += sql[index] 46 | statement += ' ' 47 | index += 1 48 | index += 1 49 | execute_tree.left_child = parse(statement) 50 | else: 51 | index += 1 52 | 53 | return execute_tree 54 | 55 | 56 | def search(sql): 57 | sql = sql.split() 58 | if sql[0] in employee: 59 | return "EMPLOYEE" 60 | elif sql[0] in department: 61 | return "DEPARTMENT" 62 | elif sql[0] in project: 63 | return "PROJECT" 64 | elif sql[0] in works_on: 65 | return "WORKS_ON" 66 | return None 67 | 68 | 69 | def optimize(syntax_tree, sql): 70 | if syntax_tree.operator == 'SELECT': 71 | condition = syntax_tree.condition 72 | #拆开条件,并把条件向下传递 73 | sql = condition.split('&') 74 | relation = [] 75 | for i in range(len(sql)): 76 | if search(sql[i]) is not None: 77 | relation.append(search(sql[i])) 78 | syntax_tree = optimize(syntax_tree.left_child, sql) 79 | elif syntax_tree.operator == 'PROJECTION': 80 | syntax_tree.left_child = optimize(syntax_tree.left_child, sql) 81 | elif syntax_tree.operator == 'JOIN': 82 | first_tree = SyntaxTree() 83 | first_tree.operator = 'SELECT' 84 | first_tree.condition = sql[0] 85 | first_tree.left_child = syntax_tree.left_child 86 | syntax_tree.left_child = first_tree 87 | if len(sql) == 1: 88 | return syntax_tree 89 | second_tree = SyntaxTree() 90 | second_tree.operator = 'SELECT' 91 | second_tree.condition = sql[1] 92 | second_tree.right_child = syntax_tree.right_child 93 | syntax_tree.right_child = second_tree 94 | return syntax_tree 95 | 96 | 97 | def print_tree(syntax_tree): 98 | global indent 99 | if syntax_tree.operator != '': 100 | ui.textEdit.append(" "*indent+syntax_tree.operator+" "+syntax_tree.condition) 101 | else: 102 | ui.textEdit.append(" "*indent+syntax_tree.attribute.replace(")","")) 103 | if syntax_tree.left_child is not None: 104 | indent = indent+2 105 | print_tree(syntax_tree.left_child) 106 | indent = indent-2 107 | if syntax_tree.right_child is not None: 108 | indent = indent+2 109 | print_tree(syntax_tree.right_child) 110 | indent = indent-2 111 | def input(): 112 | ui.lineEdit.setText(ui.selectsql.currentText()) 113 | def execute(): 114 | sql = ui.lineEdit.text() 115 | etree1 = parse(sql) 116 | ui.textEdit.clear() 117 | ui.textEdit.append("优化前:") 118 | print_tree(etree1) 119 | ui.textEdit.append('优化后:') 120 | otree1 = optimize(etree1, '') 121 | print_tree(otree1) 122 | if __name__ == '__main__': 123 | sql1 = "SELECT [ ENAME = ’Mary’ & DNAME = ’Research’ ] ( EMPLOYEE JOIN DEPARTMENT )" 124 | sql2 = "PROJECTION [ BDATE ] ( SELECT [ ENAME = ’John’ & DNAME = ’ Research’ ] ( EMPLOYEE JOIN DEPARTMENT) )" 125 | sql3 = "SELECT [ ESSN = ’01’ ] ( PROJECTION [ ESSN, PNAME ] ( WORKS_ON JOIN PROJECT ) )" 126 | indent = 0 127 | app = QApplication(sys.argv) 128 | mainWindow = QMainWindow() 129 | ui = untitled2.Ui_before() 130 | # 向主窗口上添加控件 131 | ui.setupUi(mainWindow) 132 | ui.go.clicked.connect(execute) 133 | ui.input.clicked.connect(input) 134 | mainWindow.setWindowTitle("查询优化器") 135 | mainWindow.show() 136 | sys.exit(app.exec_()) 137 | -------------------------------------------------------------------------------- /lab2_1171800312/relation.py: -------------------------------------------------------------------------------- 1 | class R: 2 | def __init__(self, a, b): 3 | self.first_attr = a 4 | self.second_attr = b 5 | 6 | 7 | class S: 8 | def __init__(self, c, d): 9 | self.first_attr = c 10 | self.second_attr = d -------------------------------------------------------------------------------- /lab2_1171800312/result.txt: -------------------------------------------------------------------------------- 1 | 27 198 27 849 2 | 27 126 27 849 3 | 24 271 24 376 4 | 27 198 27 712 5 | 27 198 27 693 6 | 27 126 27 712 7 | 27 126 27 693 8 | 24 271 24 638 9 | 24 271 24 797 10 | 27 198 27 660 11 | 36 352 36 178 12 | 27 126 27 660 13 | 27 198 27 936 14 | 27 126 27 936 15 | 36 352 36 432 16 | 36 352 36 975 17 | 36 352 36 524 18 | 24 271 24 79 19 | 24 271 24 452 20 | 35 923 35 247 21 | 35 923 35 17 22 | 36 352 36 28 23 | 36 352 36 91 24 | 35 923 35 985 25 | 27 198 27 592 26 | 27 126 27 592 27 | 27 198 27 859 28 | 27 126 27 859 29 | 35 923 35 3 30 | 36 352 36 74 31 | 27 198 27 390 32 | 27 126 27 390 33 | 24 271 24 621 34 | 35 923 35 198 35 | 36 352 36 131 36 | 35 923 35 796 37 | 36 352 36 858 38 | 33 644 33 191 39 | 33 644 33 910 40 | 33 644 33 524 41 | 33 644 33 369 42 | 32 497 32 507 43 | 36 266 36 178 44 | 36 266 36 432 45 | 36 266 36 975 46 | 36 266 36 524 47 | 33 644 33 367 48 | 33 644 33 926 49 | 33 644 33 166 50 | 39 909 39 740 51 | 36 266 36 28 52 | 36 266 36 91 53 | 33 644 33 409 54 | 39 909 39 390 55 | 36 266 36 74 56 | 33 644 33 687 57 | 36 266 36 131 58 | 32 497 32 256 59 | 32 497 32 674 60 | 39 909 39 176 61 | 33 644 33 779 62 | 36 266 36 858 63 | 20 2 20 957 64 | 25 881 25 278 65 | 35 744 35 247 66 | 20 2 20 461 67 | 35 744 35 17 68 | 35 744 35 985 69 | 20 2 20 323 70 | 25 881 25 479 71 | 35 744 35 3 72 | 20 2 20 606 73 | 35 744 35 198 74 | 25 881 25 981 75 | 25 881 25 502 76 | 25 881 25 523 77 | 35 744 35 796 78 | 27 702 27 849 79 | 21 459 21 331 80 | 27 702 27 712 81 | 27 702 27 693 82 | 20 71 20 957 83 | 30 319 30 901 84 | 30 319 30 731 85 | 27 702 27 660 86 | 32 423 32 507 87 | 27 702 27 936 88 | 30 319 30 762 89 | 21 459 21 352 90 | 20 71 20 461 91 | 21 459 21 33 92 | 27 702 27 592 93 | 27 702 27 859 94 | 20 71 20 323 95 | 27 702 27 390 96 | 20 71 20 606 97 | 30 319 30 545 98 | 30 319 30 20 99 | 32 423 32 256 100 | 32 423 32 674 101 | 31 22 31 660 102 | 28 704 28 134 103 | 26 336 26 36 104 | 28 704 28 696 105 | 28 704 28 931 106 | 28 704 28 601 107 | 30 67 30 901 108 | 30 67 30 731 109 | 30 67 30 762 110 | 28 704 28 371 111 | 28 704 28 438 112 | 31 22 31 827 113 | 28 704 28 592 114 | 31 22 31 923 115 | 28 704 28 890 116 | 35 547 35 247 117 | 28 704 28 996 118 | 35 547 35 17 119 | 35 547 35 985 120 | 31 22 31 152 121 | 35 547 35 3 122 | 28 704 28 930 123 | 28 704 28 755 124 | 35 547 35 198 125 | 28 704 28 184 126 | 28 704 28 39 127 | 30 67 30 545 128 | 31 22 31 349 129 | 31 22 31 576 130 | 30 67 30 20 131 | 26 336 26 294 132 | 35 547 35 796 133 | 38 864 38 79 134 | 38 913 38 79 135 | 24 801 24 376 136 | 38 864 38 204 137 | 21 752 21 331 138 | 38 913 38 204 139 | 24 801 24 638 140 | 24 801 24 797 141 | 21 752 21 352 142 | 38 864 38 921 143 | 38 913 38 921 144 | 24 801 24 79 145 | 24 801 24 452 146 | 21 752 21 33 147 | 24 801 24 621 148 | 38 231 38 79 149 | 38 231 38 204 150 | 38 231 38 921 151 | 27 184 27 849 152 | 27 911 27 849 153 | 38 588 38 79 154 | 38 588 38 204 155 | 24 564 24 376 156 | 26 651 26 36 157 | 27 184 27 712 158 | 27 184 27 693 159 | 27 911 27 712 160 | 27 911 27 693 161 | 24 564 24 638 162 | 24 564 24 797 163 | 27 184 27 660 164 | 27 911 27 660 165 | 27 184 27 936 166 | 27 911 27 936 167 | 38 588 38 921 168 | 24 564 24 79 169 | 24 564 24 452 170 | 22 650 22 896 171 | 39 177 39 740 172 | 27 184 27 592 173 | 27 911 27 592 174 | 27 184 27 859 175 | 27 911 27 859 176 | 22 650 22 245 177 | 39 177 39 390 178 | 27 184 27 390 179 | 27 911 27 390 180 | 24 564 24 621 181 | 26 651 26 294 182 | 39 177 39 176 183 | 29 464 29 310 184 | 38 28 38 79 185 | 29 464 29 188 186 | 38 28 38 204 187 | 24 243 24 376 188 | 24 243 24 638 189 | 24 243 24 797 190 | 29 464 29 302 191 | 38 28 38 921 192 | 24 243 24 79 193 | 24 243 24 452 194 | 35 861 35 247 195 | 29 464 29 652 196 | 35 861 35 17 197 | 29 464 29 729 198 | 35 861 35 985 199 | 35 861 35 3 200 | 29 464 29 416 201 | 24 243 24 621 202 | 35 861 35 198 203 | 35 861 35 796 204 | 20 669 20 957 205 | 22 281 22 896 206 | 20 669 20 461 207 | 20 669 20 323 208 | 22 281 22 245 209 | 20 669 20 606 210 | 28 153 28 134 211 | 28 153 28 696 212 | 28 153 28 931 213 | 28 153 28 601 214 | 32 884 32 507 215 | 28 153 28 371 216 | 28 153 28 438 217 | 28 153 28 592 218 | 35 464 35 247 219 | 28 153 28 890 220 | 28 153 28 996 221 | 35 464 35 17 222 | 35 464 35 985 223 | 35 464 35 3 224 | 28 153 28 930 225 | 28 153 28 755 226 | 35 464 35 198 227 | 28 153 28 184 228 | 28 153 28 39 229 | 32 884 32 256 230 | 32 884 32 674 231 | 35 464 35 796 232 | 23 656 23 237 233 | 29 750 29 310 234 | 23 656 23 486 235 | 38 98 38 79 236 | 29 750 29 188 237 | 28 76 28 134 238 | 38 98 38 204 239 | 28 76 28 696 240 | 28 76 28 931 241 | 28 76 28 601 242 | 29 750 29 302 243 | 32 29 32 507 244 | 32 199 32 507 245 | 23 656 23 967 246 | 28 76 28 371 247 | 28 76 28 438 248 | 28 76 28 592 249 | 38 98 38 921 250 | 23 656 23 713 251 | 28 76 28 890 252 | 28 76 28 996 253 | 29 750 29 652 254 | 23 656 23 663 255 | 23 656 23 897 256 | 23 656 23 465 257 | 29 750 29 729 258 | 23 656 23 997 259 | 28 76 28 930 260 | 28 76 28 755 261 | 29 750 29 416 262 | 28 76 28 184 263 | 28 76 28 39 264 | 32 29 32 256 265 | 32 199 32 256 266 | 32 29 32 674 267 | 32 199 32 674 268 | 38 378 38 79 269 | 38 378 38 204 270 | 38 378 38 921 271 | 35 955 35 247 272 | 39 842 39 740 273 | 35 955 35 17 274 | 35 955 35 985 275 | 35 955 35 3 276 | 39 842 39 390 277 | 35 955 35 198 278 | 35 955 35 796 279 | 39 842 39 176 280 | 27 941 27 849 281 | 26 396 26 36 282 | 27 941 27 712 283 | 27 941 27 693 284 | 27 941 27 660 285 | 27 941 27 936 286 | 35 471 35 247 287 | 35 750 35 247 288 | 35 471 35 17 289 | 35 750 35 17 290 | 35 471 35 985 291 | 35 750 35 985 292 | 27 941 27 592 293 | 27 941 27 859 294 | 35 471 35 3 295 | 35 750 35 3 296 | 27 941 27 390 297 | 35 471 35 198 298 | 35 750 35 198 299 | 26 396 26 294 300 | 35 471 35 796 301 | 35 750 35 796 302 | 21 379 21 331 303 | 21 379 21 352 304 | 34 750 34 582 305 | 34 750 34 56 306 | 34 750 34 255 307 | 22 974 22 896 308 | 39 836 39 740 309 | 21 379 21 33 310 | 34 750 34 279 311 | 34 750 34 826 312 | 39 836 39 390 313 | 22 974 22 245 314 | 39 836 39 176 315 | 34 750 34 837 316 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/0.blk: -------------------------------------------------------------------------------- 1 | 1 232 2 | 1 403 3 | 1 874 4 | 2 433 5 | 2 926 6 | 3 159 7 | 3 267 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/1.blk: -------------------------------------------------------------------------------- 1 | 3 315 2 | 4 108 3 | 4 896 4 | 5 152 5 | 5 557 6 | 5 664 7 | 7 596 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/10.blk: -------------------------------------------------------------------------------- 1 | 12 393 2 | 14 662 3 | 16 282 4 | 16 621 5 | 17 471 6 | 19 459 7 | 23 256 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/11.blk: -------------------------------------------------------------------------------- 1 | 24 456 2 | 25 167 3 | 25 217 4 | 25 256 5 | 25 360 6 | 26 509 7 | 26 683 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/12.blk: -------------------------------------------------------------------------------- 1 | 27 175 2 | 27 301 3 | 27 708 4 | 28 51 5 | 28 642 6 | 29 245 7 | 29 405 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/13.blk: -------------------------------------------------------------------------------- 1 | 29 457 2 | 29 551 3 | 29 713 4 | 29 999 5 | 30 303 6 | 31 721 7 | 32 728 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/14.blk: -------------------------------------------------------------------------------- 1 | 33 99 2 | 33 557 3 | 33 834 4 | 35 690 5 | 36 166 6 | 36 633 7 | 36 977 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/15.blk: -------------------------------------------------------------------------------- 1 | 37 378 2 | 37 873 3 | 38 941 4 | 39 33 5 | 39 475 6 | 39 961 7 | 40 383 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/16.blk: -------------------------------------------------------------------------------- 1 | 20 245 2 | 22 364 3 | 24 444 4 | 24 483 5 | 25 367 6 | 25 667 7 | 26 63 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/17.blk: -------------------------------------------------------------------------------- 1 | 26 327 2 | 27 564 3 | 28 243 4 | 29 545 5 | 29 589 6 | 30 460 7 | 31 531 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/18.blk: -------------------------------------------------------------------------------- 1 | 32 105 2 | 32 537 3 | 33 96 4 | 33 532 5 | 33 801 6 | 35 518 7 | 36 424 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/19.blk: -------------------------------------------------------------------------------- 1 | 36 473 2 | 36 517 3 | 38 257 4 | 40 171 5 | 41 134 6 | 42 275 7 | 43 940 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/2.blk: -------------------------------------------------------------------------------- 1 | 9 715 2 | 9 975 3 | 10 425 4 | 10 932 5 | 11 91 6 | 11 960 7 | 12 204 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/20.blk: -------------------------------------------------------------------------------- 1 | 44 266 2 | 44 735 3 | 45 387 4 | 46 28 5 | 47 301 6 | 48 375 7 | 49 279 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/21.blk: -------------------------------------------------------------------------------- 1 | 50 39 2 | 50 192 3 | 50 197 4 | 50 436 5 | 50 569 6 | 52 324 7 | 52 499 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/22.blk: -------------------------------------------------------------------------------- 1 | 53 256 2 | 53 448 3 | 55 757 4 | 56 489 5 | 56 718 6 | 56 750 7 | 57 243 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/23.blk: -------------------------------------------------------------------------------- 1 | 58 498 2 | 58 877 3 | 58 966 4 | 58 995 5 | 59 679 6 | 59 773 7 | 60 501 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/24.blk: -------------------------------------------------------------------------------- 1 | 23 333 2 | 23 495 3 | 23 683 4 | 24 321 5 | 24 708 6 | 26 578 7 | 28 304 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/25.blk: -------------------------------------------------------------------------------- 1 | 29 554 2 | 30 71 3 | 31 456 4 | 32 181 5 | 32 331 6 | 32 799 7 | 33 456 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/26.blk: -------------------------------------------------------------------------------- 1 | 33 729 2 | 33 858 3 | 34 381 4 | 34 428 5 | 34 744 6 | 35 400 7 | 36 553 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/27.blk: -------------------------------------------------------------------------------- 1 | 36 732 2 | 36 900 3 | 36 934 4 | 37 24 5 | 37 220 6 | 37 477 7 | 39 265 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/28.blk: -------------------------------------------------------------------------------- 1 | 40 533 2 | 42 103 3 | 42 857 4 | 43 213 5 | 43 428 6 | 44 236 7 | 45 911 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/29.blk: -------------------------------------------------------------------------------- 1 | 46 456 2 | 46 613 3 | 47 239 4 | 47 270 5 | 48 273 6 | 48 734 7 | 50 611 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/3.blk: -------------------------------------------------------------------------------- 1 | 12 689 2 | 13 363 3 | 15 931 4 | 16 449 5 | 17 46 6 | 18 146 7 | 18 306 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/30.blk: -------------------------------------------------------------------------------- 1 | 51 388 2 | 51 834 3 | 52 228 4 | 52 708 5 | 52 753 6 | 53 408 7 | 54 738 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/31.blk: -------------------------------------------------------------------------------- 1 | 55 117 2 | 55 193 3 | 55 623 4 | 58 81 5 | 58 737 6 | 59 443 7 | 59 510 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/32.blk: -------------------------------------------------------------------------------- 1 | 22 117 2 | 23 173 3 | 23 978 4 | 24 222 5 | 24 521 6 | 24 530 7 | 24 755 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/33.blk: -------------------------------------------------------------------------------- 1 | 26 209 2 | 26 669 3 | 26 790 4 | 27 591 5 | 27 642 6 | 28 586 7 | 28 760 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/34.blk: -------------------------------------------------------------------------------- 1 | 29 162 2 | 29 176 3 | 29 839 4 | 29 989 5 | 30 164 6 | 31 517 7 | 31 711 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/35.blk: -------------------------------------------------------------------------------- 1 | 31 835 2 | 33 165 3 | 33 906 4 | 34 606 5 | 34 941 6 | 34 979 7 | 35 159 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/36.blk: -------------------------------------------------------------------------------- 1 | 35 247 2 | 35 766 3 | 36 52 4 | 36 285 5 | 36 589 6 | 37 418 7 | 37 602 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/37.blk: -------------------------------------------------------------------------------- 1 | 37 751 2 | 37 834 3 | 38 173 4 | 38 389 5 | 38 672 6 | 38 966 7 | 39 849 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/38.blk: -------------------------------------------------------------------------------- 1 | 40 860 2 | 42 41 3 | 42 206 4 | 42 808 5 | 45 42 6 | 46 487 7 | 48 129 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/39.blk: -------------------------------------------------------------------------------- 1 | 48 259 2 | 49 661 3 | 49 762 4 | 52 183 5 | 52 984 6 | 57 8 7 | 60 101 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/4.blk: -------------------------------------------------------------------------------- 1 | 18 520 2 | 20 232 3 | 21 555 4 | 22 384 5 | 23 500 6 | 24 153 7 | 24 845 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/40.blk: -------------------------------------------------------------------------------- 1 | 20 216 2 | 20 546 3 | 20 864 4 | 20 952 5 | 21 547 6 | 22 355 7 | 22 792 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/41.blk: -------------------------------------------------------------------------------- 1 | 23 980 2 | 25 3 3 | 25 740 4 | 25 768 5 | 27 332 6 | 27 371 7 | 27 737 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/42.blk: -------------------------------------------------------------------------------- 1 | 28 394 2 | 30 71 3 | 30 529 4 | 30 827 5 | 31 237 6 | 31 308 7 | 32 600 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/43.blk: -------------------------------------------------------------------------------- 1 | 32 868 2 | 33 360 3 | 33 503 4 | 34 532 5 | 34 882 6 | 35 14 7 | 35 293 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/44.blk: -------------------------------------------------------------------------------- 1 | 36 47 2 | 37 17 3 | 38 68 4 | 39 71 5 | 39 801 6 | 41 902 7 | 42 320 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/45.blk: -------------------------------------------------------------------------------- 1 | 43 406 2 | 43 915 3 | 48 254 4 | 48 540 5 | 49 242 6 | 49 524 7 | 49 528 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/46.blk: -------------------------------------------------------------------------------- 1 | 51 751 2 | 51 911 3 | 52 424 4 | 52 582 5 | 53 169 6 | 54 523 7 | 55 905 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/47.blk: -------------------------------------------------------------------------------- 1 | 56 345 2 | 56 587 3 | 57 11 4 | 59 808 5 | 60 334 6 | 60 547 7 | 60 742 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/5.blk: -------------------------------------------------------------------------------- 1 | 24 873 2 | 29 15 3 | 29 60 4 | 29 167 5 | 29 256 6 | 29 369 7 | 30 396 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/6.blk: -------------------------------------------------------------------------------- 1 | 30 672 2 | 30 744 3 | 31 732 4 | 32 522 5 | 32 702 6 | 33 131 7 | 33 409 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/7.blk: -------------------------------------------------------------------------------- 1 | 34 277 2 | 35 925 3 | 36 46 4 | 36 349 5 | 36 385 6 | 40 114 7 | 40 315 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/8.blk: -------------------------------------------------------------------------------- 1 | 2 743 2 | 3 634 3 | 4 143 4 | 4 184 5 | 4 489 6 | 4 650 7 | 5 222 8 | -------------------------------------------------------------------------------- /lab2_1171800312/sort_temp/9.blk: -------------------------------------------------------------------------------- 1 | 5 561 2 | 6 258 3 | 6 336 4 | 8 152 5 | 8 444 6 | 8 455 7 | 11 241 8 | -------------------------------------------------------------------------------- /lab2_1171800312/syntaxtree.py: -------------------------------------------------------------------------------- 1 | class SyntaxTree: 2 | def __init__(self): 3 | self._left_child = None 4 | self._right_child = None 5 | self._operator = '' 6 | self._condition = '' 7 | self._attribute = '' 8 | 9 | @property 10 | def left_child(self): 11 | return self._left_child 12 | 13 | @left_child.setter 14 | def left_child(self, value): 15 | self._left_child = value 16 | 17 | @property 18 | def right_child(self): 19 | return self._right_child 20 | 21 | @right_child.setter 22 | def right_child(self, value): 23 | self._right_child = value 24 | 25 | @property 26 | def operator(self): 27 | return self._operator 28 | 29 | @operator.setter 30 | def operator(self, value): 31 | self._operator = value 32 | 33 | @property 34 | def condition(self): 35 | return self._condition 36 | 37 | @condition.setter 38 | def condition(self, value): 39 | self._condition = value 40 | 41 | @property 42 | def attribute(self): 43 | return self._attribute 44 | 45 | @attribute.setter 46 | def attribute(self, value): 47 | self._attribute = value 48 | -------------------------------------------------------------------------------- /lab2_1171800312/untitled.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'untitled.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.9.2 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | 11 | class Ui_MainWindow(object): 12 | def setupUi(self, MainWindow): 13 | MainWindow.setObjectName("MainWindow") 14 | MainWindow.resize(867, 780) 15 | self.centralwidget = QtWidgets.QWidget(MainWindow) 16 | self.centralwidget.setObjectName("centralwidget") 17 | self.label = QtWidgets.QLabel(self.centralwidget) 18 | self.label.setGeometry(QtCore.QRect(400, 10, 91, 21)) 19 | self.label.setObjectName("label") 20 | self.label_2 = QtWidgets.QLabel(self.centralwidget) 21 | self.label_2.setGeometry(QtCore.QRect(110, 60, 81, 16)) 22 | self.label_2.setObjectName("label_2") 23 | self.sel1 = QtWidgets.QComboBox(self.centralwidget) 24 | self.sel1.setGeometry(QtCore.QRect(230, 60, 73, 22)) 25 | self.sel1.setObjectName("sel1") 26 | self.sel1.addItem("") 27 | self.sel1.addItem("") 28 | self.sel2 = QtWidgets.QComboBox(self.centralwidget) 29 | self.sel2.setGeometry(QtCore.QRect(340, 60, 73, 22)) 30 | self.sel2.setObjectName("sel2") 31 | self.sel2.addItem("") 32 | self.sel2.addItem("") 33 | self.sel2.addItem("") 34 | self.sel2.addItem("") 35 | self.sel3 = QtWidgets.QLineEdit(self.centralwidget) 36 | self.sel3.setGeometry(QtCore.QRect(450, 60, 113, 22)) 37 | self.sel3.setObjectName("sel3") 38 | self.selexe = QtWidgets.QPushButton(self.centralwidget) 39 | self.selexe.setGeometry(QtCore.QRect(650, 60, 93, 28)) 40 | self.selexe.setObjectName("selexe") 41 | self.label_3 = QtWidgets.QLabel(self.centralwidget) 42 | self.label_3.setGeometry(QtCore.QRect(110, 110, 81, 16)) 43 | self.label_3.setObjectName("label_3") 44 | self.proj1 = QtWidgets.QComboBox(self.centralwidget) 45 | self.proj1.setGeometry(QtCore.QRect(230, 110, 73, 22)) 46 | self.proj1.setObjectName("proj1") 47 | self.proj1.addItem("") 48 | self.proj1.addItem("") 49 | self.proj2 = QtWidgets.QComboBox(self.centralwidget) 50 | self.proj2.setGeometry(QtCore.QRect(340, 110, 73, 22)) 51 | self.proj2.setObjectName("proj2") 52 | self.proj2.addItem("") 53 | self.proj2.addItem("") 54 | self.proj2.addItem("") 55 | self.proj2.addItem("") 56 | self.projexe = QtWidgets.QPushButton(self.centralwidget) 57 | self.projexe.setGeometry(QtCore.QRect(650, 110, 93, 28)) 58 | self.projexe.setObjectName("projexe") 59 | self.label_4 = QtWidgets.QLabel(self.centralwidget) 60 | self.label_4.setGeometry(QtCore.QRect(110, 160, 81, 16)) 61 | self.label_4.setObjectName("label_4") 62 | self.join1 = QtWidgets.QComboBox(self.centralwidget) 63 | self.join1.setGeometry(QtCore.QRect(230, 160, 181, 21)) 64 | self.join1.setObjectName("join1") 65 | self.join1.addItem("") 66 | self.join1.addItem("") 67 | self.join1.addItem("") 68 | self.joinexe = QtWidgets.QPushButton(self.centralwidget) 69 | self.joinexe.setGeometry(QtCore.QRect(650, 160, 93, 28)) 70 | self.joinexe.setObjectName("joinexe") 71 | self.log = QtWidgets.QTextEdit(self.centralwidget) 72 | self.log.setGeometry(QtCore.QRect(40, 210, 371, 481)) 73 | self.log.setReadOnly(True) 74 | self.log.setObjectName("log") 75 | self.res = QtWidgets.QTextEdit(self.centralwidget) 76 | self.res.setGeometry(QtCore.QRect(440, 210, 371, 481)) 77 | self.res.setReadOnly(True) 78 | self.res.setObjectName("res") 79 | self.save = QtWidgets.QPushButton(self.centralwidget) 80 | self.save.setGeometry(QtCore.QRect(740, 700, 75, 23)) 81 | self.save.setObjectName("save") 82 | MainWindow.setCentralWidget(self.centralwidget) 83 | self.menubar = QtWidgets.QMenuBar(MainWindow) 84 | self.menubar.setGeometry(QtCore.QRect(0, 0, 867, 21)) 85 | self.menubar.setObjectName("menubar") 86 | MainWindow.setMenuBar(self.menubar) 87 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 88 | self.statusbar.setObjectName("statusbar") 89 | MainWindow.setStatusBar(self.statusbar) 90 | 91 | self.retranslateUi(MainWindow) 92 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 93 | 94 | def retranslateUi(self, MainWindow): 95 | _translate = QtCore.QCoreApplication.translate 96 | MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 97 | self.label.setText(_translate("MainWindow", "缓冲区管理")) 98 | self.label_2.setText(_translate("MainWindow", "选择操作:")) 99 | self.sel1.setItemText(0, _translate("MainWindow", "R")) 100 | self.sel1.setItemText(1, _translate("MainWindow", "S")) 101 | self.sel2.setItemText(0, _translate("MainWindow", "A")) 102 | self.sel2.setItemText(1, _translate("MainWindow", "B")) 103 | self.sel2.setItemText(2, _translate("MainWindow", "C")) 104 | self.sel2.setItemText(3, _translate("MainWindow", "D")) 105 | self.sel3.setText(_translate("MainWindow", "40")) 106 | self.selexe.setText(_translate("MainWindow", "执行")) 107 | self.label_3.setText(_translate("MainWindow", "投影操作:")) 108 | self.proj1.setItemText(0, _translate("MainWindow", "R")) 109 | self.proj1.setItemText(1, _translate("MainWindow", "S")) 110 | self.proj2.setItemText(0, _translate("MainWindow", "A")) 111 | self.proj2.setItemText(1, _translate("MainWindow", "B")) 112 | self.proj2.setItemText(2, _translate("MainWindow", "C")) 113 | self.proj2.setItemText(3, _translate("MainWindow", "D")) 114 | self.projexe.setText(_translate("MainWindow", "执行")) 115 | self.label_4.setText(_translate("MainWindow", "连接操作:")) 116 | self.join1.setItemText(0, _translate("MainWindow", "nest_loop_join")) 117 | self.join1.setItemText(1, _translate("MainWindow", "sort_merge_join")) 118 | self.join1.setItemText(2, _translate("MainWindow", "hash_join")) 119 | self.joinexe.setText(_translate("MainWindow", "执行")) 120 | self.log.setHtml(_translate("MainWindow", "\n" 121 | "\n" 124 | "

操作日志

\n" 125 | "


")) 126 | self.res.setHtml(_translate("MainWindow", "\n" 127 | "\n" 130 | "

操作结果

")) 131 | self.save.setText(_translate("MainWindow", "结果保存")) 132 | 133 | -------------------------------------------------------------------------------- /lab2_1171800312/untitled.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 867 10 | 780 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 400 21 | 10 22 | 91 23 | 21 24 | 25 | 26 | 27 | 缓冲区管理 28 | 29 | 30 | 31 | 32 | 33 | 110 34 | 60 35 | 81 36 | 16 37 | 38 | 39 | 40 | 选择操作: 41 | 42 | 43 | 44 | 45 | 46 | 230 47 | 60 48 | 73 49 | 22 50 | 51 | 52 | 53 | 54 | R 55 | 56 | 57 | 58 | 59 | S 60 | 61 | 62 | 63 | 64 | 65 | 66 | 340 67 | 60 68 | 73 69 | 22 70 | 71 | 72 | 73 | 74 | A 75 | 76 | 77 | 78 | 79 | B 80 | 81 | 82 | 83 | 84 | C 85 | 86 | 87 | 88 | 89 | D 90 | 91 | 92 | 93 | 94 | 95 | 96 | 450 97 | 60 98 | 113 99 | 22 100 | 101 | 102 | 103 | 40 104 | 105 | 106 | 107 | 108 | 109 | 650 110 | 60 111 | 93 112 | 28 113 | 114 | 115 | 116 | 执行 117 | 118 | 119 | 120 | 121 | 122 | 110 123 | 110 124 | 81 125 | 16 126 | 127 | 128 | 129 | 投影操作: 130 | 131 | 132 | 133 | 134 | 135 | 230 136 | 110 137 | 73 138 | 22 139 | 140 | 141 | 142 | 143 | R 144 | 145 | 146 | 147 | 148 | S 149 | 150 | 151 | 152 | 153 | 154 | 155 | 340 156 | 110 157 | 73 158 | 22 159 | 160 | 161 | 162 | 163 | A 164 | 165 | 166 | 167 | 168 | B 169 | 170 | 171 | 172 | 173 | C 174 | 175 | 176 | 177 | 178 | D 179 | 180 | 181 | 182 | 183 | 184 | 185 | 650 186 | 110 187 | 93 188 | 28 189 | 190 | 191 | 192 | 执行 193 | 194 | 195 | 196 | 197 | 198 | 110 199 | 160 200 | 81 201 | 16 202 | 203 | 204 | 205 | 连接操作: 206 | 207 | 208 | 209 | 210 | 211 | 230 212 | 160 213 | 181 214 | 21 215 | 216 | 217 | 218 | 219 | nest_loop_join 220 | 221 | 222 | 223 | 224 | sort_merge_join 225 | 226 | 227 | 228 | 229 | hash_join 230 | 231 | 232 | 233 | 234 | 235 | 236 | 650 237 | 160 238 | 93 239 | 28 240 | 241 | 242 | 243 | 执行 244 | 245 | 246 | 247 | 248 | 249 | 40 250 | 210 251 | 371 252 | 481 253 | 254 | 255 | 256 | true 257 | 258 | 259 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> 260 | <html><head><meta name="qrichtext" content="1" /><style type="text/css"> 261 | p, li { white-space: pre-wrap; } 262 | </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> 263 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">操作日志</p> 264 | <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> 265 | 266 | 267 | 268 | 269 | 270 | 440 271 | 210 272 | 371 273 | 481 274 | 275 | 276 | 277 | true 278 | 279 | 280 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> 281 | <html><head><meta name="qrichtext" content="1" /><style type="text/css"> 282 | p, li { white-space: pre-wrap; } 283 | </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> 284 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">操作结果</p></body></html> 285 | 286 | 287 | 288 | 289 | 290 | 740 291 | 700 292 | 75 293 | 23 294 | 295 | 296 | 297 | 结果保存 298 | 299 | 300 | 301 | 302 | 303 | 304 | 0 305 | 0 306 | 867 307 | 21 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | -------------------------------------------------------------------------------- /lab2_1171800312/untitled2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'untitled2.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.9.2 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | 11 | class Ui_before(object): 12 | def setupUi(self, before): 13 | before.setObjectName("before") 14 | before.resize(800, 600) 15 | self.centralwidget = QtWidgets.QWidget(before) 16 | self.centralwidget.setObjectName("centralwidget") 17 | self.selectsql = QtWidgets.QComboBox(self.centralwidget) 18 | self.selectsql.setGeometry(QtCore.QRect(30, 60, 551, 31)) 19 | self.selectsql.setObjectName("selectsql") 20 | self.selectsql.addItem("") 21 | self.selectsql.addItem("") 22 | self.selectsql.addItem("") 23 | self.go = QtWidgets.QPushButton(self.centralwidget) 24 | self.go.setGeometry(QtCore.QRect(690, 60, 81, 31)) 25 | self.go.setObjectName("go") 26 | self.textEdit = QtWidgets.QTextEdit(self.centralwidget) 27 | self.textEdit.setGeometry(QtCore.QRect(30, 100, 741, 431)) 28 | self.textEdit.setObjectName("textEdit") 29 | self.input = QtWidgets.QPushButton(self.centralwidget) 30 | self.input.setGeometry(QtCore.QRect(600, 60, 81, 31)) 31 | self.input.setObjectName("input") 32 | self.lineEdit = QtWidgets.QLineEdit(self.centralwidget) 33 | self.lineEdit.setGeometry(QtCore.QRect(30, 20, 741, 31)) 34 | self.lineEdit.setObjectName("lineEdit") 35 | before.setCentralWidget(self.centralwidget) 36 | self.menubar = QtWidgets.QMenuBar(before) 37 | self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21)) 38 | self.menubar.setObjectName("menubar") 39 | before.setMenuBar(self.menubar) 40 | self.statusbar = QtWidgets.QStatusBar(before) 41 | self.statusbar.setObjectName("statusbar") 42 | before.setStatusBar(self.statusbar) 43 | 44 | self.retranslateUi(before) 45 | QtCore.QMetaObject.connectSlotsByName(before) 46 | 47 | def retranslateUi(self, before): 48 | _translate = QtCore.QCoreApplication.translate 49 | before.setWindowTitle(_translate("before", "MainWindow")) 50 | self.selectsql.setItemText(0, _translate("before", "SELECT [ ENAME = ’Mary’ & DNAME = ’Research’ ] ( EMPLOYEE JOIN DEPARTMENT )")) 51 | self.selectsql.setItemText(1, _translate("before", "PROJECTION [ BDATE ] ( SELECT [ ENAME = ’John’ & DNAME = ’ Research’ ] ( EMPLOYEE JOIN DEPARTMENT) )")) 52 | self.selectsql.setItemText(2, _translate("before", "SELECT [ ESSN = ’01’ ] ( PROJECTION [ ESSN, PNAME ] ( WORKS_ON JOIN PROJECT ) )")) 53 | self.go.setText(_translate("before", "执行")) 54 | self.textEdit.setHtml(_translate("before", "\n" 55 | "\n" 58 | "

语法树

")) 59 | self.input.setText(_translate("before", "导入")) 60 | 61 | -------------------------------------------------------------------------------- /lab2_1171800312/untitled2.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | before 4 | 5 | 6 | 7 | 0 8 | 0 9 | 800 10 | 600 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 30 21 | 60 22 | 551 23 | 31 24 | 25 | 26 | 27 | 28 | SELECT [ ENAME = ’Mary’ & DNAME = ’Research’ ] ( EMPLOYEE JOIN DEPARTMENT ) 29 | 30 | 31 | 32 | 33 | PROJECTION [ BDATE ] ( SELECT [ ENAME = ’John’ & DNAME = ’ Research’ ] ( EMPLOYEE JOIN DEPARTMENT) ) 34 | 35 | 36 | 37 | 38 | SELECT [ ESSN = ’01’ ] ( PROJECTION [ ESSN, PNAME ] ( WORKS_ON JOIN PROJECT ) ) 39 | 40 | 41 | 42 | 43 | 44 | 45 | 690 46 | 60 47 | 81 48 | 31 49 | 50 | 51 | 52 | 执行 53 | 54 | 55 | 56 | 57 | 58 | 30 59 | 100 60 | 741 61 | 431 62 | 63 | 64 | 65 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> 66 | <html><head><meta name="qrichtext" content="1" /><style type="text/css"> 67 | p, li { white-space: pre-wrap; } 68 | </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> 69 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">语法树</p></body></html> 70 | 71 | 72 | 73 | 74 | 75 | 600 76 | 60 77 | 81 78 | 31 79 | 80 | 81 | 82 | 导入 83 | 84 | 85 | 86 | 87 | 88 | 30 89 | 20 90 | 741 91 | 31 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 0 100 | 0 101 | 800 102 | 21 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | --------------------------------------------------------------------------------