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结尾的文件,将该文件复制到桌面打开,可以看到书店的交易信息记录