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 = "\r\n"; 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啦~:


