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人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦