为了账号安全,请及时绑定邮箱和手机立即绑定

Java入门第三季第一章练习--图书查询系统

标签:
Java
Main.java
package practiceFinal;

import java.util.HashMap;
import java.util.Scanner;

public class BookSearch {

    // 序号到书名的hash映射
    private static HashMap<Integer, String> numToName = new HashMap<>();
    // 书名到序号的hash映射
    private static HashMap<String, Integer> nameToNum = new HashMap<>();
    // 书籍信息数组
    private static BookInfo[] bookInfos = null;

    public static void main(String[] args) {
        // 初始化数据
        initData();
        // 系统欢迎页
        welcome();
        // 检查命令
        checkOrder();
    }

    /**
     * 欢迎以及系统开始运行
     */
    private static boolean welcome() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("欢迎来到雷姆图书馆!");
        System.out.println("您是否要查找书籍:1是 0否");
        String input = scanner.nextLine();
        if (input.charAt(0) != '1') {
            System.out.println("退出系统");
            scanner.close();
            System.exit(0);
        }
        return true;
    }

    /**
     * 检查输入的命令以判断下一步的执行
     */
    private static void checkOrder() {
        System.out.println("输入命令:1-按照名称查找图书;2-按照序号查找图书;3-退出系统");
        int input = inputInt();
        switch (input) {
        case 1:
            searchBookByName();
            break;
        case 2:
            searchBookByNum();
            break;
        case 3:
            System.out.println("退出系统!");
            System.out.println("欢迎您再次光临!");
            System.exit(0);
            break;
        default:
            System.out.println("输入命令错误!");
            checkOrder();
            break;
        }
    }

    /**
     * 通过序号查找图书
     */
    private static void searchBookByNum() {
        System.out.println("输入图书序号:");
        int keyNum = inputInt();
        if (!numToName.containsKey(keyNum)) {
            System.out.println("图书不存在!");
            // 重新选择
            checkOrder();
        } else {
            // 这是遍历的方法!

            /*
             * for (Iterator<Integer> i = numToName.keySet().iterator();
             * i.hasNext();) { Integer key = i.next(); bookName =
             * numToName.get(key); }
             */
            System.out.println("book:" + numToName.get(keyNum));
            checkOrder();
        }
    }

    /**
     * 通过名称查找图书
     * 按名称查询理想情况下应该:
     * 1.首先进行精确查找
     * 2.当精确查找找不到的情况下进行模糊查找
     * 3.如果模糊查找也找不到,则提示图书不存在
     * 当然,如果纯粹用模糊查找也可以
     * 这样就用不到hashMap了,因为都要遍历
     */
    private static void searchBookByName() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入图书名称:");
        String keyName = scanner.nextLine();
        if (!nameToNum.containsKey(keyName)) {
            System.out.println("图书不存在!");
            // 重新选择
            scanner.close();
            checkOrder();
        } else {
            System.out.println("book:" + nameToNum.get(keyName));
            scanner.close();
            checkOrder();
        }
    }

    /**
     * 输入判断--如果输入为非数字,则报错并重新输入
     * 
     * @return
     */
    private static int inputInt() {
        int result = 0;
        while (true) {
            Scanner scanner = new Scanner(System.in);
            try {
                // 这里如果输入非int类型则会出现异常
                result = scanner.nextInt();
                break;
            } catch (Exception e) {
                // 捕获异常并进行提示
                System.out.println("命令输入错误!请根据提示输入数字命令!");
                scanner.close();
            }
        }
        return result;
    }

    /**
     * 初始化数据
     */
    private static void initData() {
        // 假设总共十本书
        bookInfos = new BookInfo[] { new BookInfo(1, "数据结构"), new BookInfo(2, "算法"), new BookInfo(3, "计算机网络"),
                new BookInfo(4, "操作系统"), new BookInfo(5, "计算机组成原理"), new BookInfo(6, "Java编程思想"),
                new BookInfo(7, "Java虚拟机"), new BookInfo(8, "Java网络编程"), new BookInfo(9, "编译原理"),
                new BookInfo(10, "数据库技术") };

        // 初始化两个hash映射
        for (int i = 0; i < bookInfos.length; i++) {
            // 序号到书名的hash映射
            numToName.put(bookInfos[i].getBookNum(), bookInfos[i].getBookName());
            // 书名到序号的hash映射
            nameToNum.put(bookInfos[i].getBookName(), bookInfos[i].getBookNum());
        }
    }
}
BookInfo.java
package practiceFinal;

public class BookInfo {
    private int bookNum; // 图书序号
    private String bookName; // 图书名称

    public int getBookNum() {
        return bookNum;
    }

    public void setBookNum(int bookNum) {
        this.bookNum = bookNum;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public BookInfo(int bookNum, String bookName) {
        super();
        this.bookNum = bookNum;
        this.bookName = bookName;
    }

    public BookInfo() {
        super();
    }
}
点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消