1. 首页 > 快讯

Java基础之总结

在前面的文章中,我们从Java的基础语法,数据类型,流程控制,日期时间,到Java的面向对象,使用类来映射现实中的事物。Java的基础知识,基本上已经学完了。

今天我们就以前面所学的内容,来编写一个学校的学生信息管理系统,便于学校管理学生信息。

既然是学生信息管理系统,那就肯定有登记、修改、删除、查询等操作。

一、基于面向对象来使用Java的POJO类映射现实的学生对象

packagecom.xing.parent.test.student; importjava.time.LocalDate; /***  学生类*@authorxing*@createTime*/publicclassStudent{privateString id;privateString name;privateintage;privateString className;privateLocalDate enrollmentDate;publicStudent(String id, String name,intage, String className, LocalDate enrollmentDate){this.id = id;this.name = name;this.age = age;this.className = className;this.enrollmentDate = enrollmentDate;}publicStringgetId(){returnid;}publicvoidsetId(String id){this.id = id;}publicStringgetName(){returnname;}publicvoidsetName(String name){this.name = name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age = age;}publicStringgetClassName(){returnclassName;}publicvoidsetClassName(String className){this.className = className;}publicLocalDategetEnrollmentDate(){returnenrollmentDate;}publicvoidsetEnrollmentDate(LocalDate enrollmentDate){this.enrollmentDate = enrollmentDate;}@OverridepublicStringtoString(){return"Student:[id:"+ id +", 名字:"+ name +", 年龄:"+ age +", 班级:"+ className +", 入学日期:"+ enrollmentDate +"]";}}

可以看到学生Student类拥有编号ID、姓名name、年龄age、班级classname、入学时间enrollmentDate等属性,然后将属性private关键来私有化,对外只使用public关键字来暴露对应属性的get和set方法,最后重写了继承自Object类的toString()方法来自定义输出格式。

二、编写学生管理系统

package com.xing.parent.test.student; import java.time.LocalDate;import java.util.ArrayList;import java.util.List;import java.util.Scanner; public class StudentInformationSystem {private static final List<Student> students = new ArrayList<>();public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (true) {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. 退出"); String input = scanner.nextLine().trim(); switch (input) {case "1":addStudent(scanner);break;case "2":listStudents();break;case "3":findStudent(scanner);break;case "4":updateStudent(scanner);break;case "5":deleteStudent(scanner);break;case "6":System.out.println("退出系统。");return;default:System.out.println("无效的选择,请重新选择。");}}} private static void addStudent(Scanner scanner) {System.out.print("请输入学生ID:");String id = readNotEmptyString(scanner);if (findStudentById(id) != null) {System.out.println("该ID已存在,请使用其他ID。");return;}System.out.print("请输入学生姓名:");String name = readNotEmptyString(scanner);System.out.print("请输入学生年龄:");int age = readNotEmptyInt(scanner);System.out.print("请输入学生班级:");String className = readNotEmptyString(scanner);System.out.print("请输入学生入学日期(年-月-日):");LocalDate enrollmentDate = readNotEmptyDate(scanner); Student student = new Student(id, name, age, className, enrollmentDate);students.add(student);System.out.println("学生信息添加成功!");} private static void listStudents() {System.out.println("本校当前有【"+students.size()+"】个学生。学生信息如下:");if (students.isEmpty()) {System.out.println("没有学生信息。");return;}for (Student student : students) {System.out.println(student);}} private static Student findStudentById(String id) {for (Student student : students) {if (student.getId().equals(id)) {return student;}}return null;} private static void findStudent(Scanner scanner) {System.out.print("请输入要查找的学生ID:");String id = scanner.nextLine().trim();Student student = findStudentById(id);if (student != null) {System.out.print("找到学生信息:");System.out.println(student);} else {System.out.println("没有找到该ID的学生。");}} private static void updateStudent(Scanner scanner) {System.out.print("请输入要更新的学生ID:");String id = scanner.nextLine().trim();Student student = findStudentById(id);if (student != null) {System.out.print("请输入新的学生姓名(留空保持不变):");String name = scanner.nextLine().trim();student.setName(name.isEmpty() ? student.getName() : name);System.out.print("请输入新的学生年龄(-1保持不变):");String ageInput = scanner.nextLine().trim();student.setAge(ageInput.isEmpty() || ageInput.equals("-1") ? student.getAge() : Integer.parseInt(ageInput));System.out.print("请输入新的学生班级(留空保持不变):");String className = scanner.nextLine().trim();student.setClassName(className.isEmpty() ? student.getClassName() : className);System.out.print("请输入新的学生入学日期(年-月-日,留空保持不变):");String enrollmentDate = scanner.nextLine().trim();student.setEnrollmentDate(enrollmentDate.isEmpty() ? student.getEnrollmentDate() : LocalDate.parse(enrollmentDate));System.out.println("学生信息更新成功!");}else {System.out.println("没有找到该ID的学生。");}} private static void deleteStudent(Scanner scanner) {System.out.print("请输入要删除的学生ID:");String id = scanner.nextLine().trim();Student toRemove = findStudentById(id);if (toRemove != null) {students.remove(toRemove);System.out.println("学生信息删除成功!");} else {System.out.println("没有找到该ID的学生。");}} private static String readNotEmptyString(Scanner scanner) {String input;while ((input = scanner.nextLine().trim()).isEmpty()) {System.out.print("输入不能为空,请重新输入:");}return input;} private static int readNotEmptyInt(Scanner scanner) {while (!scanner.hasNextInt()) {System.out.print("请输入一个有效的整数:");scanner.nextLine(); // Consume the invalid input}return scanner.nextInt();} private static LocalDate readNotEmptyDate(Scanner scanner) {LocalDate date;while (true) {try {date = LocalDate.parse(scanner.nextLine().trim());break;} catch (Exception e) {System.out.println("请输入一个有效的日期(年-月-日):");}}return date;}}

代码中我们使用流程控制来进行判断逻辑,使用java.util.Scanner下提供的newScanner(System.in)来获取到控制台输入的数据信息,最终将信息添加到了定义好的ArrayList中以保存到系统的内存中。


说明:

private static final List<Student> students = new ArrayList<>();

final关键字实现了以下几点功能:

  1. 不可变引用:final关键字确保了students变量的引用是不可变的,即它指向的ArrayList实例在创建后不能被改变。

  2. 静态成员:students是一个静态成员变量,这意味着它被类本身所拥有,而不是被类的实例所拥有。静态成员变量可以被类的所有实例共享,并且只有一个副本。

  3. 初始化:final关键字与static关键字结合使用,表明students变量在类加载时被初始化,并且只被初始化一次。这意味着无论创建了多少个类的实例,students变量的引用始终指向同一个ArrayList实例。

try{}catch(Exception e){}这是捕捉异常的语句,后面我们会学到的,现在只要知道是捉住了代码运行中因为没有输入规范的日期而导致代码报错的异常,捕捉处理了就行了。

因为这个是保存到了内存中,只要重启main方法清空内存保存的学生信息就丢失了。以后学了数据库存到库里,就可以实现持久化了。

可以玩耍一下,还蛮好玩。

三、运行


本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/3297.html

联系我们

在线咨询:点击这里给我发消息

微信号:666666