You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

263 lines
13 KiB

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);
});
1 month ago
console.log("导入学生名单成功。");
};
reader.readAsArrayBuffer(file);
});
// 点名按钮
document.getElementById('callButton').addEventListener('click', function () {
1 month ago
console.log("点名按钮被点击。");
// 去除上一次的高亮
var displayDiv = document.getElementById('excelDataDisplay');
Array.from(displayDiv.children).forEach(child => child.style.backgroundColor = '');
1 month ago
// 过滤掉因上次回答问题得分超过 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 ? parseFloat(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>`;
1 month ago
console.log(`随机选择了学生,学号:${studentId},姓名:${studentName}`);
return;
}
// 计算每个学生被选中的概率(总积分越高,被点到的概率越低)
let probabilities = eligibleStudents.map(student => {
let pointsKey = Object.keys(student).find(key => key.includes('积分'));
let studentPoints = pointsKey ? parseFloat(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>`;
1 month ago
console.log(`通过概率选择点到了学生,学号:${studentId},姓名:${studentName}`);
}
});
// 到达教室按钮
document.getElementById('arriveClassroom').addEventListener('click', function () {
1 month ago
console.log("到达教室按钮被点击。");
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) {
1 month ago
let originalPoints = parseFloat(student[pointsKey]);
student[pointsKey] = originalPoints + 1;
// 更新显示
var rowSpans = selectedRow.querySelectorAll('span');
rowSpans[rowSpans.length - 1].textContent = student[pointsKey];
1 month ago
console.log(`学生${studentName}(学号:${studentId})到达教室,积分从${originalPoints}增加到${student[pointsKey]}`);
}
}
}
}
});
// 准确重复所提问的问题
document.getElementById('repeatedQuestionYes').addEventListener('click', function () {
1 month ago
console.log("准确重复问题按钮被点击。");
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) {
1 month ago
let originalPoints = parseFloat(student[pointsKey]);
student[pointsKey] = originalPoints + 0.5;
// 更新显示
var rowSpans = selectedRow.querySelectorAll('span');
rowSpans[rowSpans.length - 1].textContent = student[pointsKey];
1 month ago
console.log(`学生${studentName}(学号:${studentId})准确重复问题,积分从${originalPoints}增加到${student[pointsKey]}`);
}
}
}
}
});
// 不能准确重复所提问的问题
document.getElementById('repeatedQuestionNo').addEventListener('click', function () {
1 month ago
console.log("不能准确重复问题按钮被点击。");
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) {
1 month ago
let originalPoints = parseFloat(student[pointsKey]);
student[pointsKey] = originalPoints - 1;
// 更新显示
var rowSpans = selectedRow.querySelectorAll('span');
rowSpans[rowSpans.length - 1].textContent = student[pointsKey];
1 month ago
console.log(`学生${studentName}(学号:${studentId})不能准确重复问题,积分从${originalPoints}减少到${student[pointsKey]}`);
}
}
}
}
});
// 增加自定义分数
document.getElementById('addScoreButton').addEventListener('click', function () {
1 month ago
console.log("增加自定义分数按钮被点击。");
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) {
1 month ago
let originalPoints = parseFloat(student[pointsKey]);
student[pointsKey] = originalPoints + inputScore;
// 更新显示
var rowSpans = selectedRow.querySelectorAll('span');
rowSpans[rowSpans.length - 1].textContent = student[pointsKey];
// 如果得分超过 2.5 分,将该学生加入跳过列表
if (student[pointsKey] > 2.5) {
skippedStudents.push(student);
}
1 month ago
console.log(`学生${studentName}(学号:${studentId})增加自定义分数${inputScore},积分从${originalPoints}增加到${student[pointsKey]}`);
}
}
}
}
} else {
alert('输入的分数应在 0.5 到 3 之间且为有效数字。');
}
});
// 按积分从高到低排序
document.getElementById('sortByPointsButton').addEventListener('click', function () {
updatedData.sort((a, b) => {
let pointsKeyA = Object.keys(a).find(key => key.includes('积分'));
let pointsKeyB = Object.keys(b).find(key => key.includes('积分'));
return (pointsKeyB ? parseFloat(b[pointsKeyB]) : 0) - (pointsKeyA ? parseFloat(a[pointsKeyA]) : 0);
});
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);
});
});
// 按学号从小到大排序
document.getElementById('sortByStudentIdButton').addEventListener('click', function () {
updatedData.sort((a, b) => {
return a[Object.keys(a)[0]] - b[Object.keys(b)[0]];
});
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);
});
});