Serializable和IO流运用

1.创建stu实体类,继承Serializable接口

package co.goho.yuanyu;

import java.io.Serializable;

public class Stu implements Serializable {
    private String id;
    private String name;
    private String grade;
    private String group;
    private int score;

    public Stu() {
    }

    public Stu(String id, String name, String grade, String group, int score) {
        this.id = id;
        this.name = name;
        this.grade = grade;
        this.group = group;
        this.score = score;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGrade() {
        return grade;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }

    public String getGroup() {
        return group;
    }

    public void setGroup(String group) {
        this.group = group;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "--------------------------------------------" +
                "\n号:" + id +
                "\n名:" + name +
                "\n班:" + grade +
                "\n组:" + group +
                "\n分:" + score;
    }
}

2.创建视图层View类,用于展示页面选择操作和调用Manager类的方法完成学生信息的增删改查和模糊查询

package co.goho.yuanyu;

import java.util.List;
import java.util.Scanner;

public class View {
    private Scanner scanner;
    private Manager manager;

    /**
     * 构造方法
     * 1.实例Scanner
     * 2.实例Manager
     * 3.启动了试图
     */
    public View() {
        scanner=new Scanner(System.in);
        manager=new Manager();
        while (true){
            this.showMenu();
            System.out.println("=================");
            System.out.println("==>继续操作请输入y:");
            String ct= scanner.next();
            if (!ct.equals("y")){
                System.exit(0);
            }
        }
    }

    /**
     * 显示并且选择目录
     */
    private void showMenu() {
        System.out.println("==>\t1\t查看学生信息");
        System.out.println("==>\t2\t新增学生信息");
        System.out.println("==>\t3\t修改学生信息");
        System.out.println("==>\t4\t删除学生信息");
        System.out.println("==>\t5\t根据名称查询");
        System.out.println("==>\t0\t退出信息管理");
        System.out.println("==>请输入序号选择");
        int rb=scanner.nextInt();
        switch (rb){
            case 1:
                this.showStudents();
                break;
            case 2:
                this.addStudent();
                break;
            case 3:
                this.setStudent();
                break;
            case 4:
                this.delStudent();
                break;
            case 5:
                this.getStusByName();
                break;
            case 0:
                System.out.println("退出学生信息管理系统");
                System.exit(0);
                break;
            default:
                System.out.println("其他需求正在开发");
        }
    }

    /**
     * 根据名称模糊查找
     */
    private void getStusByName() {
        System.out.println("请输入姓名");
        String name=scanner.next();
        List<Stu>stus=manager.getStusByName(name);
        stus.forEach(stu->{
            System.out.println(stu);
        });
    }

    /**
     * 删除学生信息
     */
    private void delStudent() {
        System.out.println("请输入学生信息编号:");
        String id=scanner.next();
        Stu stu=manager.getStuById(id);
        System.out.println(stu);
        System.out.println("是否删除?y删除,");
        String wd= scanner.next();
        if (wd.equals("y")){
            manager.delStu(stu);
            System.out.println("删除成功");
        }
    }

    /**
     * 修改信息
     */
    private void setStudent() {
        System.out.println("请输入要修改的学生信息");
        String id=scanner.next();
        Stu oldStu=manager.getStuById(id);
        System.out.println(oldStu);
        System.out.println("====修改====");
        Stu newStu=this.getNewStu();
        newStu.setId(id);
        manager.setStu(newStu);
        System.out.println("修改完成");
    }

    /**
     * 添加信息
     */
    private void addStudent() {
        Stu stu=this.getNewStu();
        manager.addStu(stu);
    }

    /**
     *
     * 生成一个新的学生对象
     * @return
     */
    private Stu getNewStu() {
        Stu stu=null;

        System.out.println("请输入姓名:");
        String name=scanner.next();
        System.out.println("请输入班级:");
        String grade=scanner.next();
        System.out.println("请输入分组:");
        String group=scanner.next();

        stu=new Stu(null,name,grade,group,0);



        return stu;
    }

    /**
     * 显示学生信息
     */
    private void showStudents() {
        List<Stu>stus=manager.getStu();
        stus.forEach(stu->{
            System.out.println(stu);
        });
    }
}

3.创建Manager类,该类为本次练习的核心,创建Manager构造方法,通过调用内置File类实现文件的创建,创建一个名为"stus"的文件对象,并利用ObjectOutputStream(对象输出流)的输出目标,将对象写入文件中,以便稍后可以从文件中读取和重建这些对象;然后分别创建getStu()等方法,完成增删改查,并将数据返回到视图层,用于展示到控制台上,其中查询操作,用到ObjectIntputStream方法将数据流显示到控制台上,代码如下

package co.goho.yuanyu;

import org.w3c.dom.ls.LSInput;

import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

public class Manager {
    public Manager(){
        File file=new File("stus");
        if (!file.exists()){
//            file.createNewFile();
            List<Stu>stus=new ArrayList<Stu>();
            try {
                ObjectOutputStream oos=new ObjectOutputStream(
                        new FileOutputStream("stus")
                );
                oos.writeObject(stus);
                oos.flush();
                oos.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
    public List<Stu> getStu() {
        List<Stu>stus=(List<Stu>) this.readData();
        return stus;
    }

    private Object readData() {
        Object o=null;
        try {
            ObjectInputStream ois=new ObjectInputStream(
                    new FileInputStream("stus")
            );
            o=ois.readObject();
            ois.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
        return o;
    }

    public void addStu(Stu stu) {
        stu.setId(UUID.randomUUID().toString());
        List<Stu>stus= (List<Stu>) this.readData();
        stus.add(stu);
        this.saveData(stus);
    }

    private void saveData(List<Stu> stus) {
        try {
            ObjectOutputStream oos=new ObjectOutputStream(
                    new FileOutputStream("stus")
            );
            oos.writeObject(stus);
            oos.flush();
            oos.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    public Stu getStuById(String id) {
        Stu stu=null;
        List<Stu>stus= (List<Stu>) this.readData();
        for (Stu stu0:stus
             ) {
            if (stu0.getId().equals(id)){
                stu=stu0;
            }
        }
        return stu;
    }

    public void setStu(Stu newStu) {
        List<Stu>stus= (List<Stu>) this.readData();
        for (int i=0;i<stus.size();i++) {
            if (newStu.getId().equals(stus.get(i).getId())){
                stus.set(i,newStu);
            }
        }
        this.saveData(stus);
    }

    public void delStu(Stu stu) {
        System.out.println(stu);
        List<Stu>stus= (List<Stu>) this.readData();
        System.out.println(stus);
        for (int i=0;i<stus.size();i++) {
            if(stus.get(i).getId().equals(stu.getId())){
                stus.remove(i);
            }
        }
        this.saveData(stus);
    }

    public List<Stu> getStusByName(String name) {
        List<Stu>stus= new ArrayList<Stu>();
        List<Stu>dataList= (List<Stu>) this.readData();
        for (int i=0;i<dataList.size();i++){
            if(dataList.get(i).getName().indexOf(name)!=-1){
                stus.add(dataList.get(i));
            }
        }
        return stus;
    }
}

4.运行结果

查看学生信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值