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 = '
点到的学生学号:${studentId},姓名:${studentName}
`; 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 = `点到的学生学号:${studentId},姓名:${studentName}
`; console.log(`通过概率选择点到了学生,学号:${studentId},姓名:${studentName}`); } }); // 到达教室按钮 document.getElementById('arriveClassroom').addEventListener('click', function () { 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) { let originalPoints = parseFloat(student[pointsKey]); student[pointsKey] = originalPoints + 1; // 更新显示 var rowSpans = selectedRow.querySelectorAll('span'); rowSpans[rowSpans.length - 1].textContent = student[pointsKey]; console.log(`学生${studentName}(学号:${studentId})到达教室,积分从${originalPoints}增加到${student[pointsKey]}`); } } } } }); // 准确重复所提问的问题 document.getElementById('repeatedQuestionYes').addEventListener('click', function () { 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) { let originalPoints = parseFloat(student[pointsKey]); student[pointsKey] = originalPoints + 0.5; // 更新显示 var rowSpans = selectedRow.querySelectorAll('span'); rowSpans[rowSpans.length - 1].textContent = student[pointsKey]; console.log(`学生${studentName}(学号:${studentId})准确重复问题,积分从${originalPoints}增加到${student[pointsKey]}`); } } } } }); // 不能准确重复所提问的问题 document.getElementById('repeatedQuestionNo').addEventListener('click', function () { 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) { let originalPoints = parseFloat(student[pointsKey]); student[pointsKey] = originalPoints - 1; // 更新显示 var rowSpans = selectedRow.querySelectorAll('span'); rowSpans[rowSpans.length - 1].textContent = student[pointsKey]; console.log(`学生${studentName}(学号:${studentId})不能准确重复问题,积分从${originalPoints}减少到${student[pointsKey]}`); } } } } }); // 增加自定义分数 document.getElementById('addScoreButton').addEventListener('click', function () { 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) { 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); } 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 = '