初学者如何用Java写一个学生管理系统

先实现学生管理系统的增删改查功能,使用Student类封装学生信息,通过ArrayList存储对象,Scanner接收输入,循环菜单驱动操作,包含添加、查看、查询、修改、删除学生及退出系统,逐步构建基础控制台应用。

初学者如何用java写一个学生管理系统

想用Java做一个学生管理系统,其实并不难。关键是从简单入手,把功能拆解清楚,一步步实现。下面带你从零开始,写一个基础但完整的控制台版学生管理系统。

1. 明确系统基本功能

作为一个初学者项目,先实现最核心的几个功能:

添加学生:输入学号、姓名、年龄查看所有学生:列出当前所有学生信息根据学号查询学生修改学生信息删除学生退出系统

2. 设计学生类(Student)

先创建一个Student类,用来表示学生的基本信息。

public class Student {    private String id;    private String name;    private int age;
public Student() {}public Student(String id, String name, int age) {    this.id = id;    this.name = name;    this.age = age;}// Getter 和 Setter 方法public String getId() {    return id;}public void setId(String id) {    this.id = id;}public String getName() {    return name;}public void setName(String name) {    this.name = name;}public int getAge() {    return age;}public void setAge(int age) {    this.age = age;}@Overridepublic String toString() {    return "学号:" + id + ",姓名:" + name + ",年龄:" + age;}

}

立即学习“Java免费学习笔记(深入)”;

3. 主程序逻辑(StudentManager)

使用ArrayList存储学生对象,Scanner接收用户输入,通过循环展示菜单并处理选择。

import java.util.ArrayList;import java.util.Scanner;

public class StudentManager {public static void main(String[] args) {ArrayList list = new ArrayList();Scanner sc = new Scanner(System.in);while (true) {System.out.println("n--- 学生管理系统 ---");System.out.println("1 添加学生");System.out.println("2 查看所有学生");System.out.println("3 查询学生");System.out.println("4 修改学生");System.out.println("5 删除学生");System.out.println("6 退出");System.out.print("请选择操作:");

        int choice = sc.nextInt();        sc.nextLine(); // 消费换行符        switch (choice) {            case 1:                addStudent(list, sc);                break;            case 2:                showStudents(list);                break;            case 3:                findStudent(list, sc);                break;            case 4:                updateStudent(list, sc);                break;            case 5:                deleteStudent(list, sc);                break;            case 6:                System.out.println("再见!");                sc.close();                return;            default:                System.out.println("输入无效,请重新选择。");        }    }}public static void addStudent(ArrayList list, Scanner sc) {    System.out.print("请输入学号:");    String id = sc.nextLine();    if (findIndexById(list, id) != -1) {        System.out.println("该学号已存在!");        return;    }    System.out.print("请输入姓名:");    String name = sc.nextLine();    System.out.print("请输入年龄:");    int age = sc.nextInt();    sc.nextLine();    Student s = new Student(id, name, age);    list.add(s);    System.out.println("添加成功!");}public static void showStudents(ArrayList list) {    if (list.isEmpty()) {        System.out.println("暂无学生信息。");        return;    }    for (Student s : list) {        System.out.println(s);    }}public static void findStudent(ArrayList list, Scanner sc) {    System.out.print("请输入要查询的学号:");    String id = sc.nextLine();    int index = findIndexById(list, id);    if (index == -1) {        System.out.println("未找到该学生。");    } else {        System.out.println("找到学生:" + list.get(index));    }}public static void updateStudent(ArrayList list, Scanner sc) {    System.out.print("请输入要修改的学生学号:");    String id = sc.nextLine();    int index = findIndexById(list, id);    if (index == -1) {        System.out.println("未找到该学生。");        return;    }    System.out.print("请输入新姓名:");    String name = sc.nextLine();    System.out.print("请输入新年龄:");    int age = sc.nextInt();    sc.nextLine();    Student s = list.get(index);    s.setName(name);    s.setAge(age);    System.out.println("修改成功!");}public static void deleteStudent(ArrayList list, Scanner sc) {    System.out.print("请输入要删除的学生学号:");    String id = sc.nextLine();    int index = findIndexById(list, id);    if (index == -1) {        System.out.println("未找到该学生。");        return;    }    list.remove(index);    System.out.println("删除成功!");}// 根据学号查找索引public static int findIndexById(ArrayList list, String id) {    for (int i = 0; i < list.size(); i++) {        if (list.get(i).getId().equals(id)) {            return i;        }    }    return -1;}

}

立即学习“Java免费学习笔记(深入)”;

4. 运行与测试建议

把这个代码复制到你的IDE中(如IntelliJ IDEA或Eclipse),确保两个类在同一个包里。运行StudentManager类,就可以看到菜单并进行操作了。

每写完一个功能,先测试一下是否正常注意处理重复学号、空列表等边界情况输入时注意nextLine()和nextInt()混用的问题,记得清理缓冲区

基本上就这些。这个系统虽然简单,但涵盖了面向对象、集合、流程控制等Java基础知识点,适合练手。之后你可以考虑加入文件读写保存数据,或者改成图形界面。

以上就是初学者如何用Java写一个学生管理系统的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/74594.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月14日 04:41:01
下一篇 2025年11月14日 05:11:40

相关推荐

  • MongoDB PHP驱动:理解连接行为与认证失败的根源

    本文深入探讨了MongoDB PHP驱动中连接行为的细节,解释了为何在调用find()方法返回Traversable对象后,仍可能遭遇“Authentication failed”错误。核心在于MongoDB\Client构造函数不立即建立连接,认证过程在首次数据操作时才触发。文章提供了解决方案,强…

    好文分享 2025年12月11日
    000
  • 通过URL参数在PHP中传递列表项ID的教程

    本教程详细介绍了如何在PHP Web应用中,通过URL查询参数从一个显示列表的页面(如汽车列表)向目标页面(如预订页面)安全有效地传递特定列表项(如汽车ID)的信息。文章涵盖了如何在HTML链接中嵌入ID以及如何在接收页面使用$_GET超全局变量获取和处理这些ID,并强调了数据验证和安全性的重要性。…

    2025年12月11日 好文分享
    000
  • Web应用中通过URL参数传递动态数据的方法与实践

    本文详细介绍了如何在PHP Web应用中通过URL参数安全高效地传递动态数据,例如从商品列表页将选定商品的ID传递至详情或预订页面。通过修改链接的href属性嵌入参数,并在目标页面使用$_GET超全局变量进行接收,实现页面间的数据交互。教程涵盖了代码示例、数据验证与安全考量,帮助开发者构建功能完善的…

    2025年12月11日
    000
  • 如何为PHP应用选择加密算法?常见加密算法的优缺点与应用场景是什么?

    答案:PHP应用加密需根据数据类型和场景选择算法,密码存储用Bcrypt或Argon2id哈希,敏感数据加密首选AES-256-GCM,密钥交换和签名用RSA或ECC,其中ECC更高效,密钥管理至关重要,避免使用MD5、DES等不安全算法,优先采用password_hash()和openssl扩展实…

    2025年12月11日
    000
  • 解决Fetch发送JSON数据至PHP时$_POST为空的问题

    当JavaScript的fetch API以Content-Type: application/json发送数据到PHP后端时,$_POST变量通常为空。本文将解释这一现象的原因,并提供一个标准的解决方案,即通过file_get_contents(‘php://input’)…

    2025年12月11日
    000
  • jQuery Ajax 加载后 onClick 事件失效的解决方案

    本文旨在解决在使用 jQuery 和 Ajax 动态加载内容后,onClick 事件失效的问题。通常,这是由于事件绑定在初始 DOM 元素上,而 Ajax 加载的新元素没有绑定事件监听器。本文将介绍如何使用事件委托来解决这个问题,确保动态加载的内容也能响应点击事件。 在使用 jQuery 和 Aja…

    2025年12月11日
    000
  • 使用 PHP IMAP 移动邮件并清除已读标记

    本文档旨在指导开发者如何使用 PHP IMAP 函数将邮件移动到其他文件夹,并在移动后将其标记为未读。核心在于理解 IMAP 协议的操作特性,以及调整操作顺序以确保标记的正确应用。通过本文,你将学会如何正确地使用 imap_mail_move 和 imap_clearflag_full 函数实现所需…

    2025年12月11日
    000
  • PHP IMAP邮件操作:移动邮件并清除已读标记的正确姿势

    本文详细探讨了在使用PHP IMAP扩展处理邮件时,如何正确地移动邮件并同时将其标记为未读。核心在于理解IMAP操作的顺序性:必须在邮件被移动出当前文件夹之前,对其进行标记更改,否则后续操作将无法生效。教程提供了正确的操作流程和代码示例,并强调了相关注意事项,以确保邮件处理的准确性和一致性。 理解P…

    2025年12月11日
    000
  • 高精度获取远程API服务器时间的策略与实践

    本文将深入探讨如何通过远程API以毫秒级精度获取并校准服务器时间。面对网络延迟和不确定性,我们将介绍一种基于往返时间(RTT)的实用方法,包括预热连接、精确计时和数据校正。同时,文章还将强调时间同步的重要性,并提供相关最佳实践,以确保系统在分布式环境下的时间一致性和安全性。 在现代分布式系统中,准确…

    2025年12月11日
    000
  • 使用 Fetch 发送 JSON 数据导致 PHP $_POST 为空的解决方案

    问题概述 正如前文摘要所述,当使用 JavaScript 的 fetch API 发送 JSON 数据到 PHP 后端时,可能会遇到 PHP 的 $_POST 数组为空的情况。这通常是由于 PHP 默认的 $_POST 数组只处理 application/x-www-form-urlencoded …

    2025年12月11日
    000
  • PHP处理JavaScript fetch发送JSON数据的正确姿势

    本文旨在解决JavaScript fetch发送JSON数据至PHP时,$_POST数组为空的常见问题。我们将深入探讨HTTP请求体与PHP超全局变量的工作机制,并提供通过读取php://input流并解析JSON数据来正确获取请求体的专业方法,确保PHP后端能够准确处理前端提交的JSON格式数据。…

    2025年12月11日
    000
  • 如何为PHP代码设置访问限制?通过加密实现用户授权访问的配置方法是什么?

    答案:通过密码哈希和会话管理实现用户认证,利用AES加密敏感数据并结合RBAC/PBAC实现细粒度授权,确保只有合法用户才能访问对应资源。 PHP代码的访问限制和用户授权访问,说白了,就是确保只有“对的人”才能“看对的东西”或“做对的事”。通过加密技术,我们主要在两个层面实现:一是用户凭证的安全存储…

    2025年12月11日
    000
  • 优化AJAX数据传输:在PHP中正确处理复杂的JavaScript数组与对象

    本教程旨在解决JavaScript AJAX发送复杂数据(特别是URL编码的数组字符串与其他参数混合)时,PHP后端接收数据格式不符预期的问题。文章将详细介绍两种解决方案:利用PHP的parse_str()函数解析URL编码字符串,以及推荐使用JSON格式进行数据传输,并提供完整的代码示例和最佳实践…

    2025年12月11日
    000
  • 优化AJAX数据传输:在PHP中正确解析数组与复杂数据结构

    在通过AJAX向PHP后端发送复杂数据时,将URL编码的数组字符串作为子字段传递可能导致服务器端无法自动解析为数组。本文将深入探讨这一常见问题,并提供两种解决方案:一是利用PHP内置的parse_str()函数进行服务器端解析,二是推荐使用更通用的客户端JSON编码和服务器端json_decode(…

    2025年12月11日
    000
  • 优化AJAX数据传输:在PHP中正确接收嵌套数组与复杂参数

    本文探讨了在使用AJAX发送复杂数据结构时,如何在PHP后端正确接收和解析嵌套数组。针对JavaScript中将查询字符串格式的数组与其它参数合并发送导致PHP接收为字符串的问题,提供了两种解决方案:一是利用PHP的parse_str函数进行后端解析;二是推荐使用JSON格式进行数据传输,通过JSO…

    2025年12月11日
    000
  • 优化AJAX请求中混合数据类型在PHP后端的处理

    本教程探讨如何在AJAX请求中高效处理混合数据类型,特别是当部分数据以URL编码字符串形式传递时。文章将详细介绍两种解决方案:在PHP后端使用parse_str()函数解析URL编码字符串,以及更推荐的客户端JSON序列化方法,通过json_decode()在服务器端轻松还原数据结构,确保数据完整性…

    2025年12月11日
    000
  • 在Docker Compose中模拟Microsoft登录实现本地开发隔离

    在本地开发环境中集成Microsoft登录功能时,常因回调URL不匹配(AADSTS50011)而遇到挑战,且无法或不便配置Azure AD B2C。本文将介绍如何利用OpenID Connect (OIDC) 模拟服务器,特别是Soluto提供的Docker镜像,在Docker Compose环境…

    2025年12月11日
    000
  • PHP:动态构建多层嵌套数组的递归方法

    本文介绍如何在PHP中将一个扁平数组的元素(或由分隔符连接的字符串)作为键,动态地构建一个多层嵌套的关联数组,并最终赋予一个指定值。通过一个简洁的递归函数,我们能够高效且优雅地实现这一复杂的数组结构转换,适用于需要将路径或层次结构表示为嵌套数组的场景。 挑战:将序列值转换为嵌套哈希键 在php开发中…

    2025年12月11日
    000
  • php中如何操作日期和时间 php日期时间处理函数大全

    PHP处理日期时间应优先使用DateTime对象,因其支持时区转换、精确计算和安全解析;传统函数适用于简单操作,但复杂场景下DateTime更可靠。 PHP中操作日期和时间,核心在于灵活运用其内置的函数集以及更现代、强大的 DateTime 对象体系。无论是解析字符串、格式化输出、进行时间计算,还是…

    2025年12月11日
    000
  • PHP中如何安全地处理用户输入以防止SQL注入?

    使用预处理语句和参数绑定可有效防止SQL注入,核心是将用户输入与SQL代码分离,避免直接拼接,同时推荐使用ORM框架、转义特殊字符及遵循最小权限原则。 处理用户输入,防止SQL注入,这事儿说起来简单,做起来得细心。核心思路就是:别信任任何用户给你的东西,然后想办法把用户输入和SQL语句彻底分开。 预…

    2025年12月11日
    000

发表回复

登录后才能评论
关注微信