java——保存書店每日交易記錄程序設計


  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啦~:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM