面向对象设计作业1:商城系统


AI:智谱清言


一、系统项目概述(刘思妍 202321336070)

该项目是一个基于控制台界面的简单商城系统,该商城系统提供了用户管理、商品管理和购物车管理功能,允许用户查看商品列表、添加商品到购物车、查看购物车中的商品并移除商品,以及登录和注册账户以管理个人信息。


二、商城思维导图(李彤 202321336069)

在这里插入图片描述

三、项目结构(刘思妍 202321336070)

在这里插入图片描述

1.模型层(model)

  • User.java:
    • 账户名:用于唯一标识用户,通常作为登录凭证。
    • 密码:用户的登录密码,用于保护账户安全。
    • 该类封装了用户的基本信息,为服务层提供数据模型支持。
  • Product.java:
    • 商品名称:商品的名称,用于展示给用户。
    • 价格(BigDecimal):使用 BigDecimal 类型存储价格,确保了货币计算的精确性,避免了浮点数计算误差。
    • 商品id:唯一标识一个商品。
    • 商品类别:用于分类商品,便于管理和查询。
    • 商品描述:提供商品的详细描述,帮助用户了解商品特性。
    • 该类定义了商品的数据结构,为商品管理提供基础。
  • Cart.java:
    • 该类定义了购物车的结构,通常包含用户所选商品及其数量的映射。
      用于在用户购物过程中临时存储商品信息。

2.服务层(services)

  • UserService.java:
    • 包含注册、登录等与用户账户相关的业务逻辑。
  • ProductService.java:
    • 包含按id查询商品、展示商品列表等与商品相关的业务逻辑。
  • CartService.java:
    • 包含添加商品到购物车、从购物车移除商品等与购物车相关的业务逻辑。

3.系统层(system)

  • 主程序(Main.java)
    • 启动应用,负责初始化必要的组件和服务。

3.控制器层(controllers)

  • UserController.java:
    • 处理用户注册、登录等请求。
    • 调用UserService提供的服务,实现用户相关的功能。
  • ProductController.java:
    • 处理商品查询、展示等请求。
    • 调用ProductService提供的服务,实现商品相关的功能。
  • CartController.java:
    • 处理添加商品到购物车、查看购物车、删除购物车中的商品、结算等请求。
    • 调用CartService提供的服务,实现购物车相关的功能。

四、功能描述(李彤 202321336069)

1.菜单展示

在这里插入图片描述

2.用户注册和登录

用户注册登陆成功以后就可以进行购物
在这里插入图片描述
在这里插入图片描述

3.浏览商品

在这里用户可以浏览购物车中所有的商品及其的价格,库存等信息。
在这里插入图片描述
在这里插入图片描述

4.购物车管理

用户可以进行添加,删除,更新购物车里的东西。
在这里插入图片描述

五、技术亮点(李彤 202321336069)

  • 封装性:通过私有属性和公共方法,保证了数据的安全性和类的易用性。
  • 代码复用:通过继承和接口,实现了代码的复用,如 Constants.java 和 Validator.java。
  • 输入验证:Validator.java 提供了输入验证功能,确保了系统的健壮性。

六、代码(刘思妍 202321336070)

  • main.java


public class Main {
    private static UserService userService = new UserService();
    private static ProductService productService = new ProductService();
    private static ShoppingCart shoppingCart = productService.getShoppingCart();
    private static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        System.out.println("欢迎使用商城系统!");
        User currentUser = null;

        while (true) {
            System.out.println("请选择操作:1. 登录 2. 注册 3. 退出 4. 显示商品列表并添加到购物车 5. 显示购物车并移除商品");
            String operation = scanner.nextLine();

            switch (operation) {
                case "1":
                    currentUser = login();
                    break;
                case "2":
                    register();
                    break;
                case "3":
                    System.out.println("感谢使用,再见!");
                    return;
                case "4":
                    displayProductsAndAddToCart();
                    break;
                case "5":
                    displayShoppingCartAndRemoveItems();
                    break;
                default:
                    System.out.println("无效的操作,请重新选择。");
            }
        }
    }

    // ... [其他方法,如 login() 和 register()]
    private static User login() {
        System.out.println("请输入用户名:");
        String username = scanner.nextLine();
        System.out.println("请输入密码:");
        String password = scanner.nextLine();

        User user = userService.login(username, password);
        if (user != null) {
            System.out.println("登录成功!欢迎, " + user.getUsername());
            // 登录成功后的操作
            return user;
        } else {
            System.out.println("登录失败,用户名或密码错误。");
            return null;
        }
    }

    private static void register() {
        System.out.println("请输入用户名:");
        String username = scanner.nextLine();
        System.out.println("请输入密码:");
        String password = scanner.nextLine();

        boolean success = userService.register(username, password);
        if (success) {
            System.out.println("注册成功!");
        } else {
            System.out.println("注册失败,用户名已存在或输入无效。");
        }
    }

    private static void displayProductsAndAddToCart() {
        System.out.println("以下是商品列表:");
        for (Product product : productService.getAllProducts()) {
            System.out.println(product + " 库存: " + product.getStock());
        }
        System.out.println("请输入要添加到购物车的商品ID,或输入0返回主菜单:");
        int productId = Integer.parseInt(scanner.nextLine());
        if (productId != 0) {
            Product productToAdd = productService.getProductById(productId);
            if (productToAdd != null && productToAdd.getStock() > 0) {
                productService.addToCart(productToAdd);
                System.out.println("商品已成功添加到购物车!");
            } else if (productToAdd.getStock() <= 0) {
                System.out.println("商品库存不足。");
            } else {
                System.out.println("商品ID不存在。");
            }
        }
    }

    private static void displayShoppingCartAndRemoveItems() {
        if (shoppingCart.getItems().isEmpty()) {
            System.out.println("购物车为空。");
            return;
        }
        System.out.println("购物车中的商品:");
        for (Product item : shoppingCart.getItems()) {
            System.out.println(item);
        }
        System.out.println("请输入要从购物车移除的商品ID,或输入0返回主菜单:");
        int productId = Integer.parseInt(scanner.nextLine());
        if (productId != 0) {
            Product productToRemove = productService.getProductById(productId);
            if (productToRemove != null) {
                productService.removeFromCart(productToRemove);
                System.out.println("商品已从购物车中移除!");
            } else {
                System.out.println("商品ID不存在或不在购物车中。");
            }
        }
    }
}

  • 用户管理
public class UserService {
   private Map<String, User> users;

   public UserService() {
       users = new HashMap<>();
       // 初始化一个用户数据
       User user = new User(1, "testUser", "password");
       user.addAddress("home", "123 Main St");
       users.put("testUser", user);
   }

   public boolean register(String username, String password) {
       if (!Validator.validateUsername(username) || !Validator.validatePassword(password)) {
           return false;
       }
       if (users.containsKey(username)) {
           return false;
       }
       User newUser = new User(users.size() + 1, username, password);
       users.put(username, newUser);
       return true;
   }

   public User login(String username, String password) {
       User user = users.get(username);
       if (user != null && user.getPassword().equals(password)) {
           return user;
       }
       return null;
   }

   // 添加更多用户管理相关的方法
}
  • 商品管理模块
public class ProductService {
  private List<Product> products;
  private ShoppingCart shoppingCart;

  public ProductService() {
      products = new ArrayList<>();
      shoppingCart = new ShoppingCart();
      // Initialize some product data
      products.add(new Product(1, "Java编程思想", 89.00, Constants.CATEGORY_BOOK, 10));
      products.add(new Product(2, "Effective Java", 79.00, Constants.CATEGORY_BOOK, 10));
      products.add(new Product(3, "iPhone 13", 6999.00, Constants.CATEGORY_PHONE, 5));
      products.add(new Product(4, "华为 P50", 5999.00, Constants.CATEGORY_PHONE, 3));
  }

  public List<Product> getAllProducts() {
      return products;
  }

  public Product getProductById(int id) {
      for (Product product : products) {
          if (product.getId() == id) {
              return product;
          }
      }
      return null;
  }

  public void addToCart(Product product) {
      if (product.getStock() > 0) {
          shoppingCart.addItem(product);
          product.setStock(product.getStock() - 1); // Deduct stock
      } else {
          System.out.println("商品 " + product.getName() + " 库存不足。");
      }
  }

  public void removeFromCart(Product product) {
      shoppingCart.removeItem(product);
      product.setStock(product.getStock() + 1); // Add stock back
  }

  public ShoppingCart getShoppingCart() {
      return shoppingCart;
  }
}

-购物车

public class ShoppingCart {
    private List<Product> items;

    public ShoppingCart() {
        items = new ArrayList<>();
    }

    public void addItem(Product product) {
        items.add(product);
    }

    public void removeItem(Product product) {
        items.remove(product);
    }

    public List<Product> getItems() {
        return items;
    }

    public double getTotalPrice() {
        double total = 0.0;
        for (Product item : items) {
            total += item.getPrice();
        }
        return total;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值