diff --git a/app-dm/src/TeacherPages/MarkingPages/StudentLink.jsx b/app-dm/src/TeacherPages/MarkingPages/StudentLink.jsx
index 892cf5c..bbe8a2e 100644
--- a/app-dm/src/TeacherPages/MarkingPages/StudentLink.jsx
+++ b/app-dm/src/TeacherPages/MarkingPages/StudentLink.jsx
@@ -7,6 +7,7 @@ import axios from 'axios';
function StudentLink(){
const testID=useParams()['key']
+ const [list,setlist]=useState([])
const sumbitScore=async()=>{
try{
@@ -15,6 +16,10 @@ function StudentLink(){
testID,
suggestion
})
+ const delPods=await axios.post('/api/teacher/MarkDelPods',{
+ testID,
+ list
+ })
}catch{
alert('提交出错')
}
@@ -33,6 +38,7 @@ function StudentLink(){
testID
})
setTestLink(NotMarkTestSrc.data['result'])
+ setlist(Object.keys(NotMarkTestSrc.data['result']).map(key => NotMarkTestSrc.data['result'][key][0]))
}catch{
alert('出错')
}
@@ -58,6 +64,7 @@ function StudentLink(){
[name]: value
});
}
+
return(
diff --git a/app-dm/src/pages/ListPages/Analyse/AnalysePages.jsx b/app-dm/src/pages/ListPages/Analyse/AnalysePages.jsx
index 4f1dc36..d031a44 100644
--- a/app-dm/src/pages/ListPages/Analyse/AnalysePages.jsx
+++ b/app-dm/src/pages/ListPages/Analyse/AnalysePages.jsx
@@ -34,7 +34,7 @@ function SubjectPage(){
datasets: [
{
label: '得分情况分布',
- data: [HistoryTrain[key][0][4],HistoryTrain[key][0][5]], // 这里填写每个类型题目的数量
+ data: [HistoryTrain[key][0][5],HistoryTrain[key][0][4]], // 这里填写每个类型题目的数量
backgroundColor: ['#FF6384','#36A2EB'], // 颜色
hoverOffset: 2,
},
@@ -103,7 +103,7 @@ function SubjectPage(){
- 总得分:{parseInt(PieData['datasets'][0]['data'][0])+parseInt(PieData['datasets'][0]['data'][1])}/{score}
- 分析:{HistoryTrain[testID][0][10]}
- - 老师建议:{HistoryTrain[testID][0][9]}
+ - 老师建议:{HistoryTrain[testID][0][9]?`${HistoryTrain[testID][0][9]}`:'老师暂未批改该实训,请耐心等待'}
}
diff --git a/app-dm/src/pages/ListPages/Training/Operation1.jsx b/app-dm/src/pages/ListPages/Training/Operation1.jsx
index 9109436..fa69d21 100644
--- a/app-dm/src/pages/ListPages/Training/Operation1.jsx
+++ b/app-dm/src/pages/ListPages/Training/Operation1.jsx
@@ -146,7 +146,7 @@ function Operation1() {
localStorage.setItem('answeredJudge',answeredJudge)
localStorage.setItem('TrainData',JSON.stringify(TrainData))
localStorage.setItem('score',score)
- localStorage.setItem('succeed',succeed)
+ localStorage.setItem('succeed',JSON.stringify(succeed))
};
@@ -196,9 +196,7 @@ function Operation1() {
setscore(prevscore=>prevscore+5)
}else{
const itemText = item[0][9];
- if (!succeed.includes(itemText)) {
setsucceed((prevSucceed) => [...prevSucceed, itemText]);
- }
}
CHO_sum++
}
@@ -206,10 +204,8 @@ function Operation1() {
if (item[0][2]===completion_answer[COM_sum]) {
setscore(prevscore=>prevscore+5)
}else{
- const itemText = item[0][5];
- if (!succeed.includes(itemText)) {
+ const itemText = item[0][9];
setsucceed((prevSucceed) => [...prevSucceed, itemText]);
- }
}
COM_sum++
}
@@ -217,10 +213,8 @@ function Operation1() {
if (item[0][2]===judge_answer[JUD_sum]) {
setscore(prevscore=>prevscore+5)
}else{
- const itemText = item[0][5];
- if (!succeed.includes(itemText)) {
+ const itemText = item[0][9];
setsucceed((prevSucceed) => [...prevSucceed, itemText]);
- }
}
JUD_sum++
}
@@ -275,7 +269,7 @@ function Operation1() {
)}
- 实训题
+ 实训题
{/* 题目预览框 */}
@@ -373,10 +367,6 @@ function Operation1() {
-
diff --git a/app-dm/src/pages/ListPages/Training/Operation2.jsx b/app-dm/src/pages/ListPages/Training/Operation2.jsx
index 58663af..f541043 100644
--- a/app-dm/src/pages/ListPages/Training/Operation2.jsx
+++ b/app-dm/src/pages/ListPages/Training/Operation2.jsx
@@ -15,9 +15,10 @@ function Operation2() {
const score=localStorage.getItem('score')
const { operateID } = useParams();
const [isTrue,setisTrue]=useState(false)
- const [TrainScore,setTrainScore]=useState()
+ const [TrainScore,setTrainScore]=useState(null)
const succeed=localStorage.getItem('succeed')
const TrainData=JSON.parse(localStorage.getItem('TrainData'))
+ const subject=(TrainData['operateID'][3])
// 获取链接
const [Src,setSrc]=useState()
@@ -99,7 +100,8 @@ function Operation2() {
TrainScore,
operateID,
student_ID,
- succeed
+ succeed,
+ subject
})
}catch{
alert('submitTrainSrc出错')
@@ -118,9 +120,9 @@ function Operation2() {
localStorage.removeItem('answeredJudge')
localStorage.removeItem('RemainingTime')
localStorage.removeItem('score')
+ localStorage.removeItem('succeed')
alert('提交成功')
window.location.href='/train'
- localStorage.removeItem('TrainData')
}
// 检测按钮
@@ -175,15 +177,23 @@ function Operation2() {
{/* 前端连接数据库⬇ */}
{ !isTrue&&TrainData&&Src&&
-
题目:{TrainData['operateID'][3][0]}
-
{Src[6]}
+
题目:{TrainData['operateID'][3][0]}
+
点击此链接进入到ide编辑代码:
-
{Src[7]}
+
{Src[6]}
-
{Src[8]}
-
点击以上链接前往实训
+
5000端口映射到:
+
+
{Src[7]}
+
+
+
3000端口映射到:
+
+
{Src[8]}
+
+
}
{/* 前端连接数据库 ⬆*/}
@@ -191,11 +201,10 @@ function Operation2() {
{ isTrue&&TrainData&&
{TrainData['operateID'][3][0]}
- {/* {Src&&
} */}
+ {Src&&}
}
{/* 达梦数据库连接⬆ */}
-
上一页
@@ -205,6 +214,7 @@ function Operation2() {
完成
+
diff --git a/app-dm/src/pages/ListPages/Training/TrainingPage.jsx b/app-dm/src/pages/ListPages/Training/TrainingPage.jsx
index 9283abc..4b8d3ad 100644
--- a/app-dm/src/pages/ListPages/Training/TrainingPage.jsx
+++ b/app-dm/src/pages/ListPages/Training/TrainingPage.jsx
@@ -7,7 +7,7 @@ import axios from 'axios';
const WarningModal = ({ isOpen, onClose }) => {
// 添加一个状态来控制是否应用动画
const [isClosing, setIsClosing] = useState(false);
-
+ localStorage.removeItem('TrainData')
// 定义关闭警告框的函数
const handleClose = () => {
setIsClosing(true); // 设置状态以触发动画
diff --git a/python/app.py b/python/app.py
index 8696c0e..d49270e 100644
--- a/python/app.py
+++ b/python/app.py
@@ -4,9 +4,9 @@ import time
import paramiko
+from k8s_func import *
from teacher_func import *
from student_func import *
-# from k8s_func import *
from flask import Flask, render_template, request, jsonify, send_from_directory, session
from flask_cors import CORS
@@ -178,10 +178,19 @@ def FindTrain1Src():
@app.route('/api/student/EntryTrainScore',methods=['POST'])
def EntryTrainScore():
score=request.json['score']
- TrainScore=request.json['trainScore']
+ TrainScore=request.json['TrainScore']
operateID=request.json['operateID']
student_ID=request.json['student_ID']
- AddTrainScoreFunc(score,TrainScore,student_ID,operateID)
+ succeed=request.json['succeed']
+ subject=request.json['subject']
+ print(subject[0])
+ print(type(subject))
+ if subject[0]=="达梦数据库连接":
+ Name='n'+student_ID+'-'+operateID
+ delete_pod(Name)
+ else:
+ print(False)
+ AddTrainScoreFunc(student_ID,operateID,score,TrainScore,succeed)
return jsonify({'result': '成功'})
@@ -346,32 +355,40 @@ def getTrainData():
return jsonify({'data': data})
-# @app.route("/api/teacher/list_pods",methods=['POST']) # 列出pod
-# def teacher_list_pods():
-# return list_pods()
-# @app.route("/api/teacher/list_services") # 列出服务
-# def teacher_list_services():
-# return list_services()
+@app.route("/api/teacher/list_pods",methods=['POST']) # 列出pod
+def teacher_list_pods():
+ return list_pods()
+@app.route("/api/teacher/list_services") # 列出服务
+def teacher_list_services():
+ return list_services()
# @app.route("/api/teacher/create_pod") # 创建服务 1为项目实训, 0为安装实训
# def teacher_create_pod():
# create_pod(1, "test2")
-# @app.route("/api/teacher/DelPods",methods=['POST']) # 删除服务
-# def teacher_delete_pod():
-# name=request.json['name']
-# studentID=name[1:9]
-# testID=name[10:]
-# delDMFunc(studentID,testID)
-# return delete_pod(name=name)
+@app.route("/api/teacher/DelPods",methods=['POST']) # 删除服务
+def teacher_delete_pod():
+ name=request.json['name']
+ studentID=name[1:9]
+ testID=name[10:]
+ delDMFunc(studentID,testID)
+ return delete_pod(name=name)
-# @app.route("/api/student/check_pod",methods=['POST']) # 检测数据库是否安装成功 若成功,返回OK 否则返回NO
-# def teacher_check_pod():
-# name=request.json["student_ID"]
-# testID=request.json["operateID"]
-# name= 'n' + str(name) + '-' + str(testID)
-# result = check_dm(name)
-# return jsonify(result)
+@app.route('/api/teacher/MarkDelPods',methods=['POST'])
+def teacher_mark_del_pods():
+ studentList=request.json['list']
+ testID=request.json['testID']
+ for i in studentList:
+ Name='s'+i+'-'+testID
+ delete_pod(Name)
+ return '删除成功'
+@app.route("/api/student/check_pod",methods=['POST']) # 检测数据库是否安装成功 若成功,返回OK 否则返回NO
+def teacher_check_pod():
+ name=request.json["student_ID"]
+ testID=request.json["operateID"]
+ name= 'n' + str(name) + '-' + str(testID)
+ result = check_dm(name)
+ return jsonify(result)
@app.route('/')
@app.route('/')
diff --git a/python/student_func.py b/python/student_func.py
index dc60def..60b0b90 100644
--- a/python/student_func.py
+++ b/python/student_func.py
@@ -4,6 +4,7 @@ from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
import base64
from datetime import datetime
+import re
# 获取当前日期和时间
current_datetime = datetime.now()
@@ -344,12 +345,23 @@ def FindTrain1SrcFunc(ID,testID):
def AddTrainScoreFunc(ID,testID,score,trainResult,succeed):
a=[]
+ # 打印结果字符串
+ succeed=json.loads(succeed)
+ succeed=list(succeed)
for i in succeed:
- a.append(succeed[i])
- a=set(a)
- print(a)
+ a.append(i)
+
+ a=list(set(a))
+ if None in a:
+ a.remove(None)
+ if len(a)==0:
+ result_string='全能高手'
+ else:
+ result_string = ','.join(a)+'需要加强'
+
cursor=db.cursor()
- cursor.execute("UPDATE TRAINSCORE SET TF='true', RESULT=(?), TRAINRESULT=(?) WHERE STUDENT_ID=(?) AND TEST_ID=(?)",(score,trainResult,ID,testID))
+ cursor.execute("UPDATE TRAINSCORE SET TF='true', RESULT=(?), TRAINRESULT=(?) ,ANALYSE=(?) WHERE STUDENT_ID=(?) AND TEST_ID=(?)",(score,trainResult,result_string,ID,testID))
+ print('加入成绩成功')
db.commit()
cursor.close()
return '添加成功'
diff --git a/python/teacher_func.py b/python/teacher_func.py
index e65db63..5400a83 100644
--- a/python/teacher_func.py
+++ b/python/teacher_func.py
@@ -291,8 +291,8 @@ def SendLink():
Link = 'http://36.138.114.105:' + str(j['ports'][0]['node_port'])
Link2 = 'http://36.138.114.105:' + str(j['ports'][1]['node_port'])
Link3 = 'http://36.138.114.105:' + str(j['ports'][2]['node_port'])
- cursor.execute(f"INSERT INTO TRAINSCORE VALUES (?,?,?,?,?,?,?,?,?,?)",(
- i,i[0:6],testID,'false','NULL','NULL',Link,Link2,Link3,'NULL'
+ cursor.execute(f"INSERT INTO TRAINSCORE VALUES (?,?,?,?,?,?,?,?,?,?,?)",(
+ i,i[0:6],testID,'false','NULL','NULL',Link,Link2,Link3,'NULL','NULL'
))
else:
pass
@@ -304,8 +304,8 @@ def SendLink():
for j in item['list']:
if j['name'] == name + '-service':
Link = j['ip']
- cursor.execute(f"INSERT INTO TRAINSCORE VALUES (?,?,?,?,?,?,?,?,?,?)", (
- i, i[0:6], testID, 'false', 'NULL', 'NULL', Link, 'NULL', 'NULL','NULL'
+ cursor.execute(f"INSERT INTO TRAINSCORE VALUES (?,?,?,?,?,?,?,?,?,?,?)", (
+ i, i[0:6], testID, 'false', 'NULL', 'NULL', Link, 'NULL', 'NULL','NULL','NULL'
))
print('加入链接成功')
diff --git a/python/test.py b/python/test.py
index 4932c14..e5cf91c 100644
--- a/python/test.py
+++ b/python/test.py
@@ -1,7 +1,5 @@
-list1=[1,2,3,4,5]
-name='asd'
-dic={name:list1}
-print(dic)
+import k8s_func
+k8s_func.delete_pod('20240101')