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

备注:该系统的实现借助了豆包AI

一、前期调查(林源龙、刘振求)

1、我们调查了淘宝购物平台,首先根据图1,可以看到登录注册界面,这可能需要用到用户类,用户信息管理类;
在这里插入图片描述
2、其次,如下图所示,在平台的主界面有许多商品种类,每个商品又包含了不同的信息,因此需要有商品类以及商品管理类。而商品类可能需要用到继承与多态来提高代码的可拓展性。
在这里插入图片描述
3、我们可以看到下图中,是淘宝中的搜索功能,搜索意味着商品信息需要存在,为了用户信息和商品信息能够长期保存,这时可能需要用到文件处理的工具类。
在这里插入图片描述
4、而在购物系统中,购物车是必不可少的,正如下图所示,由此可以得出该系统可能还需要购物车类以及购物车中所包含的每一项,购物车单项类。
在这里插入图片描述

二、需求分析(林源龙)

1、用户管理需求

实现用户的注册、登录、修改密码、查询用户信息等功能。

2、商品管理需求

对商品进行分类管理,包括商品的添加、查询、修改、删除等功能。

3、购物车管理需求

用户可以将商品添加到购物车,查看购物车中的商品信息,修改商品数量,结算购物车等功能。

4、其他需求

所有注册过的用户信息,录入的商品信息,购物的历史记录信息需要存入文件之中,方便长期查看和使用,需要有读写文件的操作。

三、面向对象设计(刘振求)

(一)类的设计

1、实体类

(1)用户类(User)

存储用户的基本信息,包括用户 ID、用户名、密码、手机号、地址等。

(2)商品类(Product)

Product作为父类存储商品的基本属性,包括商品 ID、名称、价格、类别。
Book作为子类存储商品独有的属性,即作者,编号。
Phone作为子类存储商品独有的属性,即品牌,颜色。

2、管理类

(1)用户管理类(UserManager)

负责用户的注册、登录、修改密码、查询用户信息等功能。

(2)商品管理器类(ProductManager)

负责商品的添加、查询、修改、删除等功能。

3、购物车相关类

(1)商品项类(CartItem)

存储购物车中的商品信息,包括商品、数量和总价。

(2)购物车类(ShoppingCart)

存储购物车中的商品项,提供添加商品、查找商品、计算总价等功能。

4、工具类

(1)文件处理工具类(FileUtil)

负责读取和写入用户信息文件和商品信息文件。

5、UI类

(1)登录界面类(LoginFrame)

提供用户登录的界面。

(2)注册界面类(RegisterFrame)

提供用户注册的界面。

(3)商城主界面类(MainShopping)

提供购物商城的主界面,包括浏览商品、搜索商品、购物车、结账等功能。

(二)类之间的关系

用户类(User)和用户管理类(UserManager):用户管理类负责管理用户类的对象,实现用户的注册、登录、修改密码等功能。
商品类(Product)和商品管理器类(ProductManager):商品管理器类负责管理商品类的对象,实现商品的添加、查询、修改、删除等功能。
商品项类(CartItem)购物车类(ShoppingCart):购物车类包含多个商品项类的对象,实现购物车的管理功能。
文件处理工具类(FileUtil) 和其他类:文件处理工具类被其他类调用,实现读取和写入用户信息文件和商品信息文件的功能。
UI 类和其他类:UI 类通过调用其他类的方法实现购物系统的用户界面功能。

(三)UML图

(来自豆包AI)

@startuml
class User {
- id: int
- username: String
- password: String
- phoneNumber: String
- address: String
}
class Product {
- id: String
- name: String
- price: BigDecimal
- category: String
}
class UserManager {
+ registerUser(username: String, password: String, phoneNumber: String, address: String): boolean
+ login(username: String, password: String): User
+ searchUser(username: String): User
+ changePassword(username: String, oldPassword: String, newPassword: String): boolean
}
class ProductManager {
+ getProducts(): List
+ getProductById(id: String): Product
+ searchProducts(keyword: String): List
+ saveProducts(): void
}
class CartItem {
- product: Product
- quantity: int
+ getTotalPrice(): BigDecimal
}
class ShoppingCart {
- items: List
+ addItem(product: Product, quantity: int): void
+ findItem(product: Product): CartItem
+ getItems(): List
+ getTotalPrice(): BigDecimal
+ removeItem(product: Product): void
}
class FileUtil {
+ saveProducts(products: List, filePath: String): void
+ loadProducts(filePath: String): List
+ saveUsers(users: List, filePath: String): void
+ loadUsers(filePath: String): List
}
class LoginFrame {
// UI methods for login
}
class RegisterFrame {
// UI methods for registration
}
class MainShopping {
// UI methods for main shopping interface
}
User “1” *-- “1” UserManager
Product “1” *-- “1” ProductManager
CartItem “1” *-- “1” Product
ShoppingCart “1” – "" CartItem
UserManager --> FileUtil
ProductManager --> FileUtil
LoginFrame --> UserManager
RegisterFrame --> UserManager
MainShopping --> UserManager
MainShopping --> ProductManager
@enduml

四、关键代码(刘振求)

1、实体类

(1)用户类(User)

 package com.shopping.user;

public class User {
   
    private int id;
    private String username;
    private String password;
    private String phoneNumber;
    private String address;

    public User(int id, String username, String password, String phone, String address) {
   
        this.id = id;
        this.username = username;
        this.password = password;
        this.phoneNumber = phone;
        this.address = address;
    }

    public int getId() {
   
        return id;
    }

    public String getUsername() {
   
        return username;
    }

    public String getPassword() {
   
        return password;
    }

    public String getPhoneNumber() {
   
        return phoneNumber;
    }

    public String getAddress() {
   
        return address;
    }

    public void setPhoneNumber(String phoneNumber) {
   
        this.phoneNumber = phoneNumber;
    }

    public void setPassword(String newPassword) {
   
        this.password = newPassword;
    }

    public void setAddress(String address) {
   
        this.address = address;
    }
}

(2)商品类(Product)

package com.shopping.product;

import java.math.BigDecimal;
import java.util.Objects;

abstract public class Product {
   
    private String id;
    private String name;
    private BigDecimal price;
    private String category;

    public Product(String id, String name, BigDecimal price,String category) {
   
        this.id = id;
        this.name = name;
        this.price = price;
        this.category = category;
    }

    public String getId() {
   
        return id;
    }

    public String getName() {
   
        return name;
    }

    public BigDecimal getPrice() {
   
        return price;
    }

   public String getCategory() {
   
        return category;
    }

    @Override
    public String toString() {
   
        return
                "id=" + id +
                ", name='" + name + '\'' +
                ", price=" + price +
                 '\''
                ;
    }
}

2、管理类

(1)用户管理类(UserManager)

public class UserManager implements UserService {
   
    private List<User> users;
    private String filePath = "D:\\User.txt";

    public UserManager() {
   
        users = FileUtil.loadUsers(filePath);
    }

    @Override
    public boolean registerUser(String username, String password, String phoneNumber,String address) {
   
        int newId = users.size() + 1;
        User newUser = new User(newId, username, password, phoneNumber,address);
        users.add(newUser);
        saveUsers();
        return true;
    }

    @Override
    public User login(String username, String password) {
   
        for (User user : users) {
   
            if (user.getUsername().equals(username) && user.getPassword().equals(password)) {
   
                return user;
            }
        }
        return null;
    }

    @Override
    public User searchUser(String username) {
   
        for (User user : users) {
   
            if (user.getUsername().equals(username)) {
   
                return user;
            }
        }
        return null;
    }

    @Override
    public boolean changePassword(String username, String oldPassword, String newPassword) {
   
        User user = searchUser(username);
        if (user!= null && user.getPassword().equals(oldPassword)) {
   
            user.setPassword(newPassword);
            saveUsers();
            return true;
        }
        return false;
    }

    private void saveUsers() {
   
        FileUtil.saveUsers(users, filePath);
    }
}

(2)商品管理器类(ProductManager)

@Override
    public List<Product> getProducts() {
   
        return products;
    }

    @Override
    public Product getProductById(String id) {
   
        for (Product product : products) {
   
            if (product.getId().equals(id)) {
   
                return product;
            }
        }
        return null;
    }

    @Override
    public List<Product> searchProducts(String keyword) {
   
        List<Product> result = new ArrayList<>();
        for (Product product : products) {
   
            if (product.getId().contains(keyword) || product.getName().contains(keyword)
                    ||product.getCategory().contains(keyword) ) {
   
                result.add(product);
            }
        }
        return result;
    }

    @Override
    public void saveProducts() {
   
        FileUtil.saveProducts(products, filePath);
    }

3、购物车相关类

(1)商品项类(CartItem)

public class CartItem {
   
    private Product product;
    private int quantity;

    public CartItem(Product product, int quantity) {
   
        this.product = product;
        this.quantity = quantity;
    }

    public Product getProduct() {
   
        return product;
    }

    public int getQuantity() {
   
        return quantity;
    }

    public void setQuantity(int quantity) {
   
        this.quantity = quantity;
    }

    public BigDecimal getTotalPrice() {
   
        return product.getPrice().multiply(new BigDecimal(quantity));
    }
}

(2)购物车类(ShoppingCart)

 private List<CartItem> items;

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

    public void addItem(Product product, int quantity) {
   
        CartItem existingItem = findItem(product);
        if (existingItem != null) {
   
            existingItem.setQuantity(existingItem.getQuantity() + quantity);
        } else {
   
            items.add(new CartItem(product, quantity));
        }
    }

    public CartItem findItem(Product product) {
   
        for (CartItem item : items) {
   
            if (item.getProduct().getId() == product.getId()) {
   
                return item;
            }
        }
        return null;
    }

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

    public BigDecimal getTotalPrice() {
   
        BigDecimal total = BigDecimal.ZERO;
        for (CartItem item : items) {
   
            total = total.add(item.getTotalPrice());
        }
        return total;
    }

    public void removeItem(Product product) {
   
        CartItem itemToRemove = findItem(product);
        if (itemToRemove != null) {
   
            items.remove(itemToRemove);
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值