上传后端代码

main
Ryan 1 month ago
parent 5ec4528862
commit b5b5e4feac

@ -0,0 +1,210 @@
let originalData = [];
let updatedData = [];
let workbook;
let sheetName;
let skippedStudents = [];
// 导入学生名单
document.getElementById('excelFileInput').addEventListener('change', function (e) {
var file = e.target.files[0];
if (!file) {
return;
}
var reader = new FileReader();
reader.onload = function (e) {
var data = new Uint8Array(e.target.result);
workbook = XLSX.read(data, { type: 'array' });
sheetName = workbook.SheetNames[0];
var worksheet = workbook.Sheets[sheetName];
originalData = XLSX.utils.sheet_to_json(worksheet);
updatedData = JSON.parse(JSON.stringify(originalData));
var displayDiv = document.getElementById('excelDataDisplay');
// 添加表头
displayDiv.innerHTML = '<div style="display: flex; justify-content: space-between;"><span>学号</span><span>姓名</span><span>积分</span></div>';
updatedData.forEach(function (row) {
var rowDiv = document.createElement('div');
Object.keys(row).forEach(key => {
var cellDiv = document.createElement('span');
cellDiv.textContent = row[key] + ' ';
rowDiv.appendChild(cellDiv);
});
displayDiv.appendChild(rowDiv);
});
};
reader.readAsArrayBuffer(file);
});
// 点名按钮
document.getElementById('callButton').addEventListener('click', function () {
// 去除上一次的高亮
var displayDiv = document.getElementById('excelDataDisplay');
Array.from(displayDiv.children).forEach(child => child.style.backgroundColor = '');
// 过滤掉因上次回答问题得分超过2.5而跳过的学生
let eligibleStudents = updatedData.filter(student => !skippedStudents.includes(student));
// 计算总积分
let totalPoints = eligibleStudents.reduce((acc, student) => {
let pointsKey = Object.keys(student).find(key => key.includes('积分'));
return acc + (pointsKey ? parseInt(student[pointsKey]) : 0);
}, 0);
// 确保总积分不为零
if (totalPoints === 0) {
// 如果总积分为零,可以随机选择一个学生或者采取其他处理方式
let randomIndex = Math.floor(Math.random() * eligibleStudents.length);
let selectedStudent = eligibleStudents[randomIndex];
var displayDiv = document.getElementById('excelDataDisplay');
var rows = Array.from(displayDiv.children).slice(1);
var selectedRow = rows.find(row => row.querySelector('span').textContent.trim() === selectedStudent[Object.keys(selectedStudent)[0]]);
selectedRow.style.backgroundColor = 'lightblue';
// 获取选中行的学号和姓名并显示在主页面
var studentInfo = selectedRow.querySelectorAll('span');
var studentId = studentInfo[0].textContent.trim();
var studentName = studentInfo[1].textContent.trim();
var selectedStudentDiv = document.getElementById('selectedStudentInfo');
selectedStudentDiv.innerHTML = `<p>点到的学生学号:${studentId},姓名:${studentName}</p>`;
return;
}
// 计算每个学生被选中的概率(总积分越高,被点到的概率越低)
let probabilities = eligibleStudents.map(student => {
let pointsKey = Object.keys(student).find(key => key.includes('积分'));
let studentPoints = pointsKey ? parseInt(student[pointsKey]) : 0;
return 1 / (studentPoints + 1) / totalPoints;
});
// 使用 Math.random 和 Date.now 作为种子
let randomValue = Math.random() + Date.now() % 1000 / 1000;
let cumulativeProbability = 0;
let selectedStudent;
for (let i = 0; i < eligibleStudents.length; i++) {
cumulativeProbability += probabilities[i];
if (randomValue < cumulativeProbability) {
selectedStudent = eligibleStudents[i];
break;
}
}
if (selectedStudent) {
var displayDiv = document.getElementById('excelDataDisplay');
var rows = Array.from(displayDiv.children).slice(1);
var selectedRow = rows.find(row => row.querySelector('span').textContent.trim() === selectedStudent[Object.keys(selectedStudent)[0]]);
selectedRow.style.backgroundColor = 'lightblue';
// 获取选中行的学号和姓名并显示在主页面
var studentInfo = selectedRow.querySelectorAll('span');
var studentId = studentInfo[0].textContent.trim();
var studentName = studentInfo[1].textContent.trim();
var selectedStudentDiv = document.getElementById('selectedStudentInfo');
selectedStudentDiv.innerHTML = `<p>点到的学生学号:${studentId},姓名:${studentName}</p>`;
}
});
// 到达教室按钮
document.getElementById('arriveClassroom').addEventListener('click', function () {
var displayDiv = document.getElementById('excelDataDisplay');
var rows = Array.from(displayDiv.children).slice(1);
if (rows.length > 0) {
var selectedRow = rows.find(row => row.style.backgroundColor === 'lightblue');
if (selectedRow) {
var studentInfo = selectedRow.querySelectorAll('span');
var studentId = studentInfo[0].textContent.trim();
var studentName = studentInfo[1].textContent.trim();
// 查找对应的学生并增加积分
var student = updatedData.find(student => student[Object.keys(student)[0]] === studentId && student[Object.keys(student)[1]] === studentName);
if (student) {
let pointsKey = Object.keys(student).find(key => key.includes('积分'));
if (pointsKey) {
student[pointsKey] = parseFloat(student[pointsKey]) + 1;
// 更新显示
var rowSpans = selectedRow.querySelectorAll('span');
rowSpans[rowSpans.length - 1].textContent = student[pointsKey];
}
}
}
}
});
// 准确重复所提问的问题
document.getElementById('repeatedQuestionYes').addEventListener('click', function () {
var displayDiv = document.getElementById('excelDataDisplay');
var rows = Array.from(displayDiv.children).slice(1);
if (rows.length > 0) {
var selectedRow = rows.find(row => row.style.backgroundColor === 'lightblue');
if (selectedRow) {
var studentInfo = selectedRow.querySelectorAll('span');
var studentId = studentInfo[0].textContent.trim();
var studentName = studentInfo[1].textContent.trim();
// 查找对应的学生并增加积分
var student = updatedData.find(student => student[Object.keys(student)[0]] === studentId && student[Object.keys(student)[1]] === studentName);
if (student) {
let pointsKey = Object.keys(student).find(key => key.includes('积分'));
if (pointsKey) {
student[pointsKey] = parseFloat(student[pointsKey]) + 0.5;
// 更新显示
var rowSpans = selectedRow.querySelectorAll('span');
rowSpans[rowSpans.length - 1].textContent = student[pointsKey];
}
}
}
}
});
// 不能准确重复所提问的问题
document.getElementById('repeatedQuestionNo').addEventListener('click', function () {
var displayDiv = document.getElementById('excelDataDisplay');
var rows = Array.from(displayDiv.children).slice(1);
if (rows.length > 0) {
var selectedRow = rows.find(row => row.style.backgroundColor === 'lightblue');
if (selectedRow) {
var studentInfo = selectedRow.querySelectorAll('span');
var studentId = studentInfo[0].textContent.trim();
var studentName = studentInfo[1].textContent.trim();
// 查找对应的学生并减少积分
var student = updatedData.find(student => student[Object.keys(student)[0]] === studentId && student[Object.keys(student)[1]] === studentName);
if (student) {
let pointsKey = Object.keys(student).find(key => key.includes('积分'));
if (pointsKey) {
student[pointsKey] = parseFloat(student[pointsKey]) - 1;
// 更新显示
var rowSpans = selectedRow.querySelectorAll('span');
rowSpans[rowSpans.length - 1].textContent = student[pointsKey];
}
}
}
}
});
// 增加自定义分数
document.getElementById('addScoreButton').addEventListener('click', function () {
var inputScore = parseFloat(document.getElementById('addScoreInput').value);
if (inputScore >= 0.5 && inputScore <= 3 && !isNaN(inputScore)) {
var displayDiv = document.getElementById('excelDataDisplay');
var rows = Array.from(displayDiv.children).slice(1);
if (rows.length > 0) {
var selectedRow = rows.find(row => row.style.backgroundColor === 'lightblue');
if (selectedRow) {
var studentInfo = selectedRow.querySelectorAll('span');
var studentId = studentInfo[0].textContent.trim();
var studentName = studentInfo[1].textContent.trim();
// 查找对应的学生并增加积分
var student = updatedData.find(student => student[Object.keys(student)[0]] === studentId && student[Object.keys(student)[1]] === studentName);
if (student) {
let pointsKey = Object.keys(student).find(key => key.includes('积分'));
if (pointsKey) {
student[pointsKey] = parseFloat(student[pointsKey]) + inputScore;
// 更新显示
var rowSpans = selectedRow.querySelectorAll('span');
rowSpans[rowSpans.length - 1].textContent = student[pointsKey];
// 如果得分超过 2.5 分,将该学生加入跳过列表
if (student[pointsKey] > 2.5) {
skippedStudents.push(student);
}
}
}
}
}
} else {
alert('输入的分数应在 0.5 到 3 之间且为有效数字。');
}
});
Loading…
Cancel
Save