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.运行结果
查看学生信息