Books.java:
这个文件定义了一个Books类。
规定Books类拥有的属性:int id, String name, String publish, double price, int number, double money。
重写了toString()方法,方便打印Books类定义的某个实体的信息。
定义了一个方法:setNum()用来修改Books实体的number。
//将图书信息封装成一个实体类 public class Books{ int id; String name; String publish; double price; double money; int number; public Books(int id, String name, String publish, double price, int number, double money){ this.id = id; this.name = name; this.publish = publish; this.price = price; this.number = number; this.money = money; } //toString()将任何对象转换成字符串表达形式 @Override public String toString(){ String message = "图书编号:" + id + " 图书名称:" + name + " 出版社:" + publish + " 单价 " + price + " 库存数量:" + number; return message; } public void setNum(int number){ this.number = number; } }
RecordBooksOrder.java:
init():用来初始化书架,放了三种书~
getBooksById():根据bookId返回Books实体信息。
main():运行程序的入口,获取用户输入信息;
根据图书编号得到的图书信息封装成Books对象;
调用FileUtil.savebooks()将此次操作信息记录到本地;
修改书架中图书的数量。
import java.util.*; public class RecordBooksOrder{ //static关键字来修饰成员变量,该变量被称为静态变量,静态变量被所有实例共享 static ArrayList<Books> booksList = new ArrayList<Books>(); public static void main(String[] args){ //初始化书架 init(); //将书架上所有图书信息打印出来 for(int i=0; i<booksList.size(); i++){ System.out.println(booksList.get(i)); } while(true){ //获取控制台信息 Scanner scan = new Scanner(System.in); System.out.println("请输入图书编号:"); int bookId = scan.nextInt(); Books stockBooks = getBooksById(bookId); if(stockBooks != null){ System.out.println("当前图书信息:"); System.out.println(stockBooks); System.out.println("请输入当前购买数量:"); int bookNumber = scan.nextInt(); if(bookNumber <= stockBooks.number){ //将输入信息封装成Books对象 Books sellBook = new Books(stockBooks.id, stockBooks.name, stockBooks.publish, stockBooks.price, bookNumber, bookNumber*stockBooks.price); //将本条数据保存至本地文件 FileUtil.saveBooks(sellBook); stockBooks.setNum(stockBooks.number-bookNumber); }else{ System.out.println("库存不足!"); } }else{ System.out.println("图书编码输入错误误!"); } } } private static void init(){ Books book1 = new Books(101, "python", "北邮出版社", 44.50, 100, 4450); Books book2 = new Books(102, "java", "清华出版社", 30, 50, 1500); Books book3 = new Books(103, "c++", "人民邮电出版社", 90, 100, 9000); booksList.add(book1); booksList.add(book2); booksList.add(book3); //System.out.println(book1.id); } private static Books getBooksById(int bookId){ for(int i=0; i<booksList.size(); i++){ //System.out.println(bookId); Books book = booksList.get(i); if(book.id == bookId){ return book; } } return null; } }
FileUtil.java:
创建本地文件的名字;
根据是存在此文件将用户操作信息写入文件。
import java.util.*; import java.text.*; import java.io.*; public class FileUtil{ //被final修饰的变量称为常量,一旦被赋值,其值不能被改变 public static final String SEPARATE_FIELD = ","; public static final String SEPARATE_LINE = " "; public static void saveBooks(Books sellBook){ //创建文件名 Date date = new Date(); //parse()返回的是一个Date类型数据,format()返回的是一个StringBuffer类型的数据 DateFormat format = new SimpleDateFormat("yyyyMMdd"); String name = "sell_log" + format.format(date) + ".csv"; InputStream in = null; //判断本地是否有此文件 try{ //这句话执行,如果没有该文件,会抛出FileNotFoundException异常 in = new FileInputStream(name); if(in != null){ //存在文件,采取修改文件的方式 in.close(); createFile(name, true, sellBook); } } catch (FileNotFoundException e){ //不存在该文件,应创建文件 createFile(name, false, sellBook); } catch (IOException e){ e.printStackTrace(); } } //label=true:存在文件 public static void createFile(String name, boolean label, Books sellBook){ BufferedOutputStream bos = null; StringBuffer sbf = new StringBuffer(); try{ if(label){ bos = new BufferedOutputStream(new FileOutputStream(name, true)); }else{ bos = new BufferedOutputStream(new FileOutputStream(name)); String[] str = new String[] {"图书编号", "图书名称", "购买数量", "单价", "总价", "出版社"}; for(String s : str){ sbf.append(s + SEPARATE_FIELD); } } sbf.append(SEPARATE_LINE); sbf.append(sellBook.id).append(SEPARATE_FIELD); sbf.append(sellBook.name).append(SEPARATE_FIELD); sbf.append(sellBook.number).append(SEPARATE_FIELD); sbf.append(sellBook.price).append(SEPARATE_FIELD); sbf.append(sellBook.money).append(SEPARATE_FIELD); sbf.append(sellBook.publish).append(SEPARATE_FIELD); String str = sbf.toString(); byte[] b = str.getBytes(); for (int i=0; i<b.length; i++){ bos.write(b[i]); } } catch(Exception e){ e.printStackTrace(); } finally{ try { if(bos!=null) bos.close(); }catch(Exception e2){ e2.printStackTrace(); } } } }
直接在excel里打开我们写好的.csv文件可能会乱码:
需要修改一下excel的编码格式:
excel里点击【数据】【从文本】:选择文件原始格式:UTF-8
分隔符为逗号:
ok啦~: