①创建一个图书实体类
package in;
public class Books {
int id;
String name; //图书名称
double price; //单价
int number; //图书数量
double money; //总价
String Publish; //出版社
//定义方法赋值
public Books(int id,String name,double price,int number,double money,String Publish ) {
this.id=id;
this.name=name;
this.price=price;
this.number=number;
this.money=money;
this.Publish=Publish;
}
@Override //①可以当注释用, 方便阅读.②编译器检查覆写方法的正确性, 验证`@Override下面的方法名是否存在父类中. 如果没有则报错.
//是伪代码, 表示覆写父类方法
//用来输出图书的具体情况
public String toString(){
String message="图书编号:"+id+" 图书名称:"+name+" 单价:"+price+" 出版社:"+Publish+ " 总价:"+money+" 库存数量:"+number;
return message;
}
//用来设置减掉购买的书本数量
public void setNumber(int number) {
this.number=number;
}
}
②创建一个记录和操作的图书
package in;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
public class RecordBooksOrder {
static ArrayList<Books> bookList=new ArrayList<Books>();
public static void main(String[] args) throws IOException {
init();
for(int i=0;i<bookList.size();i++)
{
System.out.println(bookList.get(i));
}
while(true){
Scanner sin=new Scanner(System.in);
System.out.print("请输入图书编号:");
int bookId=sin.nextInt();
Books stockBooks=getBooksById(bookId);
if(stockBooks!=null)//判断是否存在图书
{
System.out.println("当前图书信息:"+stockBooks);
System.out.println("请输入购买数量:");
int bookNumber=sin.nextInt();
if(bookNumber<=stockBooks.number) //判断库存是否足够
{
Books books=new Books(stockBooks.id,stockBooks.name,stockBooks.price,bookNumber,stockBooks.price*bookNumber,stockBooks.Publish);//封装
FileUtil.saveBooks(books);//保存数据
stockBooks.setNumber(stockBooks.number-bookNumber);
}else{
System.out.println("库存不足!");
}
}else{
System.out.println("图书编号输入错误");
}
}
}
private static Books getBooksById(int bookId) {
for(int i=0;i<bookList.size();i++)
{
Books thisBooks=bookList.get(i);
if(bookId==thisBooks.id)
{
return thisBooks;
}
}
return null;
}
//初始化数据;
private static void init() {
Books goods1=new Books(101,"java基础入门",44.50,100,4450.00,"清华大学出版社");
Books goods2=new Books(102,"java中级",108.00,50,5400.00,"清华大学出版社");
Books goods3=new Books(103,"java高级",99.00,100,9900.00,"清华大学出版社");
bookList.add(goods1);
bookList.add(goods2);
bookList.add(goods3);
}
}
③定义工具类来保存图书信息
package in;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class FileUtil {
public static final String aa=",";
public static final String bb="\r\n";
//保存图书信息
public static void saveBooks(Books books) throws IOException
{
Date date=new Date();
DateFormat format=new SimpleDateFormat("yyyyMMdd");
String name="销售记录"+format.format(date)+".csv";
InputStream in=null;
try{
in=new FileInputStream(name);
if(in!=null)
{
in.close();
createFile(name,true,books);
}
}catch (FileNotFoundException e){
createFile(name, false, books);
}catch (IOException e) {
e.printStackTrace();
}
}
private static void createFile(String name, boolean b, Books books) {
BufferedOutputStream out=null;
StringBuffer sbf=new StringBuffer();
try{
if(b){
out=new BufferedOutputStream(new FileOutputStream(name,true)); //为真时直接追加内容
}else{
out=new BufferedOutputStream(new FileOutputStream(name));
String[] filedSort=new String[]{"图书编号","图书名称","购买数量","单价","总价","出版社"};
for(String fieldKey:filedSort)
{
sbf.append(fieldKey).append(aa);//创建表头,给StringBuff添加数据
} }
sbf.append(bb);
sbf.append(books.id).append(aa);
sbf.append(books.name).append(aa);
sbf.append(books.number).append(aa);
sbf.append((double)books.price).append(aa);
sbf.append((double)books.money).append(aa);
sbf.append(books.Publish).append(aa);
String str=sbf.toString();
byte[] c=str.getBytes();
for(int i=0;i<c.length;i++)
{
out.write(c[i]);
}
}catch(Exception e){
e.printStackTrace();
}finally {
try{
if(out!=null)
{
out.close();
}
}catch (Exception ee){
ee.printStackTrace();
}
}
}
}