編寫一個程序,保存書店每日的銷售紀錄

1.圖書類java

package it.cn.demo7_1test;
/*
 * 編寫一個book類,裏面含有圖書信息,還有從新設置數量的方法
 */
public class Book {
    int id;
    String name;
    double price;
    int number;
    double money; //總價
    String Publish;//出本社
    
    //    構造方法
    public Book(int id, String name, double price, int number, double money, String publish) {
        super();
        this.id = id;
        this.name = name;
        this.price = price;
        this.number = number;
        this.money = money;
        Publish = publish;
    }
    
    //重寫toString方法
    @Override
    public String toString() {
        String message = "圖書編號:"+id+" 圖書名稱:"+name+" 圖書價格:"+" 出版社:"+Publish+" 數量:"+number
                          +" 總價:"+ money;
        return message;
    }
    
    public void setNumber(int number) {
        this.number=number;
    }    
}

2.編寫一個工具類,用來保存圖書的購買信息編程

package it.cn.demo7_1test;

import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

/*
 * 建立一個工具類,用來將購賣圖書的信息存入文件中
 */
public class FileUtil {
    public static final String SEPARATE_FILED=",";//分隔符逗號
    public static final String SEPARATE_LINE="\r\n";//行分隔符
    
    /*
     * 保存圖書信息
     */
    public static void saveBook(Book book) throws Exception {
        //判斷是否存在本地文件
        Date date=new Date();
        DateFormat format =new SimpleDateFormat("yyyyMMdd");//定義日期格式
        //將給定的 Date 格式化爲日期/時間字符串
        String name="銷售記錄"+format.format(date)+".csv";
        //建立一個輸入流對象
        InputStream in=null;
        try {
            //in的主要做用使用來判斷是否存在今天的銷售記錄的文件
            in=new FileInputStream(name); //判斷是否存在文件
            if(in != null) { //若是有找到文件
                in.close();//關閉輸入流
                createFile(name, true, book); //若是文件存在,就採起修改文件
            }
        }catch(FileNotFoundException e){  //若是沒有找到文件
            createFile(name, false, book);   //若是不存在文件,就從新建立一個文件
         }catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 
     * @param name  文件名
     * @param lable  文件存在的標識:true 文件存在  false  文件不存在
     * @param book
     */
    public static void createFile(String name,boolean lable,Book book) {
        //建立一個緩衝區
        BufferedOutputStream out=null;
        //可變字符串,緩衝字符
        StringBuffer sbs=new StringBuffer();
        
        
        try {
            //根據lable的值來判斷是從新建立文件,仍是繼續
            if(lable) {
                //建立一個向指定 File 對象表示的文件中寫入數據的文件輸出流。
                //若是第二個參數爲 true,則將字節寫入文件末尾處,而不是寫入文件開始處
                out=new BufferedOutputStream(new FileOutputStream(name,true));
            }else {
                //不存在當天文件,則建立新文件
                //建立輸出流對象,用於保存文件
                out=new BufferedOutputStream(new FileOutputStream(name));
                
                //建立文件的表頭部分
                String[] fieldSort =new String[] {"圖書編號","圖書名稱","購買數量","單價","總價","出版社"};
                //建立表頭
                for(String fieldKey:fieldSort) {
                    //新建時,將表頭存入文件
                    sbs.append(fieldKey).append(SEPARATE_FILED);
                }
            }
            
            //添加數據
            sbs.append(SEPARATE_LINE);//添加換行
            //把購買的圖書信息添加到可變字符裏,再把可變字符轉爲字符串,再將字符串轉爲字節
            sbs.append(book.id).append(SEPARATE_FILED);
            sbs.append(book.name).append(SEPARATE_FILED);
            sbs.append(book.number).append(SEPARATE_FILED);
            sbs.append(book.price).append(SEPARATE_FILED);
            sbs.append(book.money).append(SEPARATE_FILED);
            sbs.append(book.Publish).append(SEPARATE_FILED);
            
            //把字符轉換爲字節數組
            String str=sbs.toString();
            byte[] b=str.getBytes();
            
            for(int i=0;i<b.length;i++)
            {
                out.write(b[i]); //將內容寫入本地文件
            }
            
        }catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                if (out != null) {
                    out.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        
    }
}

3.主類數組

package it.cn.demo7_1test;

import java.util.ArrayList;
import java.util.Scanner;


public class RecordBookOrder {
    //建立一個靜態的集合,用來存儲書
    static ArrayList<Book> booklist = new ArrayList<Book>();
    public static void main(String[] args) throws Exception {
        //初始化圖書信息
        init(booklist);
        
        //將圖書打印出來
        for(int i=0;i<booklist.size();i++) {
            System.out.println(booklist.get(i));
        }
        
        while(true) {
            //獲取控制檯輸入的信息
            Scanner scan=new Scanner(System.in);
            System.out.println("請輸入圖書編號:");
            int bookID=scan.nextInt();
            Book stockBook=getBook(bookID);
            //若是圖書不爲空
            if(stockBook != null) {
                System.out.println("當前圖書信息:"+stockBook);
                System.out.println("請輸入購買數量:");
                int num=scan.nextInt();
                if(num<=stockBook.number) { //判斷庫存是否夠
                    //若是夠的話,就建立一個book對象,數量爲購買的數量,並將此對象存入CVS文件中
                    Book book=new Book(stockBook.id, stockBook.name, stockBook.price, 
                                       num, stockBook.money*num,stockBook.Publish);
                    //建立一個工具類,用來存購買信息
                    FileUtil.saveBook(book); //將本條信息存入文件
                    //修改庫存
                    stockBook.setNumber(stockBook.number-num);
                }else {
                    System.out.println("庫存不夠!");
                }
            }else {
                System.out.println("圖書編號錯誤!");
            }
        }
        
    }
    //初始化集合
    private static void init(ArrayList<Book> booklist) {
        Book b1=new Book(101, "java基礎入門", 44.50, 100, 4450,"清華大學出版社");
        Book b2=new Book(102, "java編程思想", 99.00, 100, 9900, "機械工程出版社");
        Book b3=new Book(103, "瘋狂java講義", 99.00, 100, 9900, "電子工業出版社");
        booklist.add(b1);
        booklist.add(b2);
        booklist.add(b3);
        
    }
    
    //根據輸入的圖書編號查找圖書,正確的話就返回圖書,
    private static Book getBook(int bookID) {
        for(int i=0;i<booklist.size();i++) {
            Book stockbook=booklist.get(i);
            if(bookID==stockbook.id) {
                return stockbook;    
            }
        }
        return null;
    }
}
相關文章
相關標籤/搜索