拆分代码,封装工具类,降低了代码的耦合度
实体类的创建
Students 类实现序列化流,重写toString、hashcode、equals方法
class Students implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1993920244218311158L;
private String id;//学号
private String name;//姓名
private String sex;//性别
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 getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Students() {
super();
// TODO Auto-generated constructor stub
}
public Students(String id, String name, String sex) {
super();
this.id = id;
this.name = name;
this.sex = sex;
}
@Override
public String toString() {
return "Students [id=" + id + ", name=" + name + ", sex=" + sex + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((sex == null) ? 0 : sex.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Students other = (Students) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (sex == null) {
if (other.sex != null)
return false;
} else if (!sex.equals(other.sex))
return false;
return true;
}
}
封装工具类
对文件进行读写操作,参数为list集合
1.读取时 ,必须要保证文件必须存在,否则会报文件找不到异常
2.当文件中没有任何内容时,读取会报EOFException,首次运行不添加学生,先执行查询
class IOUtils{
public static ArrayList<Students> stuRead() {
File f = new File("stu.txt");
if (!f.exists()) {
try {
f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
ArrayList<Students> list = null;
try(
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("stu.txt")));
) {
list = (ArrayList<Students>) objectInputStream.readObject();
}catch (EOFException e) {
list=new ArrayList<Students>();
}
catch (Exception e) {
e.printStackTrace();
}
return list;
}
public static void stuWrite(ArrayList<Students> list) {
try(
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("stu.txt")));
) {
objectOutputStream.writeObject(list);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Dao层
interface StuDao{
public void add();
public void query();
public void updateStudent();
public void deleteStudent();
}
class StuDaoImpl implements StuDao{
@Override
public void add() {
ArrayList<Students> list = IOUtils.stuRead();
Scanner sc = new Scanner(System.in);
//System.out.println("请输入学号:");
//String id = sc.next();
System.out.println("请输入姓名:");
String name = sc.next();
System.out.println("请输入性别:");
String sex = sc.next();
String id = null;
if (list.size()==0) {
id="1";
}else {//学号是String类型,先转成integer类型,做加法,在转换回String,valueOf方法
Integer ID=Integer.valueOf(list.get(list.size()-1).getId())+1;
id=String.valueOf(ID);
}
list.add(new Students(id, name, sex));
IOUtils.stuWrite(list);
query();
}
@Override
public void query() {
ArrayList<Students> list = IOUtils.stuRead();
for (Students stu : list) {
System.out.println(stu);
}
}
@Override
public void updateStudent() {
System.out.println("请输入要修改学生信息的学生学号:");
Scanner sc = new Scanner(System.in);
String id = sc.next();
//判断学号是否存在
boolean flag=false;
ArrayList<Students> list = IOUtils.stuRead();
Iterator<Students> it = list.iterator();
while (it.hasNext()) {
Students stu = it.next();
if (stu.getId().equals(id)) {
//修改对象信息
System.out.println("请重新输入姓名:");
String name = sc.next();
System.out.println("请重新输入性别:");
String sex = sc.next();
stu.setName(name);
stu.setSex(sex);
//写入文件中
IOUtils.stuWrite(list);
flag=true;
}
}
if (flag) {
System.out.println("修改成功,修改后学生信息为:");
query();
}else {
System.out.println("修改失败,学号不存在!");
}
}
@Override
public void deleteStudent() {
System.out.println("请输入删除学生信息的学生学号:");
Scanner sc = new Scanner(System.in);
String id = sc.next();
//判断学号是否存在
boolean flag=false;
ArrayList<Students> list = IOUtils.stuRead();
Iterator<Students> it = list.iterator();
while (it.hasNext()) {
Students stu = it.next();
if (stu.getId().equals(id)) {
//学号存在,更改标识符
flag=true;
//删除对象
it.remove();
//写入文件中
IOUtils.stuWrite(list);
}
}
if (flag) {
System.out.println("删除成功,删除后学生信息为:");
query();
}else {
System.out.println("删除失败,学号不存在!");
}
}
}
功能模块
添加学生信息
实现学号自动生成,先判断集合是否为空,如果不为空,取到集合中的最后一个元素的学号属性值并加1,如果为空,则设置学号为1
public void add() {
ArrayList<Students> list = IOUtils.stuRead();
Scanner sc = new Scanner(System.in);
//System.out.println("请输入学号:");
//String id = sc.next();
System.out.println("请输入姓名:");
String name = sc.next();
System.out.println("请输入性别:");
String sex = sc.next();
//自动生成学号
/*1、判断集合中是否含有元素,如果没有元素,学生从1开始
*2、如果有元素,获取最后一个元素的学号,在该学号基础上+1
*/
String id = null;
if (list.size()==0) {
id="1";
}else {//学号是String类型,先转成integer类型,做加法,在转换回String,valueOf方法
Integer ID=Integer.valueOf(list.get(list.size()-1).getId())+1;
id=String.valueOf(ID);
}
list.add(new Students(id, name, sex));
IOUtils.stuWrite(list);
query();
}
查询学生信息
调用IO工具类中的方法,读取文件中的信息,然后用list集合接收,在进行遍历
public void query() {
ArrayList<Students> list = IOUtils.stuRead();
for (Students stu : list) {
System.out.println(stu);
}
}
修改学生信息
先判断修改学生的学号是否存在,用flag标志,如果存在在进行修改,修改完成后,在利用工具类的write方法写入文件中
public void updateStudent() {
System.out.println("请输入要修改学生信息的学生学号:");
Scanner sc = new Scanner(System.in);
String id = sc.next();
//判断学号是否存在
boolean flag=false;
ArrayList<Students> list = IOUtils.stuRead();
Iterator<Students> it = list.iterator();
while (it.hasNext()) {
Students stu = it.next();
if (stu.getId().equals(id)) {
//修改对象信息
System.out.println("请重新输入姓名:");
String name = sc.next();
System.out.println("请重新输入性别:");
String sex = sc.next();
stu.setName(name);
stu.setSex(sex);
//写入文件中
IOUtils.stuWrite(list);
flag=true;
}
}
if (flag) {
System.out.println("修改成功,修改后学生信息为:");
query();
}else {
System.out.println("修改失败,学号不存在!");
}
}
删除学生信息
public void deleteStudent() {
System.out.println("请输入删除学生信息的学生学号:");
Scanner sc = new Scanner(System.in);
String id = sc.next();
//判断学号是否存在
boolean flag=false;
ArrayList<Students> list = IOUtils.stuRead();
Iterator<Students> it = list.iterator();
while (it.hasNext()) {
Students stu = it.next();
if (stu.getId().equals(id)) {
//学号存在,更改标识符
flag=true;
//删除对象
it.remove();
//写入文件中
IOUtils.stuWrite(list);
}
}
if (flag) {
System.out.println("删除成功,删除后学生信息为:");
query();
}else {
System.out.println("删除失败,学号不存在!");
}
}