赞
踩
一、Manager类的功能
Manager类是学生信息管理系统的核心类之一,它具有以下功能:
创建一个空的学生对象列表,并使用ArrayList来存储学生信息。
提供方法来添加新的学生信息,并为每个学生生成一个唯一的ID。
提供方法来查看学生信息列表。
提供方法来根据ID查找学生信息。
提供方法来修改学生信息。
提供方法来删除学生信息。
提供方法来根据名称模糊查询学生信息。
在文件处理时:
1.序列化是将对象转换为字节流的过程,可以将对象”保存“到文件中、在网络传输中发送对象等。
2.反序列化则是将字节流转换回对象,可以从文件中“读取”对象数据、接收网络传输的对象等。
需要注意的是,要进行反序列化,对象的类必须实现Serializable接口。该接口是一个标记接口,不包含任何方法,”只是用于标识该类可以被序列化和反序列化“。
Manager代码:
public class Manager {
//文件处理
// a. 创建一个空的Stu对象列表,使用ArrayList来存储。
// b. 使用ObjectOutputStream类创建一个对象输出流,它使用FileOutputStream来写入文件数据。
// c. 使用ObjectOutputStream的writeObject()方法将对象列表stus写入文件。
// d. 使用ObjectOutputStream的flush()方法刷新输出流。
// e. 关闭ObjectOutputStream流。
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;
}
//读
//使用了Java的ObjectInputStream类来读取一个名为"stus"的文件中的对象数据,并将其反序列化为一个对象。
// 1. 创建一个ObjectInputStream对象,它使用FileInputStream来读取文件数据。
// 2. 通过ObjectInputStream的readObject()方法,读取文件中的对象数据,并将其赋值给变量o。
// 3. 关闭ObjectInputStream流。
// 4. 如果在读取过程中出现IOException或ClassNotFoundException异常,将抛出RuntimeException异常。
// 5. 返回读取到的对象数据o。
private Object readData() {
Object o=null;
try {
ObjectInputStream ois=new ObjectInputStream(
new FileInputStream("stus")
);
//要实现反序列化,需要使用Java的ObjectInputStream类。此类提供了readObject()方法,可以读取字节流并将其转换为对象。
o=ois.readObject();
ois.close();
} catch (IOException e) {
throw new RuntimeException(e);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
return o;
}
//添加一个新学生,添加一个新id
public void addStu(Stu stu) {
//使用UUID类的randomUUID()方法生成一个随机的UUID。
//将UUID转换为字符串形式,使用toString()方法。
//将UUID字符串赋值给名为"stu"的对象的ID属性,使用setId()方法。
//唯一Id
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来实现对象的序列化和文件的写入操作
ObjectOutputStream oos=new ObjectOutputStream(
new FileOutputStream("stus")
);
oos.writeObject(stus);
oos.flush();
oos.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
//通过id查找
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
stus.add(dataList.get(i));
}
}
return stus;
}
}
三、View类的功能
View类是学生信息管理系统的用户界面类,它负责与用户进行交互,并调用Manager类的方法来完成相应的操作。View类具有以下功能:
显示学生信息管理系统的菜单,供用户选择相应的操作。
提供方法来接收用户的输入,并调用Manager类的相应方法来完成操作。
显示学生信息列表。
添加新的学生信息。
修改学生信息。
删除学生信息。
根据名称模糊查询学生信息。
view代码:
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);
});
}
}
四、使用示例
以下是一个使用示例,展示了如何通过学生信息管理系统完成一系列操作:
查看学生信息列表。
添加新的学生信息。
修改学生信息。
删除学生信息。
根据名称模糊查询学生信息。
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("其他需求正在开发");
}
}
五、总结
通过这个简单的学生信息管理系统,我们可以看到Java的面向对象编程思想在实际应用中的威力。通过合理地组织代码和设计类之间的关系,我们可以实现一个功能完善、易于使用的学生信息管理系统。
在实际开发中,我们可以根据需求对系统进行扩展,增加更多的功能和操作。同时,我们也可以利用Java的其他特性和工具来优化系统的性能和用户体验。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。