JavaCore-OOP-2-图书管理系统(商品管理升级版)
2017-11-23 23:58
441 查看
话说
各位读者,晚上好!上一篇博客很基础很基础吧!这篇依旧很基础。在我们基本掌握了框架之后,蓦然回首这些最初接触的知识,还是感慨万千。
今天实现这样一个功能:功能要求如下:
这个功能跟上一篇大同小异,但是这次写得更加细致。其实,后面的框架,如果不了解底层实现,单纯从实现功能来说,比这个还简单些。
开发工具
Eclipse
目录
一、效果图
二、实体类
三、方法类
四、总结
一、效果图
开始界面
购买图书界面,可以单本买,也可以多本买。
购买成功后,书单自动去掉购买掉的书。
二、实体类
Book
三、方法类
BookManagement
四、总结
1、初始化值的时候,开始想用二维数组,其实没必要;数组里面可以直接添加对象,跟集合类似;List集合底层还不是数组;
2、初始化值的时候,注意初始化的位置;否则调用方法就初始化数据;
3、添加图书,要保证每次自动给一个null值添加,用到了关键字break;添加后就跳出循环;
4、用户添加图书,是不用考虑编号的,但是后台要考虑,后台考虑思路是找到不是null的那个序号,自动加1即可;
5、购买图书成功,如何只实现一次提示?需要用到循环的初始值和最终值;
6、如果所有图书购买完毕,需要提示,注意提示的位置;
7、购买图书后,要单独罗列图书清单,所以单独存放在一个数组中,便于操作。
细节还是不少。好了,读者朋友,你也敲一敲吧。晚安!下期再会!
========================优化=========================
后续优化如下:
主要输入错误等情况一 一作了处理,整个小程序相对于上面这个要健壮许多,主要作了下面这些优化:
优化后的代码如下:
Book实体类还是和上面一样,只是主体代码丰富了不少。
BookManagementSystem
总结2:
1.处理数组,要时刻提防出现NullPointException和IndexOutofException;
2.不论多么简单的功能,都要站在用户角度考虑问题;站在用户角度,就是要多尝试;最好请不同的人来检测你的程序,这就是测试人员的巨大作用,他们就相当于内部的客户;有些你可以想到,但是用户千千万,意料之外的情况就会非常多;但是按照程序员的严谨态度,我们应该尽全力把产品功能做到完美,有些功能一次是优化是不行的,需要不断优化,温故而知新嘛~
3.写基本功能花费时间不多,但是优化要考虑的问题就多了点。原来200来行代码,优化后,就是400来行了。
优化时间:2017.11.25下午
下期再会~!
各位读者,晚上好!上一篇博客很基础很基础吧!这篇依旧很基础。在我们基本掌握了框架之后,蓦然回首这些最初接触的知识,还是感慨万千。
今天实现这样一个功能:功能要求如下:
===========================图书管理系统============================ 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< 1748d /span>.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下午
下期再会~!
相关文章推荐
- JavaCore-OOP-4-图书管理系统(完善版V2)
- JavaCore-OOP-3-图书管理系统(完善版)
- 图书管理系统
- 基于SeqList的商品管理系统
- 图书管理系统------软件设计图纸
- 图书管理系统项目(初学者必看的小项目)
- 课程设计---图书登记管理系统(217行代码)【没看】
- 图书信息借阅管理系统 C语言
- 图书管理系统
- 曾经做过的2个项目:图书销售管理系统和访客系统
- JAVA 面向对象编程开发--------初学者---------------------彩票系统----图书管理系统
- 客服管理系统--售后服务、商品评论管理、咨询邮件回复
- 图书管理系统——面向对象程序设计
- Java之------单机版书店管理系统(设计思想和设计模式系列四)图书模块
- 关于图书管理系统
- JavaWeb框架-【Hibernate+Struts2】-框架世界的联手-图书管理系统
- 图书管理系统论文
- 图书管理系统(有很多漏洞)怎么改最好
- C语言项目2:图书管理系统
- 图书管理系统添加的新类&nbsp;11AddUser…