我是靠谱客的博主 迷路黄蜂,最近开发中收集的这篇文章主要介绍Java基础案例教程 第七章IO(输入输出)———【任务7-1】保存书店每日交易记录 (字节流),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
一、任务描述:
二、运行结果:
三、实现思路:
1、图书类
封装成员变量:编号,名称,出版社,单价,库存数量
空参构造,含参构造;
Get,Set 方法;
2、销售书籍实现类
新建 ArrayList<Books>集合,作为书架存放书籍
public static ArrayList<Books> booksList = new ArrayList<Books>();
初始化书架,添加图书
/*
* 初始化书架上的图书信息,添加几本书
* */
public static void init (ArrayList<Books> books){
Books book1 = new Books(101, "数据结构", 91, 100, "清华出版社");
Books book2 = new Books(102, "组成原理", 92, 200, "西北出版社");
Books book3 = new Books(103, "操作系统", 93, 300, "华大出版社");
books.add(book1);
books.add(book2);
books.add(book3);
}
输入购买图书名称,获取图书信息;
//用户提示
Scanner sc=new Scanner(System.in);
System.out.print("请输入图书编号:");
int bookId=sc.nextInt();
输入购买数量,判断库存是否足够
足够的话,输入信息封装为Books对象,调用FileUtil.saveBooks方法;
3、保存销售记录类
获取指定格式的日期
Date date=new Date();
DateFormat format =new SimpleDateFormat("yyyyMMdd");
判断是否存在当日文件,来决定创建还是追加方式;
调用createFile() 写入记录;
字符串写入文件:
//追加写入
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("D:\IDEA-file\"+fileName, true));
String str = sbf.toString();
byte[] b = str.getBytes();
out.write(b);
FileOutputStream --> BufferedOutputStream --> out.write(b[i]) --> byte[] b = str.getBytes() -->
String str = stringBufferStr.toString();
四、实现代码:
为什么报错???
package cn.itcast.task01;
/**
* @author wangyue
* @version 1.0
* @date 2019/7/1 14:42
* @describe: 图书类
*/
public class Books {
//内部变量
private int id;
private String name;
private double price;
private int number;
// private double totalPrice;
private String press; //出版社
//构造方法
public Books() {
}
public Books(int id, String name, double price, int number, String press) {
this.id = id;
this.name = name;
this.price = price;
this.number = number;
//this.totalPrice = totalPrice;
this.press = press;
}
//Get and 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 double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
/* public double getTotalPrice() {
return totalPrice;
}
public void setTotalPrice(double totalPrice) {
this.totalPrice = totalPrice;
}*/
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press;
}
@Override
public String toString() {
return "图书编号:" + id +
" 图书名称:" + name +
" 出版社:" + press +
" 单价:" + price +
" 库存数量:" + number;
}
}
package cn.itcast.task01;
import java.util.ArrayList;
import java.util.Scanner;
/**
* @author wangyue
* @version 1.0
* @date 2019/7/1 14:42
* @describe: 销售图书实现类
*/
public class SellBooks {
//建立书架
public static ArrayList<Books> booksList = new ArrayList<Books>();
public static void main(String[] args) {
//实例化书架
init(booksList);
//把书架上所有图书信息打印出来
for (Books book : booksList) {
System.out.println(book);
}
//销售图书
while (true) {
Scanner sc = new Scanner(System.in);
//用户提示
System.out.print("请输入图书编号:");
int bookId = sc.nextInt();
//获取图书库存信息
Books book = getBookInfo(bookId);
if (book == null) {
System.out.println("输入图书编码有误");
} else {
System.out.println(book);
System.out.print("请输入购买数量:");
int buyNumber = sc.nextInt();
if (buyNumber > book.getNumber()) { //数量不足
System.out.println("库存不足");
} else { //库存数量足够
//封装Books对象
Books sellBook = new Books(bookId, book.getName(), book.getPrice(), book.getNumber(), book.getPress());
//保存销售记录
FileUnit.saveRecord(sellBook);
//修改库存
book.setNumber(book.getNumber() - buyNumber);
System.out.println("当前的库存状况");
System.out.println(book);
}
}
}
}
/*
* 初始化书架上的图书信息,添加几本书
* */
public static void init(ArrayList<Books> books) {
Books book1 = new Books(101, "数据结构", 91, 100, "清华出版社");
Books book2 = new Books(102, "组成原理", 92, 200, "西北出版社");
Books book3 = new Books(103, "操作系统", 93, 300, "华大出版社");
books.add(book1);
books.add(book2);
books.add(book3);
}
public static Books getBookInfo(int bookId) {
for (Books thisBook : booksList) {
if (thisBook.getId() == bookId) {
return thisBook;
}
}
return null;
}
}
package cn.itcast.task01;
//import org.omg.CORBA.portable.InputStream;
import java.io.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author wangyue
* @version 1.0
* @date 2019/7/2 14:07
* @describe: 文件工具类
*/
public class FileUnit {
public static final String SEPERATE_FIELD = ","; //字段分割符,逗号
public static final String SEPERATE_LINE = "rn"; //行分割符
/*
* 根据传进来的对象,保存一条记录
*/
public static void saveRecord(Books book) {
//检查今天的记录文件是否已存在
Date date = new Date();
DateFormat format = new SimpleDateFormat("yyyyMMdd");
String fileName = "销售记录" + format.format(date) + ".csv";
try {
FileInputStream in = new FileInputStream("D:\IDEA-file\" + fileName);
if (in != null) { //存在该文件,追加写入
createRecord(fileName, true, book);
}
} catch (FileNotFoundException e) { //输入流获取失败,即不存在该文件,创建新的文件
createRecord(fileName, false, book);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 将图书的销售信息保存到记录文档里,同label来判断是修改还是新建
*
* @param fileName 保存的记录文件名
* @param label true:已存在只修改 false:新创建文件
* @param book 记录对象
*/
public static void createRecord(String fileName, boolean label, Books book) {
BufferedOutputStream out = null;
StringBuffer sbf = new StringBuffer(); //拼接字符串
//多个创建输出流的地方,都需要try...catch ,可以在最外围放一个,包含所有
try {
if (label) { //直接追加即可
//创建输出流,用于追加文件 !!!
out = new BufferedOutputStream(new FileOutputStream("D:\IDEA-file\" + fileName, true));
} else { //不存在当天文件,新建一个
out = new BufferedOutputStream(new FileOutputStream("D:\IDEA-file\" + fileName));
//新文件需要创建表头
String[] fieldSort = new String[]{"图书编号", "图书名称", "购买数量", "单价", "总价", "出版社"};
for (String fieldKey : fieldSort) {
sbf.append(fieldKey).append(SEPERATE_FIELD);
}
}
//购买记录的主体内容
sbf.append(SEPERATE_LINE); //追加换行符
sbf.append(book.getId()).append(SEPERATE_FIELD);
sbf.append(book.getName()).append(SEPERATE_FIELD);
sbf.append(book.getNumber()).append(SEPERATE_FIELD);
sbf.append(book.getPrice()).append(SEPERATE_FIELD);
sbf.append(book.getNumber() * book.getPrice()).append(SEPERATE_FIELD);
sbf.append(book.getPress()).append(SEPERATE_FIELD);
//写入文件
String str = sbf.toString();
byte[] b = str.getBytes();
out.write(b);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
最后
以上就是迷路黄蜂为你收集整理的Java基础案例教程 第七章IO(输入输出)———【任务7-1】保存书店每日交易记录 (字节流)的全部内容,希望文章能够帮你解决Java基础案例教程 第七章IO(输入输出)———【任务7-1】保存书店每日交易记录 (字节流)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复