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

JAVA入门第三季(第一章练习)模拟借书系统

Angki
关注TA
已关注
手记 4
粉丝 0
获赞 36

功能:模拟借书系统
要求:
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
退出程序~
打开App,阅读手记
12人推荐
发表评论
随时随地看视频慕课网APP

热门评论

图书序号超过数组下界这个方法里

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("图书序号超过字符串数组范围,查无此书籍!");

没查到有此书,输出“查无此书籍序号”,后面会不会运行throw然后抛出异常?

为什么我的主程序类里捕获 InputException 会标红,报错?

查看全部评论