面向對象設計(購物車)


Git源碼

https://gitee.com/smyn77/caicai77.git

前期調查

系統功能結構圖

系統描述

該購物車系統提供了注冊登錄、增減商品等功能。用戶注冊賬號后,選擇登錄。登錄成功后,系統顯示菜單,菜單提供增加、刪除、修改商品和清空購物車功能。用戶通過菜單里的選項來完成相應功能。

UML類圖

關鍵代碼

商品類————描述商品的屬性(編號、名稱、分類、單價)

class Product {
	private int productId;// 商品編號
	private String productName;// 商品名稱
	private String category;// 商品分類
	private double price;// 單價

	public Product(int productId, String productName, String category, double price) {
		this.productId = productId;
		this.productName = productName;
		this.category = category;
		this.price = price;
	}

	public String toString() {
		return "Product [productId=" + productId + ", productName=" + productName + ", category=" + category
				+ ", price=" + price + "]";
	}

	public int getProductId() {// 獲取商品編號
		return productId;
	}

	public void setProductId(int productId) {
		this.productId = productId;
	}

	public String getProductName() {// 獲取商品名字
		return productName;
	}

	public void setProductName(String productName) {
		this.productName = productName;
	}

	public String getCategory() {
		return category;
	}

	public void setCategory(String category) {// 設置種類
		this.category = category;
	}

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {// 設置價格
		this.price = price;
	}
}

商品信息類————描述商品數量、總價

class ProductItem {
	private Product product;// 購買的商品(包含商品編號,名稱,分類,單價)
	private int count;// 商品數量

	public double totalMoney() {// 小計
		double price = product.getPrice();// 獲取商品單價
		return price * count; // 獲取這個商品的總的價格
	}

	public ProductItem(Product product, int count) {
		this.product = product;
		this.count = count;
	}

	public Product getProduct() {
		return product;
	}

	public void setProduct(Product product) {
		this.product = product;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}

}

購物車類————描述用戶的購物車內容

class ShoppingCart {// 購物車
	private Map<Integer, ProductItem> map = new LinkedHashMap<Integer, ProductItem>();

	// 集合
	public void addProduct(Product p, int count) {// 添加商品
		int productId = p.getProductId();
		if (map.containsKey(productId)) {// 如果購物車存在同樣的商品,則此對象的數量加一
			ProductItem productItem = map.get(productId);
			productItem.setCount(productItem.getCount() + count);
		} else {
			map.put(productId, new ProductItem(p, count));// 如果沒有,則在map容器里新建一個ProductItem
		}
	}

	public void showAll() {// 查看訂單信息
		Collection<ProductItem> productItems = map.values();
		// 集合信息
		Iterator<ProductItem> iterator = productItems.iterator();
		// 迭代器
		while (iterator.hasNext()) {
			ProductItem productItem = iterator.next();
			Product product = productItem.getProduct();
			System.out.println("商品編號" + ":" + product.getProductId() + ",  商品名稱:" + product.getProductName() + ",  單價:"
					+ product.getPrice() + ",  數量:" + productItem.getCount() + ",  小計:" + productItem.totalMoney());
		}
	}

	public boolean deleteProduct(int productId) {// 刪除商品
		if (map.containsKey(productId)) {
			map.remove(productId);
			return true;
		}
		return false;
	}

	public boolean modifyProduct(int productId, int count) {// 修改
		if (map.containsKey(productId)) {
			if (count >= 1) {
				ProductItem productItem = map.get(productId);
				productItem.setCount(count);
				return true;
			} else if (count == 0) {// 刪除該商品
				deleteProduct(productId);
				return true;
			}
		}
		return false;
	}

	public void clearCart() {// 清空購物車
		map.clear();
	}

	public double totalAllMoney() {// 商品總錢數
		double total = 0;
		Collection<ProductItem> productItems = map.values();
		Iterator<ProductItem> iterator = productItems.iterator();
		while (iterator.hasNext()) {
			ProductItem productItem = iterator.next();
			double money = productItem.totalMoney();
			total += money;
		}
		return total;
	}

	public Map<Integer, ProductItem> getMap() {
		return map;
	}

	public void setMap(Map<Integer, ProductItem> map) {
		this.map = map;
	}

}

菜單類————登錄界面

class Menu {
	private static Map<Integer, Product> map = new LinkedHashMap<Integer, Product>();
	static {// 商品編號// 商品名稱// 商品分類// 單價
		Product p1 = new Product(1, "華碩筆記本", "筆記本", 4599);
		Product p2 = new Product(2, "蘋果", "水果", 5.9);
		Product p3 = new Product(3, "彩電", "家電", 2799);
		Product p4 = new Product(4, "秋褲", "服裝", 128);
		Product p5 = new Product(5, "華為手機", "手機", 2998);
		map.put(p1.getProductId(), p1);
		map.put(p2.getProductId(), p2);
		map.put(p3.getProductId(), p3);
		map.put(p4.getProductId(), p4);
		map.put(p5.getProductId(), p5);

	}

	public static void showMenu() {
		System.out.println("****歡迎來到青春有你514的購物系統****");
		System.out.println("*      [4]輸出商品菜單              *");
		System.out.println("*      [5]輸入所需商品              *");
		System.out.println("*      [6]刪除所需商品              *");
		System.out.println("*      [7]修改所需商品              *");
		System.out.println("*      [8]清空購物車                *");
		System.out.println("*      [9]返回登錄界面              *");
		System.out.println("*************感謝光臨****************");

	}

	public static void showOption() {
		System.out.println("編號1:華碩筆記本,單價為:4599");
		System.out.println("編號2:蘋果,單價為:5.9");
		System.out.println("編號3:彩電,單價為:2799");
		System.out.println("編號4:秋褲,單價為:128");
		System.out.println("編號5:華為手機,單價為:2998");
	}

	public static void inputOption(ShoppingCart cart) {
		Scanner sc = new Scanner(System.in);
		System.out.println("請輸入你想要購買的商品編號及個數(以end為結束標志):");
		while (sc.hasNextLine()) {
			String s = sc.nextLine();
			if (s.equals("end")) {
				break;
			} else {
				String[] strings = s.split(" ");
				int id = Integer.parseInt(strings[0]);
				int count = Integer.parseInt(strings[1]);
				Product p = map.get(id);
				cart.addProduct(p, count);
			}
		}
		System.out.println("***********用戶總加購的商品*****************");
		cart.showAll();
		System.out.println("商品總價錢為:" + cart.totalAllMoney());
		System.out.println();
	}

	public static void deleteOption(ShoppingCart cart) {
		Scanner sc = new Scanner(System.in);
		System.out.println("請輸入你想要刪除的商品編號:(以end為結束標志)");
		while (sc.hasNextLine()) {
			String s = sc.nextLine();
			if (s.equals("end")) {
				break;
			} else {
				int id = Integer.parseInt(s);
				boolean flag = cart.deleteProduct(id);
				if (flag) {
					System.out.println("商品編號:" + id + "的商品刪除成功!");
				} else {
					System.out.println("商品編號" + id + "刪除失敗,購物車沒有該商品!!");
				}

			}
		}
		System.out.println("***********商品刪除信息*****************");
		cart.showAll();
		System.out.println("商品總價錢為:" + cart.totalAllMoney());
		System.out.println();
	}

	public static void modifyOption(ShoppingCart cart) {

		Scanner sc = new Scanner(System.in);
		System.out.println("請輸入你想要修改的商品編號及個數(以end為結束標志):");
		while (sc.hasNextLine()) {
			String s = sc.nextLine();
			if (s.equals("end")) {
				break;
			} else {
				String[] strings = s.split(" ");
				int id = Integer.parseInt(strings[0]);
				int count = Integer.parseInt(strings[1]);
				boolean flag = cart.modifyProduct(id, count);
				if (flag)
					System.out.println("商品編號:" + id + "的商品修改成功!");
				else
					System.out.println("購物車中沒有該商品,修改失敗!!");
			}
		}

		System.out.println("***********商品修改信息*****************");
		cart.showAll();
		System.out.println("商品總價錢為:" + cart.totalAllMoney());
		System.out.println(" ");
	}

	public static void clearOption(ShoppingCart cart) {
		cart.clearCart();
		System.out.println("***********清空購物車*****************");
		cart.showAll();
		System.out.println("商品總價錢為:" + cart.totalAllMoney());
	}
}

用戶類————用戶登錄的賬號、密碼、購物車

class User {
	private int userID;
	private String passWord;
	private ShoppingCart cart;
	private static int nextId = 1;

	{
		this.cart = new ShoppingCart();
		this.userID = nextId++;
	}

	@Override
	public String toString() {
		String s = String.valueOf(userID);
		return "userId = " + s + ",passWord = " + passWord;
	}

	public int getUserID() {
		return userID;
	}

	public String getPassWord() {
		return passWord;
	}

	public ShoppingCart getCart() {
		return cart;
	}

	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}

	public void setCart(ShoppingCart cart) {
		this.cart = cart;
	}

}

系統功能介紹

用戶注冊界面

用戶登錄界面

商品菜單展示

輸入商品展示

刪除商品展示

修改商品展示

清空購物車展示


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM