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);returntrue;}returnfalse;}
//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 ;}}returntrue;}returnfalse;}
// 根据输入的商品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);returntrue;}returnfalse;}
//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){returntrue;}else {returnfalse;}}returnfalse;}
// 根据输入的用户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){case1://1.查看库存清单
proOp.showProduct();break;case2://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;case3://查看用户信息列表
userOp.showUser();break;}}}while(number!=4);//字符串判断是否相等使用equals
System.out.println("程序结束!");}}