JAVA简单模拟商品购买,记录购买日志

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

1.Product类
public class Product {
    int proId;//商品ID
    int proPrice;//积分
    int proNum;//数量
    String proDescribe;//描述
    int userId;//顾客ID
    public 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;
    }

    @Override
    public 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){   // 判断是否有该id
                thisPro.userId = userId;
                return thisPro;   // 如果有则返回
            }
        }
        return null;   // 否则返回null
    }
}

3.User类
public class User {
    int userId;//用户ID
    int 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;
    }

    @Override
    public 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){   // 判断是否有该id
                return 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方法,将值赋给buyPro
                        System.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);//字符串判断是否相等使用equals
        System.out.println("程序结束!");
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值