任务描述:

每个商城都需要进货.而这些进货记录整理起来很不方便,本案例要求编写一个商城进货记录交易的程序,使用字节流将商场的进货信息记录在本地的csv文件中.程序具体要求如下:

当用户输入商品编号时,后台会根据商品编号查询到相应的商品信息,并打印商品信息,接着让用户输入需要进货的商品数量,程序将原有的库存数量与输入的数量相加作为商品最新的库存数量,并将商品进货的记录保存至本地的csv文件中,在csv文件中,每条语句包含商品编号,商品名称,购买数量,单价,总价,联系人,等数据,每条记录的数据之间直接用英文的逗号或空格分隔,每条记录之间由换行符分隔,文件命名格式为"进货记录"加上当天日期加上".csv"后缀,如进货记录"20210611.csv".保存文件时,需要判断本地文件是否存在当天的数据,如果存在则追加,不存在则创建.

初始文件信息:

运行结果:

运行后文件信息:

代码如下:

定义一个实体类:

/*** 2022/4/13*/
public class Good {int id;             // 商品idString name;        // 商品名字double price;       // 商品单价int number;         // 进货数量double money;       // 总价String people;      // 审批人// 创建带参构造方法public Good(int id, String name, double price, int number, double money, String people) {this.id = id;this.name = name;this.price = price;this.number = number;this.money = money;this.people = people;}@Overridepublic String toString() {   // 重写toString方法return"进货记录编号=" + id +"\n商品名称='" + name + '\'' +"\n单价=" + price +"\n库存数量=" + number +"\n联系人='" + people + '\'' +'\n';}public void setNumber(int number){this.number = number;}
}

定义RecordGoodOrder类来记录和操作商品信息:

import java.util.ArrayList;
import java.util.Scanner;/*** 2022/4/13*/
public class RecordGoodOrder {// 创建商品库存static ArrayList<Good> goodsList = new ArrayList<Good>();public static void main(String[] args) {init();  // 初始化商品库存// 将书架上所有商品信息打印出来for (int i = 0 ; i < goodsList.size() ; i++){   // 遍历集合System.out.println(goodsList.get(i));  // 将集合中指定索引处的元素}while (true){// 获取控制台输入的信息Scanner in = new Scanner(System.in);System.out.println("请输入商品编号(输入-1退出):");int goodId = in.nextInt();Good stockGood = getGoodsById(goodId);    // 调用getGoodById方法,将值赋给stockGoodif (stockGood != null){  // 判断是否存在此商品System.out.println("当前商品库存信息:" + stockGood);  // 打印商品信息System.out.println("请输入进货数量:");int bookNumber = in.nextInt();  // 用户输入进货量// 将输入的信息封装成Books对象Good good = new Good(stockGood.id, stockGood.name,stockGood.price,bookNumber,stockGood.price*bookNumber,stockGood.people);FileUtil.saveBooks(good);// 调用saveBooks方法,将本条数据保存到本地文件// 修改库存stockGood.setNumber(stockGood.number+bookNumber); // 通过stockGood调用setNumber方法,将输入的库存与原始库存相加}else if (goodId == -1){   // 判断输入的id是否为-1System.exit(0);   // JVM退出}else{System.out.println("商品编号错误!");}}}// 初始化商品库存的信息,将商品存入库存private static void init(){Good good1 = new Good(10001,"百事可乐",3.5,100,350,"张三");  // 创建Good对象,往里存入元素Good good2 = new Good(10002,"可口可乐",3,100,300,"李四");Good good3 = new Good(10003,"百事雪碧",4,100,400,"张三");goodsList.add(good1);   // 将Good对象存入集合中goodsList.add(good2);goodsList.add(good3);}// 根据输入的商品编号查找商品信息,循环遍历库存中的商品信息,找到商品编号相等的取出private static Good getGoodsById(int goodId){for (int i = 0 ; i < goodsList.size() ; i++){   // 遍历数组Good thisGood = goodsList.get(i);if (goodId == thisGood.id){   // 判断是否有该idreturn thisGood;   // 如果有则返回}}return null;   // 否则返回null}
}

定义工具类FileUtil保存图书信息:

import java.io.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;/*** 2022/4/13*/
// 工具类
public class FileUtil {public static final String zd = ",";  // 字段分隔public static final String hfg = "\r\n";  // 行分隔// 保存商品信息public static void saveBooks(Good good){   // 创建saveBooks方法// 判断本地是否存在此文件Date date = new Date();    // 创建Date日期类对象// 定义日期格式DateFormat format = new SimpleDateFormat("yyyyMMdd"); // y:年 , M:月, d:日// 拼接文件名String name = "进货记录" + format.format(date) + ".csv";  // format.format(date):设置对象格式以生成字符串InputStream in; // 定义字节输入流// 使用try...catch处理异常try{in = new FileInputStream(name); // 判断本地是否存在该文件if (in != null){in.close(); // 关闭输入流// 可获取输入流,则存在文件,采取修改文件方式createFile(name,true,good);}}catch (FileNotFoundException e){// 输入流获取失败,则不存在文件,采取新建新文件方式createFile(name,false,good);}catch (IOException e){e.printStackTrace();}}public static void createFile(String name,boolean label,Good good){ // name :文件名,label:表示文件是否存在,good:商品信息BufferedOutputStream out = null;  // 定义字节缓冲输出流对象// 构造一个字符串生成器StringBuilder sdf = new StringBuilder(); // 拼接内容try{if (label){  // 当已存在当天的文件,则在文件内容后追加// 创建输出流,用于追加文件out = new BufferedOutputStream(new FileOutputStream(name,true)); // 末尾定义为true,表示追加写入,不会重新写入}else{   // 不存在当天文件,则新建文件// 创建输出流,用于保存文件out = new BufferedOutputStream(new FileOutputStream(name));String[] fieldSort = new String[]{"商品编号","商品名称","购买数量","单价","总价","联系人"}; // 创建表头for (String fieldKey : fieldSort){  // 增强for遍历// 新建时,将表头存入本地文件sdf.append(fieldKey).append(zd);}}sdf.append(hfg); // 追加换行符号sdf.append(good.id).append(zd);sdf.append(good.name).append(zd);sdf.append(good.number).append(zd);sdf.append(good.price).append(zd);sdf.append(good.money).append(zd);sdf.append(good.people).append(zd);String str = sdf.toString();  // 将sdf转换为String类型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 e){e.printStackTrace();}}}
}

有些小伙伴可能会出现乱码问题,像下面这样:

解决方法如下:

点击文件上面的数据,选择从文本/csv:

点击它:

选择这个文件 ,点击导入:

然后点击加载:

之后就显示出来了:

[案例7-2]商城进货交易记录相关推荐

  1. 【java】商城进货交易记录程序设计

    [任务介绍] 1.任务描述 商城仓库中有多种商品,商品每次进货需要生成一条进货记录保存到文件.本案 例要求编写一个记录商城进货交易的程序,使用字节流将商场的进货信息记录在本地 的 CSV 文件中.程序 ...

  2. matlab配对交易回测,精品案例 | 经典投资策略之配对交易策略

    原标题:精品案例 | 经典投资策略之配对交易策略 人不恋爱枉少年,在"全城热恋"的氛围下,股市也来凑热闹,配对交易策略油然而生.所谓"男女搭配,干活不累",成双 ...

  3. sql 同一张表中两个记录不能共存_如何分析交易记录?

    [题目] 某商场为了分析用户购买渠道.表1是用户交易记录表,记录了用户id.交易日期.交易类型和交易金额. 表2是用户类型表,记录了用户支付类型(微信.支付宝.信用卡等),分别有type1.type2 ...

  4. 解决过帐时提示“无法获取内部公司交易记录的帐户”

    错误 当在 Microsoft Dynamics AX 2009 中启动了中国式凭证系统后,在进行凭证复核或过帐时提示: 英文:Fail to get the account for intercom ...

  5. java 银行管理系统怎么储存账户信息_银行管理系统 实现用户注册 登录 存、取款 交易记录查询和修改用户信息等功能...

    ========= 项    目   介   绍======== 银行账户管理系统 本项目主要实现用户注册 登录 存.取钱和修改用户信息功能. 用户信息的存储和获取通过集合和IO输入输出流实现. 存钱 ...

  6. 利用BSCScan获取账户交易记录

    文章目录 一.BSCScan账户 1.1 BSCScan注册 1.2 请求速率限制 1.3 常用文档参考 二.接口调用方法 2.1 获取地址的平台币交易记录 2.1.1 使用方法 2.1.2 curl ...

  7. erc20根据合约地址获取所有交易记录

    1.etherscan api地址 https://etherscan.io/apis 2.获取特定区块段,中的特定合约的交易记录 https://api.etherscan.io/api?modul ...

  8. ethereum扫描区块,获取区块内的交易记录

    初始化客户端 ⽤Go初始化以太坊客户端是和区块链交互所需的基本步骤.⾸先,导⼊go-etherem的 ethclient 包并 通过调⽤接收区块链服务提供者URL的 Dial 来初始化它. 若没有现有 ...

  9. sql查询当天交易总额最大的用户信息_如何分析交易记录? 因为后面要分析“每种类型用户的总交易金额”,所以保留左表(用户交易记录表)中的全部用户数据。 【题目】 某商场为了分析用... - 雪球...

    来源:雪球App,作者: 猴子数据分析,(https://xueqiu.com/1350621016/159703178) 因为后面要分析"每种类型用户的总交易金额",所以保留左表 ...

最新文章

  1. 最新开源LiDAR数据集LSOOD:四种常见的室外物体分类
  2. c++ static用法,全局变量,与别的语言不一样
  3. requireJS的基本使用
  4. saltstack实战-6
  5. 一文教你 Dubbo 服务性能压测(with JMeter)
  6. mysql 可重复读 悲观锁_一文带你理解脏读,幻读,不可重复读与mysql的锁,事务隔离机制...
  7. 从Servlet到JSP,从Model1到Model2
  8. 漫步数学分析番外五(下)
  9. html中ajax检测用户名实例,利用Ajax检测用户名是否被占用的完整实例
  10. c语言静态数组是什么意思,C语言静态数组实现栈操作
  11. Linux设备模型初始化流程
  12. idea 中vim快捷键
  13. Win10怎么合并磁盘分区 合并磁盘的操作方法
  14. 友盟推送:测试模式推送完成,但却收不到推送信息
  15. matlab求向量的模,MATLAB向量的模
  16. 4年老用户!从R9s Plus换到Find X3,这些体验太上头
  17. matlab作业 阳光的快乐老爹,霍思燕6岁儿子近照曝光,调皮起来超阳光,完美继承老爹容颜!...
  18. uniapp 顶部绝对定位
  19. 如何下载PubMed收费文献
  20. fastunit中使用MapList一个注意例子

热门文章

  1. R语言入门——画密度曲线
  2. 入手评测AMD锐龙r7 6800u和酷睿i7 1260p选哪个 r76800u和i71260p对比
  3. 宝讯网捷:拼多多商家如何做好运营?
  4. 通信科技人员职业道德
  5. C# 静态函数调用窗体控件
  6. linux批处理创建mysql用户_域用户和组帐户的管理之一次同时添加多个用户帐户篇...
  7. fedroa设置启动快捷键
  8. GeoServer发布tif和Img格式影像(可去黑边)
  9. python plc fx5u_三菱PLC的FX5U系列参数与定位点
  10. Python 新手入门引导。