模拟借书系统(菜鸟的第一篇文章嘻嘻)
要求:
1.定义字符串保存图书信息
2.提示用户输入,分别按“书名”和“图书序号”查找图书
3.根据输入信息进行适当的异常处理
a.如果输入类型错误,抛出“错误命令异常”,并提示重新输入
b.如果书名不存在,抛出“图书不存在异常”,并提示重新输入
c.如果图书序号超过字符串数组范围,抛出“图书不存在异常”并提示重新输入
//书类
public class Books {
private String name;
private int id;
// private String writter;
public Books(int id,String name ) {
super();
this.name = name;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
//借书
import java.util.Scanner;
/*
* 传入图书数据 输入进行查找 对输入的数据进行测试用例分析(捕获异常):
* a.如果输入类型错误,抛出“错误命令异常”,并提示重新输入(没实现判断键盘输入是否为数字/中文/英文字符)
* b.如果书名不存在,抛出“图书不存在异常”,并提示重新输入
* c.如果图书序号超过字符串数组范围,抛出“图书不存在异常”并提示重新输入
* 注意:重新输入有点问题 由于String的不变性?(or Scanner对象只声明一次)
* 解决1:用Borrow()进行回调
*/
public class Borrow {
//传入图书数据???
//好像没用 boolean choose = false;//全局变量 选项没输对就重新输入
boolean borrow = false;//全局变量 while(borrow)借书没成功就一直循环 成功则跳出
static Books[] booklist ;
public Borrow() {
booklist =new Books[] {new Books(1,"java从入门到放弃"),new Books(2,"数据结构"),
new Books(3,"操作系统"),new Books(4,"计算机组成原理"),new Books(5,"算法分析")};
}
//遍历图书
public static void Booklist() {
for(Books b:booklist) {
System.out.println("书号"+b.getId()+"书名"+b.getName());
}
}
//借书操作
public void Borrow() throws InputException{
System.out.println("请按序号进行查询操作:1.按书号查询;2.按书名查询");
// while(!choose) {//输入序号错则重新输入
Scanner in = new Scanner(System.in);
int i = in.nextInt();
if(i==1) {
// choose = true;
try {
BorrowById();//按书号查询进行借书
borrow = true;
} catch (InvalidException e) {
// TODO Auto-generated catch block
// e.printStackTrace(); //不打印惹 红字丑丑得
System.out.println("====找不到这本书====");
}catch(Exception e) {
System.out.println("不合法的输入 请重新输入");
}
}else if(i==2) {
// choose = true;
try {
BorrowByName();//按书名查询进行借书
borrow = true;
} catch (InvalidException e) {
// TODO Auto-generated catch block
// e.printStackTrace(); //不打印惹 红字丑丑得
System.out.println("====找不到这本书====");
}catch(Exception e) {
System.out.println("不合法的输入");
}
}else {
throw new InputException(null);
}
}
//}
public void BorrowById() throws InvalidException{
while(!borrow) {//借书成功变为ture则不进行循环
Scanner in1 = new Scanner(System.in);
int id = in1.nextInt();
for(Books b:booklist) {
if(id == b.getId()) {
borrow = true;
break;
}
}
if(borrow) {
System.out.println("借书成功!");
}else {
System.out.println("====找不到这本书====");
try {
Borrow();
} catch (InputException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
}
}
public void BorrowByName() throws InvalidException{
while(!borrow) {//借书成功变为ture则不进行循环
Scanner in = new Scanner(System.in);
String name = in.nextLine();
for(Books b: booklist) {//不能写if语句
if(b.getName().equals(name)){
borrow = true;
break;
}
}
if(borrow) {
System.out.println("借书成功!");
/*
* 如果要输出书的信息则把查询过程单独做一个方法,返回值为books对象
* System.out.println("您借的书是:"+b.getId()+b.getName());
*/
}else {
//如何重新输入?
System.out.println("====找不到这本书====");
try {
Borrow();
} catch (InputException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
//测试类
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("=====欢迎借书======");
Borrow b = new Borrow();
Borrow.Booklist();//显示所有图书
try {
b.Borrow();
} catch (InputException e) {
// TODO Auto-generated catch block
// e.printStackTrace(); //不打印惹 红字丑丑得
System.out.println("=====没有此选项 请按提示操作====");
}catch(Exception e) {
System.out.println("=====不合法输入请重新输入====");
}
}
}
附上运行截图:
菜鸟的总结:
1.这个小程序其实是对异常处理的一个小项目练习,对于异常字符输入比如(@#%%……)这种自定义一个异常然后抛出并处理,我写不出来,所以最后用了父类Exception处理得了,不知道如何判断键盘输入的数据类型有没有其他字符,所以就没办法抛出 a.如果输入类型错误,抛出“错误命令异常”,并提示重新输入。慢慢学把,等基础过一下再看看源码。
2.对于方法体内要求重新输入,怎么想都写不出来,有一些诸如回调递归的概念。。应该是new了Scanner对象,然后while循环中,虽然符合循环的条件,但是scanner对象还是刚开始声明定义的那个。所以就没办法重新输入了把。搜了一下网友写的,发现调用Borrow方法相当于重启程序,get到了。
3.要多多练习。
2019-03-19 18:22
》》》》》》》》》》end》》》》》》》》》》》