手记

Java入门第三季-查书系统

查书系统
这个比较简单,但是有些内容是前面两季没讲过的
其中比较难的一点我提一下:
用Scanner时,用户输入数据后按下了回车键
数据会被Scanner获取,但回车键会变成"\n"字符溢出
下一次用Scanner时,Scanner就会出错
详情见代码中choose方法里的最后一行
一共两个class,包名叫lib


第一个class文件,取名text.class

package lib;
import java.util.InputMismatchException;  //该类为<输入的数据不是整型>的异常类
import java.util.Scanner;

public class text {
    static Scanner sc = new Scanner(System.in);//为Scanner类创建实例一个对象sc
    static text text = new text();//为text类创建实例一个对象text

    public static void main(String[] args) {    //程序入口函数
        System.out.print("欢迎使用图书馆的寻书系统!\n1.按照名称查找图书    2.按照序号查找图书\n请输入数字选择找书方式:");
        text.choose();//选择查询方式的方法
    }

    public void choose () {
        int a=0;
        while (a!=1&&a!=2){   //while循环,直到输入1或2 跳出循环
            try {
                a = sc.nextInt();
                if(a==1) {text.num1();}
                else if(a==2){text.num2();}
                else {System.out.print("输入错误,请输入1或者2:");}
            }catch(InputMismatchException e) {//检测<输入的数据不是整数>异常
                System.out.print("输入错误,请输入1或者2:");
                sc.nextLine();  //如果去掉这一行就会程序会陷入无限错误循环
            }
        }
    }

    public void num1(){         //按名称方式查书的方法
        boolean a=true;
        System.out.print("请输入图书的名称:");
        while(a) {
            String bookName = sc.next();        //接收String数据
            for(int i=0;i<book.bookTotal;i++) { //在book类里面有定义每本书的名字,这里用for循环一一对应查找
                if(bookName.equals(book.bookk[i].geta())) {//两个Stirng变量指向的地址不同,所以这里不能用String1==String2,要用equals方法,第三季有讲
                    System.out.println("该书名称为:"+book.bookk[i].geta()+"\n该书序号为:"+book.bookk[i].getb());
                    i=book.bookTotal;//跳出for循环
                    a=false;//跳出while循环
                }
            }
            if(a) {System.out.print("该书的名称不存在,请重新输入:");}
            else {System.out.println("感谢您的使用,程序结束!");}
        }
    }

    public void num2(){     //按序号方式查书的方法
        int bookNum = 0;
        System.out.print("请输入图书的序号:");
        while(!(bookNum>=1&&bookNum<=book.bookTotal)){//如果bookNum不在这个范围内就循环
            try {
                bookNum = sc.nextInt();
                if(bookNum>=1&&bookNum<=book.bookTotal){System.out.println("该书名称为:"+book.bookk[bookNum-1].geta()+"\n该书序号为:"+book.bookk[bookNum-1].getb());}
                else {System.out.print("输入错误,请输入1到"+book.bookTotal+":");}
            }catch(InputMismatchException e) {
                sc.nextLine();
                System.out.print("输入错误,请输入1到"+book.bookTotal+":");
            }
            if(bookNum>=1&&bookNum<=book.bookTotal) {System.out.println("感谢您的使用,程序结束!");
            }
        }
    }
}

第二个class文件,取名book

package lib;

public class book {
    static int bookTotal = 8;//书的总数
    private String a;
    private int b;
    public book(String a,int b){this.a=a;this.b=b;}
    static book[] bookk = {new book("高数1",1),new book("高数2",2),
                    new book("线性代数",3),new book("离散数学",4),
                    new book("食品安全",5),new book("生物",6),
                    new book("化学",7),new book("英语",8)};
    public String geta() {return a;} //调用该方法用于获取书的名称
    public int getb() {return b;} //调用该方法用于获取书的序号
}
8人推荐
随时随地看视频
慕课网APP

热门评论

建一个bookk什么意思?

使用了你的无限循环处理方法,感谢!如果有兴趣你也可以去看看我的代码http://www.imooc.com/article/20094

有问题的程序,按照书名照没反应



查看全部评论