概述
任务描述:
每个商城都需要进货.而这些进货记录整理起来很不方便,本案例要求编写一个商城进货记录交易的程序,使用字节流将商场的进货信息记录在本地的csv文件中.程序具体要求如下:
当用户输入商品编号时,后台会根据商品编号查询到相应的商品信息,并打印商品信息,接着让用户输入需要进货的商品数量,程序将原有的库存数量与输入的数量相加作为商品最新的库存数量,并将商品进货的记录保存至本地的csv文件中,在csv文件中,每条语句包含商品编号,商品名称,购买数量,单价,总价,联系人,等数据,每条记录的数据之间直接用英文的逗号或空格分隔,每条记录之间由换行符分隔,文件命名格式为"进货记录"加上当天日期加上".csv"后缀,如进货记录"20210611.csv".保存文件时,需要判断本地文件是否存在当天的数据,如果存在则追加,不存在则创建.
初始文件信息:
运行结果:
运行后文件信息:
代码如下:
定义一个实体类:
/**
* 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类来记录和操作商品信息:
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保存图书信息:
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]商城进货交易记录所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复