学生管理系统(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; 高版本的可能浏览器不兼容或者还要考…

OD B卷【连续字母长度】

题目 给定一个字符串&#xff0c;只包含大写字母&#xff0c;求在包含同一字母的子串中&#xff0c;长度第k长的子串的长度&#xff0c;相同字母只取最长的那个子串。 输入描述&#xff1a; 第一行输入一个子串&#xff08;长【1,100】&#xff09;&#xff0c;只包含大写字母…

python中的 Pydantic 框架介绍

Pydantic 框架介绍 Pydantic 是一个用于数据验证和设置管理的 Python 库。它主要通过数据模型类的定义来处理 JSON 数据、解析请求和响应数据&#xff0c;并提供自动化的验证和转换。Pydantic 主要用于处理 Python 类型的安全性和验证&#xff0c;尤其在 FastAPI 等现代 Pytho…

桥接模式和组合模式的区别

桥接模式&#xff08;Bridge Pattern&#xff09;和组合模式&#xff08;Composite Pattern&#xff09;都是结构型设计模式&#xff0c;旨在解决对象结构的复杂性问题&#xff0c;但它们的应用场景和目的有所不同。以下是它们的区别&#xff1a; 1. 定义与目的 桥接模式&…

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

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

14.数据容器-set集合

特点 无序的&#xff0c;元素不重复&#xff0c;自带去重功能。 可以容纳不同类型的元素数据。 # 定义一个空set my_set {} your_set set() my_set {aa, bb, bb, aa} # {aa, bb} print(my_set) 因为set集合是无序的&#xff0c;所以集合不支持下标索引访问。所以set集合…

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

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

硬件选型规则

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

【QNX+Android虚拟化方案】135 - QNX侧如何Dump 88Q5152 MIBS报文计数

【QNX+Android虚拟化方案】135 - QNX侧如何Dump 88Q5152 MIBS报文计数 一、读取 88Q5152 MIBS 计数二、读取 88Q5152 WDT 相关寄存器基于原生纯净代码,自学总结 纯技术分享,不会也不敢涉项目、不泄密、不传播代码文档!!! 本文禁止转载分享 !!! 汇总链接:《【QNX+Andro…

C#核心(15)继承中的构造函数

前言 我们之前学过构造函数是什么东西&#xff0c;今天的内容也和构造函数紧密相关&#xff0c;一个继承了父亲的子类里面构造函数的规则是什么样的&#xff0c;今天内容很简单&#xff0c;请听我慢慢讲来。 基本概念 特点&#xff1a;当申明一个子类时&#xff0c;先执行父…

TVbox源贡献指南

欢迎各路大佬踊跃提PR&#xff0c;分享爬虫代码。 源码仓库地址 https://github.com/lushunming/AndroidCatVodSpider 快速开始 本工程是一个完整的AndroidStudio工程&#xff0c;请你用AS打开编辑。 工程调试完毕后要需要导出生成jar文件配合软件使用&#xff0c;执行根目…

FastAPI快速入门

文章目录 了解FastAPI程序结构第一步&#xff0c;导入FastAPI第二步&#xff0c;创建一个app实例第三步&#xff0c;编写一个 路径操作装饰器第五步、运行开发服务器uvicorn main:app --reload即可访问api链接。符案例 声明路径参数声明路径参数的类型get请求查询参数请求体如何…

云计算.运维.面试题

1、计算机能直接识别的语言( C )。 A、汇编语言 B、自然语言 C、机器语言 D、高级语言 2、应用软件是指( D )。 A、所有能够使用的软件 B、能被各应用单位共同使用的某种软件 C、所有计算机上都应使用的基本软件D、专门为某一应用目的而编制的软件 3、计算机的显示器是一…