一、使用文件构建学生信息管理
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();
}
}
代码仅供参考,如有不妥之处请勿喷,来自一个博客小白的心声