├── .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 |
4 |
5 |
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 |
6 |
7 |
8 |
9 |
10 |
11 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
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 |
124 |
125 |
126 |
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 |
162 | 1584712325065
163 |
164 |
165 | 1584712325065
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 |
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 |
246 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
207 |
208 |
209 |
210 |
211 |
212 |
--------------------------------------------------------------------------------
/lab2_1171800312/.idea/inspectionProfiles/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
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 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
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 |
124 |
125 |
126 |
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 | 1587385911230
156 |
157 |
158 | 1587385911230
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 |
--------------------------------------------------------------------------------
/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 |
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 |
106 |
107 |
108 |
109 |
110 |
111 |
--------------------------------------------------------------------------------