学生管理系统(java)

1.前期准备

(1)新建java项目

(2)新建java软件包以及三个文件Student.java,Student.txt,StuSystem.java

Student.java
package student_management_system;public class Student {private String id;private String name;private int age;private String address;public Student(){}public Student(String id,String name,int age,String address){this.id=id;this.name=name;this.age=age;this.address=address;}public String getId() {return id;}public void setId(String id) {this.id = id;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}}
StuSystem.java
package student_management_system;import java.io.*;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Scanner;public class StuSystem {public static void saveStudentsToFile(ArrayList<Student> list,String file) { //保存文件
//        每次调用 saveStudentsToFile 方法时,都会覆盖 Student.txt 文件中的现有内容。
//        如果你希望在文件末尾追加内容,可以在 FileWriter 构造函数中传递一个额外的 true 参数,以启用追加模式。
//        new FileWriter("Student.txt", true)try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {writer.write(String.format("%-10s\t%-15s\t%-5s\t%-30s\n", "id", "姓名", "年龄", "家庭住址"));for (Student stu : list) {writer.write(String.format("%-10s\t%-15s\t%-5s\t%-30s\n", stu.getId(), stu.getName(), stu.getAge(), stu.getAddress()));}} catch (IOException e) {e.printStackTrace();}}public static ArrayList<Student> loadStudentsFromFile(String file) {ArrayList<Student> list = new ArrayList<>();try (BufferedReader reader = new BufferedReader(new FileReader(file))) {String line;// 跳过标题行reader.readLine();while ((line = reader.readLine()) != null) {// 使用正则表达式 \s+ 来匹配一个或多个空格作为分隔符String[] data = line.split("\\s+");if (data.length == 4) {Student student = new Student(data[0], data[1], Integer.parseInt(data[2]), data[3]);list.add(student);}}} catch (IOException e) {e.printStackTrace();}return list;}public static void main(String[] args) {// 打印当前的工作目录System.out.println("Current working directory: " + System.getProperty("user.dir"));ArrayList<Student> list=new ArrayList<>();String file="./src/student_management_system/Student.txt";list=loadStudentsFromFile(file);boolean flag=true;while (flag) {System.out.println("------------欢迎来到学生管理系统------------");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.println("请输入您的选择:");Scanner sc=new Scanner(System.in);String choose=sc.next();switch(choose){case "1" -> {System.out.println("添加学生");addStudent(list);break;}case "2" -> {System.out.println("删除学生");deleteStudent(list);break;}case "3" -> {System.out.println("修改学生");updateStudent(list);break;}case "4" -> {System.out.println("查询某个学生");findOneStudent(list);break;}case "5" -> {System.out.println("查询全部学生");query_allStudent(list);break;}case "6" -> {System.out.println("退出");saveStudentsToFile(list,file); // 保存到文件flag=false;break;}default -> System.out.println("没有这个选项");}}}public static void addStudent(ArrayList<Student> list){Scanner sc=new Scanner(System.in);String id= null;while (true) {System.out.println("请输入学生的id");id = sc.next();int a=getIndex(list,id);if(a==-1) break;else System.out.println("这个学生的id已存在,请重新输入!");}System.out.println("请输入学生的name");String name=sc.next();System.out.println("请输入学生的age");int age=sc.nextInt();System.out.println("请输入学生的address");String address=sc.next();Student student=new Student(id,name,age,address);list.add(student);System.out.printf("学号为%s的学生已成功添加!\n",id);}public static void deleteStudent(ArrayList<Student> list){Scanner sc=new Scanner(System.in);while (true) {System.out.println("请输入学生的id");String id=sc.next();int a=getIndex(list,id);if (a==-1) System.out.println("这个学生id不存在,请重新输入!");else{list.remove(a);System.out.printf("学号为%s的学生已成功删除!\n",id);break;}}}public static void updateStudent(ArrayList<Student> list){Scanner sc=new Scanner(System.in);while (true) {System.out.println("请输入学生的id");String id=sc.next();int a=getIndex(list,id);if (a==-1) System.out.println("这个学生id不存在,请重新输入!");else{System.out.println("请输入学生的name");String name=sc.next();System.out.println("请输入学生的age");int age=sc.nextInt();System.out.println("请输入学生的address");String address=sc.next();Student student=new Student(id,name,age,address);list.set(a,student);System.out.printf("学号为%s的学生已成功修改!\n",id);break;}}}public static void findOneStudent(ArrayList<Student> list){Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入学生的id");String id = sc.next();int a = getIndex(list, id);if (a == -1) {System.out.println("这个学生id不存在,请重新输入!");} else {Student stu = list.get(a);
// %-5s 表示输出一个字符串,并且这个字符串应该左对齐,至少占用5个字符的宽度。如果字符串长度小于5,那么右边会用空格填充;System.out.printf("学号为%s的学生的信息已成功查询到!\n", id);System.out.printf("%-10s\t%-15s\t%-5s\t%-30s\n", "id", "姓名", "年龄", "家庭住址");System.out.printf("%-10s\t%-15s\t%-5s\t%-30s\n", stu.getId(), stu.getName(), stu.getAge(), stu.getAddress());break;}}}public static void query_allStudent(ArrayList<Student> list){if(list.isEmpty()){System.out.println("当前无学生信息,请添加后再查询!");return;}System.out.printf("%-10s\t%-15s\t%-5s\t%-30s\n", "id", "姓名", "年龄", "家庭住址");for(int i = 0; i < list.size(); i++){Student stu = list.get(i);System.out.printf("%-10s\t%-15s\t%-5s\t%-30s\n", stu.getId(), stu.getName(), stu.getAge(), stu.getAddress());}}public static int getIndex(ArrayList<Student> list,String id){for(int i=0;i<list.size();i++){Student student=list.get(i);String sid=student.getId();if(sid.equals(id)){return i;}}return -1;   //如果查找的学生id不存在时返回-1}}

2.StuSystem.java的函数

(1)主函数main()

public static void main(String[] args) {// 打印当前的工作目录System.out.println("Current working directory: " + System.getProperty("user.dir"));ArrayList<Student> list=new ArrayList<>();String file="./src/student_management_system/Student.txt";list=loadStudentsFromFile(file);boolean flag=true;while (flag) {System.out.println("------------欢迎来到学生管理系统------------");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.println("请输入您的选择:");Scanner sc=new Scanner(System.in);String choose=sc.next();switch(choose){case "1" -> {System.out.println("添加学生");addStudent(list);break;}case "2" -> {System.out.println("删除学生");deleteStudent(list);break;}case "3" -> {System.out.println("修改学生");updateStudent(list);break;}case "4" -> {System.out.println("查询某个学生");findOneStudent(list);break;}case "5" -> {System.out.println("查询全部学生");query_allStudent(list);break;}case "6" -> {System.out.println("退出");saveStudentsToFile(list,file); // 保存到文件flag=false;break;}default -> System.out.println("没有这个选项");}}}

(2)添加学生

public static void addStudent(ArrayList<Student> list){Scanner sc=new Scanner(System.in);String id= null;while (true) {System.out.println("请输入学生的id");id = sc.next();int a=getIndex(list,id);if(a==-1) break;else System.out.println("这个学生的id已存在,请重新输入!");}System.out.println("请输入学生的name");String name=sc.next();System.out.println("请输入学生的age");int age=sc.nextInt();System.out.println("请输入学生的address");String address=sc.next();Student student=new Student(id,name,age,address);list.add(student);System.out.printf("学号为%s的学生已成功添加!\n",id);}

(3)删除学生

public static void deleteStudent(ArrayList<Student> list){Scanner sc=new Scanner(System.in);while (true) {System.out.println("请输入学生的id");String id=sc.next();int a=getIndex(list,id);if (a==-1) System.out.println("这个学生id不存在,请重新输入!");else{list.remove(a);System.out.printf("学号为%s的学生已成功删除!\n",id);break;}}}

(4)修改学生

public static void updateStudent(ArrayList<Student> list){Scanner sc=new Scanner(System.in);while (true) {System.out.println("请输入学生的id");String id=sc.next();int a=getIndex(list,id);if (a==-1) System.out.println("这个学生id不存在,请重新输入!");else{System.out.println("请输入学生的name");String name=sc.next();System.out.println("请输入学生的age");int age=sc.nextInt();System.out.println("请输入学生的address");String address=sc.next();Student student=new Student(id,name,age,address);list.set(a,student);System.out.printf("学号为%s的学生已成功修改!\n",id);break;}}}

(5)查询某个学生

public static void findOneStudent(ArrayList<Student> list){Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入学生的id");String id = sc.next();int a = getIndex(list, id);if (a == -1) {System.out.println("这个学生id不存在,请重新输入!");} else {Student stu = list.get(a);
// %-5s 表示输出一个字符串,并且这个字符串应该左对齐,至少占用5个字符的宽度。如果字符串长度小于5,那么右边会用空格填充;System.out.printf("学号为%s的学生的信息已成功查询到!\n", id);System.out.printf("%-10s\t%-15s\t%-5s\t%-30s\n", "id", "姓名", "年龄", "家庭住址");System.out.printf("%-10s\t%-15s\t%-5s\t%-30s\n", stu.getId(), stu.getName(), stu.getAge(), stu.getAddress());break;}}}

(6)查询全部学生

public static void query_allStudent(ArrayList<Student> list){if(list.isEmpty()){System.out.println("当前无学生信息,请添加后再查询!");return;}System.out.printf("%-10s\t%-15s\t%-5s\t%-30s\n", "id", "姓名", "年龄", "家庭住址");for(int i = 0; i < list.size(); i++){Student stu = list.get(i);System.out.printf("%-10s\t%-15s\t%-5s\t%-30s\n", stu.getId(), stu.getName(), stu.getAge(), stu.getAddress());}}

(7)根据学生id来查找学生信息在数组序列list中的索引

                //如果查找的学生id不存在时返回-1
public static int getIndex(ArrayList<Student> list,String id){for(int i=0;i<list.size();i++){Student student=list.get(i);String sid=student.getId();if(sid.equals(id)){return i;}}return -1;   //如果查找的学生id不存在时返回-1}

(8)保存数据到文件(以覆盖写的方式)

public static void saveStudentsToFile(ArrayList<Student> list,String file) { //保存文件
//        每次调用 saveStudentsToFile 方法时,都会覆盖 Student.txt 文件中的现有内容。
//        如果你希望在文件末尾追加内容,可以在 FileWriter 构造函数中传递一个额外的 true 参数,以启用追加模式。
//        new FileWriter("Student.txt", true)try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {writer.write(String.format("%-10s\t%-15s\t%-5s\t%-30s\n", "id", "姓名", "年龄", "家庭住址"));for (Student stu : list) {writer.write(String.format("%-10s\t%-15s\t%-5s\t%-30s\n", stu.getId(), stu.getName(), stu.getAge(), stu.getAddress()));}} catch (IOException e) {e.printStackTrace();}}

(9)从文件读取数据

public static ArrayList<Student> loadStudentsFromFile(String file) {ArrayList<Student> list = new ArrayList<>();try (BufferedReader reader = new BufferedReader(new FileReader(file))) {String line;// 跳过标题行reader.readLine();while ((line = reader.readLine()) != null) {// 使用正则表达式 \s+ 来匹配一个或多个空格作为分隔符String[] data = line.split("\\s+");if (data.length == 4) {Student student = new Student(data[0], data[1], Integer.parseInt(data[2]), data[3]);list.add(student);}}} catch (IOException e) {e.printStackTrace();}return list;}

3.运行测试

(1)添加学生

(2)删除学生

 

 

(3)修改学生

 

4.补充笔记

(1)建议收藏的网站

网站:Java 教程 | 菜鸟教程

(2)ArrayList请问这个类型允许重复值吗

在 Java 中,`ArrayList` 是一个允许重复元素的集合类型。它实现了 `List` 接口,可以包含重复的元素,并且没有限制元素必须唯一。这意味着你可以在同一个 `ArrayList` 实例中多次添加同一个对象。

例如,如果你有一个 `ArrayList<Student>`,你可以添加多个 `Student` 对象,包括具有相同属性的 `Student` 对象。这里是如何添加重复元素到 `ArrayList` 的一个简单示例:

```java
ArrayList<Student> students = new ArrayList<>();
Student student1 = new Student("001", "Alice", 20, "123 Main St");
Student student2 = new Student("002", "Bob", 22, "456 Elm St");

// 添加学生到列表
students.add(student1);
students.add(student2);
students.add(student1); // 再次添加 student1,这将导致列表中有重复的元素

// 打印列表中的所有学生
for (Student student : students) {
    System.out.println(student);
}
```

在这个例子中,`student1` 被添加了两次,所以在 `ArrayList` 中会有重复的元素。

如果你需要一个不允许重复元素的集合,你可以考虑使用 `Set` 接口的实现,如 `HashSet` 或 `LinkedHashSet`。这些集合类型不允许重复元素,如果尝试添加一个已经存在的元素,它将被忽略。例如:

```java
Set<Student> studentsSet = new HashSet<>();
studentsSet.add(student1);
studentsSet.add(student2);
// studentsSet.add(student1); // 这将不会添加重复的 student1
```

请注意,使用 `Set` 时,元素的相等性是通过 `equals()` 方法来判断的,所以你需要确保你的 `Student` 类正确地实现了 `equals()` 和 `hashCode()` 方法,以便 `Set` 能够正确地识别重复的元素。
 

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

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

相关文章

JavaWeb学习(2)(Cookie原理(超详细)、HTTP无状态)

目录 一、HTTP无状态。 &#xff08;1&#xff09;"记住我"&#xff1f; &#xff08;2&#xff09;HTTP无状态。 &#xff08;3&#xff09;信息存储客户端中。如何处理&#xff1f; 1、loaclStorage与sessionStorage。 2、Cookie。 二、Cookie。 &#xff08;1&…

SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪

SpringBoot教程&#xff08;三十二&#xff09; | SpringBoot集成Skywalking链路跟踪 一、Skywalking是什么&#xff1f;二、Skywalking与JDK版本的对应关系三、Skywalking下载四、Skywalking 数据存储五、Skywalking 的启动六、部署探针 前提&#xff1a; Agents 8.9.0 放入 …

flask创建templates目录存放html文件

首先&#xff0c;创建flask项目&#xff0c;在pycharm中File --> New Project&#xff0c;选择Flask项目。 然后&#xff0c;在某一目录下&#xff0c;新建名为templates的文件夹&#xff0c;这时会是一个普通的文件夹。 然后右击templates文件夹&#xff0c;选择Unmark as …

Java进阶(注解,设计模式,对象克隆)

Java进阶(注解&#xff0c;设计模式&#xff0c;对象克隆) 一. 注解 1.1 什么是注解 java中注解(Annotation)&#xff0c;又称java标注&#xff0c;是一种特殊的注释 可以添加在包&#xff0c;类&#xff0c;成员变量&#xff0c;方法&#xff0c;参数等内容上 注解会随同…

部署loki,grafana 以及springcloud用法举例

文章目录 场景docker 部署grafanadocker-compose部署loki维护配置文件 local-config.yaml维护docker-compose.yml配置启动 grafana 添加loki数据源springcloud用法举例查看loki的explore,查看日志 场景 小公司缺少运维岗位&#xff0c;需要研发自己部署日志系统&#xff0c;elk…

keil报错---connection refused due to device mismatch

解决办法如下&#xff1a; 记得改成1 把Enable取消

第三节、电机定速转动【51单片机-TB6600驱动器-步进电机教程】

摘要&#xff1a;本节介绍用定时器定时的方式&#xff0c;精准控制脉冲时间&#xff0c;从而控制步进电机速度 一、计算过程 1.1 电机每一步的角速度等于走这一步所花费的时间&#xff0c;走一步角度等于步距角&#xff0c;走一步的时间等于一个脉冲的时间 w s t e p t … ……

vue中pdf.js的使用,包括pdf显示,跳转指定页面,高亮关键词

目录 一、下载pdf.js 二、引入到本地的项目中 三、实现预览pdf 四、跳转到指定页面 五、利用pdf里面的find查找关键词 六、修改页面大小为实际大小 一、下载pdf.js https://github.com/mozilla/pdf.js 里面有很多的版本&#xff0c; 高版本的可能浏览器不兼容或者还要考…

Qt 小项目 学生管理信息系统

主要是对数据库的增删查改的操作 登录/注册界面&#xff1a; 主页面&#xff1a; 添加信息&#xff1a; 删除信息&#xff1a; 删除第一行&#xff08;支持多行删除&#xff09; 需求分析&#xff1a; 用QT实现一个学生管理信息系统&#xff0c;数据库为MySQL 要求&#xf…

“量子跃迁与数据织网:深入探索K最近邻算法在高维空间中的优化路径、神经网络融合技术及未来机器学习生态系统的构建“

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

硬件选型规则

光源选型: 先用型号中带H的&#xff0c;没有的选标准的. 光源和光源控制器的搭配需要确保接口一致。 根据型号表中的最佳工作距离和相机的尺寸。 光源控制器选型&#xff1a; 首先选择海康风格系列光源控制器考虑与光源的接口匹配。功率应该满足接近光源功率。检查是否退市…

【计算机网络】 —— 数据链路层(壹)

文章目录 前言 一、概述 1. 基本概念 2. 数据链路层的三个主要问题 二、封装成帧 1. 概念 2. 帧头、帧尾的作用 3. 透明传输 4. 提高效率 三、差错检测 1. 概念 2. 奇偶校验 3. 循环冗余校验CRC 1. 步骤 2. 生成多项式 3. 例题 4. 总结 四、可靠传输 1. 基本…

golang实现简单的redis服务

golang 手搓redis服务器仓库地址:实现思路: golang 手搓redis服务器 仓库地址: 仓库: https://github.com/dengjiayue/my-redis.git 实现思路: ● 协议: tcp通信 ● 数据包: 长度(4byte)方法(1byte)数据json ● 数据处理: 单线程map读写 ○ 依次处理待处理队列的请求(chan)…

智慧银行反欺诈大数据管控平台方案(八)

智慧银行反欺诈大数据管控平台的核心理念&#xff0c;在于通过整合先进的大数据技术、算法模型和人工智能技术&#xff0c;构建一个全面、智能、动态的反欺诈管理框架&#xff0c;以实现对金融交易的全方位监控、欺诈行为的精准识别和高效处理。这一理念强调数据驱动决策&#…

3D 生成重建019-LERF用文本在Nerf中开启上帝之眼

3D 生成重建019-LERF用文本在Nerf中开启上帝之眼 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 人类利用自然语言描述物理世界&#xff0c;根据各种特性&#xff08;视觉外观、语义、抽象关联&#xff09;寻找具体的3D位置。在这项工作中&#xff0c;作者提出了语言嵌…

如何选择合适的期刊投稿?从课题组经验到在线工具的使用全解析

~~~本文是作者个人的经验分享&#xff0c;建立在导师让自己选刊的情况下~~~ 投稿选刊是科研过程中至关重要的一步&#xff0c;选刊过程可能让许多初投稿的研究者感到迷茫和困惑&#xff1a;期刊那么多&#xff0c;如何找到最合适的&#xff1f; 本文将从多个角度介绍如何选择投…

.NET MAUI与.NET for Android/IOS的关系

2024年11月13日微软发布了.Net9.0,我打算体验一下。安装好.Net9.0 SDK后发现Visual Studio识别不到9.0&#xff0c;但是通过命令行dotnet --info查看是正常的&#xff0c;后面看到了VS有版本可以升级&#xff0c;把VS升级到17.12.0就可以了。更新完打开以后看到如下界面 这里…

【vivado】时序报告--best时序和worst时序

利用vivado进行开发时&#xff0c;生成best时序报告和worst时序报告。 best时序报告 slow选择min_max&#xff0c;fast选择none。 worst时序报告 fast选择min_max&#xff0c;slow选择none。

FastAPI 响应状态码:管理和自定义 HTTP Status Code

FastAPI 响应状态码&#xff1a;管理和自定义 HTTP Status Code 本文介绍了如何在 FastAPI 中声明、使用和修改 HTTP 状态码&#xff0c;涵盖了常见的 HTTP 状态码分类&#xff0c;如信息响应&#xff08;1xx&#xff09;、成功状态&#xff08;2xx&#xff09;、客户端错误&a…

第P1周:Pytorch实现mnist手写数字识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标 1. 实现pytorch环境配置 2. 实现mnist手写数字识别 3. 自己写几个数字识别试试具体实现 &#xff08;一&#xff09;环境 语言环境&#xff1a;Python…