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()