Java基础阶段综合练习_图书馆借还书管理系统_HashMap、ArrayList、(反)序列化流、
题目要求:
设计一个图书馆管理系统
用户可以注册、登录、
注册时检测用户名是否重复
登录后可以查看可借图书(图书馆的书)、已借图书
借书操作、还书操作、销户操作
还有一个管理员类
可以查看添加删除书和用户
这程序有个缺点就是因为书库和用户库是以集合的形式整体存储的
所以当数据量大了以后读写速度将变的很慢...
这个还没优化
代码展示如下
java文件可以打包下载文件附件
https://files.cnblogs.com/files/youlixin/LibrarySystem.zip
====================================
图书馆类:
package LibrarySystem; import java.io.IOException; import java.io.Serializable; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class Library implements Serializable { /** * */ private static final long serialVersionUID = 5592434503037466042L; // 起始方法 public void begin() throws ClassNotFoundException, IOException { System.out.println("====XXX图书馆欢迎您===="); while (true) { System.out.println("|-----------------------------|"); System.out.println("|请选择您要执行的操作(输入数字): |"); System.out.println("|1.登录 |"); System.out.println("|2.注册 |"); System.out.println("|0.退出 |"); // System.out.println("|-----------------------------|"); int operation = Library_Tool.getInt("|-----------------------------|"); if (operation == 1) { System.out.println("======请登录======"); this.login(); } else if (operation == 2) { this.register(); } else if (operation == 0) { Library_Tool.saveFile(); break; } else { System.out.println("请输入指定的数字"); } } System.out.println("---------------"); System.out.println("已退出"); } // 登录方法 public void login() throws ClassNotFoundException, IOException { // 登录循环 System.out.println("====登录===="); while (true) { // String id = DiyToolsaaa.DiyOperation.getString(i); String id = Library_Tool.getString("请输入用户名:"); String passWord = Library_Tool.getString("请输入密码:"); // 登录成功标记 boolean access = false; for (User user : Library_Tool.getUserList()) { if (id.equals(user.getName()) && passWord.equals(user.getPassWord())) { access = true; loginyes(user); break; } } if (!access) { // 登录密码错误执行 int loginerrorreturn = this.loginError(); if (loginerrorreturn == 1) { break; } } else { break; } } } // 注册方法 public void register() throws ClassNotFoundException, IOException { System.out.println("====注册===="); // 设置用户名 String registerName; while (true) { registerName = Library_Tool.getString("请设置用户名"); // 检查用户名是否存在 boolean userExist = false;//假设不重复 for (User user : Library_Tool.getUserList()) { if (user.getName().equals(registerName)) { userExist = true;//标记该位真 表示有重复的用户名 break; } } // 判断标记如果为真 则表示用户名已存在并给出提示。 if (userExist) { System.out.println("用户名已存在,请重试"); } else { break; } } // 设置密码 String registerPassword = Library_Tool.getString("请设置密码"); // 添加用户对象 Library_Tool.getUserList().add(new User(registerName, registerPassword)); Library_Tool.saveFile(); System.out.println("注册成功"); } // 登录成功执行 public void loginyes(User c) throws IOException, ClassNotFoundException { System.out.println("======登录成功======"); while (true) { System.out.println("|-----------------------------|"); System.out.println("|请选择您要执行的操作(输入数字): |"); 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("|-----------------------------|"); // 让用户输入要操作的数字 int operationnum = Library_Tool.getInt("|-----------------------------|"); // 判断是否退出 if (operationnum == 0) { break; }else if (operationnum == 5) { accountCancellation(c); break; } // 执行操作数 this.operationnum(c, operationnum); } } // 登录密码错误执行 public int loginError() { System.out.println("====用户名或密码错误===="); int x = 0; System.out.println("|---------------------------|"); System.out.println("|请选择您要执行的操作(输入数字):|"); System.out .println("|1.重试 |"); System.out .println("|2.退出 |"); // System.out.println("|------------------------------------------|"); int operationerror = Library_Tool.getInt("|---------------------------|"); switch (operationerror) { case 1: break; case 2: x = 1; break; default: System.out.println("请输入指定的数字"); break; } return x; } // 具体操作方法 public void operationnum(User c, int operationnum) throws IOException, ClassNotFoundException { // 具体操作执行 switch (operationnum) { case 1: // 查看图书 Set<Map.Entry<Integer, String>> bookListSet = Library_Tool.getBookList().entrySet(); if (bookListSet.size() != 0) { System.out.println("=========="); for (Entry<Integer, String> entry : bookListSet) { System.out.println(entry.getKey() + "-" + entry.getValue()); } System.out.println("=========="); } else { System.out.println("书库暂时没有书"); } break; case 2: // 看已借图书 Set<Map.Entry<Integer, String>> borrowBookSet = c.getBorrowBook().entrySet(); if (borrowBookSet.size() != 0) { System.out.println("=========="); for (Entry<Integer, String> entry : borrowBookSet) { System.out.println(entry.getKey() + "-" + entry.getValue()); } System.out.println("=========="); } else { System.out.println("您还没有借过书喔"); } break; case 3: // 借书 borrowBook(c); break; case 4: // 还书 giveBack(c); break; default: System.out.println("请输入指定的数字"); break; } } // 借书 public void borrowBook(User c) throws IOException, ClassNotFoundException { int booki = Library_Tool.getInt("请输入要借的图书编号"); // 向用户对象添加借的书名 HashMap<Integer, String> bookList = Library_Tool.getBookList(); if (bookList.get(booki) != null) { c.getBorrowBook().put(booki, bookList.get(booki)); // 从图书馆目录删除书名 bookList.remove(booki); Library_Tool.saveFile(); System.out.println("操作完成"); } else { System.out.println("请输入正确的编号"); } } // 还书 public void giveBack(User c) throws IOException, ClassNotFoundException { int booki = Library_Tool.getInt("请输入要还的图书编号"); if (c.getBorrowBook().get(booki) != null) { // 从图书馆目录添加书名 Library_Tool.getBookList().put(booki, c.getBorrowBook().get(booki)); // 从用户对象删除还的书名 c.getBorrowBook().remove(booki); Library_Tool.saveFile(); System.out.println("操作完成"); } else { System.out.println("请输入正确的编号"); } } // 销户方法 public void accountCancellation(User c) throws ClassNotFoundException, IOException { System.out.println("====销户===="); // 登录循环 System.out.println("销户后将无法再次登录本银行系统,账户余额清零,确认执行销户操作吗?"); System.out.println("1、确认"); System.out.println("0、返回"); String operation = Library_Tool.getString("请选择:"); if (operation.equals("1")) { for (User user : Library_Tool.getUserList()) { if (c.getName().equals(user.getName())) { Library_Tool.getUserList().remove(user); Library_Tool.saveFile(); System.out.println("销户成功"); break; } } } } }
====================================
图书馆工具类:
package LibrarySystem; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.Scanner; public class Library_Tool { //定义数据文件保存路径 private static File fileAddress = new File("D:\\test\\library"); //获取地址 public static File getFileAddress() { if (!fileAddress.isDirectory()) { fileAddress.mkdirs(); } return fileAddress; } // 定义用户库 private static ArrayList<User> userList = null; // 定义书库 private static HashMap<Integer, String> bookList = null; // 获取用户库 @SuppressWarnings("unchecked") public static ArrayList<User> getUserList() throws IOException, IOException, ClassNotFoundException { if (userList == null) { // 创建反序列化流 try { ObjectInputStream oi = new ObjectInputStream(new FileInputStream(new File(getFileAddress(), "User.library"))); Object o = oi.readObject(); userList = (ArrayList<User>) o; oi.close(); } catch (Exception e) { userList = new ArrayList<User>(); //创建测试用户 userList.add(new User("mm", "mm")); } } return userList; } // 获取书库 @SuppressWarnings("unchecked") public static HashMap<Integer, String> getBookList() throws IOException, IOException, ClassNotFoundException { if (bookList == null) { try { // 创建反序列化流 ObjectInputStream oi = new ObjectInputStream(new FileInputStream(new File(getFileAddress(), "Book.library"))); Object o = oi.readObject(); bookList = (HashMap<Integer, String>) o; oi.close(); } catch (Exception e) { bookList = new HashMap<Integer, String>(); //创建测试图书 bookList.put(1, "图书1号"); bookList.put(2, "十万个为什么"); bookList.put(3, "嫚嫚为啥那么美"); } } return bookList; } // 保存文件 public static void saveFile() throws IOException, IOException, ClassNotFoundException { // 创建序列化流 ObjectOutputStream ooUser = new ObjectOutputStream(new FileOutputStream(new File(fileAddress, "User.library"))); ObjectOutputStream ooBook = new ObjectOutputStream(new FileOutputStream(new File(fileAddress, "Book.library"))); ooUser.writeObject(getUserList());// 写 ooBook.writeObject(getBookList());// 写 ooUser.flush();// 刷新 ooBook.flush();// 刷新 ooUser.close();// 关闭 ooBook.close();// 关闭 } // 获取文本数据 public static String getString(String i) { // 创建键盘对象 @SuppressWarnings("resource") Scanner sc = new Scanner(System.in); // 输入提示 System.out.println(i); // 赋值数据 String x = sc.nextLine(); return x; } // 获取整数数据 public static int getInt(String i) { // 创建键盘对象 @SuppressWarnings("resource") Scanner sc = new Scanner(System.in); // 输入提示 System.out.println(i); while (true) { if (sc.hasNextInt()) { boolean intFlag = true; while (intFlag) { int x = sc.nextInt(); if (x < 0) { intFlag = false; System.out.println("请输入正数"); } else { return x; } } } else { System.out.println("请输入整数数字"); sc = new Scanner(System.in); } } } }
====================================
用户类:
package LibrarySystem; import java.io.Serializable; import java.util.HashMap; public class User implements Serializable { /** * */ private static final long serialVersionUID = 7753744496916409672L; private String name; private String passWord; // 定义已经借了的书的集合 private HashMap<Integer, String> borrowBook = null; public User() { super(); // TODO Auto-generated constructor stub } public User(String name, String passWord) { super(); this.name = name; this.passWord = passWord; } 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 HashMap<Integer, String> getBorrowBook() { if (borrowBook == null) { borrowBook = new HashMap<Integer, String>(); } return borrowBook; } @Override public String toString() { return "User [name=" + name + ", password=" + passWord + "]"; } }
====================================
测试类:
package LibrarySystem; import java.io.IOException; public class LibraryMain { public static void main(String[] args) throws ClassNotFoundException, IOException { Library l = new Library(); l.begin(); } }
====================================
管理员类:
package LibrarySystem; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Scanner; import java.util.Set; public class Admin { @SuppressWarnings({ "resource" }) public static void main(String[] args) throws IOException, IOException, ClassNotFoundException { // 获取文件目录 File f = Library_Tool.getFileAddress(); // 获取图书集合 HashMap<Integer, String> hm = Library_Tool.getBookList(); // 获取用户集合 ArrayList<User> al = Library_Tool.getUserList(); while (true) { System.out.println("请输入要执行的操作"); System.out.println("1.输出图书目录"); System.out.println("2.输出所有用户"); System.out.println("3.增加图书"); System.out.println("4.删除图书"); System.out.println("5.增加用户"); System.out.println("6.删除用户"); System.out.println("7.保存退出"); Scanner sc = new Scanner(System.in); int i = sc.nextInt(); if (i == 1) { getBookList(f, hm); } else if (i == 2) { getUserList(f, al); } else if (i == 3) { addBook(f, hm); } else if (i == 4) { delBook(f, hm); } else if (i == 5) { adduser(f); } else if (i == 6) { deluser(f, al); } else if (i == 7) { Library_Tool.saveFile(); System.out.println("保存完成"); if (Library_Tool.getInt("输入0退出 输入其他继续管理") == 0) { break; } } } } // 输出图书 private static void getBookList(File f, HashMap<Integer, String> hm) { Set<Map.Entry<Integer, String>> bookListSet = hm.entrySet(); System.out.println("输出图书:"); for (Entry<Integer, String> entry : bookListSet) { System.out.println(entry.getKey() + "-" + entry.getValue()); } } // 输出用户 private static void getUserList(File f, ArrayList<User> al) throws ClassNotFoundException, IOException { System.out.println("输出用户:"); for (int i = 0; i < al.size(); i++) { System.out.println(i + "--" + al.get(i).getName() + "--" + al.get(i).getPassWord()); } } // 添加图书 private static void addBook(File f, HashMap<Integer, String> hm) { int i = Library_Tool.getInt("输入图书编号"); String s = Library_Tool.getString("请输入书名"); hm.put(i, s); } // 删除图书 private static void delBook(File f, HashMap<Integer, String> hm) { getBookList(f, hm); int i = Library_Tool.getInt("输入图书编号"); hm.remove(i); } // 添加用户 private static void adduser(File f) throws ClassNotFoundException, IOException { Library l = new Library(); l.register(); } // 删除用户 private static void deluser(File f, ArrayList<User> al) throws ClassNotFoundException, IOException { getUserList(f, al); int i = Library_Tool.getInt("输入要删除的用户编号"); try { al.remove(i); } catch (IndexOutOfBoundsException e) { System.out.println("请输入正确的编号"); } } }
package LibrarySystem;
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.util.ArrayList;import java.util.HashMap;import java.util.Scanner;
public class Library_Tool {
//定义数据文件保存路径private static File fileAddress = new File("D:\\test\\library");
//获取地址public static File getFileAddress() {if (!fileAddress.isDirectory()) {fileAddress.mkdirs();}return fileAddress;}
// 定义用户库private static ArrayList<User> userList = null;// 定义书库private static HashMap<Integer, String> bookList = null;
// 获取用户库@SuppressWarnings("unchecked")public static ArrayList<User> getUserList() throws IOException, IOException, ClassNotFoundException {if (userList == null) {// 创建反序列化流try {ObjectInputStream oi = new ObjectInputStream(new FileInputStream(new File(fileAddress, "User.library")));Object o = oi.readObject();userList = (ArrayList<User>) o;oi.close();} catch (Exception e) {userList = new ArrayList<User>();//创建测试用户userList.add(new User("mm", "mm"));}}return userList;}
// 获取书库@SuppressWarnings("unchecked")public static HashMap<Integer, String> getBookList() throws IOException, IOException, ClassNotFoundException {if (bookList == null) {try {// 创建反序列化流ObjectInputStream oi = new ObjectInputStream(new FileInputStream(new File(fileAddress, "Book.library")));Object o = oi.readObject();bookList = (HashMap<Integer, String>) o;oi.close();} catch (Exception e) {bookList = new HashMap<Integer, String>();//创建测试图书bookList.put(1, "图书1号");bookList.put(2, "十万个为什么");bookList.put(3, "嫚嫚为啥那么美");}}return bookList;}// 保存文件public static void saveFile() throws IOException, IOException, ClassNotFoundException {// 创建序列化流ObjectOutputStream ooUser = new ObjectOutputStream(new FileOutputStream(new File(fileAddress, "User.library")));ObjectOutputStream ooBook = new ObjectOutputStream(new FileOutputStream(new File(fileAddress, "Book.library")));ooUser.writeObject(getUserList());// 写ooBook.writeObject(getBookList());// 写
ooUser.flush();// 刷新ooBook.flush();// 刷新
ooUser.close();// 关闭ooBook.close();// 关闭}// 获取文本数据public static String getString(String i) {// 创建键盘对象@SuppressWarnings("resource")Scanner sc = new Scanner(System.in);
// 输入提示System.out.println(i);// 赋值数据String x = sc.nextLine();return x;}
// 获取整数数据public static int getInt(String i) {// 创建键盘对象@SuppressWarnings("resource")Scanner sc = new Scanner(System.in);
// 输入提示System.out.println(i);while (true) {if (sc.hasNextInt()) {boolean intFlag = true;while (intFlag) {int x = sc.nextInt();if (x < 0) {intFlag = false;System.out.println("请输入正数");} else {return x;}}} else {System.out.println("请输入整数数字");sc = new Scanner(System.in);}}}}