先看演示效果:

运用知识:
IO流中的对象流:将对象读取和写入本地硬盘
序列化与反序列化来实现对象的持久化
HahMap存储学生对象
枚举:限定学生性别变量
泛型:来避免向下转型
上代码:
创建学生类
import java.io.Serializable;
/**
* 学生属性:学号,名字,年龄,性别。学号要求唯一。
*/
public class Student implements Serializable {
private String name;
private int sid;
private int age;
private Gender gender;
public int getSid() {
return sid;
}
@Override
public String toString() {
return "学生信息:{" +
"姓名:" + name + ''' +
", 学号:" + sid +
", 年龄:" + age +
", 性别:" + gender +
'}';
}
public void setSid(int sid) {
this.sid = sid;
}
public Student(String name, int sid, int age, Gender gender) {
this.name = name;
this.sid = sid;
this.age = age;
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
}
enum Gender {
男, 女
}
定义接口来实现可扩展性
/**
*实现的功能:
*遍历所有学生信息
*添加学生信息
*根据学号查找学生
*根据名字查找学生
*根据学号删除学生
*根据学号修改学生
*/
public interface StudentInterface {
/**
* 遍历所有学生信息
*/
void showAll() throws Exception;
/**
* 添加学生信息
* @return 添加成功,返回true,否则返回false
*/
boolean addStudent() throws Exception;
/**
*根据学号查找学生
* @param sid
* @return 被找到的学生对象,如果不存在,返回null
*/
Student findStuBySid(int sid) throws Exception;
/**
*根据学号查找学生
* @param name
* @return 返回所有名字为name的学生列表,如果不存在,返回null
*/
List<Student> findStuByName(String name) throws Exception;
/**
*根据学号删除学生
* @param sid
* @return 如果成功,返回true,否则返回false
*/
boolean removeStuBySid(int sid) throws Exception;
/**
*根据学号修改学生
* @param sid
* @return 如果成功,返回true,否则返回false
*/
boolean modifyStuSid(int sid) throws Exception;
}
创建学生系统类来实现功能接口
import java.io.*;
import java.util.*;
public class StudentSystem implements StudentInterface {
Map<Integer, Student> hashMap = new HashMap<>();
Scanner scanner = new Scanner(System.in);
public void welcome() {
System.out.println("**********welcome to StudentAdminstrateSystem**************");
System.out.println("系统初始化成功........");
}
public void end() {
System.out.println("**********Thank you for usering the StudentAdminstrateSystem**************");
System.out.println("系统退出成功........");
}
/**
* 显示系统菜单
*/
public void showMenu() {
System.out.println("n菜单内容:");
System.out.println("请选择您的操作:");
System.out.println("1-->显示所有学生信息:");
System.out.println("2-->添加学生信息:");
System.out.println("3-->根据学号查找学生信息:");
System.out.println("4-->根据姓名查找学生信息:");
System.out.println("5-->根据学号删除学生信息:");
System.out.println("6-->根据学号修改学生信息:");
System.out.println("7-->退出系统:");
}
@Override
public void showAll() throws Exception {
//反序列化
ObjectInputStream ois=new ObjectInputStream(new BufferedInputStream(new FileInputStream("1.txt")));
hashMap=(HashMap)ois.readObject();
Set<Integer> set = hashMap.keySet();
if (hashMap.size() == 0) {
System.out.println("本系统暂未录入任何学生信息");
} else {
Iterator<Integer> iterator = set.iterator();
while (iterator.hasNext()) {
Integer key = iterator.next();
Student student = hashMap.get(key);
System.out.println(student);
}
}
ois.close();
}
@Override
public boolean addStudent() throws Exception {
String name = MyUtil.getInputString("请输入学生的姓名:", scanner);
int sid = MyUtil.getInputNumber("请输入学生的学号,要求是整数:", scanner);
int age = MyUtil.getInputNumber("请输入学生的年龄:", scanner);
Gender gender = MyUtil.getInputString("请输入学生的性别,男 or 女:", scanner).equals("男") ? Gender.男 : Gender.女;
Student student = new Student(name, sid, age, gender);
hashMap.put(sid, student);
//序列化过程
ObjectOutputStream oos=new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("1.txt")));
oos.writeObject(hashMap);
oos.close();
System.out.println("添加信息成功");
return true;
}
@Override
public Student findStuBySid(int sid) throws Exception {
//反序列化
ObjectInputStream ois=new ObjectInputStream(new BufferedInputStream(new FileInputStream("1.txt")));
hashMap=(HashMap)ois.readObject();
ois.close();
Student stu = hashMap.get(sid);
if (stu != null) {
System.out.println(stu);
} else {
System.out.println("该学生不存在!");
}
return stu;
}
@Override
public List<Student> findStuByName(String name) throws Exception{
//反序列化
ObjectInputStream ois=new ObjectInputStream(new BufferedInputStream(new FileInputStream("1.txt")));
hashMap=(HashMap)ois.readObject();
ois.close();
List<Student> list = new ArrayList<>();
//遍历所有的学生,然后逐个和name比较
Collection<Student> values = hashMap.values();
Iterator<Student> iterator = values.iterator();
while (iterator.hasNext()) {
Student student = iterator.next();
if (student.getName().equals(name)) {
list.add(student);
}
}
return list.size() == 0 ? null : list;
}
//打印学生信息
public void findStuByName() throws Exception {
String name=MyUtil.getInputString("请输入要查找的学生的姓名:",scanner);
List<Student> list=findStuByName(name);
if (list==null){
System.out.println("该姓名的学生不存在!");
}else {
System.out.println("查找到的学生信息如下:");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
@Override
public boolean removeStuBySid(int sid) throws Exception{
//反序列化
ObjectInputStream ois=new ObjectInputStream(new BufferedInputStream(new FileInputStream("1.txt")));
hashMap=(HashMap)ois.readObject();
ois.close();
Student stu = hashMap.remove(sid);
if (stu != null) {
System.out.println("学生信息:" + stu + "t已被删除!");
//序列化过程
ObjectOutputStream oos=new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("1.txt")));
oos.writeObject(hashMap);
oos.close();
return true;
} else {
System.out.println("该学生不存在!");
return false;
}
}
@Override
public boolean modifyStuSid(int sid) throws Exception {
//反序列化
ObjectInputStream ois=new ObjectInputStream(new BufferedInputStream(new FileInputStream("1.txt")));
hashMap=(HashMap)ois.readObject();
ois.close();
Student student = hashMap.get(sid);
if (hashMap.get(sid) != null) {
String name = MyUtil.getInputString("请输入要修改的学生姓名:", scanner);
sid = MyUtil.getInputNumber("请输入学生的学号,要求是整数:", scanner);
int age = MyUtil.getInputNumber("请输入要修改学生年龄:", scanner);
Gender gender = MyUtil.getInputString("请输入要修改学生性别,男 or 女:", scanner).equals("男") ? Gender.男 : Gender.女;
student.setName(name);
student.setAge(age);
student.setGender(gender);
student.setSid(sid);
System.out.println("学生信息修改成功!");
//序列化过程
ObjectOutputStream oos=new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("1.txt")));
oos.writeObject(hashMap);
oos.close();
return true;
} else {
System.out.println("该学生不存在!");
return false;
}
}
}
测试类
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws Exception {
StudentSystem studentSystem = new StudentSystem();
studentSystem.welcome();
Scanner scanner = new Scanner(System.in);
while (true) {
studentSystem.showMenu();
int input = MyUtil.getInputNumber("请选择您的操作:", scanner);
switch (input) {
case 1:
studentSystem.showAll();
break;
case 2:
studentSystem.addStudent();
break;
case 3:
studentSystem.findStuBySid(MyUtil.getInputNumber("请输入要查找的学生的学号:", scanner));
break;
case 4:
studentSystem.findStuByName();
break;
case 5:
studentSystem.removeStuBySid(MyUtil.getInputNumber("请输入要删除的学生的学号:", scanner));
break;
case 6:
studentSystem.modifyStuSid(MyUtil.getInputNumber("请输入要修改的学生的学号:", scanner));
break;
case 7:
studentSystem.end();
return;
}
}
}
}
完毕!有问题欢迎讨论。
版权声明:本文为weixin_33640562原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。