您的位置:首页 > 编程语言 > Java开发

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

2017-11-23 23:58 441 查看
话说

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

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

===========================图书管理系统============================
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下午

下期再会~!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: