图书管理系统c++_图书管理功能
历时一天半,自己终于完成了一个建议的本地图书管理系统,其中困惑我的在于对集合的迭代,我在这个地方耗费的时间最长,在迭代的同时经常出现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++_图书管理功能相关推荐
- 怎样实现登录用户管理_如何编写程序实现图书管理系统里面的用户管理功能
上节课完成了库存管理功能. 这节课来完成用户管理功能. 编写用户管理功能 用户管理主要是针对数据库表user进行维护,功能包括查询.新增.编辑和删除. 特别注意,删除用户时要确保该用户的不存在订单记录 ...
- 纯前端vue+bootstrap实现图书管理系统的添加、删除功能
1.纯前端vue+bootstrap实现图书管理系统的添加.删除功能最终效果界面 2.添加效果 3.删除效果 4.前端代码:图书管理系统.html <!DOCTYPE html> < ...
- php 订单状态如何_如何编写程序实现图书管理系统当中的借书功能
上节课完成了用户管理功能. 这节课来完成借书管理功能. 编写借书管理功能 借书管理主要是针对数据库表orders进行维护,功能包括查询.新增. 然后需要编写根据IC卡号或身份证号进行查询用户信息,以及 ...
- 图书管理系统c++_校园图书系统写后感
到今天为止自学C语言已经半年了,今天才算把我那个图书系统给写完,陆陆续续写了有二十来天,或许你们觉得我学的好慢,开发的更慢.没错,我也认为好慢 ,但是我现在是在工作啊,还是销售,天天加班,而且自己也不 ...
- php和mysql实现图书管理系统_0074 实现图书管理系统的登录、员工和菜单功能
上节课完成了图书馆管理系统的所有设计工作. 这节课开始进行代码编写,具体的编程思考细节可以参照之前编写新闻发布系统的思路. 编写共通代码 后台网页权限检查文件,check_auth.php代码如下: ...
- java工作日报管理系统_GitHub - LovebuildJ/book-manager: JavaWeb图书管理系统,简单易用功能强大,可拓展性高,集成主流框架...
book-manager 介绍 图书管理系统 请勿忽略更新日志, 会有详细的版本更新说明! 软件截图 在线API接口文档 登录 首页轮播 图书列表 图书上架 图书编辑 图书删除 图书借阅 图书检索 图 ...
- Java Swing图书管理系统,界面漂亮、功能全,直接使用 窗体版本-400
今天为大家分享一个java语言编写的图书管理程序-400,目前系统功能已经很全面,后续会进一步完善.整个系统界面漂亮,有完整得源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 ...
- java图书管理系统目的_java_图书管理系统java版,本文的目的就是通过图书管理 - phpStudy...
图书管理系统java版 本文的目的就是通过图书管理系统掌握数据库编程技术,能正确连接数据库,能对数据库中信息进行查询.插入.删除.修改. 内容:在数据库中创建一张书目信息表,包括书名.作者.出版社.出 ...
- Java jdbc连接数据库 图书管理系统实现添加图书功能
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...
- 图书管理系统(c语言)功能比较全
前提:最近看到蛮多链表的课设,然后发现其实都差不多,图书管理系统,学生信息等,然后把去年的学生信息管理系统改了改,改成图书管理系统 效果如下: ①界面 ②输入,不一定5个,最后####结尾就好,这里本 ...
最新文章
- subList用法详解
- mysql:视图,触发器,事务,存储过程,函数
- android中内存泄露,Android中的内存泄露
- so调用so 编译 android,android-5分钟入门-CMake方式使用JNI(.so调用篇)
- 《深入PHP:面向对象、模式与实践》(二)
- python电子英汉词典显示_python网页抓取之英汉字典
- 如何使用JavaScript删除CSS属性?
- 漫画:7种编程语言的学习曲线
- 使用 ramda 解析 .yarnrc/.npmrc 配置文件的例子
- 执行pip安装的程序:command not found
- 【kafka】Kafka扩容
- Build.VERSION类
- 论文赏析[NAACL19]基于DIORA的无监督隐式句法树归纳
- 基础数据结构-线性表-顺序表的连续操作
- 【算法工程师】成为一名优秀的机器学习算法工程师所需知识及资料汇总-附思维导图
- 计算机学术论文shortessay,实用的Academic Essay写作技巧汇总
- 【00】伪类选择符-魔芋的理解
- linux下PNG、JEPG、JPG、Webp图片格式互转
- android 重启 logo,MSM8909+Android5.1.1开机logo对应的splash.img生成
- 让女人无法抗拒的30句表白【实用】