You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

677 lines
25 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

from typing import Optional
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication,QMainWindow,QWidget,QTableWidgetItem,QLabel,QLineEdit,QVBoxLayout
from PySide6 import QtWidgets,QtCore,QtGui
from PySide6.QtGui import QFont
from Login_ui import Ui_MainWindow
from student_ui import Ui_Form
from choose_class_ui import Ui_Form2
from teacher_ui import Ui_Form3
from grade_change_ui import Ui_Form4
from tishi_ui import Ui_Form5
from tishi2_ui import Ui_Form6
from code_change_ui import Ui_Form7
import sqlite3 as sql
conn=sql.connect('code_database.db')
c=conn.cursor()
conn2=sql.connect('college.db')
c2=conn2.cursor()
input_account='0'
#登录界面
class Loginwindow(QMainWindow,Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.radioButton.clicked.connect(self.student)
self.radioButton_2.clicked.connect(self.teacher)
self.pushButton.clicked.connect(self.loginFuc)
def student(self):
c.execute("SELECT * FROM student")
user=c.fetchall()
#拿到密码
global input_account
input_account=self.lineEdit.text()
#拿到账号
input_password=self.lineEdit_2.text()
user_tuple=(input_account,input_password)
if user_tuple in user:
return 1
else:
return 0
def teacher(self):
c.execute("SELECT * FROM teacher")
user=c.fetchall()
#拿到密码
global input_account
input_account=self.lineEdit.text()
#拿到账号
input_password=self.lineEdit_2.text()
user_tuple=(input_account,input_password)
if user_tuple in user:
return 1
else:
return 0
def loginFuc(self):
if self.student():
self.close()
self.mainWindow=studentWindow()
self.mainWindow.show()
return
elif self.teacher()!=1 and self.student==1 :
self.window=login_fail_Window()
self.window.show()
if self.teacher():
self.close()
self.mainWindow=teacherWindow()
self.mainWindow.show()
return
else:
self.window=login_fail_Window()
self.window.show()
#学生界面
class studentWindow(QWidget,Ui_Form):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.grade_find)
self.pushButton_3.clicked.connect(self.choose_Func)
self.pushButton_4.clicked.connect(self.code_change)
def Table_Data(self,i,j,data):
item=QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(i,j,item)
item=self.tableWidget.item(i,j)
item.setText(data)
def grade_find(self):
sql="SELECT student.ID,student.name,takes.course_id,course.title,takes.grade FROM student,takes,course WHERE student.ID='%s' AND takes.ID='%s' AND takes.course_id=course.course_id"%(input_account,input_account)
c2.execute(sql)
total=c2.fetchall()
col_result=c2.description
self.row=len(total)#取得记录个数,用于设置表格行数
print(self.row)
self.vol=len(total[0])#取得字段数,用于设置表格列数
col_result=list(col_result)
a=0
self.tableWidget.setColumnCount(self.vol)
self.tableWidget.setRowCount(self.row)
for i in col_result:#设置表头信息将sql数据表中的表头信息拿出来放进tablewidget中
item=QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(a,item)
item=self.tableWidget.horizontalHeaderItem(a)
item.setText(i[0])
a=a+1
total=list(total)
for i in range(len(total)):
total[i]=list(total[i])
for i in range(self.row):
for j in range(self.vol):
self.Table_Data(i,j,total[i][j])
#选课系统
def choose_Func(self):
self.close()
self.mainWindow=choose_class_Window()
self.mainWindow.show()
def code_change(self):
self.mainWindow=stcode_change_Window()
self.mainWindow.show()
#老师界面
class teacherWindow(QWidget,Ui_Form3):
def __init__(self):
super().__init__()
self.setupUi(self)
self.comboBox.currentIndexChanged.connect(self.search)
self.pushButton.clicked.connect(self.grade_change)
self.pushButton_4.clicked.connect(self.code_change)
def Table_Data2(self,i,j,data):
item=QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(i,j,item)
item=self.tableWidget.item(i,j)
item.setText(str(data))
def show_table(self,sql):
c2.execute(sql)
total=c2.fetchall()
if total==[]:
self.mainWindow=search_fail_Window()
self.mainWindow.show()
return
col_result=c2.description
self.row=len(total)#取得记录个数,用于设置表格行数
print(self.row)
self.vol=len(total[0])#取得字段数,用于设置表格列数
col_result=list(col_result)
a=0
self.tableWidget.setColumnCount(self.vol)
self.tableWidget.setRowCount(self.row)
for i in col_result:#设置表头信息将sql数据表中的表头信息拿出来放进tablewidget中
item=QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(a,item)
item=self.tableWidget.horizontalHeaderItem(a)
item.setText(i[0])
a=a+1
total=list(total)
for i in range(len(total)):
total[i]=list(total[i])
for i in range(self.row):
for j in range(self.vol):
self.Table_Data2(i,j,total[i][j])
def search(self,index):
get=self.lineEdit.text()
if index==1:
sql="SELECT student.ID,student.name,student.dept_name,course.title AS course_name,takes.grade FROM student,takes,course WHERE student.name='%s' AND takes.ID=student.ID AND takes.course_id=course.course_id"%(get)
self.show_table(sql)
if index==2:
sql="SELECT student.ID,student.name,student.dept_name,course.title AS course_name,takes.grade FROM student,takes,course WHERE student.ID='%s' AND takes.ID=student.ID AND takes.course_id=course.course_id"%(get)
self.show_table(sql)
if index==3:
sql="SELECT student.ID,student.name,student.dept_name,course.title AS course_name,takes.grade FROM student,takes,course WHERE student.dept_name='%s' AND takes.ID=student.ID AND takes.course_id=course.course_id"%(get)
self.show_table(sql)
if index==4:
sql="SELECT student.ID,student.name,student.dept_name,course.title AS course_name,takes.grade FROM student,takes,course WHERE course.title='%s' AND takes.ID=student.ID AND takes.course_id=course.course_id"%(get)
self.show_table(sql)
if index==5:
sql="SELECT student.ID,student.name,student.dept_name,course.title AS course_name,takes.grade FROM student,takes,course WHERE course.course_id='%s' AND takes.ID=student.ID AND takes.course_id=course.course_id"%(get)
self.show_table(sql)
def grade_change(self):
self.close()
self.mainWindow=grade_change_Window()
self.mainWindow.show()
def code_change(self):
self.mainWindow=tecode_change_Window()
self.mainWindow.show()
#选课系统界面
class choose_class_Window(QWidget,Ui_Form2):
def __init__(self):
super().__init__()
self.setupUi(self)
self.display()
self.pushButton.clicked.connect(self.allclass)
self.pushButton_4.clicked.connect(self.class_delete)
self.pushButton_2.clicked.connect(self.class_choose)
self.pushButton_5.clicked.connect(self.back)
self.comboBox.currentIndexChanged.connect(self.search)
def Table_Data(self,i,j,data):
item=QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(i,j,item)
item=self.tableWidget.item(i,j)
item.setText(str(data))
def Table_Data2(self,i,j,data):
item=QtWidgets.QTableWidgetItem()
self.tableWidget_2.setItem(i,j,item)
item=self.tableWidget_2.item(i,j)
item.setText(str(data))
def display(self):
sql="SELECT DISTINCT course.course_id,course.title,course.credits,course.dept_name,teaches.ID AS teacher_id ,instructor.name AS teacher_name,takes.semester FROM instructor,teaches,course,takes WHERE\
takes.ID='%s' AND takes.course_id=course.course_id AND teaches.course_id=course.course_id AND teaches.semester=takes.semester AND instructor.ID=teaches.ID"%(input_account)
c2.execute(sql)
total=c2.fetchall()
col_result=c2.description
self.row=len(total)#取得记录个数,用于设置表格行数
print(self.row)
self.vol=len(total[0])#取得字段数,用于设置表格列数
col_result=list(col_result)
a=0
sum=0
self.tableWidget.setColumnCount(self.vol)
self.tableWidget.setRowCount(self.row)
for i in col_result:#设置表头信息将sql数据表中的表头信息拿出来放进tablewidget中
item=QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(a,item)
item=self.tableWidget.horizontalHeaderItem(a)
item.setText(i[0])
a=a+1
total=list(total)
for i in range(len(total)):
total[i]=list(total[i])
for i in range(self.row):
print(i)
for j in range(self.vol):
if j==2:
sum+=int(total[i][j])
self.Table_Data(i,j,total[i][j])
self.label_4.setText(str(sum))
def show_table(self,sql):
c2.execute(sql)
total=c2.fetchall()
col_result=c2.description
self.row=len(total)#取得记录个数,用于设置表格行数
print(self.row)
self.vol=len(total[0])#取得字段数,用于设置表格列数
col_result=list(col_result)
a=0
self.tableWidget_2.setColumnCount(self.vol)
self.tableWidget_2.setRowCount(self.row)
for i in col_result:#设置表头信息将sql数据表中的表头信息拿出来放进tablewidget中
item=QtWidgets.QTableWidgetItem()
self.tableWidget_2.setHorizontalHeaderItem(a,item)
item=self.tableWidget_2.horizontalHeaderItem(a)
item.setText(i[0])
a=a+1
total=list(total)
for i in range(len(total)):
total[i]=list(total[i])
for i in range(self.row):
for j in range(self.vol):
self.Table_Data2(i,j,total[i][j])
def allclass(self):
sql="SELECT course.course_id,course.title,course.credits,course.dept_name,teaches.ID AS teacher_id ,instructor.name AS teacher_name,teaches.semester FROM instructor,teaches,course\
WHERE course.course_id=teaches.course_id AND teaches.ID=instructor.ID"
self.show_table(sql)
def search(self,index):
get=self.lineEdit.text()
if index==1:
sql="SELECT DISTINCT course.course_id,course.title,course.credits,course.dept_name,teaches.ID AS teacher_id ,instructor.name AS teacher_name,teaches.semester FROM instructor,teaches,course\
WHERE course.course_id=teaches.course_id AND teaches.ID=instructor.ID AND course.title='%s'"%(get)
self.show_table(sql)
if index==2:
sql="SELECT DISTINCT course.course_id,course.title,course.credits,course.dept_name,teaches.ID AS teacher_id ,instructor.name AS teacher_name,teaches.semester FROM instructor,teaches,course\
WHERE course.course_id=teaches.course_id AND teaches.ID=instructor.ID AND teaches.semester='%s'"%(get)
self.show_table(sql)
if index==3:
sql="SELECT DISTINCT course.course_id,course.title,course.credits,course.dept_name,teaches.ID AS teacher_id ,instructor.name AS teacher_name,teaches.semester FROM instructor,teaches,course\
WHERE course.course_id=teaches.course_id AND teaches.ID=instructor.ID AND course.credits='%s'"%(get)
self.show_table(sql)
if index==4:
sql="SELECT DISTINCT course.course_id,course.title,course.credits,course.dept_name,teaches.ID AS teacher_id ,instructor.name AS teacher_name,teaches.semester FROM instructor,teaches,course\
WHERE course.course_id=teaches.course_id AND teaches.ID=instructor.ID AND course.dept_name='%s'"%(get)
self.show_table(sql)
if index==5:
sql="SELECT DISTINCT course.course_id,course.title,course.credits,course.dept_name,teaches.ID AS teacher_id ,instructor.name AS teacher_name,teaches.semester FROM instructor,teaches,course\
WHERE course.course_id=teaches.course_id AND teaches.ID=instructor.ID AND course.course_id='%s'"%(get)
self.show_table(sql)
def class_delete(self):
row_select=self.tableWidget.selectedItems()
if len(row_select)==0:
return
class_id=row_select[0].text()
sql="SELECT takes.grade FROM takes WHERE takes.ID='%s' AND takes.course_id='%s'"%(input_account,class_id)
c2.execute(sql)
grade=''
grade=c2.fetchall()[0][0]
print(grade)
if grade==None:
sql="DELETE FROM takes WHERE takes.ID='%s' AND takes.course_id='%s'"%(input_account,class_id)
c2.execute(sql)
conn2.commit()
self.display()
else:
self.mainWindow=delete_fail_Window()
self.mainWindow.show()
def class_choose(self):
row_select=self.tableWidget_2.selectedItems()
if len(row_select)==0:
return
class_id=row_select[0].text()
sql="SELECT takes.course_id FROM takes WHERE takes.ID='%s'"%(input_account)
c2.execute(sql)
takes_id=c2.fetchall()
flag=0
for i in takes_id:
if i[0]==class_id:
flag=1
break
if not flag:
sql="SELECT teaches.sec_id,teaches.year FROM teaches WHERE teaches.course_id='%s' AND teaches.ID='%s'"%(class_id,row_select[4].text())
c2.execute(sql)
sec_year=c2.fetchall()
sec_id=sec_year[0][0]
year=str(sec_year[0][1])
semester=row_select[6].text()
sql="INSERT INTO takes VALUES('%s','%s','%s','%s','%s',NULL)"%(input_account,class_id,sec_id,semester,year)
c2.execute(sql)
conn2.commit()
self.display()
else:
self.mainWindow=choose_fail_Window()
self.mainWindow.show()
def back(self):
self.close()
self.mainWindow=studentWindow()
self.mainWindow.show()
#成绩录入界面
class grade_change_Window(QWidget,Ui_Form4):
def __init__(self):
super().__init__()
self.setupUi(self)
self.flag=0
self.pushButton_5.clicked.connect(self.search)
self.pushButton_6.clicked.connect(self.addTableRow)
self.pushButton_8.clicked.connect(self.tishiWindow)
self.pushButton_7.clicked.connect(self.tishiWindow2)
self.pushButton_4.clicked.connect(self.back)
def Table_Data2(self,i,j,data):
item=QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(i,j,item)
item=self.tableWidget.item(i,j)
item.setText(str(data))
def show_table(self,sql):
c2.execute(sql)
total=c2.fetchall()
col_result=c2.description
self.row=len(total)#取得记录个数,用于设置表格行数
print(self.row)
self.vol=len(total[0])#取得字段数,用于设置表格列数
col_result=list(col_result)
a=0
self.tableWidget.setColumnCount(self.vol)
self.tableWidget.setRowCount(self.row)
for i in col_result:#设置表头信息将sql数据表中的表头信息拿出来放进tablewidget中
item=QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(a,item)
item=self.tableWidget.horizontalHeaderItem(a)
item.setText(i[0])
a=a+1
total=list(total)
for i in range(len(total)):
total[i]=list(total[i])
for i in range(self.row):
for j in range(self.vol):
self.Table_Data2(i,j,total[i][j])
def search(self):
get=self.lineEdit.text()
sql="SELECT student.name,student.dept_name,course.title AS course_name,takes.grade FROM student,takes,course WHERE student.ID='%s' AND takes.ID=student.ID AND takes.course_id=course.course_id"%(get)
self.show_table(sql)
def addTableRow(self):
row=self.tableWidget.rowCount()
self.tableWidget.setRowCount(row+1)
self.flag=1
def tishiWindow(self):
student_id=self.lineEdit.text()
row=self.tableWidget.rowCount()-1
data=[student_id,self.tableWidget.item(row,0).text(),self.tableWidget.item(row,1).text(),self.tableWidget.item(row,2).text(),self.tableWidget.item(row,3).text()]
sql="SELECT course.title FROM course"
c2.execute(sql)
course_name=c2.fetchall()
for i in course_name:
if i[0]==data[3]:
if self.flag==0:
for i in range(row+1):
course_title=self.tableWidget.item(i,2).text()
grade=self.tableWidget.item(i,3).text()
sql="SELECT course.course_id FROM course WHERE course.title='%s'"%(course_title)
c2.execute(sql)
result=c2.fetchall()[0][0]
sql="UPDATE takes SET grade='%s' WHERE takes.ID='%s' AND takes.course_id='%s'"%(grade,student_id,result)
c2.execute(sql)
conn2.commit()
self.mainWindow=change_sucess_Window()
self.mainWindow.show()
self.flag=0
return
self.mainWindow=tishi_Window()
self.mainWindow.set_data(data)
self.mainWindow.show()
self.flag=0
return
else:
self.mainWindow=add_fail_Window()
self.mainWindow.show()
self.flag=0
return
def tishiWindow2(self):
student_id=self.lineEdit.text()
row_select=self.tableWidget.selectedItems()
if len(row_select)==0:
return
data=[student_id,row_select[2].text()]
self.mainWindow=tishi_Window2()
self.mainWindow.set_data(data)
self.mainWindow.show()
def back(self):
self.close()
self.mainWindow=teacherWindow()
self.mainWindow.show()
class tishi_Window(QWidget,Ui_Form5):
def __init__(self,parent=None):
super().__init__(parent)
self.setupUi(self)
self.Data=[]
self.pushButton.clicked.connect(self.Ok)
self.pushButton_2.clicked.connect(self.No)
def Ok(self):
sql="SELECT course.course_id FROM course WHERE course.title='%s'"%(self.Data[3])
c2.execute(sql)
class_id=c2.fetchall()[0][0]
sql="SELECT teaches.sec_id,teaches.semester FROM teaches WHERE teaches.course_id='%s'"%(class_id)
c2.execute(sql)
sec_semester=c2.fetchall()
sec_id=sec_semester[0][0]
semester=sec_semester[0][1]
sql="INSERT INTO takes VALUES('%s','%s','%s','%s','%s','%s')"%(self.Data[0],class_id,sec_id,semester,'2023',self.Data[4])
c2.execute(sql)
conn2.commit()
self.close()
def No(self):
self.close()
def set_data(self,data):
self.Data=data
class tishi_Window2(QWidget,Ui_Form6):
def __init__(self,parent=None):
super().__init__(parent)
self.setupUi(self)
self.Data=[]
self.pushButton.clicked.connect(self.Ok)
self.pushButton_2.clicked.connect(self.No)
def Ok(self):
sql="SELECT course.course_id FROM course WHERE course.title='%s'"%(self.Data[1])
print(self.Data)
c2.execute(sql)
class_id=c2.fetchall()[0][0]
sql="SELECT takes.grade FROM takes WHERE takes.ID='%s' AND takes.course_id='%s'"%(self.Data[0],class_id)
c2.execute(sql)
sql="DELETE FROM takes WHERE takes.ID='%s' AND takes.course_id='%s'"%(self.Data[0],class_id)
c2.execute(sql)
conn2.commit()
self.close()
self.mainWindow=delete_sucess_Window()
self.mainWindow.show()
def No(self):
self.close()
def set_data(self,data):
self.Data=data
class delete_fail_Window(QWidget):
def __init__(self):
super().__init__()
self.lb=QLabel('您已参加考试,无法退课')
self.lb.setFont(QFont("微软雅黑",16))
self.lb.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.mainLayout=QVBoxLayout()
self.mainLayout.addWidget(self.lb)
self.setLayout(self.mainLayout)
class choose_fail_Window(QWidget):
def __init__(self):
super().__init__()
self.lb=QLabel('不能重复选课')
self.lb.setFont(QFont("微软雅黑",16))
self.lb.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.mainLayout=QVBoxLayout()
self.mainLayout.addWidget(self.lb)
self.setLayout(self.mainLayout)
class search_fail_Window(QWidget):
def __init__(self):
super().__init__()
self.lb=QLabel('目前还没有学生选这个课')
self.lb.setFont(QFont("微软雅黑",16))
self.lb.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.mainLayout=QVBoxLayout()
self.mainLayout.addWidget(self.lb)
self.setLayout(self.mainLayout)
class add_fail_Window(QWidget):
def __init__(self):
super().__init__()
self.lb=QLabel('为开设此课,添加失败,请检查课程名称')
self.lb.setFont(QFont("微软雅黑",16))
self.lb.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.mainLayout=QVBoxLayout()
self.mainLayout.addWidget(self.lb)
self.setLayout(self.mainLayout)
class codechange_fail_Window(QWidget):
def __init__(self):
super().__init__()
self.lb=QLabel('两次输入的密码不一样,请重新输入')
self.lb.setFont(QFont("微软雅黑",16))
self.lb.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.mainLayout=QVBoxLayout()
self.mainLayout.addWidget(self.lb)
self.setLayout(self.mainLayout)
class codechange_sucess_Window(QWidget):
def __init__(self):
super().__init__()
self.lb=QLabel('修改成功')
self.lb.setFont(QFont("微软雅黑",16))
self.lb.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.mainLayout=QVBoxLayout()
self.mainLayout.addWidget(self.lb)
self.setLayout(self.mainLayout)
class delete_sucess_Window(QWidget):
def __init__(self):
super().__init__()
self.lb=QLabel('删除成功,点击查询刷新')
self.lb.setFont(QFont("微软雅黑",16))
self.lb.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.mainLayout=QVBoxLayout()
self.mainLayout.addWidget(self.lb)
self.setLayout(self.mainLayout)
class change_sucess_Window(QWidget):
def __init__(self):
super().__init__()
self.lb=QLabel('修改成功')
self.lb.setFont(QFont("微软雅黑",16))
self.lb.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.mainLayout=QVBoxLayout()
self.mainLayout.addWidget(self.lb)
self.setLayout(self.mainLayout)
class login_fail_Window(QWidget):
def __init__(self):
super().__init__()
self.lb=QLabel('账户或者密码错误')
self.lb.setFont(QFont("微软雅黑",16))
self.lb.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.mainLayout=QVBoxLayout()
self.mainLayout.addWidget(self.lb)
self.setLayout(self.mainLayout)
class stcode_change_Window(QWidget,Ui_Form7):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.Ok)
def Ok(self):
new1=self.lineEdit.text()
new2=self.lineEdit_2.text()
if new1!=new2:
self.mainWindow=codechange_fail_Window()
self.mainWindow.show()
else:
sql="UPDATE student SET code='%s' WHERE ID='%s'"%(new2,input_account)
c.execute(sql)
conn.commit()
self.close()
self.mainWindow=codechange_sucess_Window()
self.mainWindow.show()
class tecode_change_Window(QWidget,Ui_Form7):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.Ok)
def Ok(self):
new1=self.lineEdit.text()
new2=self.lineEdit_2.text()
if new1!=new2:
self.mainWindow=codechange_fail_Window()
self.mainWindow.show()
else:
sql="UPDATE teacher SET code='%s' WHERE ID='%s'"%(new2,input_account)
c.execute(sql)
conn.commit()
self.close()
self.mainWindow=codechange_sucess_Window()
self.mainWindow.show()
if __name__=='__main__':
app=QApplication([])
window=Loginwindow()
window.show()
app.exec()