继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

模拟借书系统(异常处理)

qq_我在清晨的路上_0
关注TA
已关注
手记 3
粉丝 1
获赞 100

写了好久,功能基本实现,也用到了异常处理的知识,不是简单地条件判断,希望大家指教。唯一不足就是当选择了哪种查找方式以后,输入非法,系统提示输入非法后又跳回重新选择查找方式,而不是重新执行刚刚已经选择好的查找方式,望高手指点。

book类

//book类表示图书库,有序号和图书两个字段
public class Book {
    private int id;
    private String bookname;
    public Book(int id,String bookname){
        this.id=id;
        this.bookname=bookname;
    }
    public String getBookName(){
        return bookname;
    }
    public void setBookName(String bookname){
        this.bookname=bookname;
    }
    public int getId(){
        return id;
    }
    public void setId(int id){
        this.id=id;
    }
}

(自定义)图书不存在或序号不存在异常类

public class noExist extends Exception{
    public noExist(){

    }
    public noExist(String message){
        super(message);
    }
}

(自定义)命令输入有误异常类

public class wrongCommandException extends Exception{
    public wrongCommandException(){

    }
    public wrongCommandException(String message){
        super(message);
    }
}

Test主类

import java.util.*;
public class Test {
    private static Book[] books={new Book(1,"西游记"),new Book(2,"水浒传"),new Book(3,"三国演义"),new Book(4,"红楼梦")}; 
    private String input=null;//用来存放命令字符串
    public static void main(String[] args) {
        while(true){//如果没有查找到书或输入错误程序会一直循环
        try {
            String input=commandForChoose();//选择查找方式输入命令
            if(input.equals("1")){
                System.out.println("输入图书名称:");
                try {
                    searchBookName();
                } catch (noExist e) {
                    System.out.println(e.getMessage());
                }
            }
            else if(input.equals("2")){
                System.out.println("输入图书序号:");
                while(true){
                try {
                    int id=commandForSearch();//通过图书序号查找时候检查命令
                    searchBookId(id);
                } catch (noExist e) {
                    System.out.println(e.getMessage());
                }
                }
            }
        } catch (wrongCommandException e) {
            System.out.println(e.getMessage());
        }
        }
    }
    /**
     * 选择查找方式输入命令的方法
     * @return 返回选择1或2
     * @throws wrongCommandException
     */
    private static String commandForChoose() throws wrongCommandException{
        System.out.println("输入命令:1-按照名称查找图书;2-按照序号查找图书");
        Scanner scan=new Scanner(System.in);
        String input=scan.nextLine();
        if(!input.equals("1")&&!input.equals("2")){
            throw new wrongCommandException("命令输入错误!请根据提示输入数字命令!");
        }
        return input; 
    }
    /**
     * 按照序号查找图书的序号,判断序号是否为数字的方法
     * @return 按照序号查找图书的序号
     * @throws wrongCommandException
     */

    private static int commandForSearch() throws wrongCommandException{
        Scanner scan=new Scanner(System.in);
        String input=scan.nextLine();
        int num;//用来返回
        try{
            num=Integer.parseInt(input);
            return num;
        }catch(Exception e){
            throw new wrongCommandException("命令输入错误!请根据提示输入数字命令!");
        }
    }
    /**
     * 按名称查找图书函数
     * 
     * * @throws noExist
     */
    private static void searchBookName() throws noExist{

        Scanner scan=new Scanner(System.in);
        String input=scan.nextLine();//录入想要查找的图书名称
        boolean flag=false;//控制符用来判断是否找到了该图书名称
        //遍历查找看是否找到
        for(int i=0;i<books.length;i++){
            String bookname=books[i].getBookName();
            if(input.equals(bookname)){//找到了则为true
                System.out.println("book:"+bookname);//输出找到的图书名称
                flag=true;
                System.exit(0);
            }
        }
        if(!flag){//没找到,抛出异常
            throw new noExist("图书不存在!");
        }
    }
    /**
     * 按照序号查找图书
     * @param id 序号
     * @throws noExist
     */

    private static void searchBookId(int id) throws noExist{
        boolean flag=false;//控制符用来判断是否找到了该图书序号
        //遍历查找看是否找到
        for(int i=0;i<books.length;i++){
            int x=books[i].getId();//x表示图书库里每次找到的id字段值
            if(id==x){//找到了则为true
                System.out.println("book:"+books[i].getBookName());//输出找到的图书名称
                flag=true;
                System.exit(0);
            }
        }
        if(!flag){//没找到,抛出异常
            throw new noExist("图书不存在!");
        }
    }
}
打开App,阅读手记
18人推荐
发表评论
随时随地看视频慕课网APP

热门评论

对于:选择查找方式,再输入非法后,重回选择查找方式的问题,我觉得可以在按书名查找,和按序号查找里分别加上循环,如果输入非法,重新输入。

总感觉这里定义这么多的异常类, 主类里写这么多抛出异常的函数没必要,但我这部分学的不好,待我研究一下再说。

请问CommandForChoose拿来的?

查看全部评论