编写一个程序,保存书店每日的销售纪录

1.图书类java

package it.cn.demo7_1test;
/*
 * 编写一个book类,里面含有图书信息,还有从新设置数量的方法
 */
public class Book {
    int id;
    String name;
    double price;
    int number;
    double money; //总价
    String Publish;//出本社
    
    //    构造方法
    public Book(int id, String name, double price, int number, double money, String publish) {
        super();
        this.id = id;
        this.name = name;
        this.price = price;
        this.number = number;
        this.money = money;
        Publish = publish;
    }
    
    //重写toString方法
    @Override
    public String toString() {
        String message = "图书编号:"+id+" 图书名称:"+name+" 图书价格:"+" 出版社:"+Publish+" 数量:"+number
                          +" 总价:"+ money;
        return message;
    }
    
    public void setNumber(int number) {
        this.number=number;
    }    
}

2.编写一个工具类,用来保存图书的购买信息编程

package it.cn.demo7_1test;

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 SEPARATE_FILED=",";//分隔符逗号
    public static final String SEPARATE_LINE="\r\n";//行分隔符
    
    /*
     * 保存图书信息
     */
    public static void saveBook(Book book) throws Exception {
        //判断是否存在本地文件
        Date date=new Date();
        DateFormat format =new SimpleDateFormat("yyyyMMdd");//定义日期格式
        //将给定的 Date 格式化为日期/时间字符串
        String name="销售记录"+format.format(date)+".csv";
        //建立一个输入流对象
        InputStream in=null;
        try {
            //in的主要做用使用来判断是否存在今天的销售记录的文件
            in=new FileInputStream(name); //判断是否存在文件
            if(in != null) { //若是有找到文件
                in.close();//关闭输入流
                createFile(name, true, book); //若是文件存在,就采起修改文件
            }
        }catch(FileNotFoundException e){  //若是没有找到文件
            createFile(name, false, book);   //若是不存在文件,就从新建立一个文件
         }catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 
     * @param name  文件名
     * @param lable  文件存在的标识:true 文件存在  false  文件不存在
     * @param book
     */
    public static void createFile(String name,boolean lable,Book book) {
        //建立一个缓冲区
        BufferedOutputStream out=null;
        //可变字符串,缓冲字符
        StringBuffer sbs=new StringBuffer();
        
        
        try {
            //根据lable的值来判断是从新建立文件,仍是继续
            if(lable) {
                //建立一个向指定 File 对象表示的文件中写入数据的文件输出流。
                //若是第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处
                out=new BufferedOutputStream(new FileOutputStream(name,true));
            }else {
                //不存在当天文件,则建立新文件
                //建立输出流对象,用于保存文件
                out=new BufferedOutputStream(new FileOutputStream(name));
                
                //建立文件的表头部分
                String[] fieldSort =new String[] {"图书编号","图书名称","购买数量","单价","总价","出版社"};
                //建立表头
                for(String fieldKey:fieldSort) {
                    //新建时,将表头存入文件
                    sbs.append(fieldKey).append(SEPARATE_FILED);
                }
            }
            
            //添加数据
            sbs.append(SEPARATE_LINE);//添加换行
            //把购买的图书信息添加到可变字符里,再把可变字符转为字符串,再将字符串转为字节
            sbs.append(book.id).append(SEPARATE_FILED);
            sbs.append(book.name).append(SEPARATE_FILED);
            sbs.append(book.number).append(SEPARATE_FILED);
            sbs.append(book.price).append(SEPARATE_FILED);
            sbs.append(book.money).append(SEPARATE_FILED);
            sbs.append(book.Publish).append(SEPARATE_FILED);
            
            //把字符转换为字节数组
            String str=sbs.toString();
            byte[] b=str.getBytes();
            
            for(int i=0;i<b.length;i++)
            {
                out.write(b[i]); //将内容写入本地文件
            }
            
        }catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                if (out != null) {
                    out.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        
    }
}

3.主类数组

package it.cn.demo7_1test;

import java.util.ArrayList;
import java.util.Scanner;


public class RecordBookOrder {
    //建立一个静态的集合,用来存储书
    static ArrayList<Book> booklist = new ArrayList<Book>();
    public static void main(String[] args) throws Exception {
        //初始化图书信息
        init(booklist);
        
        //将图书打印出来
        for(int i=0;i<booklist.size();i++) {
            System.out.println(booklist.get(i));
        }
        
        while(true) {
            //获取控制台输入的信息
            Scanner scan=new Scanner(System.in);
            System.out.println("请输入图书编号:");
            int bookID=scan.nextInt();
            Book stockBook=getBook(bookID);
            //若是图书不为空
            if(stockBook != null) {
                System.out.println("当前图书信息:"+stockBook);
                System.out.println("请输入购买数量:");
                int num=scan.nextInt();
                if(num<=stockBook.number) { //判断库存是否够
                    //若是够的话,就建立一个book对象,数量为购买的数量,并将此对象存入CVS文件中
                    Book book=new Book(stockBook.id, stockBook.name, stockBook.price, 
                                       num, stockBook.money*num,stockBook.Publish);
                    //建立一个工具类,用来存购买信息
                    FileUtil.saveBook(book); //将本条信息存入文件
                    //修改库存
                    stockBook.setNumber(stockBook.number-num);
                }else {
                    System.out.println("库存不够!");
                }
            }else {
                System.out.println("图书编号错误!");
            }
        }
        
    }
    //初始化集合
    private static void init(ArrayList<Book> booklist) {
        Book b1=new Book(101, "java基础入门", 44.50, 100, 4450,"清华大学出版社");
        Book b2=new Book(102, "java编程思想", 99.00, 100, 9900, "机械工程出版社");
        Book b3=new Book(103, "疯狂java讲义", 99.00, 100, 9900, "电子工业出版社");
        booklist.add(b1);
        booklist.add(b2);
        booklist.add(b3);
        
    }
    
    //根据输入的图书编号查找图书,正确的话就返回图书,
    private static Book getBook(int bookID) {
        for(int i=0;i<booklist.size();i++) {
            Book stockbook=booklist.get(i);
            if(bookID==stockbook.id) {
                return stockbook;    
            }
        }
        return null;
    }
}
相关文章
相关标签/搜索