仅用IO流实现学生信息管理系统,使用序列化和反序列化(北京动力节点Java基础课程第六章IO流作业题试写)

任务要求:

请使用序列化和反序列化机制,完成学生信息管理系统。

系统打开时显示以下信息:
欢迎使用学生信息管理系统,请认真阅读以下使用说明:
请输入不同的功能编号来选择不同的功能:
[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的学生详细信息,结果正确

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小通信码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值