基于java的IO流实现学生信息管理系统

前言

一、使用文件构建学生信息管理
1、使用文件对象指定学生信息文件的保存路径
2、使用对象输出流将学生信息集合对象写入到文件中
3、使用对象输入流将文件中的学生信息在当前系统中呈现
4、需要使用菜单管理学生信息(添加学生信息、修改学生信息、删除学生信息、查找学生信息和显示所有的学生信息)

实现步骤

1、创建学生类Student实现Serializible接口,代码如下

package com.bean;

import java.io.*;

public class Student implements Serializable {
     
	private Integer sid;//学生编号
	private String sname;//学生姓名
	private String sex;
	private String address;
	private int age;
	private String classname;//班级
	public Student() {
     
		super();
		// TODO Auto-generated constructor stub
	}
	public Student(Integer sid, String sname, String sex, String address,
			int age, String classname) {
     
		super();
		this.sid = sid;
		this.sname = sname;
		this.sex = sex;
		this.address = address;
		this.age = age;
		this.classname = classname;
	}
	public Student(String sname, String sex, String address, int age,
			String classname) {
     
		super();
		this.sname = sname;
		this.sex = sex;
		this.address = address;
		this.age = age;
		this.classname = classname;
	}
	public Integer getSid() {
     
		return sid;
	}
	public void setSid(Integer sid) {
     
		this.sid = sid;
	}
	public String getSname() {
     
		return sname;
	}
	public void setSname(String sname) {
     
		this.sname = sname;
	}
	public String getSex() {
     
		return sex;
	}
	public void setSex(String sex) {
     
		this.sex = sex;
	}
	public String getAddress() {
     
		return address;
	}
	public void setAddress(String address) {
     
		this.address = address;
	}
	public int getAge() {
     
		return age;
	}
	public void setAge(int age) {
     
		this.age = age;
	}
	public String getClassname() {
     
		return classname;
	}
	public void setClassname(String classname) {
     
		this.classname = classname;
	}
	
	
}

2、创建工具类,像文件写出学生的集合对象和从文件中读取学生的集合对象,代码如下。

package com.util;
import java.io.*;

import com.bean.*;

import java.util.*;
public class StudentUtil {
     
	private static File file=new File("stu.bin");//指定要操作的文件对象
	/**
	 * 向文件中写入学生的集合对象(ArrayList集合)
	 * */
	public static void saveStudentListToFile(ArrayList<Student> lsst){
     
		try {
     
			//创建文件输出流对象
			FileOutputStream fout=new FileOutputStream(file);
			
			//创建缓冲区输出流对象
			BufferedOutputStream bout=new BufferedOutputStream(fout);//加速
			
			//创建对象输出流
			ObjectOutputStream objOut=new ObjectOutputStream(bout);
			
			objOut.writeObject(lsst);//将学生集合对象输出到文件保存
			
			objOut.flush();
			objOut.close();
			System.out.println("学生集合写出到文件成功!");
		} catch (FileNotFoundException e) {
     
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
     
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	/***
	 * 从文件中读取学生的集合信息
	 * 
	 * */
	public static List<Student> findStudentListFromFile(){
     
		//首先判断文件是否存在
		if(!file.exists()&&file.length()==0){
     
			System.out.println("文件不存在或者文件中无任何学生信息,请先添加!");
			return null;
		}
		
		try {
     
			//创建文件输入流对象
			FileInputStream fin=new FileInputStream(file);
			
			//创建缓冲区输入流对象
			BufferedInputStream bin=new BufferedInputStream(fin);//加速
			
			//创建对象输入流 
			ObjectInputStream objin=new ObjectInputStream(bin);
			
			//将对象输入流的中的对象读给List集合
			List<Student> lsst=(List<Student>) objin.readObject();
			
			
			return lsst;
		} catch (FileNotFoundException e) {
     
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
     
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
     
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
		
	}
}

3、创建业务类,对学生信息进行操作,代码如下。
先创建一个StudentBiz接口

package com.biz;
import com.bean.*;
import java.util.*;
public interface StudentBiz {
     
	public void save(Student st);
	public void update(Student st);
	public void delById(Integer sid);
	public void findById(Integer sid);
	public void findAll();
	
}

再创建StudentBiz接口的实现类,代码如下

package com.biz;

import com.bean.*;

import java.util.*;
import java.io.*;
import com.util.*;

public class StudentBizImp implements StudentBiz {
     
	private ArrayList<Student> lsst = null;

	@Override
	public void save(Student st) {
     
		// 先获取文件中保存的学生集合对象
		lsst = (ArrayList<Student>) StudentUtil.findStudentListFromFile();
		if (lsst == null || lsst.isEmpty()) {
     // list集合中没有元素
			lsst = new ArrayList<Student>();
			st.setSid(1);// 设置学生的编号值从1开始
			lsst.add(st);
		} else {
     
			/****** 对学生编号自增处理 *******/
			List<Integer> lssid = new ArrayList<Integer>();
			for (Student ost : lsst) {
     // 从集合中获取原来的学生集合对象元素
				// 将学生的编号设置到编号集合中
				lssid.add(ost.getSid());
			}
			// 获取最大的学生编号
			Integer maxsid = Collections.max(lssid);
			st.setSid(maxsid + 1);// 设置新增的学生编号在原来最大的学生编号基础上加1
			/**************************/
			lsst.add(st);// 将学生对象设置到集合中
		}

		// 保存学生集合对象到文件
		boolean flag = StudentUtil.saveStudentListToFile(lsst);
		if (flag) {
     
			System.out.println("学生信息保存成功!");
		} else {
     
			System.out.println("学生信息保存失败!");
		}
	}

	@Override
	public void update(Student st) {
     
		// 先获取文件中保存的学生集合对象
		lsst = (ArrayList<Student>) StudentUtil.findStudentListFromFile();
		if (lsst == null || lsst.isEmpty()) {
     
			System.out.println("还没有学生信息存在,请先添加!");
			return;
		}

		// 定义学生对象在集合中的索引位置
		int index = -1;

		// 在循环中查询是否存在要修改的学生对象
		int i = 0;// 集合的下标索引
		for (Student stu : lsst) {
     
			if (stu.getSid().intValue() == st.getSid().intValue()) {
     
				index = i;// 找到学生
				break;
			}
			i++;// 移动下标位置
		}

		if (index != -1) {
     
			// 从集合更新学生对象
			lsst.set(index, st);
			// 保存学生集合对象到文件
			StudentUtil.saveStudentListToFile(lsst);
			System.out.println("学生信息更新成功!");
		} else {
     
			System.out.println("学生信息更新失败!");
		}
	}

	@Override
	public void delById(Integer sid) {
     
		// 先获取文件中保存的学生集合对象
		lsst = (ArrayList<Student>) StudentUtil.findStudentListFromFile();
		if (lsst == null || lsst.isEmpty()) {
     
			System.out.println("还没有学生信息存在,请先添加!");
			return;
		}

		// 定义学生对象在集合中的索引位置
		int index = -1;

		// 在循环中查询是否存在要修改的学生对象
		int i = 0;// 集合的下标索引
		for (Student stu : lsst) {
     
			if (stu.getSid().intValue() == sid.intValue()) {
     
				index = i;// 找到学生
				break;
			}
			i++;// 移动下标位置
		}

		if (index != -1) {
     
			// 从集合删除学生对象
			lsst.remove(index);
			// 保存删除后的学生集合对象到文件
			StudentUtil.saveStudentListToFile(lsst);
			System.out.println("学生信息删除成功!");
		} else {
     
			System.out.println("学生信息删除失败!");
		}

	}

	@Override
	public void findById(Integer sid) {
     
		// 先获取文件中保存的学生集合对象
		lsst = (ArrayList<Student>) StudentUtil.findStudentListFromFile();
		if (lsst == null || lsst.isEmpty()) {
     
			System.out.println("还没有学生信息存在,请先添加!");
			return;
		}

		// 定义学生对象在集合中的索引位置
		int index = -1;

		// 在循环中查询是否存在要修改的学生对象
		int i = 0;// 集合的下标索引
		for (Student stu : lsst) {
     
			if (stu.getSid().intValue() == sid.intValue()) {
     
				index = i;// 找到学生
				break;
			}
			i++;// 移动下标位置
		}

		if (index != -1) {
     
			System.out.println("找到的学生信息为:");
			// 从集合中获取学生信息
			Student st = lsst.get(index);
			System.out.println("编号\t姓名\t性别\t地址\t年龄\t班级");
			System.out
					.println("===================================================");
			System.out.println(st.getSid() + "\t" + st.getSname() + "\t"
					+ st.getSex() + "\t" + st.getAddress() + "\t" + st.getAge()
					+ "\t" + st.getClassname());
			System.out
					.println("===================================================");

		} else {
     
			System.out.println("没有找到学生信息!!");
		}

	}

	@Override
	public void findAll() {
     
		// 先获取文件中保存的学生集合对象
		lsst = (ArrayList<Student>) StudentUtil.findStudentListFromFile();
		if (lsst == null || lsst.isEmpty()) {
     
			System.out.println("还没有学生信息存在,请先添加!");
			return;
		}
		System.out.println("编号\t姓名\t性别\t地址\t年龄\t班级");
		System.out
				.println("===================================================");
		for (Student st : lsst) {
     
			System.out.println(st.getSid() + "\t" + st.getSname() + "\t"
					+ st.getSex() + "\t" + st.getAddress() + "\t" + st.getAge()
					+ "\t" + st.getClassname());
		}
		System.out
		.println("===================================================");
	}

}

4、创建动作类,实现学生信息的界面交互

package com.action;
import java.util.*;
import java.io.*;
import com.bean.*;
import com.biz.*;
public class StudentAction {
     
	private StudentBiz sbiz=new StudentBizImp();//创建学生业务对象
	private Scanner input=new Scanner(System.in);
	
	/**
	 * 录入学生信息的方法
	 * */
	public Student inputStudentInfo(){
     
		Student st=new Student();
		
		System.out.println("输入学生的姓名:");
		st.setSname(input.next());
		
		System.out.println("输入学生的性别:");
		st.setSex(input.next());
		
		System.out.println("输入学生的地址:");
		st.setAddress(input.next());
		
		System.out.println("输入学生的年龄:");
		st.setAge(input.nextInt());
		
		System.out.println("输入学生的班级:");
		st.setClassname(input.next());
		
		return st;
	}
	
	/***
	 * 创建菜单,实现界面的交互
	 * */
	public void showMenu(){
     
		Student st=null;
		Integer sid=-1;
		
		try {
     
			while(true){
     
				System.out.println("==学生信息管理2.0==");
				System.out.println("1--增加");
				System.out.println("2--修改");
				System.out.println("3--删除");
				System.out.println("4--查找");
				System.out.println("5--显示");
				System.out.println("0--退出");
				System.out.println("================");
				System.out.println("请选择0-5之间的操作:");
				int op=input.nextInt();
				switch (op) {
     
				case 1:
					System.out.println("学生信息管理>>添加");
					System.out.println("请输入学生的信息:");
					st=inputStudentInfo();
					sbiz.save(st);//保存学生
					break;
				case 2:
					System.out.println("学生信息管理>>修改");
					
					System.out.println("请输入要修改学生编号:");
					sid=input.nextInt();
					//查询要修改的学生
					st=sbiz.findById(sid);
					if(st==null){
     
						System.out.println("没有该学生信息存在!");
					}else{
     
						System.out.println("请输入要修改的学生信息:");
						st=inputStudentInfo();
						st.setSid(sid);
						sbiz.update(st);//保存学生
					}
					
					
					break;
				case 3:
					System.out.println("学生信息管理>>删除");
					
					System.out.println("请输入要删除学生编号:");
					sid=input.nextInt();
					
					sbiz.delById(sid);//删除学生
					
					break;
				case 4:
					System.out.println("学生信息管理>>查找");
					
					System.out.println("请输入要查询学生编号:");
					sid=input.nextInt();
					
					sbiz.findById(sid);
					
					break;
				case 5:
					System.out.println("学生信息管理>>显示");
					
					sbiz.findAll();//显示
					
					break;
				case 0:
					System.out.println("谢谢使用,系统退出!");
					System.exit(0);
					break;
				default:
					System.out.println("请选择从0-5之间的数字!");
					break;
				}
				
			}
		} catch (Exception e) {
     
			System.out.println("未知错误!");
			input=new Scanner(System.in);
		}
		
	}
}

5、创建启动类(主类),启动并运行程序,代码如下。

package com.main;
import com.action.*;
public class StudentMain {
     

	/**
	 * @param args
	 */
	public static void main(String[] args) {
     
		StudentAction sa=new StudentAction();
		sa.showMenu();
	}

}

代码仅供参考,如有不妥之处请勿喷,来自一个博客小白的心声

你可能感兴趣的:(java)