赞
踩
引言:
学生信息管理是一个常见的任务,它涉及到学生的添加、查看、修改和删除等操作。在本篇博客中,我们将使用Java语言来实现一个简单的学生信息管理系统。通过这个系统,我们可以方便地对学生的信息进行管理和操作。
一、背景介绍
在这个学生信息管理系统中,我们使用了Java的面向对象编程思想。系统由两个主要的类组成:Manager类和View类。Manager类负责对学生信息进行管理和操作,而View类则负责与用户进行交互,接收用户的输入并显示相应的信息。
二、Manager类的功能
Manager类是学生信息管理系统的核心类之一,它具有以下功能:
在文件处理时:
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类具有以下功能:
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的其他特性和工具来优化系统的性能和用户体验。
希望本篇博客对你理解和使用Java语言来实现学生信息管理系统有所帮助!如果你有任何问题或建议,请随时留言。谢谢阅读!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。