使用IO技术把图书管理系统进行优化,将数据存储在集合中,在程序被关闭以后,存储的数据就不会丢失,每次启动的时候读取文件中的内容,实现程序数据一直存在。
分析:
相较于之前的一篇实现集合存储图书数据,第一就是使得Book类实现可序列化接口(implements Serializable);第二是在Main类加入载入(load)和存储(store)方法,避免当文件不存在时进行读取发生的错误即可,详看代码:
1.登陆系统
LogIn
public class LogIn {
Scanner input = new Scanner(System.in);
//自定义账户名和密码,都设置为String类型
private String count = "admin";
private String password = "123";
//生成equals和hashCode方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
LogIn logIn = (LogIn) o;
return Objects.equals(count, logIn.count) &&
Objects.equals(password, logIn.password);
}
@Override
public int hashCode() {
return Objects.hash(count, password);
}
//生成无参构造方法
public LogIn() {
}
//值定义log方法
public void log(){
while(true){
System.out.println("请输入账户名:");
//使用input.nextLine()接收数据不会出错
String countIn = input.nextLine();
System.out.println("请输入密码:");
String passwordIn = input.nextLine();
//调用equals方法判断是否登陆重成功,这一点我也有一点懵逼
if(count.equals(countIn) && password.equals(passwordIn)){
System.out.println("登陆成功!");
break;
}else{
System.out.println("账户/密码错误,请重新操作");
}
}
}
}
2.Book类
public class Book implements Serializable {
//创建图书属性:书名booklist、书的价格price、出版的年publishYear、出版的月publishMonth
private String booklist;
private double pirce;
private int publishMonth;
private int publishYear;
//生成构造方法、toString(),getter/setter方法
public Book() {
}
@Override
public String toString() {
return "Book{" +
"booklist='" + booklist + '\'' +
", pirce=" + pirce +
", publishMonth=" + publishMonth +
", publishYear=" + publishYear +
'}';
}
public String getBooklist() {
return booklist;
}
public void setBooklist(String booklist) {
this.booklist = booklist;
}
public double getPirce() {
return pirce;
}
public void setPirce(double pirce) {
this.pirce = pirce;
}
public int getPublishMonth() {
return publishMonth;
}
public void setPublishMonth(int publishMonth) {
this.publishMonth = publishMonth;
}
public int getPublishYear() {
return publishYear;
}
public void setPublishYear(int publishYear) {
this.publishYear = publishYear;
}
}
3.Librarin类
public class Librarin {
Scanner input = new Scanner(System.in);
//新增图书
public void add(ArrayList<Book> arrayList){
//创建Librarin,Book对象
Librarin lib = new Librarin();
Book book = new Book();
Scanner input = new Scanner(System.in);
//提示并且获取图书名称
System.out.println("请输入图书名称:");
String booklist = input.nextLine();
//获取图书价格并且判断输入的价格是否合理
System.out.println("请输入图书价格");
String p = input.nextLine();
//用于判断是否符合要求
boolean x = true;
double price = -1;
try{
price = Double.parseDouble(p);
}catch (NumberFormatException e){
System.out.println("价格输入有误,请重新操作");
//不符合要求,x = false
x = false;
}if(price < 0){
System.out.println("价格不能小于0,请重新操作");
x = false;
}
if(x == true) {
boolean ym = true;
System.out.println("请输入图书出版的年份:");
String y = input.nextLine();
System.out.println("请输入图书出版的月份:");
String m = input.nextLine();
int year = -1;
int mon = -1;
try {
year = Integer.parseInt(y);
mon = Integer.parseInt(m);
} catch (NumberFormatException e) {
System.out.println("输入有误,请重新操作");
}
//判断输入的年月是否再合理范围
if ((year>1000 && year<lib.getSystemYear()) && (mon>0 && mon<=12)) {
}else if(year == lib.getSystemYear() && (mon>0 && mon<=12)){
if(mon <= lib.getSystemMonth()){
}
}else{
System.out.println("输入的年份/月份不合理请重新操作");
ym = false;
}
if(ym == true){
//以上全部操作合理以后把数据存入book
book.setBooklist(booklist);
book.setPirce(price);
book.setPublishYear(year);
book.setPublishMonth(mon);
//把数据存入集合
arrayList.add(book);
System.out.println("该图书存储成功!"