Java学习笔记(三)—— 保存书店交易记录程序

保存书店交易记录程序

程序编写:编写一个保存书店每日交易记录的程序,将书店的交易信息记录在本地的csv或txt文件中。当用户输入图书编号时,后台会根据图书编号查询到相应图书信息,并返回打印出来。用户紧接着输入购买数量,系统会判定库存是否充足,如果充足则将信息保存至本地的csv文件中,其中每条记录包含“图书编号”、“图书名称”、“购买数量”、“单价”、“总价”和“出版社”等数据。每个数据之间用英文逗号或空格分隔,每条数据之间由换行符分隔。保存的时候需要判断本地是否存在当天的数据,如果存在则追加,不存在则新建。文件命名格式为“销售记录”加上当天日期加上“.csv”或“.txt”后缀。

Books

package bookstore;

/*
 * 图书类
 */
public class Books {
    private int id;
    private String name;//图书名称
    private int number;//图书数量
    private double price;//图书单价
    private double money;//总价
    private String publish;//出版社
    //构造方法
	public Books() {
		super();
	}
	
	public Books(int id, String name, int number, double price, double money, String publish) {
		super();
		this.id = id;
		this.name = name;
		this.number = number;
		this.price = price;
		this.money = money;
		this.publish = publish;
	}
	
	//取值赋值构造get,set
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getNumber() {
		return number;
	}
	public void setNumber(int number) {
		this.number = number;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public double getMoney() {
		return money;
	}
	public void setMoney(double money) {
		this.money = money;
	}
	public String getPublish() {
		return publish;
	}
	public void setPublish(String publish) {
		this.publish = publish;
	}
    @Override
    public String toString() {
    	String message = "图书编号: " + id + " 图书名称: " + name + " 出版社: " + publish + "  单价: " + price + " 库存数量: " + number;
    	return message;
    }
}

RecordBooksOrder

package bookstore;

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

/*
 * 图书订单信息
 */
public class RecordBooksOrder {
	//书架
	public static ArrayList<Books> booksList = new ArrayList<Books>();
	
    public static void main(String[] args) {
		//初始化书架
    	init();
    	//将书架上所有的书打印出来————遍历
    	for (Books book : booksList) {
			System.out.println(book);
		}
    	//购买图书
    	while (true) {
			//获取控制台输入内容
    		Scanner scan = new Scanner(System.in);
    		System.out.print("请输入图书编号:");
    		int bookId = scan.nextInt();
    		//根据输入的图书编号获取图书信息
    		Books stockBooks = getBooksById(bookId);
    		//判断是否存在这本书
    		if (stockBooks != null) {
				//说明找到该图书
    			System.out.println("当前图书信息" + stockBooks);
    			System.out.print("请输入购买数量:");
    			int bookNumber = scan.nextInt();//输入购买书的数量
    			//判断当前库存数量是否足够
    			if (bookNumber <= stockBooks.getNumber() ) {
					//可以购买,图书充足
    				//将购买图书的信息封装成Books对象
    				Books books = new Books(stockBooks.getId(), stockBooks.getName(), bookNumber, stockBooks.getPrice(), stockBooks.getMoney()*bookNumber, stockBooks.getPublish());
    				//将本条购买信息保存至本地文件
    				//拼接文件昵称
    				Date date =new Date();
    				DateFormat format = new SimpleDateFormat("yyyyMMdd");//定义日期格式
    				String fileName = "销售记录" + format.format(date)+".csv" ;
    				try {
						FileInputStream in = new FileInputStream(fileName);
    				    if (in != null) {
    				    	//说明该文件存在
					    	in.close();
					    	//打开文件,追加数据
					    	saveBooks(fileName, true, books);
					   }
					} catch (FileNotFoundException e) {
						// 说明该文件不存在,创建新文件,写入数据
						saveBooks(fileName, false, books);
					}catch(IOException e){
						e.printStackTrace();
					}
				}
    				
    			else {
					//不能购买,图书不够	
    			System.out.println("库存不足!");
    				//修改当前书的库存数量
    				stockBooks.setNumber(stockBooks.getNumber() - bookNumber);
				}
    			
			}
    	else{
				//没有找到
				System.out.println("图书编号输入错误!");
			}
		}

}
    /*
     *初始化书架上的图书信息,将图书放在书架上
     */
    public static void init() {
		//创建书
    	Books good1 = new Books(101, "JAVA基础入门", 100, 44.5, 4450.00, "清华大学出版社");
    	Books good2 = new Books(102, "JAVA编程思想", 50, 108.0, 5400.00, "机械工业出版社");
    	Books good3 = new Books(103, "疯狂JAVA讲义", 100, 90.0, 9000.00, "电子工业出版社");
    	//把书添加到书架上
    	booksList.add(good1);
    	booksList.add(good2);
    	booksList.add(good3);
	}
    /**
     * 根据输入对应的图书编号信息,进行书架图书信息遍历,找到图书编号所对应的信息
     * @param bookId 输入的图书编号
     * @return 找到的图书信息
     */
    public static Books getBooksById(int bookId) {
		for(Books thisBooks : booksList) {
		//判断当前书的Id 与输入的图书编号是否一致
			if (thisBooks.getId() == bookId) {
				return thisBooks;
			}
		}
		//没找到Id对应的书,返回null
		return null;
    }
    
    /**
     * 图书的售出信息保存到本地,可通过labe1标识来判断是否是修改文件还是新建文件
     * @param fileName  文件名
     * @param label 文件是否已存在的标识。true: 文件已存,则内容修改; false: 文件不存在,则新建文件
     * @param books 图书信息
     */
    public static void saveBooks (String fileName,boolean label,Books books) {
    	try {
    		BufferedOutputStream out = null; //操作文件的输出流
    		StringBuffer sbf = new StringBuffer() ; //记录文件中要存的数据
    		//判断该文件是否存在
        	if (label) {//说明已存在当天的文件,则在文件内容后追加新数据
            	out = new BufferedOutputStream(new FileOutputStream(fileName, true));
    		}else {//说明不存在当天的文件,则新建文件
    	    	out = new BufferedOutputStream(new FileOutputStream(fileName));
    		    //新文件中,需要写入表头信息
    	     	String[] fieldSort = {"图书编号","图书名称","购买数量","单价","总价","出版社"};
    	    	for (String field : fieldSort) {
		  	    	sbf.append(field).append(",");
		     	}
            }
        	//写入购买图书信息到表格
            sbf.append("\r\n");//添加换行符
            sbf.append(books.getId()).append(",");
            sbf.append(books.getName()).append(",");
            sbf.append(books.getNumber()).append(",");
            sbf.append(books.getPrice()).append(",");
            sbf.append(books.getMoney()).append(",");
            sbf.append(books.getPublish());
           //通过操作文件的输出流,把图书信息写入到文件中  
            String result = sbf.toString();
            byte[] bys = result.getBytes();
            out.write( bys );
            out.close();

    	}catch(IOException e){
    		e.printStackTrace();
    	}
    	
    }

}

运行上面的代码
在这里插入图片描述
在项目下点击Refresh,可以得到一个.csv结尾的文件,将该文件复制到桌面打开,可以看到书店的交易信息记录
在这里插入图片描述

posted @ 2020-05-19 15:30  atkx  阅读(421)  评论(0编辑  收藏  举报