> 技术文档 > 学生信息管理系统 - HTML实现增删改查

学生信息管理系统 - HTML实现增删改查


学生信息管理系统 - HTML实现增删改查

效果图

学生信息管理系统 - HTML实现增删改查

代码

<!DOCTYPE html><html lang=\"zh-CN\"><head> <meta charset=\"UTF-8\"> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"> <title>学生信息管理系统</title> <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css\"> <style> * { margin: 0; padding: 0; box-sizing: border-box; font-family: \'Segoe UI\', Tahoma, Geneva, Verdana, sans-serif; } body { background: linear-gradient(135deg, #6a11cb 0%, #2575fc 100%); min-height: 100vh; display: flex; justify-content: center; align-items: center; padding: 20px; } .container { width: 100%; max-width: 1200px; background: rgba(255, 255, 255, 0.95); border-radius: 20px; box-shadow: 0 15px 30px rgba(0, 0, 0, 0.3); overflow: hidden; display: flex; flex-direction: column; height: 90vh; } header { background: linear-gradient(to right, #4b6cb7, #182848); color: white; padding: 20px 30px; text-align: center; position: relative; } .logo { position: absolute; left: 30px; top: 50%; transform: translateY(-50%); font-size: 24px; } h1 { font-size: 2.2rem; margin-bottom: 5px; letter-spacing: 1px; } .subtitle { font-size: 1rem; opacity: 0.8; } .content { display: flex; flex: 1; overflow: hidden; } .sidebar { width: 250px; background: #2c3e50; color: white; padding: 20px 0; transition: all 0.3s ease; } .menu-item { padding: 15px 25px; cursor: pointer; transition: all 0.3s; display: flex; align-items: center; border-left: 4px solid transparent; } .menu-item:hover, .menu-item.active { background: #34495e; border-left: 4px solid #3498db; } .menu-item i { margin-right: 12px; font-size: 18px; width: 25px; text-align: center; } .main-content { flex: 1; padding: 25px; overflow-y: auto; background: #f8f9fa; } .panel { background: white; border-radius: 12px; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.08); padding: 25px; margin-bottom: 25px; display: none; } .panel.active { display: block; animation: fadeIn 0.5s ease; } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } h2 { color: #2c3e50; margin-bottom: 20px; padding-bottom: 10px; border-bottom: 2px solid #eee; font-size: 1.8rem; } .form-group { margin-bottom: 20px; } label { display: block; margin-bottom: 8px; font-weight: 600; color: #34495e; } input, select { width: 100%; padding: 12px 15px; border: 1px solid #ddd; border-radius: 8px; font-size: 16px; transition: border-color 0.3s; } input:focus, select:focus { border-color: #3498db; outline: none; box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.2); } button { background: #3498db; color: white; border: none; padding: 12px 25px; border-radius: 8px; cursor: pointer; font-size: 16px; font-weight: 600; transition: all 0.3s; display: inline-flex; align-items: center; justify-content: center; } button i { margin-right: 8px; } button:hover { background: #2980b9; transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); } .btn-danger { background: #e74c3c; } .btn-danger:hover { background: #c0392b; } .btn-success { background: #2ecc71; } .btn-success:hover { background: #27ae60; } .action-buttons { display: flex; gap: 10px; margin-top: 15px; } .message { padding: 15px; border-radius: 8px; margin: 15px 0; display: flex; align-items: center; } .success { background: #d4edda; color: #155724; border-left: 4px solid #28a745; } .error { background: #f8d7da; color: #721c24; border-left: 4px solid #dc3545; } .info { background: #d1ecf1; color: #0c5460; border-left: 4px solid #17a2b8; } table { width: 100%; border-collapse: collapse; margin-top: 20px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05); } th, td { padding: 15px; text-align: left; border-bottom: 1px solid #eee; } th { background: #3498db; color: white; font-weight: 600; } tr:nth-child(even) { background: #f8f9fa; } tr:hover { background: #e3f2fd; } .empty-message { text-align: center; padding: 30px; color: #6c757d; font-size: 18px; } .empty-message i { font-size: 48px; margin-bottom: 15px; color: #adb5bd; } .action-cell { display: flex; gap: 8px; } .action-btn { padding: 8px 12px; font-size: 14px; border-radius: 6px; } footer { text-align: center; padding: 15px; background: #f1f1f1; color: #6c757d; font-size: 14px; border-top: 1px solid #ddd; } @media (max-width: 768px) { .content { flex-direction: column; } .sidebar { width: 100%; padding: 10px 0; } .menu-items { display: flex; overflow-x: auto; } .menu-item { padding: 12px 15px; white-space: nowrap; border-left: none; border-bottom: 4px solid transparent; } .menu-item:hover, .menu-item.active { border-left: none; border-bottom: 4px solid #3498db; } } </style></head><body> <div class=\"container\"> <header> <div class=\"logo\"> <i class=\"fas fa-graduation-cap\"></i> </div> <h1>学生信息管理系统</h1> <div class=\"subtitle\">高效管理学生信息,助力教育信息化</div> </header> <div class=\"content\"> <div class=\"sidebar\"> <div class=\"menu-item active\" data-panel=\"add\">  <i class=\"fas fa-user-plus\"></i>  <span>添加学生信息</span> </div> <div class=\"menu-item\" data-panel=\"display\">  <i class=\"fas fa-list\"></i>  <span>显示所有学生</span> </div> <div class=\"menu-item\" data-panel=\"delete\">  <i class=\"fas fa-user-minus\"></i>  <span>删除学生信息</span> </div> <div class=\"menu-item\" data-panel=\"modify\">  <i class=\"fas fa-edit\"></i>  <span>修改学生信息</span> </div> </div> <div class=\"main-content\"> <!-- 添加学生信息面板 --> <div class=\"panel active\" id=\"add-panel\">  <h2><i class=\"fas fa-user-plus\"></i> 添加学生信息</h2>  <div class=\"form-group\"> <label for=\"student-id\">学号</label> <input type=\"text\" id=\"student-id\" placeholder=\"请输入学号\">  </div>  <div class=\"form-group\"> <label for=\"student-name\">姓名</label> <input type=\"text\" id=\"student-name\" placeholder=\"请输入姓名\">  </div>  <div class=\"form-group\"> <label for=\"student-age\">年龄</label> <input type=\"number\" id=\"student-age\" placeholder=\"请输入年龄\">  </div>  <div class=\"form-group\"> <label for=\"student-grade\">年级</label> <select id=\"student-grade\"> <option value=\"\">请选择年级</option> <option value=\"大一\">大一</option> <option value=\"大二\">大二</option> <option value=\"大三\">大三</option> <option value=\"大四\">大四</option> <option value=\"研究生\">研究生</option> </select>  </div>  <div id=\"add-message\"></div>  <button id=\"add-btn\"> <i class=\"fas fa-plus-circle\"></i> 添加学生  </button> </div> <!-- 显示所有学生信息面板 --> <div class=\"panel\" id=\"display-panel\">  <h2><i class=\"fas fa-users\"></i> 所有学生信息</h2>  <div id=\"students-table-container\"> <div class=\"empty-message\" id=\"empty-message\"> <i class=\"fas fa-user-graduate\"></i> <p>暂无学生信息</p> </div> <table id=\"students-table\" style=\"display: none;\"> <thead> <tr>  <th>学号</th>  <th>姓名</th>  <th>年龄</th>  <th>年级</th>  <th>操作</th> </tr> </thead> <tbody id=\"students-list\"> <!-- 学生数据将通过JS动态填充 --> </tbody> </table>  </div> </div> <!-- 删除学生信息面板 --> <div class=\"panel\" id=\"delete-panel\">  <h2><i class=\"fas fa-user-minus\"></i> 删除学生信息</h2>  <div class=\"form-group\"> <label for=\"delete-id\">输入要删除的学生学号</label> <input type=\"text\" id=\"delete-id\" placeholder=\"请输入学号\">  </div>  <div id=\"delete-message\"></div>  <button id=\"delete-btn\" class=\"btn-danger\"> <i class=\"fas fa-trash-alt\"></i> 删除学生  </button> </div> <!-- 修改学生信息面板 --> <div class=\"panel\" id=\"modify-panel\">  <h2><i class=\"fas fa-user-edit\"></i> 修改学生信息</h2>  <div class=\"form-group\"> <label for=\"modify-id\">输入要修改的学生学号</label> <input type=\"text\" id=\"modify-id\" placeholder=\"请输入学号\">  </div>  <div id=\"modify-message\"></div>  <div id=\"modify-form\" style=\"display: none;\"> <div class=\"form-group\"> <label for=\"modify-name\">姓名</label> <input type=\"text\" id=\"modify-name\" placeholder=\"新姓名(留空则不修改)\"> </div> <div class=\"form-group\"> <label for=\"modify-age\">年龄</label> <input type=\"number\" id=\"modify-age\" placeholder=\"新年龄(留空则不修改)\"> </div> <div class=\"form-group\"> <label for=\"modify-grade\">年级</label> <select id=\"modify-grade\"> <option value=\"\">不修改(保留原年级)</option> <option value=\"大一\">大一</option> <option value=\"大二\">大二</option> <option value=\"大三\">大三</option> <option value=\"大四\">大四</option> <option value=\"研究生\">研究生</option> </select> </div> <button id=\"save-modify-btn\" class=\"btn-success\"> <i class=\"fas fa-save\"></i> 保存修改 </button>  </div> </div> </div> </div> <footer> <p>学生信息管理系统 &copy; 2023 | 使用HTML5, CSS3和JavaScript实现</p> </footer> </div> <script> // 学生数据存储 let students = JSON.parse(localStorage.getItem(\'students\')) || []; // DOM元素 const menuItems = document.querySelectorAll(\'.menu-item\'); const panels = document.querySelectorAll(\'.panel\'); // 菜单切换功能 menuItems.forEach(item => { item.addEventListener(\'click\', () => { // 更新菜单激活状态 menuItems.forEach(i => i.classList.remove(\'active\')); item.classList.add(\'active\'); // 显示对应面板 const panelId = item.getAttribute(\'data-panel\') + \'-panel\'; panels.forEach(panel => {  panel.classList.remove(\'active\');  if(panel.id === panelId) { panel.classList.add(\'active\'); // 如果是显示面板,刷新学生列表 if(panelId === \'display-panel\') { displayStudents(); }  } }); }); }); // 添加学生功能 document.getElementById(\'add-btn\').addEventListener(\'click\', () => { const id = document.getElementById(\'student-id\').value.trim(); const name = document.getElementById(\'student-name\').value.trim(); const age = document.getElementById(\'student-age\').value.trim(); const grade = document.getElementById(\'student-grade\').value; const messageDiv = document.getElementById(\'add-message\'); // 验证输入 if(!id || !name || !age || !grade) { showMessage(messageDiv, \'请填写所有必填字段\', \'error\'); return; } // 检查学号是否已存在 if(students.some(student => student.id === id)) { showMessage(messageDiv, \'该学号已存在,无法重复添加\', \'error\'); return; } // 添加学生 students.push({ id: id, name: name, age: age, grade: grade }); // 保存到localStorage saveToLocalStorage(); // 显示成功消息 showMessage(messageDiv, `成功添加学生: ${name}`, \'success\'); // 清空表单 document.getElementById(\'student-id\').value = \'\'; document.getElementById(\'student-name\').value = \'\'; document.getElementById(\'student-age\').value = \'\'; document.getElementById(\'student-grade\').selectedIndex = 0; }); // 显示所有学生 function displayStudents() { const tableBody = document.getElementById(\'students-list\'); const table = document.getElementById(\'students-table\'); const emptyMessage = document.getElementById(\'empty-message\'); // 清空表格 tableBody.innerHTML = \'\'; if(students.length === 0) { table.style.display = \'none\'; emptyMessage.style.display = \'block\'; return; } emptyMessage.style.display = \'none\'; table.style.display = \'table\'; // 填充表格 students.forEach(student => { const row = document.createElement(\'tr\'); row.innerHTML = `  <td>${student.id}</td>  <td>${student.name}</td>  <td>${student.age}</td>  <td>${student.grade}</td>  <td class=\"action-cell\"> <button class=\"action-btn btn-danger delete-row\" data-id=\"${student.id}\"> <i class=\"fas fa-trash\"></i> </button> <button class=\"action-btn btn-success edit-row\" data-id=\"${student.id}\"> <i class=\"fas fa-edit\"></i> </button>  </td> `; tableBody.appendChild(row); }); // 添加行内删除事件 document.querySelectorAll(\'.delete-row\').forEach(btn => { btn.addEventListener(\'click\', () => {  const id = btn.getAttribute(\'data-id\');  deleteStudent(id); }); }); // 添加行内编辑事件 document.querySelectorAll(\'.edit-row\').forEach(btn => { btn.addEventListener(\'click\', () => {  const id = btn.getAttribute(\'data-id\');  // 切换到修改面板  menuItems.forEach(item => { if(item.getAttribute(\'data-panel\') === \'modify\') { item.click(); }  });  // 填充修改表单  document.getElementById(\'modify-id\').value = id;  findStudentForModify(); }); }); } // 删除学生功能 document.getElementById(\'delete-btn\').addEventListener(\'click\', () => { const id = document.getElementById(\'delete-id\').value.trim(); const messageDiv = document.getElementById(\'delete-message\'); if(!id) { showMessage(messageDiv, \'请输入学号\', \'error\'); return; } deleteStudent(id); }); function deleteStudent(id) { const messageDiv = document.getElementById(\'delete-message\'); const index = students.findIndex(student => student.id === id); if(index === -1) { showMessage(messageDiv, \'未找到该学号对应的学生信息\', \'error\'); return; } const studentName = students[index].name; students.splice(index, 1); saveToLocalStorage(); showMessage(messageDiv, `成功删除学生: ${studentName}`, \'success\'); document.getElementById(\'delete-id\').value = \'\'; // 如果当前在显示面板,刷新列表 if(document.getElementById(\'display-panel\').classList.contains(\'active\')) { displayStudents(); } } // 查找学生进行修改 document.getElementById(\'modify-id\').addEventListener(\'input\', findStudentForModify); function findStudentForModify() { const id = document.getElementById(\'modify-id\').value.trim(); const messageDiv = document.getElementById(\'modify-message\'); const modifyForm = document.getElementById(\'modify-form\'); if(!id) { modifyForm.style.display = \'none\'; return; } const student = students.find(s => s.id === id); if(!student) { showMessage(messageDiv, \'未找到该学号对应的学生信息\', \'error\'); modifyForm.style.display = \'none\'; return; } showMessage(messageDiv, `找到学生: ${student.name},请修改以下信息`, \'info\'); modifyForm.style.display = \'block\'; // 填充表单(但不设置值,允许留空) document.getElementById(\'modify-name\').value = \'\'; document.getElementById(\'modify-age\').value = \'\'; document.getElementById(\'modify-grade\').selectedIndex = 0; } // 保存修改 document.getElementById(\'save-modify-btn\').addEventListener(\'click\', () => { const id = document.getElementById(\'modify-id\').value.trim(); const newName = document.getElementById(\'modify-name\').value.trim(); const newAge = document.getElementById(\'modify-age\').value.trim(); const newGrade = document.getElementById(\'modify-grade\').value; const messageDiv = document.getElementById(\'modify-message\'); const studentIndex = students.findIndex(s => s.id === id); if(studentIndex === -1) { showMessage(messageDiv, \'未找到该学生信息\', \'error\'); return; } // 更新信息(仅更新非空字段) if(newName) students[studentIndex].name = newName; if(newAge) students[studentIndex].age = newAge; if(newGrade) students[studentIndex].grade = newGrade; saveToLocalStorage(); showMessage(messageDiv, \'成功修改学生信息\', \'success\'); // 清空表单 document.getElementById(\'modify-id\').value = \'\'; document.getElementById(\'modify-form\').style.display = \'none\'; // 如果当前在显示面板,刷新列表 if(document.getElementById(\'display-panel\').classList.contains(\'active\')) { displayStudents(); } }); // 显示消息函数 function showMessage(element, message, type) { element.innerHTML = `<div class=\"message ${type}\"><i class=\"fas fa-${type === \'success\' ? \'check-circle\' : type === \'error\' ? \'exclamation-circle\' : \'info-circle\'}\"></i> ${message}</div>`; // 5秒后自动清除消息 setTimeout(() => { element.innerHTML = \'\'; }, 5000); } // 保存数据到localStorage function saveToLocalStorage() { localStorage.setItem(\'students\', JSON.stringify(students)); } // 初始化显示学生列表 displayStudents(); </script></body></html>

解释

学生信息管理系统 - HTML实现
下面我将使用HTML、CSS和JavaScript实现一个完整的学生信息管理系统,满足所有需求功能。
系统功能说明
这个学生信息管理系统实现了所有需求功能:

学生信息添加

输入学号、姓名、年龄和年级

学号唯一性检查

添加成功/失败提示

学生信息显示

表格展示所有学生信息

空信息提示

支持行内操作(编辑/删除)

学生信息删除

通过学号删除学生

成功/失败提示

学生信息修改

通过学号查找学生

选择性修改(留空则不修改)

成功/失败提示

系统交互

清晰的左侧导航菜单

响应式设计(适配移动设备)

数据持久化(使用localStorage)

用户友好的消息提示

技术实现
数据结构:使用JavaScript数组存储学生对象

数据持久化:利用localStorage保存数据

UI设计:

现代化渐变背景

卡片式布局

响应式设计(适配移动设备)

交互动画效果

功能实现:

使用事件监听器处理用户交互

动态DOM操作更新界面

表单验证和错误处理

使用说明
复制完整代码到HTML文件

在浏览器中打开该文件

使用左侧菜单切换不同功能

所有数据将保存在浏览器本地存储中