我是靠谱客的博主 微笑爆米花,这篇文章主要介绍[案例7-2]商城进货交易记录,现在分享给大家,希望可以做个参考。

任务描述:

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

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

初始文件信息:

 

 

运行结果:

 

 运行后文件信息:

 代码如下:

定义一个实体类:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/** * 2022/4/13 */ public class Good { int id; // 商品id String 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; } @Override public String toString() { // 重写toString方法 return "进货记录编号=" + id + "n商品名称='" + name + ''' + "n单价=" + price + "n库存数量=" + number + "n联系人='" + people + ''' + 'n'; } public void setNumber(int number){ this.number = number; } }

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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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方法,将值赋给stockGood if (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是否为-1 System.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){ // 判断是否有该id return thisGood; // 如果有则返回 } } return null; // 否则返回null } }

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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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 = "rn"; // 行分隔 // 保存商品信息 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]商城进货交易记录的全部内容,更多相关[案例7-2]商城进货交易记录内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(84)

评论列表共有 0 条评论

立即
投稿
返回
顶部