任务要求:
请使用序列化和反序列化机制,完成学生信息管理系统。
系统打开时显示以下信息:
欢迎使用学生信息管理系统,请认真阅读以下使用说明:
请输入不同的功能编号来选择不同的功能:
[1]查看学生列表
[2]保存学生
[3]删除学生
[4]查看某个学生详细信息
--------------------------------------------------------------------
学生信息列表展示
学号 姓名 性别
------------------------------------
1 zhangsan 男
2 lisi 女
.....
--------------------------------------------------------------------
查看某个学生详细信息
学号:1
姓名:张三
生日:1990-10-10
性别:男
邮箱:zhangsan@123.com
---------------------------------------------------------------------
删除学生时,需要让用户继续输入删除的学生编号,根据编号删除学生。
注意:请使用序列化和反序列化,以保证关闭之后,学生数据不丢失。
学生数据要存储到文件中。
代码实现:
我这里在主程序Test中,已经在Uesr文件(自己提前在默认路径下的新建)里添加了两个学生信息,初始查看学生信息时如下所示:
学号 姓名 性别
1 小红 男
2 小白 女
===================
符合题目要求
下面是主要的代码,首先是学生类
package 使用序列化和反序列化实现学生信息管理系统;
import java.io.Serializable;
public class Student implements Serializable {
private int num;
private String name;
private String birth;
private String sex;
private String email;
public Student() {
}
public Student(int num, String name, String birth, String sex, String email) {
this.num = num;
this.name = name;
this.birth = birth;
this.sex = sex;
this.email = email;
}
@Override
public String toString() {
return num +" "+ name +" "+sex;//五个空格
}
public void setNum(int num) {
this.num = num;
}
public void setName(String name) {
this.name = name;
}
public void setBirth(String birth) {
this.birth = birth;
}
public void setSex(String sex) {
this.sex = sex;
}
public void setEmail(String email) {
this.email = email;
}
public int getNum() {
return num;
}
public String getName() {
return name;
}
public String getBirth() {
return birth;
}
public String getSex() {
return sex;
}
public String getEmail() {
return email;
}
}
这里重写了Student的toString()方法,为了按照题目要求实现简短的学生信息的展示
其次是学生信息工具类,实现增删改查操作
package 使用序列化和反序列化实现学生信息管理系统;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class StudentUtil {
//查看学生列表
public static void cheekALL(){
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("User")));
List<Student> studentlist=(List<Student>)ois.readObject();
System.out.println("学号"+" "+"姓名"+" "+"性别");
for(Student student:studentlist){
System.out.println(student);
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//保存学生
public static void save(){
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("User")));
ArrayList<Student> studentlist=(ArrayList<Student>)ois.readObject();
ois.close();
Scanner s=new Scanner(System.in);
System.out.println("请输入学号:");
int num=s.nextInt();
System.out.println("请输入姓名:");
String name=s.next();
System.out.println("请输入生日:");
String birth=s.next();
System.out.println("请输入性别:");
String sex=s.next();
System.out.println("请输入邮箱:");
String email=s.next();
studentlist.add(new Student(num,name,birth,sex,email));
ObjectOutput oos=new ObjectOutputStream(new FileOutputStream("User"));
oos.writeObject(studentlist);
oos.flush();
oos.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//删除学生
public static void delete(){
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("User")));
ArrayList<Student> studentlist=(ArrayList<Student>)ois.readObject();
ois.close();
Scanner s=new Scanner(System.in);
System.out.println("请输入需要删除的学生序号:");
int num=s.nextInt();
for(int i=0;i<studentlist.size();i++){
if(studentlist.get(i).getNum()==num){
studentlist.remove(studentlist.get(i));
}
}
ObjectOutput oos=new ObjectOutputStream(new FileOutputStream("User"));
oos.writeObject(studentlist);
oos.flush();
oos.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//查看某个学生的信息
public static void cheek(){
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("User")));
ArrayList<Student> studentlist=(ArrayList<Student>)ois.readObject();
ois.close();
Scanner s=new Scanner(System.in);
System.out.println("请输入需要查询的学生序号:");
int num=s.nextInt();
for(int i=0;i<studentlist.size();i++){
if(studentlist.get(i).getNum()==num){
System.out.println("学号:"+studentlist.get(i).getNum());
System.out.println("姓名:"+studentlist.get(i).getName());
System.out.println("生日:"+studentlist.get(i).getBirth());
System.out.println("性别:"+studentlist.get(i).getSex());
System.out.println("邮箱:"+studentlist.get(i).getEmail());
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
本人技术有限,实现的代码比较简单,但是能完成要求,这里的四个静态方法对应四个操作
最后是测试类
package 使用序列化和反序列化实现学生信息管理系统;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
try {
Student studentnew=new Student(1,"小红","19980210","男","1@qq.com");
Student studentnew2=new Student(2,"小白","19980213","女","2@qq.com");
ArrayList<Student> studentlist=new ArrayList<>();
studentlist.add(studentnew);
studentlist.add(studentnew2);
ObjectOutput oos=new ObjectOutputStream(new FileOutputStream("User"));
oos.writeObject(studentlist);
oos.flush();
oos.close();
System.out.println("欢迎使用学生信息管理系统,请认真阅读以下使用说明:");
System.out.println("请输入不同的功能编号实现不同的功能");
System.out.println("【1】查看学生列表");
System.out.println("【2】保存学生");
System.out.println("【3】删除学生");
System.out.println("【4】查看某个学生的详细信息");
while(true){
Scanner s=new Scanner(System.in);
System.out.println("请选择功能编号:");
int num=s.nextInt();
switch (num){
case 1:
StudentUtil.cheekALL();
System.out.println("===================");
break;
case 2:
StudentUtil.save();
System.out.println("保存成功!");
System.out.println("===================");
break;
case 3:
StudentUtil.delete();
System.out.println("删除成功!");
System.out.println("===================");
break;
case 4:
StudentUtil.cheek();
System.out.println("===================");
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
在主程序的前面添加了两个学生对象,其他的就是实现要求
运行界面如下所示,并且测试查看学生列表功能
欢迎使用学生信息管理系统,请认真阅读以下使用说明:
请输入不同的功能编号实现不同的功能
【1】查看学生列表
【2】保存学生
【3】删除学生
【4】查看某个学生的详细信息
请选择功能编号:
1
学号 姓名 性别
1 小红 男
2 小白 女
===================
测试保存学生功能
请选择功能编号:
2
请输入学号:
3
请输入姓名:
xu
请输入生日:
1998310
请输入性别:
女
请输入邮箱:
1@qq.com
保存成功!
===================
请选择功能编号:
1
学号 姓名 性别
1 小红 男
2 小白 女
3 xu 女
===================
这里使用功能【2】,然后依次输入详细信息,最后输入【1】查询学生信息,正确
测试删除学生功能
请选择功能编号:
3
请输入需要删除的学生序号:
3
删除成功!
===================
请选择功能编号:
1
学号 姓名 性别
1 小红 男
2 小白 女
===================
这里使用功能【3】,按照要求输入需要删除的学生编号,这里输入刚刚保存的学生3,再次输入【1】,结果正确
测试查看某个学生的详细信息功能
请选择功能编号:
4
请输入需要查询的学生序号:
1
学号:1
姓名:小红
生日:19980210
性别:男
邮箱:1@qq.com
这里使用功能【4】,查询编号为1的学生详细信息,结果正确