保存书店交易记录程序
实验内容
程序编写:编写一个保存书店每日交易记录的程序,使用字符流将书店的交易信息记录在本地的csv或txt文件中。当用户输入图书编号时,后台会根据图书编号查询到相应图书信息,并返回打印出来。用户紧接着输入购买数量,系统会判定库存是否充足,如果充足则将信息保存至本地的csv文件中,其中每条记录包含“图书编号”、“图书名称”、“购买数量”、“单价”、“总价”和“出版社”等数据。每个数据之间用英文逗号或空格分隔,每条数据之间由换行符分隔。保存的时候需要判断本地是否存在当天的数据,如果存在则追加,不存在则新建。文件命名格式为“销售记录”加上当天日期加上“.csv”或“.txt”后缀,如“销售记录20200426.csv”或“销售记录20200426.csv”
实验要求
(1)基于输入输出流的原理,在深入分析的基础上,应用输入输出流技术编码实现文件读写相关问题的设计方案;
(2)正确选择和使用扩展输入输出流技术,模拟和仿真实际工程问题中的文件读写问题。
类所属关系
Books类
package Other.HomeWork;
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;
}
}
FileUtil类
package Other.HomeWork;
import java.awt.print.Book;
import java.io.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class FileUtil {
public static void saveBooks(Books books) {
Date date = new Date();
DateFormat format = new SimpleDateFormat(“yyyyMMdd”);//定义日期格式
String name = “销售记录” + format.format(date) + “.csv”;
File file = null;
file = new File(name);
if (file.exists()) {
//说明该文件存在
createFile(name, true, books);
}else {
createFile(name, false, books);
}
}
private static void createFile(String name, boolean label, Books books) {
BufferedOutputStream out = null; //操作文件的输出流
StringBuffer sbf = new StringBuffer() ; //记录文件中要存的数据
try {
//判断该文件是否存在
if (label) {//说明已存在当天的文件,则在文件内容后追加新数据
out = new BufferedOutputStream(new FileOutputStream(name, true));
}else {//说明不存在当天的文件,则新建文件
out = new BufferedOutputStream(new FileOutputStream(name));
//新文件中,需要写入表头信息
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();
}
}
}
RecordBooksOrder类
package Other.HomeWork;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Scanner;
public class RecordBooksOrder {
public static ArrayList booksList = new ArrayList();
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());
//将本条购买信息保存至本地文件
//拼接文件昵称
FileUtil.saveBooks(books);
stockBooks.setNumber(stockBooks.getNumber()-bookNumber);
}
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;
}
}
生成.csv文件
idea可以直接查看
eclipse:项目下点击Refresh,可以得到一个.csv结尾的文件,复制该文件到桌面打开。