• java——保存书店每日交易记录程序设计


      Books.java:

        这个文件定义了一个Books类。

        规定Books类拥有的属性:int id, String name, String publish, double price, int number, double money。

        重写了toString()方法,方便打印Books类定义的某个实体的信息。

        定义了一个方法:setNum()用来修改Books实体的number。

    //将图书信息封装成一个实体类
    public class Books{
        int id;
        String name;
        String publish;
        double price;
        double money;
        int number;
        public Books(int id, String name, String publish, double price,
                int number, double money){
            this.id = id;
            this.name = name;
            this.publish = publish;
            this.price = price;
            this.number = number;
            this.money = money;
        }
        //toString()将任何对象转换成字符串表达形式
        @Override
        public String toString(){
            String message = "图书编号:" + id + " 图书名称:" + name + 
                    " 出版社:" + publish + " 单价 " + price + " 库存数量:" + number;
            return message;
        }
        public void setNum(int number){
            this.number = number;
        }
    }

      RecordBooksOrder.java:

        init():用来初始化书架,放了三种书~

        getBooksById():根据bookId返回Books实体信息。

        main():运行程序的入口,获取用户输入信息;

            根据图书编号得到的图书信息封装成Books对象;

            调用FileUtil.savebooks()将此次操作信息记录到本地;

            修改书架中图书的数量。

    import java.util.*;
    public class RecordBooksOrder{
        //static关键字来修饰成员变量,该变量被称为静态变量,静态变量被所有实例共享
        static ArrayList<Books> booksList = new ArrayList<Books>();
        public static void main(String[] args){
            //初始化书架
            init();
            //将书架上所有图书信息打印出来
            for(int i=0; i<booksList.size(); i++){
                System.out.println(booksList.get(i));
            }
            while(true){
                //获取控制台信息
                Scanner scan = new Scanner(System.in);
                System.out.println("请输入图书编号:");
                int bookId = scan.nextInt();
                Books stockBooks = getBooksById(bookId);
                if(stockBooks != null){
                    System.out.println("当前图书信息:");
                    System.out.println(stockBooks);
                    System.out.println("请输入当前购买数量:");
                    int bookNumber = scan.nextInt();
                    if(bookNumber <= stockBooks.number){
                        //将输入信息封装成Books对象
                        Books sellBook = new Books(stockBooks.id, stockBooks.name, 
                            stockBooks.publish, stockBooks.price, bookNumber,
                            bookNumber*stockBooks.price);
                        //将本条数据保存至本地文件
                        FileUtil.saveBooks(sellBook);
                        stockBooks.setNum(stockBooks.number-bookNumber);
                    }else{
                        System.out.println("库存不足!");
                    }
                }else{
                        System.out.println("图书编码输入错误误!");
                 }
            }
        }
        private static void init(){
            Books book1 = new Books(101, "python", "北邮出版社", 44.50, 100, 4450);
            Books book2 = new Books(102, "java", "清华出版社", 30, 50, 1500);
            Books book3 = new Books(103, "c++", "人民邮电出版社", 90, 100, 9000);
            booksList.add(book1);
            booksList.add(book2);
            booksList.add(book3);
            //System.out.println(book1.id);
        }
        private static Books getBooksById(int bookId){
            for(int i=0; i<booksList.size(); i++){
                //System.out.println(bookId);
                Books book = booksList.get(i);
                if(book.id == bookId){
                    return book;
                }
            }
            return null;
        }
    }

      FileUtil.java:

        创建本地文件的名字;

        根据是存在此文件将用户操作信息写入文件。

    import java.util.*;
    import java.text.*;
    import java.io.*;
    public class FileUtil{
        //被final修饰的变量称为常量,一旦被赋值,其值不能被改变
        public static final String SEPARATE_FIELD = ",";
        public static final String SEPARATE_LINE = "
    ";
        public static void saveBooks(Books sellBook){
            //创建文件名
            Date date = new Date();
            //parse()返回的是一个Date类型数据,format()返回的是一个StringBuffer类型的数据
            DateFormat format = new SimpleDateFormat("yyyyMMdd");
            String name = "sell_log" + format.format(date) + ".csv";
            InputStream in = null;
            //判断本地是否有此文件
            try{
                //这句话执行,如果没有该文件,会抛出FileNotFoundException异常
                in = new FileInputStream(name);
                if(in != null){
                    //存在文件,采取修改文件的方式
                    in.close();
                    createFile(name, true, sellBook);
                }
            } catch (FileNotFoundException e){
                //不存在该文件,应创建文件
                createFile(name, false, sellBook);
            } catch (IOException e){
                e.printStackTrace();
            }
        }
        //label=true:存在文件
        public static void createFile(String name, boolean label, Books sellBook){
            BufferedOutputStream bos = null;
            StringBuffer sbf = new StringBuffer();
            try{
                if(label){
                    bos = new BufferedOutputStream(new FileOutputStream(name, true));
                }else{
                    bos = new BufferedOutputStream(new FileOutputStream(name));
                    String[] str = new String[] {"图书编号", "图书名称", "购买数量", 
                            "单价", "总价", "出版社"};
                    for(String s : str){
                        sbf.append(s + SEPARATE_FIELD);
                    }
                }
                sbf.append(SEPARATE_LINE);
                sbf.append(sellBook.id).append(SEPARATE_FIELD);
                sbf.append(sellBook.name).append(SEPARATE_FIELD);
                sbf.append(sellBook.number).append(SEPARATE_FIELD);
                sbf.append(sellBook.price).append(SEPARATE_FIELD);
                sbf.append(sellBook.money).append(SEPARATE_FIELD);
                sbf.append(sellBook.publish).append(SEPARATE_FIELD);
                String str = sbf.toString();
                byte[] b = str.getBytes();
                for (int i=0; i<b.length; i++){
                    bos.write(b[i]);
                }
            } catch(Exception e){
                e.printStackTrace();
            } finally{
                try {
                    if(bos!=null)
                        bos.close();            
                }catch(Exception e2){
                    e2.printStackTrace();
                }
            }
        }
    }

    直接在excel里打开我们写好的.csv文件可能会乱码:

    需要修改一下excel的编码格式:

    excel里点击【数据】【从文本】:选择文件原始格式:UTF-8

    分隔符为逗号:

    ok啦~:

  • 相关阅读:
    Tye exception
    DataSeeder
    angular
    认证Authentication
    MVC
    Ef Core
    工作单元
    VirtualFileSystem
    中间件
    日志
  • 原文地址:https://www.cnblogs.com/gaoquanquan/p/9629361.html
Copyright © 2020-2023  润新知