保存书店交易记录程序

保存书店交易记录程序

实验内容
程序编写:编写一个保存书店每日交易记录的程序,使用字符流将书店的交易信息记录在本地的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结尾的文件,复制该文件到桌面打开。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芝士汉堡 ིྀིྀ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值