最近本人在浏览本校以及其他普通二本院校期末作业时候发现,学生信息管理系统,学生宿舍管理系统,简单的电话篇等,作为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();
}
}