parent
15139170e9
commit
68be13d50d
@ -1,210 +0,0 @@
|
|||||||
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…
Reference in new issue