This repository has been archived on 2024-06-23. You can view files and clone it, but cannot push or open issues or pull requests.
mathdeptv2/工具v4/答题纸对应.py

156 lines
6.7 KiB
Python

from PySide6.QtWidgets import QWidget, QApplication, QFileDialog
from Ui_答题纸对应 import Ui_Form
from database_tools_2 import *
def getindices(string,cursor):#根据前七个字符获取以其为首的讲义的后两位
sql = "SELECT nid FROM notes WHERE NOT obsolete;"
cursor.execute(sql)
ret = cursor.fetchall()
indices_list = []
for item in ret:
if item[0].startswith(string):
indices_list.append(item[0][-2:])
return indices_list.copy()
class MyWindow_dtlr(QWidget,Ui_Form):
def __init__(self,database_name):
super().__init__()
self.setupUi(self)
self.database_name = database_name
self.bind()
def bind(self):
self.label_next.setVisible(False)
self.comboBox_grade.activated.connect(self.setindex)
self.comboBox_semester.activated.connect(self.setindex)
self.lineEdit_structure.textChanged.connect(self.setindex)
self.comboBox_index.activated.connect(self.activateexec)
self.pushButton_exec.clicked.connect(self.exec)
def setdbname(self,string):
self.database_name = string
# print(self.database_name)
def setindex(self):
mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = self.database_name)
mycursor = mydb.cursor()
self.comboBox_index.clear()
self.structure = self.lineEdit_structure.text().upper()
self.grade = self.comboBox_grade.currentText()
self.semester = self.comboBox_semester.currentText()
self.initialstring = f"{self.structure}{self.grade}{self.semester}"
self.indices = getindices(self.initialstring,mycursor)
self.comboBox_index.addItems(self.indices)
if self.indices == []:
self.pushButton_exec.setDisabled(True)
else:
self.pushButton_exec.setEnabled(True)
mydb.close()
def activateexec(self):
self.pushButton_exec.setEnabled(True)
def unvisible(self):
self.label_next.setVisible(False)
def exec(self):
mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = self.database_name)
mycursor = mydb.cursor()
nid = f"{self.structure}{self.grade}{self.semester}{self.comboBox_index.currentText()}"
# answersheetjson = f"../备课组/{self.grade[-2:]}届/答题纸对应.json"
# notesjson = f"../备课组/{self.grade[-2:]}届/校本材料.json"
marks_list = re.findall(r"(?:(?:^)|(?:\n))(\d+)分",self.plainTextEdit_marks.toPlainText())
marks_list = [int(mark) for mark in marks_list]
answersheet_dict = load_answersheets_dict_from_mariadb(mycursor)
notes_dict = load_notes_dict_from_mariadb(mycursor)
structure_dict = load_structures_dict_from_mariadb(mycursor)
new_dict = {}
if not nid in notes_dict:
print("讲义编号有误.")
else:
self.label_next.setVisible(True)
self.repaint()
new_dict["nid"] = nid
corresponding_method = input("用何种方式对应? 题号(I)/章节标题(P):")
if corresponding_method.strip() != "" and corresponding_method[0].upper() == "I":
new_dict["idlist"] = []
count = 1
id = input(f"输入第 {count} 题的题号(S表示跳过, E表示结束):")
id = RefinePunctuations(id)
while len(re.findall(r"[Ss\d,:]",id)) == len(id):
if "S" in id.upper():
new_dict["idlist"].append("999999")
count += 1
else:
new_id_list = generate_number_set(id)
new_dict["idlist"] += [i.zfill(6) for i in new_id_list]
count += len(new_id_list)
id = input(f"输入第 {count} 题的题号(S表示跳过, E表示结束):")
id = RefinePunctuations(id)
elif corresponding_method.strip() != "" and corresponding_method[0].upper() == "P":
structure = structure_dict[nid[0:5]]["structure"]
count = 1
partslist = []
for key in structure:
print(f"{count}. {key}: {structure[key]['name']}")
count += 1
partslist.append(key)
parts_selected_string = input("使用哪些部分(输入数字编号, 用';'分隔):")
parts_selected_string = RefinePunctuations(parts_selected_string).replace(",",";").replace(" ","")
parts_selected_index = parts_selected_string.strip().split(";")
parts_selected = []
for i in parts_selected_index:
parts_selected.append(partslist[int(i)-1])
new_dict["parts"] = parts_selected.copy()
if marks_list == []:
marksflag = input("是否为每个结果赋分(Y/[N]):")
if marksflag.strip() != "" and marksflag[0].upper() == "Y":
new_dict["marks"] = []
count = 1
mark = input(f"依次输入分数, 非自然数作为结束(第 {count} 个位置):").strip()
while len(re.findall(r"\d",mark)) == len(mark):
new_dict["marks"].append(int(mark))
count += 1
mark = input(f"依次输入分数, 非自然数作为结束(第 {count} 个位置):").strip()
else:
new_dict["marks"] = marks_list.copy()
sql = "INSERT INTO answersheets (pid,nid,parts,idlist,marks) VALUES (%s,%s,%s,%s,%s);"
parts = None if not "parts" in new_dict else json.dumps(new_dict["parts"],ensure_ascii=False)
idlist = None if not "idlist" in new_dict else json.dumps(new_dict["idlist"],ensure_ascii=False)
marks = None if not "marks" in new_dict else json.dumps(new_dict["marks"],ensure_ascii=False)
val = (self.lineEdit_xiaoxianid.text(),nid,parts,idlist,marks)
mycursor.execute(sql,val)
sql = "INSERT INTO logs (DATE,TIME,username,action,db_content) VALUE (%s,%s,%s,%s,%s);"
val = (GetDate(),GetTime(),get_git_username(),"答题纸挂钩",self.lineEdit_xiaoxianid.text())
mycursor.execute(sql,val)
mydb.commit()
# answersheet_dict[self.lineEdit_xiaoxianid.text()] = new_dict.copy()
# save_dict(answersheet_dict,answersheetjson)
self.label_next.setVisible(False)
print("设置完成")
mydb.close()
if __name__ == '__main__':
app = QApplication([])
windows = MyWindow_dtlr("tikutest")
windows.show()
app.exec()