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

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

synthetic6365
关注TA
已关注
手记 4
粉丝 10
获赞 70

程序流程图我就不放上来了,慕友们将就着看看吧,注释还算清晰。
这段代码是Java入门第三季异常与异常处理这一章的练习题,
代码尚有不足,请多多指教。

/**
 * 功能:模拟借书系统
 * 要求:
 * 1.定义字符串数组保存图书信息
 * 2.提示用户输入,分别按“书名”和“图书序号”查找图书
 * 3.根据输入信息进行适当的异常处理:
 * a) 如果输入类型错误,抛出“错误命令异常”,并提示重新输入
 * b) 如果书名不存在,抛出“图书不存在异常”,并提示重新输入
 * c) 如果图书序号超过字符串数组范围,抛出“图书不存在异常”,并提示重新输入
 * @author zodas
 *
 */

先看BorrowBook类

import java.util.Scanner;
public class BorrowBook{
    static String[] books={"数据结构","高数","Java","Html"};//保存图书信息
    static int flagCommand=0;//查询命令错误标志
    static int flagNotexistName=0;//图书名称不存在标志
    static int flagNotexistNum=0;//图书序号不存在标志
    static BorrowBook bk=new BorrowBook();
    static Scanner input=new Scanner(System.in);

/******************************main方法*********************************/ 
    public static void main(String[] args) {    
        int num;//用于保存图书的序号
        String name;//用于保存图书的名称
        System.out.println("输入命令:1-按照书名查找图书; 2-按照序号查找图书");//提示用户输入  
        String way=input.next();
        bk.choseWay(way);//选择查询方式

        while(true){
            if(flagCommand==0){//查询命令错误,则提示用户重新输入查询方式
                way=input.next();
                bk.choseWay(way);
                continue;
            }
            if(flagCommand==1){//按图书名称查询
                System.out.println("输入图书名称:");
                name=input.next();
                bk.ckName(name);
                if(flagNotexistName==1){//如果图书不存在,则抛出图书不存在异常
                    NobookException nbe=new NobookException();
                    try{
                        nbe.noBook();
                    }catch(NobookException ne){
                        System.out.println(ne.getMessage());
                    }
                    System.out.println("输入命令:1-按照书名查找图书; 2-按照序号查找图书");
                    way=input.next();
                    bk.choseWay(way);
                    continue;
                }else{//图书已查到,询问用户是否要继续查询
                    System.out.println("是否要继续查询?1-是; 2-否");
                    if(input.nextInt()==1){//若要继续查询,则提示用户查询步骤
                        System.out.println("输入命令:1-按照书名查找图书; 2-按照序号查找图书");
                        way=input.next();
                        bk.choseWay(way);
                        continue;
                    }else
                        break;//若不继续查询,则终止系统
                }
            }
            if(flagCommand==2){//按图书序号查询
                System.out.println("输入图书序号:");
                num=input.nextInt();
                bk.ckNum(num);
                if(flagNotexistNum==1){//如果图书不存在,则抛出图书不存在异常
                    NobookException nbe=new NobookException();
                    try{
                        nbe.noBook();
                    }catch(NobookException ne){
                        System.out.println(ne.getMessage());
                    }
                    System.out.println("输入命令:1-按照书名查找图书; 2-按照序号查找图书");
                    way=input.next();
                    bk.choseWay(way);
                    continue;
                }else{//图书已查到,询问用户是否要继续查询
                    System.out.println("是否要继续查询?1-是; 2-否");
                    if(input.nextInt()==1){//若要继续查询,则提示用户查询步骤
                        System.out.println("输入命令:1-按照书名查找图书; 2-按照序号查找图书");
                        way=input.next();
                        bk.choseWay(way);
                        continue;
                    }else
                        break;//若不继续查询,则终止系统
                }
            }
        }   
    }

/*************选择查询方式,1按图书名称查询,2按序号查询,其它则抛出命令异常***********/
    public void choseWay(String n){
        if(n.equals("1")){
            flagCommand=1;//按图书名称查询,则置查询命令标志位为1
        }
        else if(n.equals("2")){
            flagCommand=2;//按图书序号查询,则置查询命令标志位为2
        }else{
            WrongCommandException wce=new WrongCommandException();
            try{
                wce.wrongCommand();
            }catch(WrongCommandException wc){
                System.out.println(wc.getMessage());
            }
            System.out.println("输入命令:1-按照书名查找图书; 2-按照序号查找图书");
            flagCommand=0;//查询命令错位,则置查询命令标志位为0
        }
    }

/**********************检查此名称的书是否存在,存在则返回0,不存在则返回1***************/
    public int ckName(String name){
        for(int i=0;i<books.length;i++){
            if(name.equals(books[i])){
                System.out.println("book:"+books[i]+"  这本书是有的");
                flagNotexistName=0;//图书名称存在,则置图书名称存在标志位为0
                break;//一旦查到此图书名称则跳出for循环
            }
            else
                flagNotexistName=1;//图书名称存在,则置图书名称存在标志位为1
        }
        return flagNotexistName;//返回图书名称标志位的值
    }

/*******************检查此序号的书是否存在,存在则返回0,不存在则返回1******************/
    public int ckNum(int num){
        if(0<=num&&num<books.length){
            System.out.println("book:"+books[num]+"  这本书是有的");
            flagNotexistNum=0;//图书序号存在,则置图书序号存在标志位为0
        }
        else
                flagNotexistNum=1;//图书序号存在,则置图书序号存在标志位为1
        return flagNotexistNum;//返回图书序号标志位的值
    }
}

自定义异常--NobookException类

public class NobookException extends Exception {
    /**
     * 图书不存在异常
     */
    private static final long serialVersionUID = 1L;//这行我也不知道什么意思,编译器自动生成的

    public void noBook() throws NobookException{
        throw new NobookException("图书不存在!");
    }
    public NobookException(){

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

自定义异常--WrongCommandException类

public class WrongCommandException extends Exception {
    /**
     * 命令错误异常
     */
    private static final long serialVersionUID = 1L;//这行我也不知道什么意思,编译器自动生成的

    public void wrongCommand() throws WrongCommandException{
        throw new WrongCommandException("命令输入错误!请根据提示输入数字命令!");
    }   
    public WrongCommandException(){

    }   
    public WrongCommandException(String message){
        super(message);
    }
}
打开App,阅读手记
6人推荐
发表评论
随时随地看视频慕课网APP

热门评论

谈谈我写这段代码时遇到的几个问题吧。

  • 关于自定义异常

代码中虽然实现了异常的抛出,但我觉得还是欠点意思。

因为我是依葫芦画瓢写的自定义异常类,虽然抛出的异常,但感觉跟直接System.out.println()没什么区别,

没有真正的体现自定义异常类的功能。

看来还是得需要,再研究研究异常类的相关知识。

  • 关于Scanner类

Scanner input=new Scanner(System.in);

这段代码如果放在main()方法里,是会出问题的,

必须得放在main()方法之前,

这应该是涉及到静态内部类和局部内部类的相关知识吧,有待进一步巩固和思考

道理我都懂  帮忙写个论文多少钱

查看全部评论