一、学生管理系统的业务需求
1.需要有一个学生类,它有四个成员变量:ID 姓名 性别 班级
2.成员变量必须私有化,然后只能通过set方法赋值,通过get方法取值
3.通过set方法赋值时,如果输入的不是规定的内容通过throw抛异常进行处理
4.必须包含无参构造和有参构造方法
5.必须重写toString()方法--能够在输出对象名时不输出地址,而是里面的内容
6.必须重写hashcode()和equals()用来对集合去重
7.使用集合用来存储学生对象,使用集合中的方法去完成对学生对象中内容的操作
8.实现对学生信息的增删改查操作
9.使用对象流将集合中的内容也就是所有的学生对象保存至txt文件中
这里注意:学生类必须实现Serializable,并使设置serialVersionUID一致
10.判断如果输入的类型不是相对应的类型,能够捕获异常并进行处理
11.当用户输入有误时,能够给出提示信息,并让用户重新输入正确的信息
二、学生管理系统的代码演示
1.一共三个.java文件--StudentManage.java --Student.java --StudentException
1.1 Student.java
package com.bianyiit.cast;
import java.io.Serializable;
import java.util.Objects;
public class Student implements Serializable {
private static final long serialVersionUID =1L;
//ID 姓名 性别 班级
private String name;
private int id;
private String classname;
private String sex;
//生成get和set方法
public String getName() {
return name;
}
public void setName(String name) {
if(name.length()<=4){
this.name = name;
}else{
//this.name = "xxx";
throw new StudentException("提示:姓名不符合要求,请重新输入!");
}
}
public int getId() {
return id;
}
public void setId(int id) {
if(id>=1&&id<=100){
this.id = id;
}else{
//this.id = 0;
throw new StudentException("提示:您输入的ID不正确,只允许从0-100,请重新输入!");
}
}
public String getClassname() {
return classname;
}
public void setClassname(String classname) {
if(classname.equals("102")||classname.equals("103")){
this.classname = classname;
}else{
//this.classname = "null";
throw new StudentException("提示:对不起,班级只能输入102/103,请重新输入!");
}
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
if(sex.equals("男")||sex.equals("女")){
this.sex = sex;
}else{
//this.sex = "不明";
throw new StudentException("提示:对不起,性别只能输入男/女,请重新输入!");
}
}
//无参构造方法
public Student() {
}
//有参构造方法
public Student(String name, int id, String classname, String sex) {
this.name = name;
this.id = id;
this.classname = classname;
this.sex = sex;
}
//重写equasls()
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return id == student.id &&
sex == student.sex &&
Objects.equals(name, student.name) &&
Objects.equals(classname, student.classname);
}
//重写hashcode()
@Override
public int hashCode() {
return Objects.hash(name, id, classname, sex);
}
//重写toString()
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", id=" + id +
", classname='" + classname + '\'' +
", sex=" + sex +
'}';
}
}
1.2 StudentException.java
package com.bianyiit.cast;
public class StudentException extends RuntimeException {
String message;
public StudentException(String message){
this.message=message;
}
public void setMessage(String message) {
this.message = message;
}
@Override
public String getMessage() {
return message;
}
}
1.3 StudentManage
package com.bianyiit.cast;
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
public class StudentManage {
public static void main(String[] args) throws Exception {
ArrayList<Student> arr=new ArrayList<Student>(); //使用集合保存学生信息
String filename="D:\\重要代码Demo\\文件IO对象\\学生管理系统\\Student.txt";
while(true){
System.out.println("----Welcome To Student Manage----");
System.out.println("1.查看所有的学生信息");
System.out.println("2.添加学生");
System.out.println("3.删除学生");
System.out.println("4.修改学生");
System.out.println("5.退出系统");
System.out.print("请输入您的选择[num]:");
//扫描器
Scanner sc=new Scanner(System.in);
int i = sc.nextInt();
//通过switch去实现各个功能
switch (i){
case 1:
FindAllStudent(filename);
break;
case 2:
InsertStudent(filename);
break;
case 3:
deleteStu(filename);
break;
case 4:
changeStu(filename);
break;
case 5:
System.out.println("已成功退出系统!!");
System.exit(0); //退出系统
break;
default:
break;
}
}
}
//查找学生信息
public static void FindAllStudent(String filename) throws IOException, ClassNotFoundException {
//从文件中读取存的对象
ObjectInputStream oios = null;
try {
oios = new ObjectInputStream(new FileInputStream(filename));
} catch (IOException e) {
//e.printStackTrace();
}
ArrayList<Student> arr = new ArrayList<Student>();
while(true){
try {
arr = (ArrayList<Student>) oios.readObject();
} catch (Exception e) {
//当出现异常的时候,代表读到末尾了,这是可以将整个读的步骤干掉
//System.out.println("用异常来标识读取对象的结尾:"+e.getClass());
break;
}
}
System.out.println("-------------学生信息显示如下---------------");
System.out.println("学号\t\t姓名\t\t性别\t\t班级\t\t");
//遍历所有的学生对象
for (int i = 0; i < arr.size(); i++) {
Student student = arr.get(i);
System.out.println(student.getId()+"\t\t\t"+student.getName()+"\t\t"+student.getSex()+"\t\t\t"+student.getClassname());
}
System.out.println("-------------------------------------------");
System.out.println();
}
//添加学生信息
public static void InsertStudent(String filename) throws Exception {
ObjectInputStream oios = null;
try {
oios = new ObjectInputStream(new FileInputStream(filename));
//System.out.println(oios);
} catch (IOException e) {
//e.printStackTrace();
}
ArrayList<Student> arr=new ArrayList<Student>();
while(true){
try {
arr = (ArrayList<Student>) oios.readObject();
} catch (Exception e) {
//当出现异常的时候,代表读到末尾了,这是可以将整个读的步骤干掉
//System.out.println("用异常来标识读取对象的结尾:"+e.getClass());
break;
}
}
if(arr.isEmpty()){
/*int idcode; //学号
String name; //姓名
String sex; //性别
String classname; //班级*/
//Scanner sc1=new Scanner(System.in);
Student s=new Student();
System.out.println("请输入您的学号!");
inputIdMethod(s);
System.out.println("请输入您的姓名!");
inputNameMethod(s);
System.out.println("请输入您的性别!");
inputSexMethod(s);
System.out.println("请输入您的班级!");
inputClassNameMethod(s);
//将Student添加进集合中
arr.add(s);
//给出添加成功的提示
System.out.println("添加成功!");
System.out.println();
//将对象信息添加进文件中
ObjectOutputStream ojos=new ObjectOutputStream(new FileOutputStream(filename));
ojos.writeObject(arr);
}else{
Student s=new Student();
int flag=-1; //定义一个标识符 如果遍历完之后已经有该学生的学号则更改flag=1
Scanner sc=new Scanner(System.in);
int idcode=1;
System.out.println("请输入您的学号!");
do{
try {
//Scanner sc=new Scanner(System.in);
idcode = sc.nextInt();
break;
} catch (Exception e) {
//这里如果出异常了,sc里面的内容没有清空,导致会一直循环打印,不会使用输入语句输入
sc.next();
System.out.println("输入的学号不能为String类型的,必须为int类型的");
System.out.println("请再次输入您的学号!");
}
}while(true);
//遍历集合中所有的元素
for (int i = 0; i < arr.size(); i++) {
Student s1 = arr.get(i);
if(s1.getId()==idcode){
flag=1;
break;
}
}
if(flag==1){ //与集合中已有的学生对象进行比较如果学号重复
System.out.println("该学生学号已经存在,不允许添加相同学号的学生!!");
System.out.println();
}else{ //与集合中已有的学生对象进行比较如果学号不重复
//创建一个学生对象
//将学号不相同的学号加入数组
try {
s.setId(idcode);
} catch (StudentException e) {
System.out.println(e.getMessage());
System.out.println();
System.out.println("请重新输入您的学号");
inputIdMethod(s);
}
System.out.println("请输入您的姓名!");
inputNameMethod(s);
System.out.println("请输入您的性别!");
inputSexMethod(s);
System.out.println("请输入您的班级!");
inputClassNameMethod(s);
//将Student添加进集合中
arr.add(s);
//给出添加成功的提示
System.out.println("添加成功!");
System.out.println();
//将对象信息添加进文件中
ObjectOutputStream ojos=new ObjectOutputStream(new FileOutputStream(filename));
ojos.writeObject(arr);
ojos.close();
}
}
}
//删除学生信息
public static void deleteStu(String filename) throws Exception {
//从文件中读取存的对象
ObjectInputStream oios = null;
try {
oios = new ObjectInputStream(new FileInputStream(filename));
} catch (IOException e) {
//e.printStackTrace();
}
ArrayList<Student> arr=new ArrayList<Student>();
while(true){
try {
arr = (ArrayList<Student>) oios.readObject();
oios.close();
} catch (Exception e) {
//当出现异常的时候,代表读到末尾了,这是可以将整个读的步骤干掉
//System.out.println("用异常来标识读取对象的结尾:"+e.getClass());
break;
}
}
//遍历集合
//如果集合里面没有元素
if(arr.isEmpty()){
System.out.println("集合为空,无法进行删除操作!!");
System.out.println();
}else{
int delete=-1; //定义一个标志用来标识需要删除的对象
int flag=-1;
int idcode;
System.out.println("请输入您的学号!");
Scanner sc=new Scanner(System.in);
do{
try {
//Scanner sc=new Scanner(System.in);
idcode = sc.nextInt();
break;
} catch (Exception e) {
//这里如果出异常了,sc里面的内容没有清空,导致会一直循环打印,不会使用输入语句输入
sc.next();
System.out.println("输入的学号不能为String类型的,必须为int类型的");
System.out.println("请再次输入您的学号!");
}
}while(true);
for (int i = 0; i < arr.size(); i++) {
Student s1 = arr.get(i);
if(s1.getId()==idcode){
flag=1;
delete=i;
}
}
if(flag==1){
Student student = arr.get(delete);
arr.remove(student);
System.out.println("已成功删除该学生!!");
System.out.println();
}else{
System.out.println("系统里面不存在该学生,无法删除!!");
System.out.println();
}
//将对象信息添加进文件中
ObjectOutputStream ojos=new ObjectOutputStream(new FileOutputStream(filename));
ojos.writeObject(arr);
ojos.close();
}
}
//修改学生信息
public static void changeStu(String filename) throws Exception {
//从文件中读取存的对象
ObjectInputStream oios = null;
try {
oios = new ObjectInputStream(new FileInputStream(filename));
} catch (IOException e) {
//e.printStackTrace();
}
ArrayList<Student> arr=new ArrayList<Student>();
while(true){
try {
arr = (ArrayList<Student>) oios.readObject();
} catch (Exception e) { //如果为空,直接抛最大的异常跳出,不执行上面那句话就行了
//当出现异常的时候,代表读到末尾了,这是可以将整个读的步骤干掉
//System.out.println("用异常来标识读取对象的结尾:"+e.getClass());
break;
}
}
//遍历集合
//如果集合里面没有元素
if(arr.isEmpty()){
System.out.println("集合为空,无法进行修改操作!!");
System.out.println();
}else{
int delete=-1; //定义一个标志用来标识需要删除的对象
System.out.println("请输入您的学号!");
int flag=-1;
int idcode;
Scanner sc=new Scanner(System.in);
do{
try {
//Scanner sc=new Scanner(System.in);
idcode = sc.nextInt();
break;
} catch (Exception e) {
//这里如果出异常了,sc里面的内容没有清空,导致会一直循环打印,不会使用输入语句输入
sc.next();
System.out.println("输入的学号不能为String类型的,必须为int类型的");
System.out.println("请再次输入您的学号!");
}
}while(true);
for (int i = 0; i < arr.size(); i++) {
Student s1 = arr.get(i);
if(s1.getId()==idcode){
flag=1;
delete=i;
}
}
if(flag==1){
Student student = arr.get(delete);
System.out.print("请输入修改的学生的姓名:");
inputNameMethod(student);
System.out.print("请输入修改的学生的性别:");
inputSexMethod(student);
System.out.print("请输入修改的学生的班级:");
inputClassNameMethod(student);
arr.set(delete,student);
System.out.println("学生信息修改成功!!");
System.out.println();
//将对象信息添加进文件中
ObjectOutputStream ojos=new ObjectOutputStream(new FileOutputStream(filename));
ojos.writeObject(arr);
ojos.close();
}else{
System.out.println("系统里面不存在该学生,无法修改!!");
System.out.println();
}
}
}
//输入学生学号的方法
private static void inputIdMethod(Student s) {
Scanner sc=new Scanner(System.in);
int idcode;
do{
try {
idcode = sc.nextInt();
break;
} catch (Exception e) {
//这里如果出异常了,sc里面的内容没有清空,导致会一直循环打印,不会使用输入语句输入
sc.next();
System.out.println("输入的学号不能为String类型的,必须为int类型的");
System.out.println("请再次输入您的学号!");
}
}while(true);
try {
s.setId(idcode);
//System.out.println(s);
} catch (StudentException e) {
System.out.println(e.getMessage());
System.out.println();
System.out.println("请重新输入您的学号");
inputIdMethod(s);
}
}
//输入学生姓名的方法
private static void inputNameMethod(Student s){
Scanner sc=new Scanner(System.in);
String name;
name = sc.next();
try {
s.setName(name);
//System.out.println(s);
} catch (StudentException e) {
System.out.println(e.getMessage());
System.out.println();
System.out.println("请重新输入您的姓名");
inputNameMethod(s);
}
}
//输入学生性别的方法
private static void inputSexMethod(Student s){
Scanner sc=new Scanner(System.in);
String sex=null;
sex = sc.next();
try {
s.setSex(sex);
//System.out.println(s);
} catch (StudentException e) {
System.out.println(e.getMessage());
System.out.println();
System.out.println("请重新输入您的性别");
inputSexMethod(s);
}
}
//输入学生班级的方法
private static void inputClassNameMethod(Student s){
Scanner sc=new Scanner(System.in);
String classname;
classname = sc.next();
try {
s.setClassname(classname);
//System.out.println(s);
} catch (StudentException e) {
System.out.println(e.getMessage());
System.out.println();
System.out.println("请重新输入您的班级");
inputClassNameMethod(s);
}
}
}
运行与测试
"C:\Program Files\Java\jdk1.8.0_231\bin\java.exe"
----Welcome To Student Manage----
1.查看所有的学生信息
2.添加学生
3.删除学生
4.修改学生
5.退出系统
请输入您的选择[num]:1
-------------学生信息显示如下---------------
学号 姓名 性别 班级
-------------------------------------------
----Welcome To Student Manage----
1.查看所有的学生信息
2.添加学生
3.删除学生
4.修改学生
5.退出系统
请输入您的选择[num]:2
请输入您的学号!
张三
输入的学号不能为String类型的,必须为int类型的
请再次输入您的学号!
-1
提示:您输入的ID不正确,只允许从0-100,请重新输入!
请重新输入您的学号
1
请输入您的姓名!
张三
请输入您的性别!
神
提示:对不起,性别只能输入男/女,请重新输入!
请重新输入您的性别
男
请输入您的班级!
105
提示:对不起,班级只能输入102/103,请重新输入!
请重新输入您的班级
102
添加成功!
----Welcome To Student Manage----
1.查看所有的学生信息
2.添加学生
3.删除学生
4.修改学生
5.退出系统
请输入您的选择[num]:1
-------------学生信息显示如下---------------
学号 姓名 性别 班级
1 张三 男 102
-------------------------------------------
----Welcome To Student Manage----
1.查看所有的学生信息
2.添加学生
3.删除学生
4.修改学生
5.退出系统
请输入您的选择[num]:2
请输入您的学号!
1
该学生学号已经存在,不允许添加相同学号的学生!!
----Welcome To Student Manage----
1.查看所有的学生信息
2.添加学生
3.删除学生
4.修改学生
5.退出系统
请输入您的选择[num]:2
请输入您的学号!
2
请输入您的姓名!
欧阳张三李四
提示:姓名不符合要求,请重新输入!
请重新输入您的姓名
李四
请输入您的性别!
女
请输入您的班级!
103
添加成功!
----Welcome To Student Manage----
1.查看所有的学生信息
2.添加学生
3.删除学生
4.修改学生
5.退出系统
请输入您的选择[num]:1
-------------学生信息显示如下---------------
学号 姓名 性别 班级
1 张三 男 102
2 李四 女 103
-------------------------------------------
----Welcome To Student Manage----
1.查看所有的学生信息
2.添加学生
3.删除学生
4.修改学生
5.退出系统
请输入您的选择[num]:4
请输入您的学号!
3
系统里面不存在该学生,无法修改!!
----Welcome To Student Manage----
1.查看所有的学生信息
2.添加学生
3.删除学生
4.修改学生
5.退出系统
请输入您的选择[num]:4
请输入您的学号!
1
请输入修改的学生的姓名:小明
请输入修改的学生的性别:男
请输入修改的学生的班级:103
学生信息修改成功!!
----Welcome To Student Manage----
1.查看所有的学生信息
2.添加学生
3.删除学生
4.修改学生
5.退出系统
请输入您的选择[num]:1
-------------学生信息显示如下---------------
学号 姓名 性别 班级
1 小明 男 103
2 李四 女 103
-------------------------------------------
----Welcome To Student Manage----
1.查看所有的学生信息
2.添加学生
3.删除学生
4.修改学生
5.退出系统
请输入您的选择[num]:3
请输入您的学号!
5
系统里面不存在该学生,无法删除!!
----Welcome To Student Manage----
1.查看所有的学生信息
2.添加学生
3.删除学生
4.修改学生
5.退出系统
请输入您的选择[num]:3
请输入您的学号!
2
已成功删除该学生!!
----Welcome To Student Manage----
1.查看所有的学生信息
2.添加学生
3.删除学生
4.修改学生
5.退出系统
请输入您的选择[num]:1
-------------学生信息显示如下---------------
学号 姓名 性别 班级
1 小明 男 103
-------------------------------------------
----Welcome To Student Manage----
1.查看所有的学生信息
2.添加学生
3.删除学生
4.修改学生
5.退出系统
请输入您的选择[num]:5
已成功退出系统!!