功能:模拟借书系统
要求:
1.定义字符串数组保存图书信息
2.提示用户输入,分别按“书名”和“图书序号”查找图书
3.根据输入信息进行适当的异常处理:
a) 如果输入类型错误,抛出“错误命令异常”,并提示重新输入
b) 如果书名不存在,抛出“图书不存在异常”,并提示重新输入
c) 如果图书序号超过字符串数组范围,抛出“图书不存在异常”,并提示重新输入
首先定义了一个书的类,里面包含了序号和书名两个属性
package com.book;
/*
* 图书管理
* 书的属性*/
public class Book {
private int number;//图书序号
private String name;//图书书名
public int getNumber() {
return number;
}
public void setNumber(int NewNumber) {
this.number = NewNumber;
}
public String getName() {
return name;
}
public void setName(String NewName) {
this.name = NewName;
}
public Book(int NewNumber, String NewName){
this.number = NewNumber;
this.name = NewName;
}
}
定义了一个自定义异常类
package com.book;
/*
*自定义异常类 */
public class InputException extends Exception {
public InputException(){};
public InputException(String msg){
super(msg);
}
}
在主类中自定义了三个异常方法,分别对应功能序号输入异常,书名查询异常,图书序号超过字符串数组范围异常
功能序号输入异常
//自定义异常,当输入的数字不属于1,2,3时,报错
public void check(int num) throws InputException{
if(num == 1 || num == 2 || num == 3){
return;
}else{
throw new InputException("命令输入错误!请根据提示输入数字命令!");
}
}
书名查询不到异常
//书名查找不存在的异常
public void NameNothingness(String name) throws InputException{
for(int i=0; i < book.length; i++){
if(name.equals(book[i].getName())){
System.out.println("book:" + book[i].getName());
return;
}
}
throw new InputException("查无此书籍!");
}
图书序号超过字符串数组范围异常
//图书序号超过字符串数组范围异常
public void NumNothingness(int num) throws InputException{
//num<book.length+1用来模拟在字符串数组范围内查找不到书籍
if( num>0 && num<book.length+1){
for(int i = 0; i < book.length; i++){
if(num == book[i].getNumber()){
System.out.println("book:" + book[i].getName());
return;
}
}
System.out.println("查无此书籍序号");
}
throw new InputException("图书序号超过字符串数组范围,查无此书籍!");
}
主类完全代码
package com.book;
import java.util.Scanner;
/*
* 图书管理
* 借书管理*/
public class Management {
static Book[] book = {new Book(1, "高数"),
new Book(2, "离散"),
new Book(3, "概率"),
new Book(4, "图形学")};
static Management m = new Management();
//序号查找方法
public void NumberLookup(int num){
try {
m.NumNothingness(num);
} catch (InputException e) {
// TODO 自动生成的 catch 块
System.out.println("图书序号超过字符串数组范围,查无此书籍!");
}
}
//书名查找方法
public void NameLookup(String name){
try {
m.NameNothingness(name);
} catch (InputException e) {
// TODO 自动生成的 catch 块
System.out.println("查无此书");
}
}
//main()程序入口
public static void main(String[] args){
for(;;){
try{
System.out.println("输入命令:1-按照名称查找书籍;2-按照序号查找书籍;3-退出程序");
@SuppressWarnings("resource")
Scanner s = new Scanner(System.in);
int c = s.nextInt();
m.check(c);
switch (c){
case 1:
System.out.print("输入图书名称:");
String name = s.next();
m.NameLookup(name);
break;
case 2:
System.out.print("输入图书序号:");
int num = s.nextInt();
m.NumberLookup(num);
break;
case 3:
System.out.println("退出程序~");
System.exit(0);
}
}catch (InputException e){
System.out.println("命令输入错误!请根据提示输入数字命令!");
}catch (Exception e){
System.out.println("请正确输入书的序号!");
}
}
}
//自定义异常,当输入的数字不属于1,2,3时,报错
public void check(int num) throws InputException{
if(num == 1 || num == 2 || num == 3){
return;
}else{
throw new InputException("命令输入错误!请根据提示输入数字命令!");
}
}
//书名查找不存在的异常
public void NameNothingness(String name) throws InputException{
for(int i=0; i < book.length; i++){
if(name.equals(book[i].getName())){
System.out.println("book:" + book[i].getName());
return;
}
}
throw new InputException("查无此书籍!");
}
//图书序号超过字符串数组范围异常
public void NumNothingness(int num) throws InputException{
//num<book.length+1用来模拟在字符串数组范围内查找不到书籍
if( num>0 && num<book.length+1){
for(int i = 0; i < book.length; i++){
if(num == book[i].getNumber()){
System.out.println("book:" + book[i].getName());
return;
}
}
System.out.println("查无此书籍序号");
}
throw new InputException("图书序号超过字符串数组范围,查无此书籍!");
}
}
运行结果
输入命令:1-按照名称查找书籍;2-按照序号查找书籍;3-退出程序
1
输入图书名称:高数
book:高数
输入命令:1-按照名称查找书籍;2-按照序号查找书籍;3-退出程序
1
输入图书名称:asd
查无此书
输入命令:1-按照名称查找书籍;2-按照序号查找书籍;3-退出程序
2
输入图书序号:1
book:高数
输入命令:1-按照名称查找书籍;2-按照序号查找书籍;3-退出程序
2
输入图书序号:4
book:图形学
输入命令:1-按照名称查找书籍;2-按照序号查找书籍;3-退出程序
2
输入图书序号:5
图书序号超过字符串数组范围,查无此书籍!
输入命令:1-按照名称查找书籍;2-按照序号查找书籍;3-退出程序
2
输入图书序号:6
图书序号超过字符串数组范围,查无此书籍!
输入命令:1-按照名称查找书籍;2-按照序号查找书籍;3-退出程序
3
退出程序~
热门评论
图书序号超过数组下界这个方法里
没查到有此书,输出“查无此书籍序号”,后面会不会运行throw然后抛出异常?
为什么我的主程序类里捕获 InputException 会标红,报错?