亮点
- 实现了数据的持久化(用io流将数据保存到了文件)
- 添加了日志功能(log4j) 新手看不懂也能用
- 各个功能层次分明
技术栈
- 交互式
- 循环
- 集合
- io流
功能演示
只展示部分功能
- 主界面
- 商家界面
- 客户界面
- 购买界面
- 日志文件
部分代码
考虑到有的人可能需要日志文件的配置文件 , 在上面有传送门 , 可以获得整个项目
各类在包中的分布
- 主界面
/**
* @AUTHOR TingFeng
* @DATE 2023/10/18-15:15
* @DESCRIPTION
*/
public class Shop {
static Scanner scanner = new Scanner(System.in);
public static void shop(){
while (true) {
UI();
String rank = scanner.next();
switch (rank) {
case "1":
Utils.logger.info("用户进入了本平台");
System.out.println("------------动力商城客户端-----------");
Client.clientUI();
break;
case "2":
Utils.logger.info("商家进入了本平台");
System.out.println("------------动力商城后台----------");
Server.serverUI();
break;
case "3":
System.out.println("欢迎下次使用");
return;
default:
System.out.println("输入错误!重新输入:");
}
}
}
private static void UI() {
System.out.println("-------------动力商城--------------");
System.out.println("1 客户 2 商家 3 退出");
System.out.println("请选择你的身份");
}
}
- 商家
public static void serverUI() {
while (true) {
System.out.println("1 添加商品");
System.out.println("2 删除商品");
System.out.println("3 查看商品");
System.out.println("4 退出");
System.out.println("请输入你的操作");
String choose = scanner.next();
switch (choose) {
case "1":
addGoods();
break;
case "2":
delGood();
break;
case "3":
showGoods();
break;
case "4":
Utils.logger.info("商家退出了平台");
return;
}
}
}
- 用户
public static void clientUI() {
boolean f = true;
while (true) {
if (f){
if (goodsList.size() == 0) {
System.out.println("该店还未营业!");
return;
}
System.out.println("\t商品编号\t\t商品名称\t\t库存\t\t价格");
for (int i = 0; i < goodsList.size(); i++) {
System.out.println("\t" + goodsList.get(i).getId() + "\t\t\t" + goodsList.get(i).getName() + "\t\t" + goodsList.get(i).getCount() + "\t\t" + goodsList.get(i).getPrice());
}
}
f = true;
System.out.println("1.购买产品\t\t2.根据价格降序排序\t\t3.根据编号升序排序\t\t4.退出");
System.out.println("请输入你的操作");
int choose = scanner.nextInt();
switch (choose) {
case 1:
buy();
break;
case 2:
f = false;
goodsList.sort((o1, o2) -> (int) (o2.getPrice() - o1.getPrice()));
System.out.println("\t\t商品编号\t商品名称\t\t库存\t\t价格");
for (int i = 0; i < goodsList.size(); i++) {
System.out.println("\t\t\t" + goodsList.get(i).getId() + "\t\t" + goodsList.get(i).getName() + "\t\t" + goodsList.get(i).getCount() + "\t\t" + goodsList.get(i).getPrice());
}
break;
case 3:
f= false;
goodsList.sort((o1, o2) -> (int) (o1.getId() - o2.getId()));
System.out.println("\t\t商品编号\t商品名称\t\t库存\t\t价格");
for (int i = 0; i < goodsList.size(); i++) {
System.out.println("\t\t\t" + goodsList.get(i).getId() + "\t\t" + goodsList.get(i).getName() + "\t\t" + goodsList.get(i).getCount() + "\t\t" + goodsList.get(i).getPrice());
}
break;
case 4:
Utils.logger.info("用户退出了平台");
return;
}
}
}
- 购买商品
private static void buy() {
System.out.println("请输入产品编号");
int goodID = scanner.nextInt();
Goods goalGood = haveGood(goodID,goodsList);
if (haveGood(goodID,goodsList) != null) {
System.out.println("你购买的产品为: " + goalGood);
System.out.println("请输入购买数量");
int count = scanner.nextInt();
if (count <= goalGood.getCount()) {
System.out.println("你需要支付: " + goalGood.getPrice() * count + "(Y/N)");
String safy = scanner.next();
if ("Y".equals(safy) || "y".equals(safy)) {
goalGood.setCount(goalGood.getCount() - count);
try (MyObjectOutputStream myOos = new MyObjectOutputStream(new FileOutputStream
("com/tingfeng/data/data.txt"));){
for (int i = 0; i < goodsList.size(); i++) {
if (goodsList.get(i).getCount()==0){
goodsList.remove(i);
continue;
}
myOos.writeObject(goodsList.get(i));
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("购买成功");
Utils.logger.info("客户购买了{},数量为{},总价为{}",goalGood.getName(),count,goalGood.getPrice()*count);
} else {
System.out.println("购买失败!");
}
} else {
System.out.println("库存不足!请重新输入");
}
} else {
System.out.println("没有该编号的产品!");
}
}