io流及序列化开发小型本地学生管理系统

大一期末来临,跟着老杜学习了序列化和io的相关知识,并根据老杜给的作业开发了一个小型学生管理系统

题目及思路

原题目:
1、请使用序列化和反序列化机制,完成学生信息管理系统。

系统打开时显示以下信息:
欢迎使用学生信息管理系统,请认真阅读以下使用说明:
请输入不同的功能编号来选择不同的功能:
[1]查看学生列表
[2]保存学生
[3]删除学生
[4]查看某个学生详细信息


学生信息列表展示
学号 姓名 性别

1 zhangsan 男
2 lisi 女


查看某个学生详细信息
学号:1
姓名:张三
生日:1990-10-10
性别:男
邮箱:zhangsan@123.com


删除学生时,需要让用户继续输入删除的学生编号,根据编号删除学生。

注意:请使用序列化和反序列化,以保证关闭之后,学生数据不丢失。
学生数据要存储到文件中。

根据题目要求,我尽可能运用面向对象的思路来开发一个带有本地文件的管理系统,使用泛型<Integer,Student>HashMap,通过学号对学生对象进行保存删除删改的操作

我的思路

方法内容
StudentSystemTest多个switch选项来进行不同的操作
StudentSystem提供调用学生对象和进行io操作的方法
Student创建对象信息

代码片段

测试类

import java.io.*;
import java.util.*;

public class StudentSystemTest {
    public static void main(String[] args) {
        StudentSystem studentSystem = new StudentSystem();
        Map<Integer,Student> map1;

        while (true){
        System.out.println("欢迎使用序列化学生信息管理系统!【1】查看学生列表【2】保存学生【3】删除学生【4】查看某个学生详细信息【5】修改当前列表学生信息【6】结束使用该系统");
      
        Scanner sc = new Scanner(System.in);
        int choose = sc.nextInt();

        switch (choose){
            case 1:
                try {
                    map1 = studentSystem.FileInPut();

                        /*ObjectInputStream ois = new ObjectInputStream(new FileInputStream("C:\\Users\\10571\\Desktop\\java\\学生档案.txt"));

                        Map<Integer,Student> map1 = (HashMap<Integer,Student>)ois.readObject();

                        ois.close();
    */
                    if (map1.size() == 0){
                        System.out.println("对不起当前列表中不存在学生信息!");
                    }else{
                        Set<Map.Entry<Integer,Student>> set1 = map1.entrySet();

                        for (Map.Entry<Integer,Student> node : set1){
                            System.out.println(node.getKey() +"."+node.getValue().name());
                        }
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
                break;
            case 2:

                System.out.println("请输入学号");
                sc = new Scanner(System.in);
                int no = sc.nextInt();

                if (studentSystem.contains(no)){
                    System.out.println("对不起已经有此学生存在或学号输入错误,学号应为大于0的数值!");

                }else {

                    System.out.println("请输入姓名");
                    sc = new Scanner(System.in);
                    String name = sc.nextLine();

                    System.out.println("请输入出生日期,以年-月-日形式");
                    sc = new Scanner(System.in);
                    String birth = sc.nextLine();

                    System.out.println("请输入性别");
                    sc = new Scanner(System.in);
                    String sex = sc.nextLine();

                    System.out.println("请输入邮箱");
                    sc = new Scanner(System.in);
                    String email = sc.nextLine();

                    if (sex.equals("男")|| sex.equals("女")){

                        studentSystem.studentPackage(no,name,sex,email,birth);

                        studentSystem.FileOutPut(studentSystem.getMap());

                        System.out.println("保存成功");

                    }else {
                        System.out.println("没性别请勿使用此系统!");
                        return;
                    }
                }

                break;
            case 3:
                map1 = studentSystem.FileInPut();

                if (map1.size() == 0){
                    System.out.println("对不起当前列表中不存在学生信息!");
                }else {

                    System.out.println("请输入您想要删除学生的学号");
                    sc = new Scanner(System.in);
                    int delete = sc.nextInt();


                    if (map1.containsKey(delete)){
                        System.out.println("已删除学生:" + map1.get(delete).getName());

                        map1.remove(delete);

                        studentSystem.setMap(map1);
                        studentSystem.FileOutPut(map1);

                    }else {
                        System.out.println("对不起,当前列表不存在此学生!");
                    }
                }

                break;
            case 4:
                try {

                    map1 = studentSystem.FileInPut();

                    if (map1.size() == 0){
                    System.out.println("对不起当前列表不存在学生信息");
                    }else {
                        System.out.println("请输入想要查找的学生学号");
                    int search = sc.nextInt();

                    if (!map1.containsKey(search)){
                        System.out.println("对不起不存在此学生");
                    }else {
                        System.out.println(map1.get(search));
                        }
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
                break;
            case 5:
                map1 = studentSystem.FileInPut();

                if (map1.size() == 0){
                    System.out.println("对不起当前列表不存在学生信息");
                }else{

                    System.out.println("请选择您想要修改的学生学号");

                    sc = new Scanner(System.in);
                    int search = sc.nextInt();

                    if (!map1.containsKey(search)){
                        System.out.println("对不起不存在此学生");
                    }else {
                        System.out.println("请选择序号来修改学生"+ map1.get(search).getName() +"的信息【1】生日 【2】邮箱");

                        sc = new Scanner(System.in);
                        int chooseChange = sc.nextInt();

                        switch (chooseChange){
                            case 1:
                                System.out.println("请输入新的生日信息!");
                                
                                sc = new Scanner(System.in);
                                String birthNew = sc.nextLine();

                                if (birthNew.equals(map1.get(search).getBirth())){
                                    System.out.println("对不起日期相同!不要玩我!");
                                }else {
                                    map1.get(search).setBirth(birthNew);
                                    System.out.println("修改成功!");
                                }
                                break;
                            case 2:
                                System.out.println("请输入新的邮箱信息!");
                                
                                sc = new Scanner(System.in);
                                String emailNew = sc.nextLine();

                                if (emailNew.equals(map1.get(search).getEmail())){
                                    System.out.println("对不起邮箱相同!不要玩我!");
                                }else {
                                    map1.get(search).setEmail(emailNew);
                                    System.out.println("修改成功!");
                                }
                                break;
                            default:
                                    System.out.println("对不起没有此选项!");
                            }
                            studentSystem.FileOutPut(map1);
                        }
                    }
                break;
            case 6:
                System.out.println("欢迎您再次使用该系统,再见!");
                return;
            default:
                System.out.println("对不起该系统暂无此功能");
            }
        }
   }
}

系统类

方法作用
StudentSystem(无参构造)创建本地File并创建Map对象
studentPackage在map中包装一个新的学生信息
Input与Output提供main方法对文件的调用方法(.就行了)
contains判断当前系统知否存在该学生学号
class StudentSystem{

    Map<Integer,Student> map;
    File file = new File("C:\\Users\\10571\\Desktop\\java\\学生档案.txt");

    public StudentSystem() {

        map = new HashMap<>();

        try {

            if (!file.exists()){

                FileOutputStream fos = new FileOutputStream("C:\\Users\\10571\\Desktop\\java\\学生档案.txt");

                ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("C:\\Users\\10571\\Desktop\\java\\学生档案.txt"));

                oos.writeObject(map);

                oos.flush();
                oos.close();

            }else{

                /*ois = new ObjectInputStream(new FileInputStream("C:\\Users\\10571\\Desktop\\java\\学生档案.txt"));

                Map<Integer,Student> map1 = (HashMap<Integer,Student>)ois.readObject();
*/
                this.map = this.FileInPut();

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void studentPackage(int no,String name, String sex, String email, String birth){
        map.put(no,new Student(name,sex,email,birth));
    }
    
    public Map<Integer,Student> getMap(){
        return this.map;
    }
    
    public void setMap(Map<Integer, Student> map) {
        this.map = map;
    }
    
    public boolean contains(int no){
        if(map.containsKey(no) || no <= 0){
            return true;
        }else{
            return false;
        }
    }
    
    public Map<Integer,Student> FileInPut(){

        try {
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("C:\\Users\\10571\\Desktop\\java\\学生档案.txt"));

            Map<Integer,Student> map1 = (HashMap<Integer,Student>)ois.readObject();

            ois.close();

            return map1;
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
    
    public void FileOutPut(Map<Integer,Student> map){

        try {

            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("C:\\Users\\10571\\Desktop\\java\\学生档案.txt"));

            oos.writeObject(map);

            oos.flush();

            oos.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

学生对象类

class Student implements Serializable {
    private String name,sex,email,birth;

    public Student(String name, String sex, String email, String birth) {
        this.name = name;
        this.sex = sex;
        this.email = email;
        this.birth = birth;
    }

    public Student() {
    }

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }


    public String getBirth() {
        return birth;
    }

    public void setBirth(String birth) {
        this.birth = birth;
    }

    @Override
    public String toString() {
        return "学生姓名为:"
                 + name  +
                ", 性别为:" + sex +
                ", 邮箱地址为: " + email +
                ", 出生日期为:" + birth;
    }
}

总结:在没有学习mysql数据库之前,使用这样的序列化进行模拟操作的代码量很大,很不方便,但是能够锻炼面向对象的思维并对io和序列化方法有更好的了解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值