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

article/2025/10/19 11:13:39

【任务介绍】

1.任务描述

商城仓库中有多种商品,商品每次进货需要生成一条进货记录保存到文件。本案
例要求编写一个记录商城进货交易的程序,使用字节流将商场的进货信息记录在本地
的 CSV 文件中。程序具体要求如下。

程序启动后,先打印库存中现有的所有商品信息。

进货时,用户输入商品编号,程序根据该编号查询到相应商品信息,并打印该商
品信息。用户输入进货的数量后,将当次的入库信息保存至本地的 CSV 文件中,并更
新程序中的商品的库存数量(新数量=旧数量+进货数量)。

在本项目保存的 CSV 文件中,首行是标题行,每条记录包含商品编号、商品名称、
购买数量、单价、总价、联系人字段,字段之间直接用英文逗号“,”分隔。

每天的多次进货记录都保存在同一个文件中。文件名的命名格式为“进货记录表”

  • 当天日期 + “.csv”,如“进货记录表 20200430.csv”。保存文件时,需要判断本地中

是否已存在当天的文件,如果存在则追加数据;如果不存在则先新建文件。

【任务目标】

 学会分析"商城进货交易记录"程序的实现思路。

 根据思路独立完成"商城进货交易记录"的源代码编写、编译及运行。

 掌握 File 类和字节流操作本地文件的方法。

 掌握 ArrayList 和 Date、 StringBuffer 的使用,以及异常的处理。

 了解 CSV 文件格式。

【实现思路】

1、 为了方便保存商品的相关信息,可以将商品信息封装为一个实体类 Good。

 商品类的属性有:

 int id; // 编号

 String name; // 名称

 double price; // 单价

 int amount; // 数量

 double totalPrice; // 总价

 String people; //联系人

 程序需要打印商品的相关信息,所以需要重写 toString()方法,使其能返回规定格式
的字符串。要观察打印结果,自己分析字符串的格式。

2、 为了演示商城进货,我们需要将商城封装为一个类 Mall。

 商城仓库有多种商品,在 Mall 类中定义一个 ArrayList 集合(静态成员)用于模拟
商城仓库。向集合中添加有具体信息的商品对象,这样仓库就有了商品。

 Mall 类的方法有:

 主方法 main

 库存商品初始化方法:void initStock()

 显示库存商品信息方法:void showStock()

 商品入库操作方法:void intoStock()

 根据商品编号查找商品信息的方法: Good getGoodById(int goodId)

这些方法中,商品入库方法 intoStock()是最核心和最复杂的部分。其过程为:获取
用户输入的商品编号和购买数量,如果商品编号正确,且购买数量也正常,则商品进
货成功,并将本次商品的进货信息保存到 csv 文件中,同时要将库存数量增加。
可通过 Scanner 类的 nextInt()方法获取商品编号,根据这个编号到库存中查询此商
品的信息。如果查到了商品的信息,获取进货的数量,并创建一个代表进货商品的对
象 good,注意该对象的数量为进货量,总价为进货总价。
最后将本次进货对象信息保存到文件。文件操作比较复杂,也比较独立。可单独
设计一个文件操作工具类 FileUtil,在该类中定义一个保存进货数据的方法 void
saveGood(Good good)。

3、文件操作工具类 FileUtil,它只有一个静态方法 void saveGood(Good good),实现将
销售商品对象 good 的信息写入到 csv 文件。

首先需先拼凑好 csv 文件名(比如“进货记录表 20211111.csv”),再判断本地是否已
存在此文件,这里可通过 File 类对象的成员方法 isExist()方法进行判断。若这个文件已
存在,那么就通过输出流向文件末尾追加销售信息,如果不存在,说明之前并没有生
成当日的销售信息,则需要新建此文件。

数据保存的流程是: Good 对象属性StringBufferStringbyte[]输出流文件

【实现代码】

( 1) 将商品信息封装成一个实体类 Good。

(2)定义 Mall 类来封装商城,实现入库和显示商品信息。

(3)定义工具类 FileUtil 保存进货信息

package cn.edu.gpnu.bank.cn.edu.gpnu.exp11;public class Good {int id;String name;double price;int amount;double totalPrice;String people;public Good(int id, String name, String people,double price, int amount) {this.id = id;this.name = name;this.price = price;this.amount = amount;this.people = people;this.totalPrice=price*amount;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public int getAmount() {return amount;}public void setAmount(int amount) {this.amount = amount;}public double getTotalPrice() {return totalPrice;}public void setTotalPrice(double totalPrice) {this.totalPrice = totalPrice;}public String getPeople() {return people;}public void setPeople(String people) {this.people = people;}public String toString() {return "进货商品编号:" + getId() + ", 商品名称" + getName() + ", 联系人:" + getPeople() + ", 单价" + getPrice() + ", 库存数量:" + getAmount() +  "}";}
}
package cn.edu.gpnu.bank.cn.edu.gpnu.exp11;import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
public class Mall {//创建商品库存列表static ArrayList<Good> stock = new ArrayList<>();public static void main(String[] args) {initStock(); //库存商品初始化showStock(); //显示库存信息intoStock(); //商品入库操作}/*** 库存商品信息初始化*/private static void initStock() {stock.add(new Good(1001, "百事可乐", "张三", 4.5, 100));stock.add(new Good(1002, "可口可乐", "李四", 4.0, 100));stock.add(new Good(1003, "百事雪碧", "张三", 3.8, 100));
//补充若干行代码}/*** 打印库存的商品信息*/private static void showStock() {System.out.println("库存商品信息如下:");Iterator<Good> it = stock.iterator();while (it.hasNext()) {Good good = it.next();System.out.println(good.toString());}
// 补充若干行代码}/*** 商品入库操作*/private static void intoStock() {while (true) {int goodId;Scanner scanner = new Scanner(System.in);System.out.println("商品入库,请输入商品编号:");goodId = scanner.nextInt();
//补充若干行代码Good stockGood = getGoodById(goodId);if (stockGood != null) { // 判断是否存在此商品int orderAmount;System.out.println("请输入进货数量:");orderAmount = scanner.nextInt();
//补充若干行代码
// 将入库商品信息封装成 Good 类对象 addGoodGood addGood = new Good(stockGood.getId(), stockGood.getName(), stockGood.getPeople(), stockGood.getPrice(),orderAmount);FileUtil.saveGood(addGood);// 将本条数据保存至本地文件
// 更新库存中该商品数量=原数量+进货数量stockGood.setAmount(stockGood.getAmount()+orderAmount);stockGood.setTotalPrice(stockGood.getAmount()* stockGood.getPrice());
// 补充代码
// 显示库存信息System.out.println("------该商品当前库存信息------");showStock();} else {System.out.println("商品编号输入错误!");}}}/*** 根据输入的商品编号查找商品信息* 循环遍历库存中商品信息,找到商品编号相等的取出该对象*/private static Good getGoodById(int goodId) {Iterator<Good> it = stock.iterator();while (it.hasNext()) {Good good = it.next();if(good.getId()==goodId){return good;}}// 补充若干行代码return null;}
}
package cn.edu.gpnu.bank.cn.edu.gpnu.exp11;
import java.io.*;
import java.text.*;
import java.text.SimpleDateFormat;
import java.util.Date;public class FileUtil {/*** 保存商品信息*/public static void saveGood(Good good) {BufferedOutputStream bos = null; // 带缓冲的字节输出流StringBuffer strBuff = new StringBuffer(); // 拼接输出的内容Date date = new Date(); //获取当前时间DateFormat dateFormat = new SimpleDateFormat("20211115"); //定义日期格式String dateStr = dateFormat.format(date); //将日期转换为格式化字符串String fileName = "d:\\进货记录表" + dateStr + ".csv"; // 保存的文件名try {
//判断本地是否存在此文件File file = new File(fileName);if (!file.exists()) { //不存在文件,采取新建新文件方式file.createNewFile();bos = new BufferedOutputStream(new FileOutputStream(fileName));System.out.println("文件 " + fileName + " 不存在,已新建文件。");
// 将首行标题进行拼接String[] fields = {"商品编号", "商品名称", "购买数量", "单价", "总价", "联系人"}; // 创建表头for (String s : fields) {strBuff.append(s); //追加字段标题strBuff.append(","); //追加字段分隔符}strBuff.append("\r\n"); //追加换行符} else { //存在文件,采取修改文件方式bos = new BufferedOutputStream(new FileOutputStream(fileName,true));//若文件存在,则追加System.out.println("文件 " + fileName + " 已存在,将入库记录附加到文件后面。 ");}
// 开始追加商品记录strBuff.append(good.getId()).append(",");//先追加 id,再继续追加“,”分隔符strBuff.append(good.getName()).append(",");strBuff.append(good.getAmount()).append(",");strBuff.append(good.getPrice()).append(",");strBuff.append(good.getTotalPrice()).append(",");strBuff.append(good.getPeople()).append(",");
//补充若干行代码strBuff.append("\r\n"); //追加换行符String str = strBuff.toString();//将 StringBuffer 对象转换为字符串byte[] bytes = str.getBytes("GBK");//以 GBK 字符编码方式将字符串bos.write(bytes);
//补充代码,将 bytes 数组的全部内容保存到 bos 流。System.out.println("成功保存入库信息。");} catch (Exception e) { //捕获各种异常e.printStackTrace();System.out.println("保存入库信息失败。");} finally {try {if (bos != null)bos.close();} catch (Exception e2) {e2.printStackTrace();}
//补充代码,安全地关闭 bos 流。}}
}

【运行结果】
在这里插入图片描述


http://chatgpt.dhexx.cn/article/nOiggYhe.shtml

相关文章

开源Java商城项目Javashop的部署过程

推荐&#xff1a;需要Java商城定制开发可以联系本人&#xff1a;QQ3413414 电话15911100004 服务器为&#xff1a;阿里云CentOS 8.2版本&#xff0c;做测试用2核4G就够 Javashop B2C源码地址 https://gitee.com/enation/Javashop-B2C 因为这个项目是基于maven的&#xff0c;所…

JAVA 单商户商城系统 成熟源码 支持二开

三勾商城是开发友好的微信小程序商城&#xff0c;框架支持SAAS&#xff0c;支持发布 iOS Android 公众号 H5 各种小程序&#xff08;微信/支付宝/百度/头条/QQ/钉钉/淘宝&#xff09;等多个平台&#xff0c;不可多得的二开神器&#xff0c; 为大中小企业提供极致的移动电子…

java商城系统设计—竞拍

竞价拍卖商城系统功能介绍&#xff1a; 一、可单独设置参与竞拍的商品&#xff0c;适用于各种经营需求&#xff1b; 二、可开启抬价“机器人”和“回本设置”&#xff0c;确保商品不会被用过低的价格买走&#xff0c;保证商城的盈利性&#xff1b; 三、可设置“加价倒计时”…

java 商城系统架构之第三篇——集群架构搭建

需要商城系统的朋友&#xff0c;请联系下方微信 其实集群说起来是很简单的&#xff0c;无非就是server部署在多台机器上&#xff0c;DB、session、文件等在做个机器、CDN加速就OK了。 但是实际上需要做的事还有非常多&#xff0c;并且在过程中需要填非常多的坑。 这里说一个…

如何做一个基于JAVA购物商城系统毕业设计毕设作品(springboot框架)

分析架构 我们开发系统&#xff0c;常规有两个架构&#xff0c;一个BS架构&#xff08;浏览器/服务器模式&#xff09;&#xff0c;一个CS&#xff08;客户端/服务器端模式&#xff09;&#xff1b;基于JAVA的网站开发属于B/S架构&#xff08;即浏览器和服务器架构模式&#x…

java商城推荐算法(含源码,小程序,vue,uniapp)

用户协同推荐算法思想 如果你喜欢苹果、香蕉、芒果等物品&#xff0c;另外有个人也喜欢这些物品&#xff0c;而且他还喜欢西瓜&#xff0c;则很有可能你也喜欢西瓜这个物品。 所以说&#xff0c;当一个用户 A 需要个性化推荐时&#xff0c;可以先找到和他兴趣相似的用户群体 …

JAVA商城源码-B2B2C商城系统-独立部署,一套源码终身可用

在现在电商迅速占领市场的时代里&#xff0c;选择开发商城系统已经成为了一种趋势&#xff0c;现在开发搭建商城系统有很多编程语言可以选择&#xff0c;目前在电商里市面上受到很多商家企业的喜爱的便是Java商城系统&#xff0c;那为什么要选择Java电商系统呢&#xff1f; 1、…

商城 源码 java_java网上商城平台源码(含数据库脚本)

【实例简介】管理员后台管理商品以及对留言订单的处理,用户对订单的购买及留言 【实例截图】 【核心代码】 package com.shop.controller; import java.util.Date; import java.util.Map; import java.util.Map.Entry; import javax.servlet.http.HttpServletRequest; import …

java商城系统设计-----积分商城系统

积分商城的“积分”概念&#xff0c;指的是用户&#xff08;更多指的是经过注册验证的用户&#xff09;在消费后获得的一种奖励&#xff0c;从而实现客户关怀、客户忠诚度提升的目的。其消费模式包括传统的现场消费如超市购物&#xff0c;也包括日益普及的网上购物。获得的积分…

Java商城项目实战

项目背景 编写目的 明确业务背景、业务范围、基本业务逻辑和业务框架&#xff0c;期望读者包括&#xff1a;项目发起人、最终用户、项目投资方、项目管理团队、项目执行团队&#xff0c;以及其他项目干系人。 参考文档 “ESMS3.x 详细设计说明设计文档.doc”: 详细设计说明…

JAVA商城系统开发 VS PHP商城系统开发

在互联网快速发展的今天&#xff0c;越来越多的企业通过开发商城系统来拓展自己的业务&#xff0c;很多企业也会纠结&#xff1a;商城系统开发&#xff0c;选择PHP语言开发好&#xff0c;还是选择JAVA语言开发好&#xff1f;小来从几个方便对比了两种开发语言的优劣势&#xff…

国内知名的java商城系统排名

目前&#xff0c;市面上的网上商城系统有很多&#xff0c;按开发语言可划分为java、php、.net等。由于java语言开发的网上商城系统有着安全性好、稳定性高、易维护、多线程、可读性好等特点&#xff0c;深受一大批企业青睐。那么&#xff0c;国内知名的java商城系统有哪些呢&am…

Java商城源码最好用的java商城电商系统之一

为符合新互联网时代产品线即时起更新 演示网址&#xff1a; 2023单店版: http://mall.javaemall.com/index.htm 2023多店版: http://www.javaemall.com/index.htm 源码包含:PC版网站手机触屏站APP客户端&#xff08;安卓苹果&#xff09;微信版&#xff08;小程序公众…

简单的Java商城项目记录

文章目录 前言一、环境搭建MavenSpringBoot 二、SpringBoot开发后端接口介绍热部署LombokMybatisPlus测试接口工具postman注解调用关系后端接口开发流程一些注意事项 三、前端开发环境搭建Axios的增删改查小结 四、 前端工程化思想/完成商城首页效果跨域请求问题Vue项目结构 五…

Java项目:体育用品商城(java+SpringBoot+jsp+html+maven+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 项目介绍 本项目为前后台管理系统&#xff0c;包括管理员与普通用户两种角色&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,用户管理,商品类型管理,商品管理,订单信息管理,用户留言管理,资讯…

Java项目:网上商城系统(java+jsp+servlert+mysql+ajax)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述&#xff08;需求文档PPT&#xff09; 功能&#xff1a; 主页显示热销商品&#xff1b;所有商品展示&#xff0c;可进行商品搜索&#xff1b;点 击商品进入商品详情页&#xff0c;显示库存&…

基于Java的商城购物系统

源码编号&#xff1a;F-A14 项目类型&#xff1a;Java SE项目&#xff08;GUI图形界面&#xff09; 项目名称&#xff1a;商城购物系统&#xff0c;开源免费 用户类型&#xff1a;双角色&#xff08;会员、管理员&#xff09; 主要技术&#xff1a;java、awt、swing、等技术…

《Java程序设计》实验报告——Java的基本程序设计结构

浙江理工大学 《Java程序设计》 实验报告 20 19&#xff5e;20 20学年第 1学期 学 院 信息学院 班 级 计算机科学技术18&#xff08;3&#xff09; 姓 名 申屠志刚 学 号 2018329621200 任课教师 任祝 &#xff08; 第4周 周二 345节&#xff09; 计算机科…

软件工程课程设计报告

本人的软件工程课程设计报告&#xff0c;可以作以参考&#xff0c;望读者不要全部照抄&#xff0c;仅为大家提供参考&#xff0c;感谢大家的支持&#xff01;&#xff01;&#xff01; 目录 1. 相关文档1.1 文档介绍1.2 文档范围1.3 读者对象 2. 需求分析报告2.1 需求分析背景…

汇编语言程序设计实验报告

运行环境masmplus 链接&#xff1a;https://pan.baidu.com/s/1jWoLfvxBxQgxd6wq21GK0w 提取码&#xff1a;ih43 目录 实验1 汇编语言源程序的输入实验目的实验原理实验仪器实验步骤实验要求 实验2 数据的建立与传送程序实验目的实验原理实验仪器实验步骤实验要求 实验3 分支程序…