最近本人在浏览本校以及其他普通二本院校期末作业时候发现,学生信息管理系统,学生宿舍管理系统,简单的电话篇等,作为Java的期末作业,题目几乎千篇一律,除了部分功能的选择上有不同,核心思想都是一模一样的,下面将用最简单的方式示范其中简单电话篇。

在功能方面参考某校的要求,提供添加联系人以及不同方式查找联系人即可,对于删除功能没有要求,不做示范,但是实现起来也相对简单,感兴趣的同学可以自行实现。

  //首先展示我们的功能选择类:

package telephoneBook;

import java.util.Scanner;

public class Choice {
    static void start() {
        Function function = new Function();   
        Scanner sc = new Scanner(System.in);  
        System.out.println("你好欢迎你使用电话本:");
        System.out.println("请选择你需要的功能吧!");
        while (true) {
            System.out.println("1:添加联系人");
            System.out.println("2:姓名查找页");
            System.out.println("3:电话查找页");
            System.out.println("4:全部联系人");
            System.out.println("5:关闭联系人");
            System.out.print("输入命令:");
            int n = sc.nextInt();
            if (n <= 5 && n >= 1) {
                switch (n) {
                    case 1:
                        function.add();
                        break;
                    case 2:
                        function.nameFind();
                        break;
                    case 3:
                        function.numFind();
                        break;
                    case 4:
                        function.show();
                        break;
                    case 5:
                        System.exit(0);  //直接关闭虚拟机 传入参数0为正常关闭
                }
            }
        }
    }

}

//功能实现类

如果在大作业中,往往涉及到不同身份角色对信息进行操作,并不存在本题中这一功能全部写在一个类中的情况,可以考虑将读取和写入分别封装为一个类,在这个简单题目中,直接设置为显现类中某个方法,需要时候直接调用即可。

存储一直是一些同学比较头疼的事情,对于存储到本地文档的应付期末作业简单程序来说

一般有两种方式:

①是将信息按行写入到记事本中,并对不同的人进行一个按行读取;

②将内容存到集合中,直接将集合中的元素进行序列化并用对象流保存集合即可;

package telephoneBook;

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

public class Function {
    Scanner scanner = new Scanner(System.in); //先加载输入流

    //采用集合对联系人进行存储
    //这个是io输入模块 这部分的功能是采用对象序列化的方式,将集合存储到目标文件中
    public void storage(ArrayList<People> arrayList) {
        ObjectOutputStream oos = null;
        try {
            oos = new ObjectOutputStream(new FileOutputStream("D:\\JavaDevelop\\text1\\Phone\\contacts.txt"));
            oos.writeObject(arrayList);
            oos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                oos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    //该模块为输入流,将文件中的序列化碎片重新读取回内存中
    public ArrayList<People> read() {
        ArrayList<People> arrayList = new ArrayList<>();
        ObjectInputStream ois = null;
        try {
            File file = new File("D:\\JavaDevelop\\text1\\Phone\\contacts.txt");
            if (file.length() > 0) {
                ois = new ObjectInputStream(new FileInputStream(file));
                arrayList = (ArrayList<People>) ois.readObject();
            }
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                if (ois != null)
                    ois.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
        return arrayList;
    }

    public void add() {
        //先将原有的联系人列表加载到内存中 不容易混乱
        ArrayList<People> arrayList = new ArrayList<>();
        arrayList = read();
        System.out.print("请输入联系人姓名:");
        String name = scanner.next();
        System.out.print("请输入联系人电话:");
        String num = scanner.next();
        People people = new People(name, num);
        arrayList.add(people);
        //录入信息完毕后保存
        storage(arrayList);
    }

    public void nameFind() {
        ArrayList<People> arrayList = new ArrayList<>();
        arrayList = read();
        System.out.print("请输入联系人姓名:");
        String name = scanner.next();
        //采用迭代器遍历法,遍历并匹配目标
        for (People i : arrayList) {
            if (i.getName().equals(name)) {
                System.out.println(i);
            }
        }
    }

    public void numFind() {
        ArrayList<People> arrayList = new ArrayList<>();
        arrayList = read();
        System.out.print("请输入联系人电话:");
        String num = scanner.next();
        //采用迭代器遍历法,遍历并匹配目标
        for (People i : arrayList) {
            if (i.getNum().equals(num)) {
                System.out.println(i);
            }
        }
    }

    public void show() {
        ArrayList<People> arrayList = new ArrayList<>();
        arrayList = read();
        for (People i : arrayList) {
            System.out.println(i);
        }
    }

}

//People是本程序的重要数据类型 负责定义联系人属性等

package telephoneBook;

import java.io.Serializable;

//继承序列化接口Serializable 以便运用对象流将信息存入到文件中去

public class People implements Serializable {

    private static final long serialVersionUID = 123456789L;  //指定序列化码 用于防止不同jdk版本导致的乱码

    private String name;
    private String num;

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

    public String getName() {
        return name;
    }

    public String getNum() {
        return num;
    }

    public void setNum(String num) {
        this.num = num;
    }

    public People(String name, String num) {
        this.name = name;
        this.num = num;
    }

    //重写Object类下的toString()
    @Override
    public String toString() {
        return "联系人{" +
                "姓名='" + name + '\'' +
                ", 电话='" + num + '\'' +
                '}';
    }
}

//启动类

package telephoneBook;

public class Main {
    public static void main(String[] args) {
        Choice.start();
    }
}