JavaCore-OOP-2-图书管理系统(商品管理升级版)

话说

各位读者,晚上好!上一篇博客很基础很基础吧!这篇依旧很基础。在我们基本掌握了框架之后,蓦然回首这些最初接触的知识,还是感慨万千。

今天实现这样一个功能:功能要求如下:

===========================图书管理系统============================
1.显示所有的图书
2.添加图书
3.删除图书
4.编辑图书
5.购买


请输入功能编号(1~5):


Book类
属性->数组BookList
Boolist[0] = “书名,价格,作者”;


构造方法
在构造方法中,初始化数组BookList,在没有添加图书时,至少内部有三本书。


第一个方法:showAllBook 显示所有数组中的图书;
第二个方法:addBook 接收三个参数,分别是书名、价格、作者,存入数组;
第三个方法:delBook删除图书,接收一个参数:书名,根据书名删除数组中的元素;
第四个方法:editBook编辑图书,接收三个参数,分别是书名、价格、作者,根据书名修改价格和作者;
第五个方法:buyBook购买图书,把所有图书显示出来,在左侧显示出图书的编号。
1 书名,价格,作者
2 书名,价格,作者
3 书名,价格,作者
4 书名,价格,作者
用户可以输入编号:1,2,3,4
表示用户想买4本书,在控制台输出用户的购物清单,同时计算总价格。
把用户买走的书,从数组中删除。

这个功能跟上一篇大同小异,但是这次写得更加细致。其实,后面的框架,如果不了解底层实现,单纯从实现功能来说,比这个还简单些。

开发工具
Eclipse

目录


一、效果图
二、实体类
三、方法类
四、总结


一、效果图

这里写图片描述

开始界面

这里写图片描述

购买图书界面,可以单本买,也可以多本买。

这里写图片描述

购买成功后,书单自动去掉购买掉的书。

二、实体类

Book

package com.hmc.yijian03_02;
/**
*
*2017年11月23日
*User:Meice
*下午4:28:22
*/
public class Book {
    private int book_id;
    private String book_name;
    private double book_price;
    private String book_author;
    public Book() {     
    }

    public Book(int book_id,String book_name,double book_price,String book_author) {
        this.book_id = book_id;
        this.book_name = book_name;
        this.book_price = book_price;
        this.book_author = book_author;
    }

    public void setBook_id(int book_id) {
        this.book_id = book_id;
    }

    public int getBook_id() {
        return book_id;
    }


    public void setBook_name(String book_name) {
        this.book_name = book_name;
    }
    public String getBook_name() {
        return book_name;
    }


    public void setBook_price(double book_price) {
        this.book_price = book_price;
    }
    public double getBook_price() {
        return book_price;
    }


    public void setBook_author(String book_author) {
        this.book_author = book_author;
    }

    public String getBook_author() {
        return book_author;
    }

    @Override
    public String toString() {
        return "Book [book_id=" + book_id + ", book_name=" + book_name + ", book_price=" + book_price + ", book_author="
                + book_author + "]";
    }

}

三、方法类

BookManagement

package com.hmc.yijian03_02;
import org.junit.Test;

import java.text.DecimalFormat;
import java.util.Scanner;
/**
*
*2017年11月23日
*User:Meice
*下午5:05:05
*/
public class BookManagement {
    //初始化数组,用于存放图书对象
    static Book BookList[] = new Book[100];
    //购书车
    static Book buiedBookList[] = new Book[20];
    Book book1 = new Book(1,"《笑傲江湖》",23.45,"金庸");
    Book book2 = new Book(2,"《神雕侠侣》",34.56,"金庸");
    Book book3 = new Book(3,"《宝贝,宝贝》",12.23,"周国平");
     public BookManagement() {
        //初始化三个对象
        BookList[0] = book1;
        BookList[1] = book2;
        BookList[2] = book3;
    }
    /**
     * 方法一:显示所有图书showAllBook()
     */
    @Test
    public void showAllBook() {
        System.out.println("===================图书列表==========================");

        /*//初始化三个对象
        BookList[0] = book1;
        BookList[1] = book2;
        BookList[2] = book3;*/
        if(getNullOfBookList()==BookList.length) {
            System.out.println("Sorry!图书已售罄,请等待新书上架吧~~");
        }
        for(int i=0;i<BookList.length;i++) {
            if(BookList[i]!=null) {
                System.out.println(BookList[i].getBook_id()+"\t"+BookList[i].getBook_name()
                        +"\t\t"+BookList[i].getBook_price()+"\t"+BookList[i].getBook_author());
            }

        }
    }
    /**
     * 如果书名是一个字或者两个字,就对不齐,如何对齐?
     * 
     */


    /**
     * 方法二:新增图书addBook() 
     */
    public void addBook(Book book) {
        //循环就可以保证每次存放的都是在没有书的位置存放啦
        for(int i=0;i<BookList.length;i++) {
            if(BookList[i]==null) {
                BookList[i]=book;
                System.out.println("恭喜您!新增成功!");
                break;
            }
        }
    }

    /**
     * 方法三:接收用户返回的对象
     */
    public Book getOneBook() {
        System.out.println("请输入新增图书名称:");
        String book_name = new Scanner(System.in).next();
        System.out.println("请输入图书价格:");
        double book_price = new Scanner(System.in).nextDouble();
        System.out.println("请输入图书作者:");
        String book_author = new Scanner(System.in).next();
        int j =0;
        for(;j<BookList.length;j++) {
            if(BookList[j]==null) {
                System.out.println(j);
                break;
            }
        }
        int book_id = j+1;
        Book book = new Book(book_id,book_name,book_price,book_author);
        return book;
    }


    /**
     * 方法四:接收用户输入序号方法getChooseNumber()
     * @param args
     */
    public int getChooseNumber() {
        return new Scanner(System.in).nextInt();
    }

    /**
     * 方法五:删除图书
     */
    public void delBook() {
        System.out.println("请输入要删除图书的图书名:");
        String book_name2 = new Scanner(System.in).next();
        for(int i=0;i<BookList.length;i++) {
            //如果不限制,会报错:NullPointException,会比较后面的空值
            if(BookList[i] !=null) {
                if(book_name2.equals(BookList[i].getBook_name())) {
                    BookList[i]= null;
                    System.out.println("恭喜您,删除成功!");
                }
            }

        }
    }

    /**
     * 方法六:编辑图书
     */
    public void editBook() {
        System.out.println("请输入要修改图书的书名:");
        String book_name = new Scanner(System.in).next();
        System.out.println("请输入该图书价格:");
        double book_price = new Scanner(System.in).nextDouble();
        System.out.println("请输入该图书作者:");
        String book_author = new Scanner(System.in).next();
        for(int i=0;i<BookList.length;i++) {
            if(BookList[i]!=null) {
                if(book_name.equals(BookList[i].getBook_name())) {
                    BookList[i].setBook_price(book_price);
                    BookList[i].setBook_author(book_author);
                    System.out.println("恭喜您!修改成功!");
                }
            }
        }

    }

    /**
     * 方法七:购买图书buyBook()
     */
    public void buyBook() {

        System.out.println("请输入要购买的图书编号【以逗号间隔】:");
        String str = new Scanner(System.in).next();
        String[] strArr = new String[20];
        strArr = str.split(",");
        double sumBookPrice = 0;
        for(int i=0;i<strArr.length;i++) {
            for(int j=0;j<BookList.length;j++) {
                if(BookList[j]!=null) {

                    if(BookList[j].getBook_id()==Integer.parseInt(strArr[i])) {

                        /*System.out.println("您要购买的图书信息如下:");
                        System.out.println("书名"+"\t\t\t"+"价格"+"\t\t"+"作者"+"\t\t"+"金额合计");
                        System.out.println(BookList[j].getBook_name()+"\t\t"+BookList[j].getBook_price()+
                                "\t\t"+BookList[j].getBook_author()+"\t\t");*/
                        sumBookPrice +=BookList[j].getBook_price();
                        /*System.out.println("\t\t\t\t\t\t\t"+sumBookPrice+"元");*/
                        buiedBookList[j] =  BookList[j];

                        BookList[j]=null;
                        //System.out.println(BookList[j]);
                        int m = getNotNullofBookList();
                        //待完善
                        if(i==(strArr.length-1) && j==m) {
                            System.out.println("恭喜您!购买成功!");
                        }

                        //显示购买图书信息




                    }
                }
            }
        }
        System.out.println("您购买图书清单信息如下:");
        System.out.println("***********************************************");
        System.out.println("书名\t\t作者\t价格\t金额合计");
        for(int i=0;i<buiedBookList.length;i++) {
            if(buiedBookList[i]!=null) {
                System.out.println(buiedBookList[i].getBook_name()+"\t"+buiedBookList[i].getBook_author()+
                        "\t"+buiedBookList[i].getBook_price());



            }

        }
        DecimalFormat df = new DecimalFormat("#.00");
        System.out.println("\t\t\t\t"+df.format(sumBookPrice));
        System.out.println("***********************************************");
    System.out.println("\n\n");

    }


    /**
     * 方法八:返回BookList[]数组中不为null的值
     * 为方法七服务,为了只输出一个“购买成功”提示
     */
    public int getNotNullofBookList() {
        int j=0;
        for(int i=0;i<BookList.length;i++) {
            if(BookList[i]!=null) {
                j++;
            }
        }
        return j;
    }

    /**
     * 方法九:返回BookList[]数组中为null的个数
     */
    public int getNullOfBookList() {
        int k=0;
        for(int i=0;i<BookList.length;i++) {
            if(BookList[i]==null) {
                k++;
            }
        }
        return k;
    }

    /**
     * 方法十:定义开始界面startBookSystem()
     * @param args
     */
    public void startBookSystem() {
        System.out.println("================欢迎进入图书管理系统==================");
        System.out.println("1.显示图书列表");
        System.out.println("2.添加图书");
        System.out.println("3.删除图书");
        System.out.println("4.编辑图书");
        System.out.println("5.购买");
        System.out.println("6.退出");
        System.out.println("============================================");
        System.out.println("请输入要选择的序号:");
    }

    @Test
    public void Test() {
        for(int i=3;i<BookList.length;i++) {
            BookList[i] = null;

        }
    }

    public static void main(String[] args) {
        BookManagement bm = new BookManagement();
        while(true) {
            bm.startBookSystem();
            switch(bm.getChooseNumber()) {
                case 1:
                    //显示图书
                    bm.showAllBook();
                    break;
                case 2:
                    //新增图书
                    //接收一个图书对象
                    Book book = bm.getOneBook();
                    bm.addBook(book);
                    break;
                case 3:
                    //删除图书
                    bm.delBook();
                    break;
                case 4:
                    //编辑图书
                    bm.editBook();
                    break;
                case 5:
                    bm.showAllBook();
                    bm.buyBook();
                    break;
                case 6:
                    System.out.println("谢谢惠顾!您的认可会让我们做得更好!");
                    return;
                default:
                    System.out.println("输入有误奥,请重新选择");
                    break;

            }
        }
    }

    /**
     * 小结:
     * 1、如何初始化值?二维数组?一维数组?——对象
     * 2、如何保证每次添加是给null值添加呢?-break;
     * 3、如何自动添加图书编号呢?类似2的解决方案,找到编号,手动添加;
     * 4、购买书以后,设置为空,要想生效,就要在构造方法里初始化数组中的对象,否则每次查看,都是原来的三本书,其实后台已经更新了。
     * 5、购买成功,只提示一次!不必每本书都提示!
     * 6、图书售罄应该提示没有图书
     * 7、购买后的图书清单,单独存放在一个数组中,便于输出
     */




}   

四、总结


1、初始化值的时候,开始想用二维数组,其实没必要;数组里面可以直接添加对象,跟集合类似;List集合底层还不是数组;

2、初始化值的时候,注意初始化的位置;否则调用方法就初始化数据;

3、添加图书,要保证每次自动给一个null值添加,用到了关键字break;添加后就跳出循环;

4、用户添加图书,是不用考虑编号的,但是后台要考虑,后台考虑思路是找到不是null的那个序号,自动加1即可;

5、购买图书成功,如何只实现一次提示?需要用到循环的初始值和最终值;

6、如果所有图书购买完毕,需要提示,注意提示的位置;

7、购买图书后,要单独罗列图书清单,所以单独存放在一个数组中,便于操作。


细节还是不少。好了,读者朋友,你也敲一敲吧。晚安!下期再会!





========================优化=========================
后续优化如下:

主要输入错误等情况一 一作了处理,整个小程序相对于上面这个要健壮许多,主要作了下面这些优化:


     * 优化1:不能直接死循环,要根据用户选择来决定是否循环;
     * 
     * 优化2:新增图书直接输出“恭喜您!新增成功”还不够好,要输出这本书,让用户再次确认一下;这里把isContinueDo()用起来;
     * 
     * 优化3:删除图书,书名不存在要做个判断;
     * 
     * 优化4:编辑图书,要输出编辑后的信息;
     * 
     * 优化5:Exception in thread "main" java.util.InputMismatchException这个异常要处理下,用try catch捕获一下 用户很可能输入5.不小心,就报错,多尴尬!有什么办法可以全局捕获异常?因为每次输入都可能报这个异常?这里还暂不能用配置文件;这里先局部处理
     *  
     * 优化6:购买成功后,要打印购买清单,并且计算总价格;总金额要格式化一下"#.00";
     * 
     * 优化7:当图书被买完,要提示图书售罄;
     * 
     * 优化8:Exception in thread "main" 
     * java.lang.NumberFormatException:这是在购买图书的时候容易出现的,因为默认处理英文,也要try catch一下。

优化后的代码如下:
Book实体类还是和上面一样,只是主体代码丰富了不少。

BookManagementSystem

package com.hmc.yijian04;
import java.nio.file.attribute.AclEntry.Builder;
import java.text.DecimalFormat;
import java.util.Scanner;
import org.junit.Test;


/**
*2017年11月24日
*User:Meice
*下午5:09:05
*/
public class BookManagementSystem {
    //接受用户选择参数
     static int choice;
     //定义用户是否继续参数
     boolean isContinue = false;
     //定义购买总金额
     double sumOfBookPrice = 0;

    //初始化3本书,在构造方法中
    static Book[] BookList = new Book[100];

    //定义数组存放购买清单类似“购物车”
    Book[] buiedBooksList = new Book[20];


    public BookManagementSystem() {

        Book book1 = new Book(1,"《三国演义》",12.56,"罗贯中");
        Book book2 = new Book(2,"《儒林外史》",25.66,"吴敬梓");
        Book book3 = new Book(3,"《宝贝,宝贝》",34.55,"周国平");
        Book book4 = new Book(4,"《悲惨世界》",56.77,"雨果");
        Book book5 = new Book(5,"《曾国藩家书》",23.45,"曾国藩");


        //遍历赋值还不够方便
        BookList[0] = book1;
        BookList[1] = book2;
        BookList[2] = book3;
        BookList[3] = book4;
        BookList[4] = book5;
    }

    //先把框架搭建出来,然后针对性的写各种方法
    //这个作为主要测试类
    public static void main(String[] args) {
        BookManagementSystem bms = new BookManagementSystem();

        do {
            bms.welcomeEnter();
            switch(bms.getChoiceNumber()) {
            case 1:
                //显示图书列表
                bms.showAllBook();
                break;
            case 2:
                //新增图书
                bms.addBook(bms.getOneBook());
                break;
            case 3:
                //删除图书
                bms.showAllBook();
                bms.delBook(bms.getOneBookName());
                break;
            case 4:
                //编辑图书
                bms.showAllBook();
                bms.editBook(bms.getOneBookName());
                break;
            case 5:
                //购买
                bms.showAllBook();
                bms.buyBook();
                break;
            default:
                //其他情况
                break;

            }
        }while(bms.isContinueDo("是否继续?(y/n)"));
    }

    /**
     * 定义欢迎界面
     * 
     */
    public void welcomeEnter() {
        System.out.println("=================欢迎进入图书管理系统========================");
        System.out.println("1.显示图书列表\n2.新增图书\n3.删除图书\n4.编辑图书\n5.购买图书");
        System.out.println("=======================================================");
        System.out.println("请输入对应操作序号:");
    }

    /**
     * 方法一:开始界面
     * getChoiceNumber()
     */
    public int getChoiceNumber() {
        //处理InputMismatchException异常
        try {
            choice = new Scanner(System.in).nextInt();
        }catch (Exception e) {
            System.out.println("输入有误,请重新选择");
            welcomeEnter();
        }
        //这里要补充如果用户输出其他,该怎么办?捕获异常即可
        return choice;
    }


    /**
     * 方法二:showAllBook()
     * 显示图书列表   
     */
    public void showAllBook() {
        //知识点:数组遍历
        System.out.println("==========================图书列表======================");

        //图书售罄,做提示
        if(getBooksCount()==0) {
            System.out.println("图书已售罄,期待您下次购买~");
        }else {
            System.out.println("图书编号\t"+"图书名称\t\t"+"价格\t"+"作者");
        }

        for(int i=0;i<BookList.length;i++) {
            if(BookList[i]!=null) {
                System.out.println(BookList[i].getBook_id()+"\t"+BookList[i].getBook_name()+
                        "\t"+BookList[i].getBook_price()+"\t"+BookList[i].getBook_author());
            }

        }
        System.out.println("======================================================");
    }

    /**
     * 方法三:新增图书
     * addBook()
     */

    public void addBook(Book book) {
        //打印输出新增图书
        System.out.println("********************************************");
        System.out.println("书名\t\t价格\t\t作者");
        System.out.println(book.getBook_name()+"\t"+book.getBook_price()+"\t\t"+book.getBook_author());
        System.out.println("********************************************");
        boolean flag = isContinueDo("请确认新增图书正确与否,是否新增 (y/n)?");
        for(int i=0;i<BookList.length;i++) {
            //如果用户输入书目有误,就中断
            if(flag) {
                if(BookList[i]==null) {
                    BookList[i] = book;
                    System.out.println("恭喜您,新增成功!");
                    break;
                }
            }else {
                System.out.println("请重新选择新增图书操作");
                return;
            }
        }
    }


    /**
     * 方法三.2确认是否新增图书
     * 我们让这个方法来调用新增操作
     * switch里面调用这个方法
     */
    public void isAddBook() {
        //用户确认新增无误后在执行新增操作
        if(isContinueDo("请确认以上新增图书是否有误 (y/n)?")) {
            addBook(getOneBook());      
        }else {
            System.out.println("请重新输入:");
            addBook(getOneBook());
        }
    }




    /**
     * 方法四:接收用户的图书
     * getOneBook()
     */
    public Book getOneBook() {
        System.out.println("请输入书名:");
        String book_name = new Scanner(System.in).next();
        System.out.println("请输入价格:");
        double book_price = new Scanner(System.in).nextDouble();
        System.out.println("请输入作者:");
        String book_author = new Scanner(System.in).next();
        Book book = new Book(getBooksCount()+1, book_name, book_price, book_author);
        return book;
    }

    /**
     * 方法五:定义获取图书数量的方法
     * getBooksCount()
     * 这个方法很有必要:判断图书售罄可以用;判断是否循环结束也可以用
     */
    public int getBooksCount() {
        int j = 0;
        for(int i=0;i<BookList.length;i++) {
            if(BookList[i] != null) {
                j++;
            }
        }
        return j;
    }

    /**
     * 方法六:删除图书
     * delBook()
     */
    public void delBook(String book_name) {
        for(int i=0;i<BookList.length;i++) {
            if(BookList[i]!=null) {
                if(book_name.equals(BookList[i].getBook_name())) {
                    BookList[i] = null; 
                        System.out.println("恭喜您!删除成功!");    
                }else{
                    //要确保遍历结束
                    if(i==(getBooksCount()-1)) {
                        System.out.println("书名不存在,请重新选择操作");    
                        break;
                    }
                }
            }
        }


    }



    /**
     * 方法七:获得一个图书名
     * getOneBookName()
     */
    public String getOneBookName() {
        System.out.println("请输入书名:");
        return new Scanner(System.in).next();
    }


    /**
     * 方法八:根据书名编辑图书
     * editBook()
     */
    public void editBook(String book_name) {
        for(int i=0;i<BookList.length;i++) {
            if(BookList[i]!=null) {
                if(book_name.equals(BookList[i].getBook_name())) {
                    System.out.println("请输入修改后的价格:");
                    double book_price = new Scanner(System.in).nextDouble();
                    System.out.println("请输入修改后的作者:");
                    String book_author = new Scanner(System.in).next();

                    //输出用户要修改的信息,便于核实
                    System.out.println("********************************************");
                    System.out.println("书名\t\t价格\t\t作者");
                    System.out.println(book_name+"\t"+book_price+"\t\t"+book_author);
                    System.out.println("********************************************");

                    //用户要对修改的数据做确认,如果无误,在执行
                    if(isContinueDo("请核实修改信息,确认修改(y/n)?")) {
                        BookList[i].setBook_price(book_price);
                        BookList[i].setBook_author(book_author);
                        System.out.println("恭喜您!修改成功!");
                    }else {
                        System.out.println("请重新选择修改操作:");
                        break;
                    }

                }else {
                    //这个地方有个bug,命名修改成功后,为什么代码还会进来?
                    System.out.println("输入有误奥,请重新选择操作");
                    break;
                }
            }
        }

    }



    /**
     * 方法九:购买图书
     * buyBook()
     */
    public void buyBook() {
        System.out.println("请输入购买图书编号(以英文逗号间隔):");
        //处理NumberFormatException
        String book_ids = null;
        try {
            book_ids = new Scanner(System.in).next();
            String[] book_idArr = book_ids.split(",");
            for(int i=0;i<book_idArr.length;i++) {
                for(int j=0;j<BookList.length;j++) {
                    if(BookList[j]!=null) {
                        if(Integer.parseInt(book_idArr[i])==BookList[j].getBook_id()) {
                            //把购买图书存入“购物车”
                            buiedBooksList[j]=BookList[j];
                            sumOfBookPrice +=BookList[j].getBook_price();
                            BookList[j]=null;
                        }
                    }
                }
            }
            System.out.println("恭喜您,购买成功!");
            //显示购买信息
            System.out.println("您的购物清单如下:");
            System.out.println("********************************************");
            System.out.println("书名\t\t价格\t\t作者\t总金额");
            for(int i=0;i<buiedBooksList.length;i++) {
                if(buiedBooksList[i]!=null) {
                    System.out.println(buiedBooksList[i].getBook_name()+"\t"+buiedBooksList[i].getBook_price()+"\t\t"+buiedBooksList[i].getBook_author());

                }
            }
            DecimalFormat df = new DecimalFormat("#.00");
            System.out.println("\t\t\t\t\t"+df.format(sumOfBookPrice)+"元");
            System.out.println("********************************************");
        }catch (NumberFormatException e) {
            System.out.println("输入有误,请重新选择。\n输入要购买图书编号,用英文逗号间隔:");
        }






    }




    /**
     * 方法十:判断用户是否继续操作
     * isContinueDo()//和变量名区别下
     * str代表要提示的语句
     * 为了提高这段代码的复用率,所以增加一个参数str,让用户自己选择要输入的语句
     * 比如一开始是:"是否继续?(y/n)"
     * 新增图书的时候:"是否新增?(y/n)"
     * 删除的时候:"是否删除?(y/n)"
     * 修改的时候:"请再次确认修改:(y/n)";这样一段代码就可以复用好多次
     */
    public boolean isContinueDo(String str) {
        System.out.println(str);
        //choose用来接收用户输入的字母
        String choose = new Scanner(System.in).next();
        if("y".equals(choose)||"Y".equals(choose)) {
            isContinue = true;
        }else {
            if("n".equals(choose)|| "N".equals(choose)) {
                System.out.println("谢谢惠顾~期待下次光临~");
                isContinue = false;
            }else {
                System.out.println("您输入有误,请重新输入输入:y/Y表示继续;n/N表示退出");
                String choose2 = new Scanner(System.in).next();
                if("y".equals(choose2)||"Y".equals(choose2)) {
                    isContinue = true;
                }else {
                    if("n".equals(choose2)||"N".equals(choose2)) {
                        System.out.println("谢谢惠顾~欢迎下次光临~");
                        isContinue= false;
                    }else {
                        System.out.println("您多次输入错误!程序自动终止,请求助管理员【小美】吧!");
                        isContinue = false;
                    }
                }
            }
        }
        return isContinue;
    }

    /**
     * 1.补充choice其他方法
     * 2.
     * 
     */

    //遇到的问题
    /**
     * 1.Exception in thread "main" java.lang.NullPointerException
     * 数组初始化100个,遍历的时候,如果不做选择,就会报错!
     * 
     * 2.我把构造方法多写了个void,导致数组出不来。可见,没有深刻体会到什么是构造方法!
     * 
     * 3.开始偷懒,把totalBooks直接数量直接在showAllBook()中加1实现的,发现一查看,序号就会按照书本次数翻倍。
     * 所以,单独提炼出来。
     * 
     * 4.删除图书,如果书名输入有误,提示会循环重复让输入书名,怎么处理?break
     * public void delBook(String book_name) {
        for(int i=0;i<BookList.length;i++) {
            if(BookList[i]!=null) {
                if(book_name.equals(BookList[i].getBook_name())) {
                    BookList[i] = null;
                }else {
                    System.out.println("书名不存在,请重新输入完整版书名(含书名号):");
                    getOneBookName();
                    //continue;
                }
            }
        }
        System.out.println("恭喜您!删除成功!");
    }
     * 
     * 
     * 优化1:不能直接死循环,要根据用户选择来决定是否循环;
     * 优化2:新增图书直接输出“恭喜您!新增成功”还不够好,要输出这本书,让用户再次确认一下;这里把isContinueDo()用起来;
     * 优化3:删除图书,书名不存在要做个判断;
     * 优化4:编辑图书,要输出编辑后的信息;
     * 优化5:Exception in thread "main" java.util.InputMismatchException这个异常要处理下,用try catch捕获一下 
     *      用户很可能输入5.不小心,就报错,多尴尬!有什么办法可以全局捕获异常?因为每次输入都可能报这个异常?这里还暂不能用配置文件;这里先局部处理
     *  
     * 优化6:购买成功后,要打印购买清单,并且计算总价格;总金额要格式化一下"#.00";
     * 优化7:当图书被买完,要提示图书售罄;
     * 优化8:Exception in thread "main" java.lang.NumberFormatException:这是在购买图书的时候容易出现的,因为默认处理英文,
     * 也要try catch一下
     */


    /**
     * 1.处理数组,要时刻提防出现NullPointException和IndexOutofException
     * 2.不论多么简单的功能,都要站在用户角度考虑问题;站在用户角度,就是要多尝试;最好请不同的人来检测你的程序,这就是测试人员的巨大作用,他们
     * 就相当于内部的客户;有些你可以想到,但是用户千千万,意料之外的情况就会非常多;但是按照程序员的严谨态度,我们应该尽全力把产品功能做到完美;
     * 3.写基本功能花费时间不多,但是优化要考虑的问题就多了点。原来200来行代码,优化后,就是400来行了。
     */
}

总结2:


1.处理数组,要时刻提防出现NullPointException和IndexOutofException;

2.不论多么简单的功能,都要站在用户角度考虑问题;站在用户角度,就是要多尝试;最好请不同的人来检测你的程序,这就是测试人员的巨大作用,他们就相当于内部的客户;有些你可以想到,但是用户千千万,意料之外的情况就会非常多;但是按照程序员的严谨态度,我们应该尽全力把产品功能做到完美,有些功能一次是优化是不行的,需要不断优化,温故而知新嘛~

3.写基本功能花费时间不多,但是优化要考虑的问题就多了点。原来200来行代码,优化后,就是400来行了。


优化时间:2017.11.25下午

下期再会~!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值