JAVA模拟商品购买,生成购买记录。

1.Product类

public class Product {int proId;//商品IDint proPrice;//积分int proNum;//数量String proDescribe;//描述int userId;//顾客IDpublic Product() {}public Product(int proId, int proPrice, int proNum, String proDescribe, int userId) {this.proId = proId;this.proPrice = proPrice;this.proNum = proNum;this.proDescribe = proDescribe;this.userId = userId;}public int getProId() {return proId;}public void setProId(int proId) {this.proId = proId;}public int getProPrice() {return proPrice;}public void setProPrice(int proPrice) {this.proPrice = proPrice;}public int getProNum() {return proNum;}public void setProNum(int proNum) {this.proNum = proNum;}public String getProDescribe() {return proDescribe;}public void setProDescribe(String proDescribe) {this.proDescribe = proDescribe;}public int getUserId() {return userId;}public void setUserId(int userId) {this.userId = userId;}@Overridepublic String toString() {return "Product{" +"proId=" + proId +", proPrice=" + proPrice +", proNum=" + proNum +", proDescribe='" + proDescribe + '\'' +", userId=" + userId +'}';}
}

2.ProductOper商品操作

import java.util.ArrayList;public class ProductOper {static ArrayList<Product> pros= new ArrayList<Product>(10);//菜单public void menu() {System.out.println();System.out.println("--------商品管理-------");System.out.println("1.查看商品清单");System.out.println("2.购买");System.out.println("3.查看用户信息列表");System.out.println("4.退出");System.out.println("请输入要执行的操作序号:");}//初始化库存public boolean addProduct(Product pro) {if(pros!=null) {pros.add(pro);return true;}return false;}//1.查看库存清单public void showProduct() {System.out.println("---------商城库存清单---------");System.out.println("商品ID"+"   "+"购买积分"+"      "+"商品数量"+"       "+"商品描述");for(Product pro : pros) {System.out.println(pro.proId+"        "+pro.proPrice+"           "+pro.proNum+"        "+pro.proDescribe);}}//2.购买操作public boolean sale(int proId) {if(pros!=null) {//遍历查找要购买的商品for(int i=0;i<pros.size();i++) {Product p = pros.get(i);if(p.proId == proId) {p.proNum = p.proNum-1 ;}}return true;}return false;}// 根据输入的商品ID查找商品信息,循环遍历库存中的商品信息,找到商品ID相等的取出public  Product getProductById(int proId,int userId){for (int i = 0 ; i < pros.size() ; i++){   // 遍历数组Product thisPro = pros.get(i);if (proId == thisPro.proId){   // 判断是否有该idthisPro.userId = userId;return thisPro;   // 如果有则返回}}return null;   // 否则返回null}
}

3.User类

public class User {int userId;//用户IDint userScore;//积分int buyCount;//购买商品总数量public User() {}public User(int userId, int userScore, int buyCount) {this.userId = userId;this.userScore = userScore;this.buyCount = buyCount;}public int getUserId() {return userId;}public void setUserId(int userId) {this.userId = userId;}public int getUserScore() {return userScore;}public void setUserScore(int userScore) {this.userScore = userScore;}public int getBuyCount() {return buyCount;}public void setBuyCount(int buyCount) {this.buyCount = buyCount;}@Overridepublic String toString() {return "User{" +"userId=" + userId +", userScore=" + userScore +'}';}
}

4.UserOper用户操作

import java.util.ArrayList;public class UserOper {static ArrayList<User> users= new ArrayList<User>(1000);//初始化用户public boolean iniUser(User user) {if(users!=null) {users.add(user);return true;}return false;}//1.查看用户清单public void showUser() {System.out.println("---------用户列表---------");System.out.println("用户ID"+"   "+"积分"+"      "+"购买商品数量");for(User user : users) {System.out.println(user.userId+"        "+user.userScore+"           "+user.buyCount);}}//2.购买操作public boolean buy(int userId,int proPrice) {if(users!=null) {int flag=0;//遍历查找要购买的用户for(int i=0;i<users.size();i++) {User u = users.get(i);if(u.userId == userId) {u.userScore = u.userScore-proPrice ;u.buyCount = u.buyCount+1;flag = 1;}}if(flag == 1){return true;}else {return false;}}return false;}// 根据输入的用户ID查找用户信息,循环遍历用户信息,找到用户ID相等的取出public  User getUserById(int userId){for (int i = 0 ; i < users.size() ; i++){   // 遍历数组User thisUser = users.get(i);if (userId == thisUser.userId){   // 判断是否有该idreturn thisUser;   // 如果有则返回}}return null;   // 否则返回null}
}

5.FileUtil工具类

import java.io.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;// 工具类
public class FileUtil {public static final String zd = ",";  // 字段分隔public static final String hfg = "\r\n";  // 行分隔// 保存商品信息public static void saveBooks(Product product){   // 创建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,product);}}catch (FileNotFoundException e){// 输入流获取失败,则不存在文件,采取新建新文件方式createFile(name,false,product);}catch (IOException e){e.printStackTrace();}}public static void createFile(String name,boolean label,Product product){ // 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[]{"商品ID","商品积分","购买前数量","商品描述","用户ID"}; // 创建表头for (String fieldKey : fieldSort){  // 增强for遍历// 新建时,将表头存入本地文件sdf.append(fieldKey).append(zd);}}sdf.append(hfg); // 追加换行符号sdf.append(product.proId).append(zd);sdf.append(product.proPrice).append(zd);sdf.append(product.proNum).append(zd);sdf.append(product.proDescribe).append(zd);sdf.append(product.userId).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();}}}
}

6.test测试类

import java.util.Random;
import java.util.Scanner;public class test {public static void main(String[] args) {ProductOper proOp = new ProductOper();UserOper userOp = new UserOper();Scanner input = new Scanner (System.in);//初始化商品数据for(int i=0;i<10;i++) {Random rand = new Random();Product pro = new Product();pro.proId = i;pro.proPrice = rand.nextInt(10)+1;pro.proNum = 10000+rand.nextInt(10000);pro.proDescribe = "商品"+(i+1);boolean boo = proOp.addProduct(pro);if(boo) {}}//初始化用户数据for(int i=0;i<10;i++) {Random rand = new Random();User user = new User();user.userId = i;user.userScore = rand.nextInt(1000)+1000;user.buyCount = 0;boolean boo = userOp.iniUser(user);if(boo) {}}int number = 0;do {proOp.menu();number = input.nextInt();if(number!=4) {switch(number) {case 1://1.查看库存清单proOp.showProduct();break;case 2://2.购买Product pro = new Product();User user = new User();System.out.println("请输入你要购买的商品ID:");pro.proId=input.nextInt();System.out.println("请输入你的ID:");user.userId=input.nextInt();
//                        System.out.println("请输入你要购买的商品数量:");
//                        pro.proNum=input.nextInt();Product salePro = proOp.getProductById(pro.proId,user.userId);    // 调用getProductById方法,将值赋给buyProSystem.out.println(">:"+salePro);FileUtil.saveBooks(salePro);// 调用saveBooks方法,将本条数据保存到本地文件boolean boo1 =proOp.sale(pro.proId);User buyUser = userOp.getUserById(user.userId);System.out.println(">>:"+buyUser);boolean boo2 =userOp.buy(user.userId,salePro.proPrice);if(boo1 && salePro!=null && boo2 && buyUser!=null) {Product item = new Product(salePro.proId,salePro.proPrice,salePro.proNum,salePro.proDescribe,salePro.userId);System.out.println("购买成功!");System.out.println("购买记录:");System.out.println("商品ID:"+item.proId+" | "+"购买积分:"+item.proPrice+" | "+"商品库存:"+item.proNum+" | "+"商品描述:"+item.proDescribe+" | "+"顾客ID:"+item.userId);}else {System.out.println("购买失败!");}break;case 3://查看用户信息列表userOp.showUser();break;}}}while(number!=4);//字符串判断是否相等使用equalsSystem.out.println("程序结束!");}
}

JAVA简单模拟商品购买,记录购买日志相关推荐

  1. 世界足球2012java_足球比赛(JAVA简单模拟)

    import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util ...

  2. java socket telnet_使用java简单模拟ping和telnet的实现

    一.模拟ping的实现利用InetAddress的isReachable方法可以实现ping的功能,里面参数设定超时时间,返回结果表示是否连上.try...{InetAddressaddress=In ...

  3. java简单模拟实现数据库连接池

    为什么要使用数据库连接池 这个问题在一开始学习线程池或者整合ssm框架的时候经常会问自己这个问题,只知道这样使用可以在一定程度上优化程序的性能,提升系统的资源利用率,至于为什么这样使用一直没有搞明白. ...

  4. java简单模拟玩家

    package Baoji;public class Player {/*** 玩家类* 属性:名字,类型,血量,防御,攻击* 行为:自我介绍.pk*///封装:将属性设置为private 提供公共的 ...

  5. Java切面的使用,记录请求日志

    // 定义一个切面 @Aspect @Configuration public class LogRecordAspect {private static final Logger logger = ...

  6. 记录操作日志(JAVA版某大厂基础实践)

    1. 操作日志的使用场景 2. 实现方式 2.1 使用 Canal 监听数据库记录操作日志 2.2 通过日志文件的方式记录 2.3 通过 LogUtil 的方式记录日志 2.4 方法注解实现操作日志 ...

  7. 【实践】万字干货:如何优雅地记录操作日志?(附代码)

    猜你喜欢 1.如何搭建一套个性化推荐系统? 2.从零开始搭建创业公司后台技术栈 3.某视频APP推荐详解(万字长文) 4.微博推荐算法实践与机器学习平台演进 5.腾讯PCG推荐系统应用实践 6.强化学 ...

  8. 如何优雅地记录操作日志?

    1 前言 在日常的工作开发中,记录业务操作产生的日志是很普遍的操作.通过它可以看到每条数据产生的变化,也能在出现问题的时候快速找到原因. 对于我自己而言,因为我这里记录的日志需要进行一些逻辑判断,并不 ...

  9. 美团的系统是如何记录操作日志?

    来源:美团技术团队 操作日志几乎存在于每个系统中,而这些系统都有记录操作日志的一套 API.操作日志和系统日志不一样,操作日志必须要做到简单易懂.所以如何让操作日志不跟业务逻辑耦合,如何让操作日志的内 ...

最新文章

  1. Python的零基础超详细讲解(第十天)-Python的input()函数
  2. 用python画四叶草代码-python—字符串拼接三种方法
  3. Raft算法和开源实现
  4. JVM详解之:java class文件的密码本
  5. 为单个Web应用程序配置多个上下文根– JBoss
  6. Andorid获取状态栏高度
  7. Android平滑移动——Scroller类研究
  8. 计算机组成原理包健百度云,计算机组成原理包健版答案
  9. 马斯克说话还能算数吗?声称删除Twitter账号却依旧活跃
  10. [转载] python画柱状图-Python绘制精美图表之双柱形图
  11. uva_816 Abbott's Revenge(BFS求解最短路、结点状态由坐标和方向表示)
  12. ffmpeg视频格式转换for windows and linux
  13. 阿里Sophix 集成
  14. nslookup默认服务器修改,Windows nslookup“默认服务器:未知”是什么意思
  15. 一台计算机可以安装网络打印机和本地打印机,您在计算机上安装一台本地打印机。您共享这台打印机。您需要确保只有名为Grou - 问答库...
  16. 程序员容易的疾病之干眼症(治疗篇)
  17. 怎样进入金蝶服务器修改参数,金蝶KIS专业版启用后如何后台修改系统参数
  18. 解读 2022 诺贝尔生理学或医学奖 | MedChemExpress
  19. The requirements of using provenance in e-Science experiments(论文阅读)
  20. gitlab runner理解(未完)

热门文章

  1. Android手电筒介绍
  2. 摘要-The Inventor Mentor
  3. shell脚本修改mysql密码
  4. ora-00257报错解决办法
  5. 做外贸怎么起步,从哪里开发客户
  6. Android 强制应用全局横屏或竖屏
  7. 【NVCaffe源码分析】数据增量之batch_sampler
  8. 如何让消息队列达到最大吞吐量?
  9. 2019-9-2-自动机
  10. js如何动态获取object类型里的键值