学生信息管理系统 - 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});// 保存到localStoragesaveToLocalStorage();// 显示成功消息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);}// 保存数据到localStoragefunction saveToLocalStorage() {localStorage.setItem('students', JSON.stringify(students));}// 初始化显示学生列表displayStudents();</script>
</body>
</html>

解释

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

学生信息添加

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

学号唯一性检查

添加成功/失败提示

学生信息显示

表格展示所有学生信息

空信息提示

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

学生信息删除

通过学号删除学生

成功/失败提示

学生信息修改

通过学号查找学生

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

成功/失败提示

系统交互

清晰的左侧导航菜单

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

数据持久化(使用localStorage)

用户友好的消息提示

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

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

UI设计:

现代化渐变背景

卡片式布局

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

交互动画效果

功能实现:

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

动态DOM操作更新界面

表单验证和错误处理

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

在浏览器中打开该文件

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90228.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90228.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/90228.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Agile简介

Agile&#xff08;敏捷&#xff09;是一种软件开发方法论&#xff0c;核心是通过快速迭代、灵活响应变化&#xff0c;解决传统软件开发中周期长、需求变更困难等问题&#xff0c;最终高效交付符合用户实际需求的产品。 一、Agile 的起源&#xff1a;为什么需要敏捷&#xff1f;…

关于 URL 中 “+“ 号变成空格的问题

当你在 URL 中传递参数时&#xff0c;加号 () 会被自动转换为空格&#xff0c;这是 URL 编码的标准行为。问题原因在 URL 中&#xff1a;空格会被编码为 号当 URL 被解码时&#xff0c; 号又会被转换回空格这会导致原始数据中的 号丢失解决方案你需要对参数值进行正确的 URL …

综合实验(2)

文章目录 目录 文章目录 前言 OSPF运行在GRE隧道概述 典型应用场景 OSPF over GRE 配置 总结 前言 OSPF运行在GRE隧道概述 GRE&#xff08;Generic Routing Encapsulation&#xff09;隧道是一种通过封装原始数据包在IP网络中创建虚拟点对点连接的隧道技术。OSPF&#xff08;…

【应急响应工具教程】司稽(Whoamifuck):纯Shell打造的Linux应急响应利器

1、工具简介司稽&#xff08;Whoamifuck或Chief-Inspector,简称"who"&#xff09;&#xff0c;永恒之锋发布的第一款开源工具&#xff0c;这是一款由shell编写的Linux应急响应脚本&#xff0c;能对基本的检查项进行输出和分析&#xff0c;并支持一些扩展的特色功能。…

新手操作steam搬砖项目,应该如何快速起步

大家好哦&#xff0c;我是阿阳&#xff0c;今天继续给大家分享一些steam搬砖的知识。在我们操作过程中&#xff0c;问题问得最多的就是&#xff0c;新手应该怎么做&#xff1f;首先&#xff0c;那我们得先来了解-下,什么是steam搬砖,它的项目原理是什么&#xff0c;其次针对于这…

rt-thread加一个库

背景 官方软件包里没有的 可以以库或组件形式加入 本次仅为了验证&#xff0c;加到库 过程 下载源码 假设为 lib_demo 自己的板子目录为bsp/stm32 代码目录结构 bsp/stm32librarieslib_demo //新建文件夹src //把lib_demo里源码文件放进来inc //把lib_demo里头文件放进来SConsc…

c++深拷贝和浅拷贝

一、浅拷贝本质&#xff1a;简单地复制对象的成员值。如果成员里有指针&#xff0c;新对象和原对象的指针会指向同一块内存。比如你有对象 A&#xff0c;里面指针 p 指向堆内存 0x123&#xff1b;用 A 拷贝出对象 B&#xff0c;B 的指针 p 也指向 0x123。问题&#xff1a;若其中…

NineData新增SQL Server到MySQL复制链路,高效助力异构数据库迁移

在实际的数据库迁移工作中&#xff0c;异构库之间的迁移常常被视为一项“高风险、高工作量、高复杂度”的挑战任务。这不仅是一次数据库切换&#xff0c;更是对系统稳定性、数据一致性、业务连续性和技术团队耐力的全方位考验。为解决企业在异构数据库迁移中的痛点&#xff0c;…

字符串和对象的深拷贝和浅拷贝

字符串和对象的深拷贝和浅拷贝【一】基本介绍【1】浅拷贝【2】深拷贝【二】字符串的拷贝【1】字符串的 “浅拷贝”【2】字符串的 “深拷贝”【三】对象的拷贝【1】浅拷贝&#xff08;Shallow Copy&#xff09;【2】深拷贝&#xff08;Deep Copy&#xff09;【四】字符串和对象拷…

4.5 优化器中常见的梯度下降算法

梯度下降算法&#xff08;Gradient Descent&#xff09;的数学公式可以通过以下步骤严格表达&#xff1a;1. 基本梯度下降&#xff08;Batch Gradient Descent&#xff09; 目标&#xff1a;最小化损失函数L(θ)\mathcal{L}(\theta)L(θ)&#xff0c;其中 θ\thetaθ是模型参数…

AM1.5G AAA稳态太阳光模拟器特点

光谱匹配度AM1.5G AAA稳态太阳光模拟器的光谱分布严格匹配国际标准IEC 60904-9中的AM1.5G光谱&#xff08;波长范围300-4000nm&#xff09;&#xff0c;确保与自然太阳光的偏差在25%以内&#xff08;AAA级标准&#xff09;。光谱匹配度通过精密滤光片和氙灯或LED组合光源实现&a…

OSPF开放式最短路径优先

1OSPF简介&#xff08;1&#xff09;OSPF英文全称Open Shortest Path First (开放式最短路径优先)&#xff08;2&#xff09;OSPF是IETF 开发的一种链路状态路由协议&#xff0c;使用基于带宽的度量值。&#xff08;3&#xff09;OSPF采用SPF算法计算路由&#xff0c;从算法上保…

Lua(模块与包)

Lua 模块的基本概念Lua 中的模块是一个由函数、变量组成的代码库&#xff0c;通常保存在独立的 .lua 文件中。模块通过 return 语句导出其内容&#xff0c;供其他脚本调用。模块化设计可以提高代码复用性&#xff0c;便于管理。创建模块模块通常以 .lua 文件形式存在&#xff0…

1. boost::asio之socket的创建和连接

网络编程基本流程 网络编程的基本流程对于服务端是这样的 服务端 1&#xff09;socket——创建socket对象。 2&#xff09;bind——绑定本机ipport。 3&#xff09;listen——监听来电&#xff0c;若在监听到来电&#xff0c;则建立起连接。 4&#xff09;accept——再创建一个…

WPF 控制动画开关

记录一种实现方式&#xff1a;第一步&#xff1a;首先定义一个静态类&#xff0c;提供依赖属性&#xff0c;进而方便在xaml中实现绑定&#xff1a;public static class AnimationBehavior{// 定义附加属性public static readonly DependencyProperty IsAnimatingProperty Depen…

元素竖向的百分比设定是相对于父容器的高度吗?

元素竖向的百分比设定是相对于父容器的高度吗&#xff1f; 核心问题 在CSS中&#xff0c;当设置元素的竖向属性&#xff08;如height、padding-top等&#xff09;为百分比值时&#xff0c;其计算基准是父容器的高度还是宽度&#xff1f; 权威结论height属性 百分比值基于父容器…

web3.0怎么入局

Web3.0(第三代互联网)融合了区块链、去中心化应用(DApps)、NFT、DAO等新兴技术,给个人和机构提供了许多全新的赚钱机会。入局 Web3.0 赚钱主要有以下几种途径,根据你的技术背景、资金能力和时间投入可以选择适合自己的方式。 目录 一、普通用户赚钱方式(门槛低) 1. …

linux入门 相关linux系统操作命令(二)--文件管理系统 ubuntu22.04

以下有免费的4090云主机提供ubuntu22.04系统的其他入门实践操作 地址&#xff1a;星宇科技 | GPU服务器 高性能云主机 云服务器-登录 相关兑换码星宇社区---4090算力卡免费体验、共享开发社区-CSDN博客 兑换码要是过期了&#xff0c;可以私信我获取最新兑换码&#xff01;&a…

Python-初学openCV——图像预处理(二)

目录 一、图像仿射变换 1、基本性质 二、cv2.warpAffine() 函数 1、图像旋转 2、图像平移 3、图像缩放 4、图像剪切 三、 插值方法 1、最近邻插值 2、双线性插值 3、像素区域插值 4、双三次插值 5、Lanczos插值 一、图像仿射变换 仿射变换&#xff08;Affine Tr…

医疗AI轻量化部署方案的深度梳理与优化路径判研

摘要 医疗AI的快速发展为精准诊断、个性化治疗和医疗资源优化提供了新机遇。然而,大规模模型的高计算复杂度和资源需求限制了其在资源受限环境(如边缘设备、基层医疗机构)的应用。本文系统梳理了医疗AI轻量化部署的核心技术体系,包括模型压缩、参数高效微调(PEFT)、边缘-…