Python构建学生信息管理系统:前端页面开发

Python构建学生信息管理系统:前端页面开发

在本系列博客的前几篇中,我们详细介绍了学生信息管理系统(SIMS)的需求分析、环境搭建、工程初始化、数据库设计、后端逻辑以及安全设计。在本文中,我们将专注于前端页面的开发,包括学生信息的展示、搜索以及增删改操作。

学生信息列表页面

首先,我们将创建一个学生信息列表页面,该页面将展示所有学生的信息,并提供搜索、添加、编辑和删除功能。

HTML模板(templates/students.html)

<!-- templates/students.html -->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Student List</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
</head>
<body>
    <h1>Student List</h1>
    <input type="text" id="searchInput" placeholder="Search by name...">
    <button onclick="searchStudents()">Search</button>
    <table id="studentsTable">
        <thead>
            <tr>
                <th>ID</th>
                <th>First Name</th>
                <th>Last Name</th>
                <th>Class ID</th>
                <th>Email</th>
                <th>Actions</th>
            </tr>
        </thead>
        <tbody>
            <!-- 学生信息将通过JavaScript动态插入 -->
        </tbody>
    </table>
    <script src="{{ url_for('static', filename='js/students.js') }}"></script>
</body>
</html>

CSS样式(static/css/style.css)

/* static/css/style.css */

body {
    font-family: Arial, sans-serif;
}

table {
    width: 100%;
    border-collapse: collapse;
}

table, th, td {
    border: 1px solid #ddd;
}

th, td {
    padding: 10px;
    text-align: left;
}

th {
    background-color: #f2f2f2;
}

tr:nth-child(even) {
    background-color: #f9f9f9;
}

input[type="text"] {
    margin-bottom: 20px;
    padding: 10px;
    width: 200px;
}

button {
    padding: 10px 20px;
    cursor: pointer;
}

JavaScript逻辑(static/js/students.js)

// static/js/students.js

function fetchStudents() {
    fetch('/students')
    .then(response => response.json())
    .then(data => {
        const tableBody = document.getElementById('studentsTable').getElementsByTagName('tbody')[0];
        tableBody.innerHTML = ''; // 清空表格
        data.students.forEach(student => {
            const row = tableBody.insertRow();
            row.insertCell(0).textContent = student.StudentID;
            row.insertCell(1).textContent = student.FirstName;
            row.insertCell(2).textContent = student.LastName;
            row.insertCell(3).textContent = student.ClassID;
            row.insertCell(4).textContent = student.Email;
            const actionsCell = row.insertCell(5);
            actionsCell.innerHTML = `
                <button οnclick="editStudent(${student.StudentID})">Edit</button>
                <button οnclick="deleteStudent(${student.StudentID})">Delete</button>
            `;
        });
    })
    .catch(error => console.error('Error fetching students:', error));
}

function searchStudents() {
    const searchTerm = document.getElementById('searchInput').value;
    fetch(`/students?search=${searchTerm}`)
    .then(response => response.json())
    .then(data => {
        const tableBody = document.getElementById('studentsTable').getElementsByTagName('tbody')[0];
        tableBody.innerHTML = ''; // 清空表格
        data.students.forEach(student => {
            // 插入学生信息到表格
            // 代码与 fetchStudents 函数中的类似
        });
    })
    .catch(error => console.error('Error searching students:', error));
}

function editStudent(studentID) {
    // 打开编辑学生信息的模态框或页面
    // 可以通过JavaScript打开一个新的页面或模态框,并填充当前学生的信息
}

function deleteStudent(studentID) {
    // 发送删除请求到服务器
    fetch(`/students/${studentID}`, {
        method: 'DELETE'
    })
    .then(response => {
        if (response.ok) {
            fetchStudents(); // 更新学生列表
        } else {
            alert('Error deleting student.');
        }
    })
    .catch(error => console.error('Error deleting student:', error));
}

// 当文档加载完成时,获取学生列表
document.addEventListener('DOMContentLoaded', fetchStudents);

学生信息编辑页面

编辑页面将允许用户更新现有学生的信息。这个页面可以是模态框内的表单,也可以是一个新的页面。

HTML模板(templates/edit_student.html)

<!-- templates/edit_student.html -->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Edit Student</title>
    <!-- 引入CSS样式 -->
</head>
<body>
    <h1>Edit Student</h1>
    <form id="editStudentForm">
        <label for="firstName">First Name:</label>
        <input type="text" id="firstName" name="FirstName" required><br>
        
        <label for="lastName">Last Name:</label>
        <input type="text" id="lastName" name="LastName" required><br>
        
        <!-- 添加其他字段... -->
        
        <button type="submit">Save Changes</button>
    </form>
    <!-- 引入JavaScript逻辑 -->
</body>
</html>

结语

在本文中,我们介绍了学生信息管理系统前端页面的开发过程。通过使用HTML、CSS和JavaScript,我们实现了一个用户友好的界面,允许用户查看、搜索、添加、编辑和删除学生信息。

请注意,为了使前端代码正常工作,需要确保后端API已经正确实现,并且可以处理前端发送的请求。此外,实际部署时,还需要考虑诸如表单验证、错误处理、用户反馈等前端功能。

随着前端页面开发的完成,我们的SIMS项目已经初具雏形。在接下来的博文中,我们将进一步探讨如何将前端与后端结合起来,以及如何进行系统测试和部署。

敬请期待后续内容,一起见证SIMS的诞生与成长!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

聊聊.NET Core处理全局异常有那些方法

简述 处理全局异常的方法有IExceptionFilter&#xff08;异常处理&#xff09;&#xff0c;使用中间件异常处理&#xff0c;使用框架自带异常中间件等。考点 考察对异常处理方式的熟悉程度和广度&#xff0c;以及对中间件、过滤器熟练程度。 下面分别具体介绍三种处理异常的…

让华为设备跟上自动化的步伐,学会Python配置NETCONF,运维不再难!

在当今数字化时代&#xff0c;网络设备的自动化管理已经成为了不可或缺的趋势。对于华为设备的运维人员来说&#xff0c;学会利用Python配置NETCONF已经成为提高工作效率、降低运维成本的必备技能。本文将介绍如何利用Python和NETCONF来实现华为设备的自动化配置&#xff0c;让…

浅谈大数据时代下的电商风控||电商数据API接口

抢抢抢&#xff01;最后1天&#xff0c;双十一直播活动来啦&#xff01;抢直播专属优惠…… 视频号 随着大数据时代的兴起&#xff0c;互联网电商风控已经从无风控、人工抽取规则为主的简易规则模型发展到当前基于大数据的风控。与金融风控不同&#xff0c;互联网电商风控呈现出…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-3

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

红米K40手机刷机详解

了解什么是卡刷、什么是线刷 卡刷&#xff0c;就是把系统包放到你手机的SD卡&#xff0c;这一步&#xff0c;不用手机解BL锁&#xff0c;不用root&#xff0c;直接小米助手下载就可以刷。线刷就是用数据线连接电脑&#xff0c;通过XiaoMiFlash直接刷到手机&#xff0c;这一步权…

K8S深度解析:从入门到精通的全方位指南

目录 一、Kubernetes简介 二、Kubernetes的核心作用 三、Kubernetes架构图例 四、Kubernetes核心概念 Harbor仓库概述&#xff1a; Master----管理组件&#xff1a; API Server&#xff08;集群之心&#xff09;&#xff1a; Scheduler&#xff08;调度大师&…

27.统一网关Gateway-路由断言工厂

在配置文件中写的断言规则只是字符串&#xff0c;这些字符串会被Predicate Factory读取并处理&#xff0c;转变为路由判断的条件。 例如&#xff1a;Path /user/** 是按照路劲匹配&#xff0c;这个规则是由 org.springframework.cloud.gateway.handler.predicate.PathRouteP…

磨煤机液压油站比例放大器

液压系统为磨辊提供随负荷变化而变化的碾压力&#xff0c;其大小由比例溢流阀根据负荷变化的指令信号来控制液压系统的压力来实现。指令信号一般情况下是由给煤机取出的。高压油泵站安装在靠近磨煤机的基础上&#xff0c;加载油缸和蓄能器安装在磨煤机上&#xff0c;三个带蓄能…

Vue入门到关门之计算属性与监听属性

一、计算属性 1、什么是计算属性 计算属性是基于其它属性计算得出的属性&#xff0c;就像Python中的property&#xff0c;可以把方法/函数伪装成属性&#xff0c;在模板中可以像普通属性一样使用&#xff0c;但它们是基于响应式依赖进行缓存的。这意味着只有在依赖的响应式数…

【进阶六】Python实现SDVRPTW(需求拆分)常见求解算法——禁忌搜索+模拟退火算法(TS+SA)

基于python语言&#xff0c;采用经典禁忌搜索&#xff08;TS&#xff09;模拟退火&#xff08;SA&#xff09;对 带硬时间窗的需求拆分车辆路径规划问题&#xff08;SDVRPTW&#xff09; 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整2.1 需求拆分2.2 需求拆分后的服务时…

手机验证码认证轻松搞定,MemFire Cloud 助力应用开发

在当今移动互联网时代&#xff0c;手机验证码认证已成为众多应用必不可少的身份验证方式。然而&#xff0c;对于开发者来说&#xff0c;手机验证码认证的后端工作往往是一项繁琐且耗时的任务。MemFire Cloud提供了一套即用型解决方案&#xff0c;开发者可以轻松解决手机验证码认…

枚举(enum)/共用体(union)/结构体(struct)---详解

前言 C语言包含内置类型和自定义类型。 其实C语言中有内置类型&#xff0c;包含&#xff1a;char,short,int,long,long long,float,double,long double ,这些是C语言本身支持的现成的类型。 但仅仅只有内置类型是远远不够的&#xff0c;在描述一个复杂对象是无法使用内置类型来…

einsum 表达式

Einsun 简介 ein 就是爱因斯坦的ein&#xff0c;sum就是求和。einsum就是爱因斯坦求和约定&#xff0c;其实作用就是把求和符号省略。 B torch.einsum("ij->i", A) einsum接收的第一个参数为einsum表达式&#xff0c;-> 符号就相当于要把->前面的张量变…

求三个字符数组最大者(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h> # include <string.h>int main() {//初始化变量值&#xff1b;int i 0;char str[3][20];char string[20];//循环输入3个字符…

软件测试笔记_习题_面经

软件测试------按测试阶段划分有几个阶段? 单元测试、集成测试、系统测试、验收测试 软件测试------按是否查看源代码划分有几种测试方法? 黑盒、白盒、灰盒 软件测试------按是否运行划分有几种测试方法? 静态测试、动态测试 软件测试------按是否自动化划分有几种测试方…

Android 在attrs.xml添加属性时出现 Found item Attr/****** more than one time

Android 在attrs.xml添加属性时出现 Found item Attr/****** more than one time 问题描述解决办法方式一方式二 小结 问题描述 在Android应用开发过程中&#xff0c;经常需要自定义控件&#xff0c;并且定义控件的属性&#xff0c;方便灵活的修改控件的显示样式&#xff0c;提…

生成对抗网络的无载体信息隐藏算法简介

一、研究背景 随着互联网技术的广泛应用和移动智能设备的快速普及&#xff0c;人们有了更多的途径传播和获取信息。每天海量的数据以视频、音频、图像、文字等各类形式在互联网中产生&#xff0c;这为人们的生活带来了极大的便利&#xff0c;但同时也引起了人们对信息泄露的担…

从零入门区块链和比特币(第三期)

欢迎来到我的区块链与比特币入门指南&#xff01;如果你对区块链和比特币感兴趣&#xff0c;但不知道从何开始&#xff0c;那么你来对地方了。本博客将为你提供一个简明扼要的介绍&#xff0c;帮助你了解这个领域的基础知识&#xff0c;并引导你进一步探索这个激动人心的领域。…

【yolov8算法道路-墙面裂缝检测-汽车车身凹陷-抓痕-损伤检测】

yolo算法道路-墙面裂缝检测-汽车车身凹陷-抓痕-损伤检测 1. yolo算法裂缝检测-汽车车身凹陷-抓痕检测-汽车车身损伤检测2. yolo房屋墙面路面裂缝-发霉-油漆脱落-渗水-墙皮脱落检测3. 水泥墙面裂缝检测 YOLOv8算法是一种先进的目标检测技术&#xff0c;它基于YOLO系列算法的改进…

卓越体验的秘密武器:评测ToDesk云电脑、青椒云、天翼云的稳定性和流畅度

大家好&#xff0c;我是猫头虎。近两年随着大模型的火爆&#xff0c;我们本地环境常常难以满足运行这些大模型的硬件需求。因此&#xff0c;云电脑平台成为了一个理想的解决方案。今天&#xff0c;我将介绍并评测几款主流云电脑产品&#xff1a;ToDesk云电脑、天翼云电脑和青椒…