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(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);
            }
        }
    }
}

 ====================================

用户类:

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);}}}}

猜你喜欢

转载自www.cnblogs.com/youlixin/p/10291846.html
今日推荐