模拟借书系统--慕课网第三季

模拟借书系统(菜鸟的第一篇文章嘻嘻)

要求:
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》》》》》》》》》》》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值