网站首页 > 技术文章 正文
上课点名抽学生回答问题,做游戏……由老师口头点名,点谁回答总有点老师本人的情绪,且显得毫无趣味,但做一个点名系统,就不一样了,电脑随机抽出的名字,不仅公平,还会给孩子们带来一种不一样的感受。
那么怎么做呢?
其实目前做这个很简单,没有一点编写代码经验的人都能做到。只需要告诉deepseek,你想做做什么,需达到些什么功能,它就能帮助你编辑好代码。而且还能测试。
如上图,就是让deepseek帮助编写的html点名系统,测试完成,复制出代码,粘贴到记事本上,另存为html网页文件就ok了。注意另存时编码必须utf-8
大家可以去试一试。也可以直接复制下方代码,到记事本上,另存为html文件。并找一个背景音乐,取名"点名音乐.mp3"和html文件放在一起。运行html,下载模板,把学生名字改成自己班上的。再上传上去,就能完美使用了。
<!DOCTYPE html>
<html>
<head>
<title>郑老师随机点名系统</title>
<style>
/* 样式部分保持不变 */
body {
background-color: #1e90ff;
margin: 0;
padding: 20px;
font-family: '微软雅黑', sans-serif;
display: flex;
flex-direction: column;
align-items: center;
min-height: 100vh;
}
h1 {
color: white;
font-size: 3em;
margin: 20px 0;
text-shadow: 2px 2px 4px rgba(0,0,0,0.3);
}
.container {
background: rgba(255,255,255,0.95);
padding: 30px;
border-radius: 15px;
width: 80%;
max-width: 800px;
margin: 20px 0;
box-shadow: 0 8px 16px rgba(0,0,0,0.2);
}
#nameDisplay {
font-size: 6em;
font-weight: 900;
color: #2c3e50;
text-align: center;
margin: 50px 0;
min-height: 120px;
letter-spacing: 3px;
}
button {
background-color: #ff6b6b;
color: white;
border: none;
padding: 20px 40px;
font-size: 24px;
border-radius: 50px;
cursor: pointer;
transition: all 0.3s;
margin: 20px;
box-shadow: 0 4px 6px rgba(0,0,0,0.2);
}
.import-section {
margin-top: 40px;
background: rgba(255,255,255,0.9);
padding: 20px;
border-radius: 10px;
width: 80%;
max-width: 600px;
}
#music {
display: none;
}
</style>
</head>
<body>
<h1>郑老师随机点名</h1>
<div class="container">
<select id="classSelect">
<option value="郑老师任教一班">郑老师任教一班</option>
<option value="郑老师任教二班">郑老师任教二班</option>
</select>
<div id="nameDisplay">准备就绪</div>
</div>
<button id="startBtn"> 开始点名</button>
<audio id="music" loop src="点名音乐.mp3"></audio>
<div class="import-section">
<h3>数据导入功能</h3>
<input type="file" id="fileInput" accept=".csv">
<button onclick="downloadTemplate()">下载模板</button>
<p>说明:请使用CSV格式文件,包含【班级】和【姓名】两列</p>
</div>
<script>
// 修复点1:添加完整初始化数据
const initialData = [
['班级', '姓名'],
['郑老师任教一班', '李星晨'],
['郑老师任教一班', '李程峻'],
// ...其他初始数据...
['郑老师任教二班', '王二']
];
// 修复点2:完善本地存储逻辑
let classes = loadFromLocalStorage() || processRawData(initialData);
// 核心功能变量
let currentNames = [];
let isRunning = false;
let intervalId = null;
let timeoutId = null;
const elements = {
nameDisplay: document.getElementById('nameDisplay'),
startBtn: document.getElementById('startBtn'),
classSelect: document.getElementById('classSelect'),
music: document.getElementById('music'),
fileInput: document.getElementById('fileInput')
};
// 修复点3:添加事件监听器绑定
function bindEvents() {
elements.startBtn.addEventListener('click', toggleRoll);
elements.classSelect.addEventListener('change', updateNames);
elements.fileInput.addEventListener('change', handleFile);
}
// 主逻辑
function updateNames() {
currentNames = classes[elements.classSelect.value] || [];
elements.nameDisplay.textContent = "班级已准备";
elements.nameDisplay.style.color = "#2c3e50";
}
function getRandomName() {
return currentNames.length > 0
? currentNames[Math.floor(Math.random() * currentNames.length)]
: "暂无数据";
}
// 数据存储功能
function saveToLocalStorage() {
localStorage.setItem('classData', JSON.stringify(classes));
}
function loadFromLocalStorage() {
const data = localStorage.getItem('classData');
return data ? JSON.parse(data) : null;
}
// 文件处理
function processRawData(rows) {
return rows.slice(1).reduce((acc, [className, name]) => {
className = (className || '未命名班级').toString().trim();
name = (name || '无名学生').toString().trim();
acc[className] = acc[className] || [];
acc[className].push(name);
return acc;
}, {});
}
function handleFile(e) {
const file = e.target.files[0];
const reader = new FileReader();
reader.onload = (event) => {
const csvData = event.target.result;
const rows = csvData.split('\n').map(row => {
const [a, b] = row.split(',').map(c => c.replace(/["'\s]/g, ''));
return [a || '未命名班级', b || '无名学生'];
});
classes = processRawData(rows);
saveToLocalStorage();
elements.classSelect.innerHTML = Object.keys(classes)
.map(c => `<option value="${c}">${c}</option>`).join('');
updateNames();
alert(`成功导入 ${Object.values(classes).reduce((a,b) => a+b.length,0)} 个学生数据`);
};
reader.readAsText(file);
}
function downloadTemplate() {
const csvContent = "班级,姓名\n五1班,赵一\n五1班,钱一";
const blob = new Blob([csvContent], { type: 'text/csv' });
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = '班级模板.csv';
link.click();
}
// 开始/暂停逻辑
function toggleRoll() {
isRunning = !isRunning;
elements.startBtn.textContent = isRunning ? ' 暂停抽选' : ' 开始点名';
elements.startBtn.style.backgroundColor = isRunning ? '#4ecdc4' : '#ff6b6b';
if (isRunning) {
elements.music.play().catch(() => console.log('音乐播放被阻止'));
intervalId = setInterval(() => {
elements.nameDisplay.textContent = getRandomName();
}, 50);
timeoutId = setTimeout(() => {
if(isRunning) toggleRoll();
}, 3000);
} else {
clearTimeout(timeoutId);
elements.music.pause();
clearInterval(intervalId);
elements.nameDisplay.style.color = '#1e90ff';
}
}
// 修复点4:完善初始化流程
function init() {
bindEvents(); // 绑定事件监听器
updateNames(); // 初始化当前班级
// 加载本地存储提示
if(localStorage.getItem('classData')) {
alert('已加载上次保存的学生名单');
} else {
saveToLocalStorage(); // 保存初始数据
}
}
init(); // 执行初始化
</script>
</body>
</html>
- 上一篇: 每个前端工程师须知的20个现代CSS规则
- 下一篇: 如何设置Flexbox项目之间的距离
猜你喜欢
- 2025-08-02 React Native 常见问题集合
- 2025-08-02 React-Native 样式指南
- 2025-08-02 SpringBoot集成DeepSeek
- 2025-08-02 课堂点名总尴尬?试试 DeepSeek,或能实现点名自由!(附教程)
- 2025-08-02 手把手带你完成OpenHarmony藏头诗App
- 2025-08-02 Web设计练习:制作人脸识别网页(基于TensorFlow的开源模型)
- 2025-08-02 CSS支持 if / else 了
- 2025-08-02 CSS粘性页脚布局:从Flexbox到Grid的现代实现指南
- 2025-08-02 CSS 2025新特性解析:容器查询与嵌套选择器的高级应用案例
- 2025-08-02 如何设置Flexbox项目之间的距离
- 08-02C|在一个结构体嵌套一个共用体实现一体多用
- 08-02C++中,常用的强制类型转换函数
- 08-02如何使用C语言编程实现一个推箱子游戏?技术核心和算法实现
- 08-02C++20 新特性(24):模板访问权限和typename的放宽
- 08-02C++零基础到工程实践
- 08-02[深度学习] Python人脸识别库face_recognition使用教程
- 08-02AI算法之怎么利用Python实现支持向量机SVM算法
- 08-02【机器学习】SVM支持向量机
- 1520℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 623℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 526℃MySQL service启动脚本浅析(r12笔记第59天)
- 492℃启用MySQL查询缓存(mysql8.0查询缓存)
- 491℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 479℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 460℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 458℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)