历时一天半,自己终于完成了一个建议的本地图书管理系统,其中困惑我的在于对集合的迭代,我在这个地方耗费的时间最长,在迭代的同时经常出现concurrenttmodification的异常,经过一上午的排除,终于解决了这个问题,

这个问题:

1.在于我在使用迭代器循环的时候一开始没注意每调用一次it.next()就会往后移动一次

2.在于我在调用it.remove()的时候,进行了books.add()操作,导致了remove()底层的参数出现异常

现在附上源码,欢迎补充。

package cn.itcast.operater;import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.Scanner;import cn.itcast.entity.Book;
import cn.itcast.entity.Maneger;
import cn.itcast.entity.User;
import cn.itcast.sort.DateSort;
import cn.itcast.sort.PriceSort;
import cn.itcast.sort.WriterSort;public class HomePage {public static void main(String[] args) {ArrayList<User> users = new ArrayList<User>();ArrayList<Maneger> manegers = new ArrayList<Maneger>();ArrayList<Book> books = new ArrayList<Book>();users.add(new User("张三", "123456"));users.add(new User("1", "1"));manegers.add(new Maneger("admin", "123456"));manegers.add(new Maneger("2", "2"));books.add(new Book("java", "吴想", "江南出版社", 55.0f, 12, "2019-01-06"));books.add(new Book("java之路2", "吴想", "江南出版社", 56.0f, 1234868, "2019-05-06"));books.add(new Book("java之路3", "吴想", "江南出版社", 50.0f, 1289568, "2019-09-06"));homePageShow();selectFunction(users, manegers, books);}private static void selectFunction(ArrayList<User> users, ArrayList<Maneger> manegers, ArrayList<Book> books) {// 主界面选择功能System.out.println("请选择功能: 用户登录(A)注册用户(B)退出系统(Q)");Scanner sc = new Scanner(System.in);while (true) {String op = sc.next();if ("A".equalsIgnoreCase(op)) {login(users, manegers, books);} else if ("B".equalsIgnoreCase(op)) {resign(users, manegers, books);} else if ("Q".equalsIgnoreCase(op)) {System.out.println("退出系统");System.exit(0);} else {System.out.println("错误输入···");}}}private static void resign(ArrayList<User> users, ArrayList<Maneger> manegers, ArrayList<Book> books) {// 注册Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入用户名:");String name = sc.next();System.out.println("请输入密码:");String password = sc.next();User user = new User(name, password);if (users.contains(user)) {System.out.println("该用户已注册···");System.out.println("请重新输入用户名···");} else {if (users.add(user)) {System.out.println("注册成功");break;}}}login(users, manegers, books);}private static void login(ArrayList<User> users, ArrayList<Maneger> manegers, ArrayList<Book> books) {// 登陆Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入用户名:");String name = sc.next();System.out.println("请输入密码:");String password = sc.next();User user = new User(name, password);Maneger maneger = new Maneger(name, password);if (users.contains(user)) {System.out.println("欢迎用户:" + name);selectOp(users, books, 1);} else if (manegers.contains(maneger)) {System.out.println("欢迎管理员:" + name);selectOp(users, books, 2);} else {System.out.println("错误用户名···");}}}private static void selectOp(ArrayList<User> users, ArrayList<Book> books, int i) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);while (true) {System.out.println("请选择功能:");System.out.println("查看图书(A)添加图书(B)修改图书(C)删除图书(D)修改用户名(E)");System.out.println("修改密码(F)修改用户(G)删除用户(H)查看所有用户(I)注销(Q)");String op = sc.next();if ("a".equalsIgnoreCase(op)) {checkbooks(users, books);} else if ("b".equalsIgnoreCase(op)) {addBooks(users, books);} else if ("c".equalsIgnoreCase(op)) {modifyBooks(users, books);} else if ("d".equalsIgnoreCase(op)) {removeBooks(users, books);} else if ("e".equalsIgnoreCase(op)) {modifyUserName(users);} else if ("f".equalsIgnoreCase(op)) {modifyUserPassword(users);} else if ("g".equalsIgnoreCase(op)) {if (i == 1) {System.out.println("没有权限···");} else if (i == 2) {modifyUser(users);}} else if ("h".equalsIgnoreCase(op)) {if (i == 1) {System.out.println("没有权限···");} else if (i == 2) {removeUser(users);}} else if ("i".equalsIgnoreCase(op)) {checkAllUsers(users);} else if ("q".equalsIgnoreCase(op)) {System.err.println("注销···");System.exit(0);}}}private static void checkAllUsers(ArrayList<User> users) {System.out.println("所有用户:");for (User user : users) {System.out.print(user);}}private static void removeUser(ArrayList<User> users) {checkAllUsers(users);boolean flag = true;Scanner sc = new Scanner(System.in);System.out.println("请选择你要删除的用户:");String name = sc.next();Iterator<User> it = users.iterator();while (it.hasNext()) {if ((it.next().getName().equals(name))) {System.out.println("(Y)是否确定删除···");String op = sc.next();if ("Y".equalsIgnoreCase(op)) {System.out.println("正在删除···");it.remove();if (flag) {System.out.println("删除成功");flag = false;break;}} else {System.out.println("取消删除");}}}if (flag) {System.out.println("没有此人···");}}private static void modifyUser(ArrayList<User> users) {checkAllUsers(users);boolean flag = true;Scanner sc = new Scanner(System.in);System.out.println("请选择你要修改的用户:");String name = sc.next();User u;Iterator<User> it = users.iterator();while (it.hasNext()) {u = it.next();if ((u.getName().equals(name))) {System.out.println("(Y)是否确定修改···");String op = sc.next();if ("Y".equalsIgnoreCase(op)) {while (true) {op = sc.next();System.out.println("(M)修改名字(P)修改密码(R)删除用户");if ("R".equalsIgnoreCase(op)) {System.out.println("正在删除···");it.remove();System.out.println("删除成功");flag = false;break;} else if ("M".equalsIgnoreCase(op)) {System.out.println("正在修改名字···");System.out.println("请输入新名字:");String n = sc.next();u.setName(n);it.remove();users.add(u);System.out.println("修改成功");flag = false;break;} else if ("P".equalsIgnoreCase(op)) {System.out.println("正在修改密码···");System.out.println("请输入新密码:");String password = sc.next();u.setPassword(password);it.remove();users.add(u);System.out.println("修改成功");flag = false;break;}}} else {System.out.println("取消修改····");}}}if (flag) {System.out.println("没有此人···");}}private static void modifyUserPassword(ArrayList<User> users) {checkAllUsers(users);boolean flag = true;Scanner sc = new Scanner(System.in);System.out.println("请选择你要修改密码的用户:");String name = sc.next();Iterator<User> it = users.iterator();User u;while (it.hasNext()) {u = it.next();if ((u.getName().equals(name))) {System.out.println("(Y)是否确定修改···");String op = sc.next();if ("Y".equalsIgnoreCase(op)) {System.out.println("请输入新密码:");String password = sc.next();System.out.println("正在修改···");u.setPassword(password);it.remove();users.add(u);System.out.println("修改成功");flag = false;break;}}}if (flag) {System.out.println("没有此人···");}}private static void modifyUserName(ArrayList<User> users) {checkAllUsers(users);boolean flag = true;Scanner sc = new Scanner(System.in);System.out.println("请选择你要修改名字的用户:");String name = sc.next();Iterator<User> it = users.iterator();User u;while (it.hasNext()) {u = it.next();if ((u.getName().equals(name))) {System.out.println("是否确定修改···");String op = sc.next();if ("Y".equalsIgnoreCase(op)) {System.out.println("正在修改···");System.out.println("请输入新名字:");name = sc.next();u.setPassword(name);it.remove();users.add(u);System.out.println("修改成功");flag = false;break;}}}if (flag) {System.out.println("没有此人···");}}private static void removeBooks(ArrayList<User> users, ArrayList<Book> books) {Scanner sc = new Scanner(System.in);String op;Iterator<Book> it = books.iterator();while (true) {System.out.println("请选择要删除的操作:(A)按书名删除(B)按作者删除(C)书号删除  (E)返回上一级");op = sc.next();if ("a".equalsIgnoreCase(op)) {System.out.println("请输入书名:");String name = sc.next();remove(books, name);} else if ("b".equalsIgnoreCase(op)) {System.out.println("请输入作者:");String writer = sc.next();remove(books, writer);} else if ("c".equalsIgnoreCase(op)) {System.out.println("请输入书号:");long num = sc.nextLong();remove(books, num);} else if ("e".equalsIgnoreCase(op)) {selectOp(users, books, 1);}}}private static void remove(ArrayList<Book> books, long num) {Iterator<Book> it = books.iterator();boolean flag = true;Scanner sc = new Scanner(System.in);while (it.hasNext()) {if (it.next().getNum() == num) {System.out.println("|书名|       |作者|    |出版社|   |价格|   |书号|   |出版日期|");System.out.println(it.next());System.out.println("是否确定删除···");String op = sc.next();if ("Y".equalsIgnoreCase(op)) {System.out.println("正在删除···");it.remove();System.out.println("删除成功");flag = false;break;}}}if (flag) {System.out.println("没有此书··");}}private static void remove(ArrayList<Book> books, String str) {Iterator<Book> it = books.iterator();boolean flag = true;Scanner sc = new Scanner(System.in);while (it.hasNext()) {if ((it.next().getName().equals(str)) || (it.next().getWriter().equals(str))) {System.out.println("|书名|       |作者|    |出版社|   |价格|   |书号|   |出版日期|");System.out.println(it.next());System.out.println("是否确定删除···");String op = sc.next();if ("Y".equalsIgnoreCase(op)) {System.out.println("正在删除···");it.remove();System.out.println("删除成功");flag = false;break;}}}if (flag) {System.out.println("没有此书··");}}private static void modifyBooks(ArrayList<User> users, ArrayList<Book> books) {System.out.println(books);Scanner sc = new Scanner(System.in);boolean flag = false;Iterator<Book> it = books.iterator();Book b = new Book();String op;System.out.println(books);System.out.println("请选择要修改的书的书号:");long num = sc.nextLong();while (it.hasNext()) {b = it.next();if (b.getNum() == num) {it.remove();break;}}while (true) {System.out.println("请选择要修改的属性:(A)书名修改(B)作者修改(C)出版社修改(E)书号修改 (F)出版日期修改 (G)返回上一级");op = sc.next();if ("a".equalsIgnoreCase(op)) {System.out.println("请输入新书名:");String name = sc.next();b.setName(name);} else if ("b".equalsIgnoreCase(op)) {System.out.println("请输入新作者:");String writer = sc.next();b.setWriter(writer);} else if ("c".equalsIgnoreCase(op)) {System.out.println("请输入新出版社:");String publish = sc.next();b.setPublish(publish);} else if ("d".equalsIgnoreCase(op)) {System.out.println("请输入新价格:");float price = sc.nextFloat();b.setPrice(price);} else if ("e".equalsIgnoreCase(op)) {System.out.println("请输入新书号:");long num1 = sc.nextLong();b.setNum(num1);} else if ("f".equalsIgnoreCase(op)) {System.out.println("请输入新出版日期:");String date = sc.next();b.setDate(date);} else if ("g".equalsIgnoreCase(op)) {break;}}System.out.println("修改成功···");books.add(b);}private static void addBooks(ArrayList<User> users, ArrayList<Book> books) {Scanner sc = new Scanner(System.in);System.out.println("增加图书:");String op;while (true) {System.out.println("请输入书名:");String name = sc.next();System.out.println("请输入作者:");String writer = sc.next();Book book = new Book(name);if (books.contains(book)) {System.out.println("该书已经录入···");} else {System.out.println("请输入出版社:");String publish = sc.next();System.out.println("请输入价格:");float price = sc.nextFloat();System.out.println("请输入书号:");long num = sc.nextLong();System.out.println("请输入出版日期:");String date = sc.next();book.setWriter(writer);book.setPublish(publish);book.setPrice(price);book.setNum(num);book.setDate(date);System.out.println("新书的信息如下: " + book);System.out.println("是否保存该书:(Y)是(N)否");String op1 = sc.next();if ("Y".equalsIgnoreCase(op1)) {System.out.println("正在添加····");if (books.add(book)) {System.out.println("添加成功");break;} else {System.out.println("错误输入····");break;}}}}System.out.println("请选择功能:");System.out.println("(A)查看图书(B)添加图书(C)修改图书(D)删除图书");op = sc.next();if ("a".equalsIgnoreCase(op)) {checkbooks(users, books);} else if ("b".equalsIgnoreCase(op)) {addBooks(users, books);} else if ("c".equalsIgnoreCase(op)) {modifyBooks(users, books);} else if ("d".equalsIgnoreCase(op)) {removeBooks(users, books);}}private static void checkbooks(ArrayList<User> users, ArrayList<Book> books) {showBooks(books);Scanner sc = new Scanner(System.in);while (true) {String op = sc.next();if ("a".equalsIgnoreCase(op)) {priceSortBooks(books);} else if ("b".equalsIgnoreCase(op)) {writerSortBooks(books);} else if ("c".equalsIgnoreCase(op)) {dateSortBooks(books);} else if ("e".equalsIgnoreCase(op)) {// 返回上一级break;}showBooks(books);}}private static void dateSortBooks(ArrayList<Book> books) {// TODO Auto-generated method stubCollections.sort(books, new DateSort());}private static void writerSortBooks(ArrayList<Book> books) {// TODO Auto-generated method stubCollections.sort(books, new WriterSort());}private static void priceSortBooks(ArrayList<Book> books) {// TODO Auto-generated method stubCollections.sort(books, new PriceSort());}// 显示所有图书private static void showBooks(ArrayList<Book> books) {System.out.println("查看图书:");System.out.println("|书名|       |作者|    |出版社|   |价格|   |书号|   |出版日期|");for (Book book : books) {System.out.println(book);}System.out.println("请选择查看方式:(A)价格排序(B)作者排序(C)出版日期排序(E)返回上一级");}private static void homePageShow() {// 主界面显示for (int i = 0; i < 10; i++)System.out.print('*');for (int i = 0; i < 10; i++) {System.out.println();if (i == 5) {System.out.println("欢迎使用图书管理系统");}for (int j = 0; j < 10; j++)System.out.print(' ');}System.out.println();for (int i = 0; i < 10; i++)System.out.print('*');System.out.println();System.out.println("请选择功能:");}}
package cn.itcast.entity;public class Book {public String getName() {return name;}public void setName(String name) {this.name = name;}public String getWriter() {return writer;}public void setWriter(String writer) {this.writer = writer;}public String getPublish() {return publish;}public void setPublish(String publish) {this.publish = publish;}public float getPrice() {return price;}public void setPrice(float price) {this.price = price;}public long getNum() {return num;}public void setNum(long num) {this.num = num;}public String getDate() {return date;}public void setDate(String date) {this.date = date;}String name;String writer;String publish;float price;long num;String date;public Book(String name, String writer, String publish, float price, long num, String date) {this.name = name;this.writer = writer;this.publish = publish;this.price = price;this.num = num;this.date = date;}public Book(String name) {this.name = name;}public Book() {// TODO Auto-generated constructor stub}@Overridepublic boolean equals(Object obj) {// TODO Auto-generated method stubBook book = (Book)obj;boolean b = (this.name.equals(book.name)&&(this.writer.equals(book.writer)));return b;}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "书名:"+this.name+" 作者:"+this.writer+ " 价格:"+this.price+" 书号:"+this.num+" 出版日期:"+this.date;}
}
package cn.itcast.entity;import java.util.Comparator;public class Maneger implements Comparable<Maneger>{String name;String password;String role = "管理员";public Maneger(String name, String password) {this.name = name;this.password = password;}@Overridepublic int compareTo(Maneger o) {// TODO Auto-generated method stubreturn this.name.compareTo(o.name);}@Overridepublic boolean equals(Object obj) {// TODO Auto-generated method stubManeger m = (Maneger)obj;return (this.name.equals(m.name)&&this.password.equals(m.password));}@Overridepublic int hashCode() {// TODO Auto-generated method stubreturn 0;}}
package cn.itcast.entity;public class User {String name;String password;String role = "用户";public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public User(String name, String password) {this.name = name;this.password = password;}@Overridepublic boolean equals(Object obj) {User u = (User)obj;boolean b = (this.name.equals(u.name)&&this.password.equals(u.password));return b;}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "{姓名: "+this.name+" } ";}
}

(二)经过修改,添加了对象序列化和反序列化功能,也就是把书籍和用户的信息保存到本地,在其中出现了,blockdatainputStream peek.Byte异常,原因是反序列化的时候出现了不能正常判断已经读到文件末的判断,在序列化的最后添加上,writeObject(null),即可解决这个问题

现在附上源码

private static void updateUsersAndbooks(ArrayList<User> users, ArrayList<Book> books) {

try {

File fileBooks = new File("D:textBooks.txt");

FileOutputStream fileOutputStream = new FileOutputStream(fileBooks);

ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);

for(int i = 0;i<books.size();i++) {

objectOutputStream.writeObject(books.get(i));

}

objectOutputStream.writeObject(null);

objectOutputStream.close();

File fileUsers = new File("D:textUsers.txt");

fileOutputStream = new FileOutputStream(fileUsers);

objectOutputStream = new ObjectOutputStream(fileOutputStream);

for(int i = 0;i<users.size();i++) {

objectOutputStream.writeObject(users.get(i));

}

objectOutputStream.writeObject(null);

objectOutputStream.close();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

private static void createUsersAndbooks(ArrayList<User> users, ArrayList<Book> books) {

try {

File fileBooks = new File("D:textBooks.txt");

File fileUsers = new File("D:textUsers.txt");

FileInputStream fileInputStream = new FileInputStream(fileBooks);

ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);

Book book = null;

while((book = (Book)objectInputStream.readObject()) != null) {

books.add(book);

}

System.out.println("Books初始化完毕···");

objectInputStream.close();

fileInputStream = new FileInputStream(fileUsers);

objectInputStream = new ObjectInputStream(fileInputStream);

User user = null;

while((user = (User)objectInputStream.readObject()) != null) {

users.add(user);

}

System.out.println("Users初始化完毕···");

objectInputStream.close();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

图书管理系统c++_图书管理功能相关推荐

  1. 怎样实现登录用户管理_如何编写程序实现图书管理系统里面的用户管理功能

    上节课完成了库存管理功能. 这节课来完成用户管理功能. 编写用户管理功能 用户管理主要是针对数据库表user进行维护,功能包括查询.新增.编辑和删除. 特别注意,删除用户时要确保该用户的不存在订单记录 ...

  2. 纯前端vue+bootstrap实现图书管理系统的添加、删除功能

    1.纯前端vue+bootstrap实现图书管理系统的添加.删除功能最终效果界面 2.添加效果 3.删除效果 4.前端代码:图书管理系统.html <!DOCTYPE html> < ...

  3. php 订单状态如何_如何编写程序实现图书管理系统当中的借书功能

    上节课完成了用户管理功能. 这节课来完成借书管理功能. 编写借书管理功能 借书管理主要是针对数据库表orders进行维护,功能包括查询.新增. 然后需要编写根据IC卡号或身份证号进行查询用户信息,以及 ...

  4. 图书管理系统c++_校园图书系统写后感

    到今天为止自学C语言已经半年了,今天才算把我那个图书系统给写完,陆陆续续写了有二十来天,或许你们觉得我学的好慢,开发的更慢.没错,我也认为好慢 ,但是我现在是在工作啊,还是销售,天天加班,而且自己也不 ...

  5. php和mysql实现图书管理系统_0074 实现图书管理系统的登录、员工和菜单功能

    上节课完成了图书馆管理系统的所有设计工作. 这节课开始进行代码编写,具体的编程思考细节可以参照之前编写新闻发布系统的思路. 编写共通代码 后台网页权限检查文件,check_auth.php代码如下: ...

  6. java工作日报管理系统_GitHub - LovebuildJ/book-manager: JavaWeb图书管理系统,简单易用功能强大,可拓展性高,集成主流框架...

    book-manager 介绍 图书管理系统 请勿忽略更新日志, 会有详细的版本更新说明! 软件截图 在线API接口文档 登录 首页轮播 图书列表 图书上架 图书编辑 图书删除 图书借阅 图书检索 图 ...

  7. Java Swing图书管理系统,界面漂亮、功能全,直接使用 窗体版本-400

    今天为大家分享一个java语言编写的图书管理程序-400,目前系统功能已经很全面,后续会进一步完善.整个系统界面漂亮,有完整得源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 ...

  8. java图书管理系统目的_java_图书管理系统java版,本文的目的就是通过图书管理 - phpStudy...

    图书管理系统java版 本文的目的就是通过图书管理系统掌握数据库编程技术,能正确连接数据库,能对数据库中信息进行查询.插入.删除.修改. 内容:在数据库中创建一张书目信息表,包括书名.作者.出版社.出 ...

  9. Java jdbc连接数据库 图书管理系统实现添加图书功能

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  10. 图书管理系统(c语言)功能比较全

    前提:最近看到蛮多链表的课设,然后发现其实都差不多,图书管理系统,学生信息等,然后把去年的学生信息管理系统改了改,改成图书管理系统 效果如下: ①界面 ②输入,不一定5个,最后####结尾就好,这里本 ...

最新文章

  1. subList用法详解
  2. mysql:视图,触发器,事务,存储过程,函数
  3. android中内存泄露,Android中的内存泄露
  4. so调用so 编译 android,android-5分钟入门-CMake方式使用JNI(.so调用篇)
  5. 《深入PHP:面向对象、模式与实践》(二)
  6. python电子英汉词典显示_python网页抓取之英汉字典
  7. 如何使用JavaScript删除CSS属性?
  8. 漫画:7种编程语言的学习曲线
  9. 使用 ramda 解析 .yarnrc/.npmrc 配置文件的例子
  10. 执行pip安装的程序:command not found
  11. 【kafka】Kafka扩容
  12. Build.VERSION类
  13. 论文赏析[NAACL19]基于DIORA的无监督隐式句法树归纳
  14. 基础数据结构-线性表-顺序表的连续操作
  15. 【算法工程师】成为一名优秀的机器学习算法工程师所需知识及资料汇总-附思维导图
  16. 计算机学术论文shortessay,实用的Academic Essay写作技巧汇总
  17. 【00】伪类选择符-魔芋的理解
  18. linux下PNG、JEPG、JPG、Webp图片格式互转
  19. android 重启 logo,MSM8909+Android5.1.1开机logo对应的splash.img生成
  20. 让女人无法抗拒的30句表白【实用】

热门文章

  1. Python学习-4天--字典的操作
  2. CentOS安装python包安装管理工具pip
  3. JQuery easyui (1) Draggable(拖动)组件
  4. Exchange2003不能自动删除日志
  5. Android常用提示框(dialog和popuwindow)
  6. 【揭秘】一个小团队真正能落地的微服务架构实践
  7. CSS实现tag标签挂载放到卡片上
  8. Python的文件读取操作
  9. 关于SDWebImage
  10. The run destination 设备名称 is not valid for Running the scheme '项目名称'.