小组成员:刘倩,苏晨茜,陈俐文
小组分工:
内容 | 负责人 |
main类主菜单代码的编写 | 刘倩 |
前期调查,博客撰写,商城类 | 苏晨茜 |
商品类,购物车类,对代码的整理与修改 | 陈俐文 |
一.前期调查
顾客客人先在商城(shop)中浏览商品(Commidity),将浏览的商品加入购物车(ShoppingCart),最后通过购物车生成订单。
二.购物车
购买过程图:
系统结构图:
包结构:
三.代码
Menu
package shopping;
import java.util.Scanner;
//用户可以选择进入商品管理模块、购物车管理模块,或者退出。
public class Menu {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("1. 商品管理");
System.out.println("2. 购物车管理");
System.out.println("3. 退出");
System.out.print("请输入选项:");
int option = scanner.nextInt();
scanner.nextLine();
switch (option) {
case 1:
CommodityManagementMenu();
break;
case 2:
ShoppingMenu();
break;
case 3:
System.out.println("感谢使用,再见!");
System.exit(0);
default:
System.out.println("无效选项,请重新输入");
}
}
}
//用户可以根据需要选择不同的功能,进行商品的添加、查看、更新和删除等操作,并随时退出菜单.
public static void CommodityManagementMenu() {
ArrayList<Commodity> commodities = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("1. 添加商品");
System.out.println("2. 查看所有商品");
System.out.println("3. 更新商品信息");
System.out.println("4. 删除商品");
System.out.println("5. 退出");
System.out.print("请输入选项:");
int option = scanner.nextInt();
scanner.nextLine();
switch (option) {
case 1:
System.out.print("请输入商品名称:");
String name = scanner.nextLine();
System.out.print("请输入商品价格:");
double price = scanner.nextDouble();
scanner.nextLine();
System.out.print("请输入商品编号:");
String id = scanner.nextLine();
Commodity commodity = new Commodity(name, price, id);
commodities.add(commodity);
System.out.println("已添加商品");
break;
case 2:
if (commodities.isEmpty()) {
System.out.println("还未添加商品");
} else {
System.out.println("所有商品:");
for (Commodity c : commodities) {
System.out.println("商品名称: "+c.getName() + ", " + "商品价格: "+c.getPrice() + ", " +",商品编号:"+ c.getId());
}
}
break;
case 3:
if (commodities.isEmpty()) {
System.out.println("还未添加商品");
} else {
System.out.print("请输入要更新的商品编号:");
String updateCommodityId = scanner.nextLine();
boolean updated = false;
for (Commodity c : commodities) {
if (c.getId().equals(updateCommodityId)) {
System.out.println("请重新输入商品名称:");
String updatedName = scanner.nextLine();
System.out.println("请重新输入商品价格:");
double updatedPrice = scanner.nextDouble();
scanner.nextLine();
c.setName(updatedName);
c.setPrice(updatedPrice);
System.out.println("商品信息已更新");
updated = true;
break;
}
}
if (!updated) {
System.out.println("商品不存在或商品编号输入错误");
}
}
break;
case 4:
if (commodities.isEmpty()) {
System.out.println("还未添加商品");
} else {
System.out.print("请输入要删除的商品编号:");
String deleteCommodityId = scanner.nextLine();
boolean deleted = false;
for (Commodity c : commodities) {
if (c.getId().equals(deleteCommodityId)) {
commodities.remove(c);
System.out.println("商品已删除");
deleted = true;
break;
}
}
if (!deleted) {
System.out.println("商品不存在或商品编号输入错误");
}
}
break;
case 5:
System.out.println("感谢使用,再见!");
System.exit(0);
default:
System.out.println("无效选项,请重新输入");
}
}
}
//根据用户的选择,菜单会调用购物车类和商城类的相应方法来实现功能。用户可以根据需要选择不同的功能,进行商品的添加、数量的查看、结算和展示购物车等操作。
public static void ShoppingMenu() {
ShoppingCart shoppingCart = new ShoppingCart();
Store store = new Store();
// 初始化商城商品
store.initialize();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("1. 添加商品到购物车");
System.out.println("2. 查看购物车内商品数量");
System.out.println("3. 结算");
System.out.println("4. 显示购物车内商品");
System.out.println("5. 退出");
System.out.print("请输入选项:");
int option = scanner.nextInt();
scanner.nextLine();
switch (option) {
case 1:
System.out.print("请输入要添加的商品编号:");
String commodityId = scanner.nextLine();
Commodity selectedCommodity = store.search(commodityId);
if (selectedCommodity != null) {
shoppingCart.add(selectedCommodity);
System.out.println("已添加商品到购物车");
} else {
System.out.println("商品不存在,请重新输入");
}
break;
case 2:
int quantity = shoppingCart.getQty();
System.out.println("购物车内商品数量为:" + quantity);
break;
case 3:
double totalPrice = shoppingCart.checkout();
System.out.println("购物车内商品总价为:" + totalPrice);
break;
case 4:
shoppingCart.show();
break;
case 5:
System.out.println("感谢使用,再见!");
System.exit(0);
default:
System.out.println("无效选项,请重新输入");
}
}
}
}
功能介绍:
1.menu为主菜单,使用者先选择进行商场货物管理的操作还是购物车的操作
2.CommodityManageMenu为进行商场货物管理的菜单,有添加商品、查看商品、更新商品信息、删除商品、退出该系统的操作,其中删除商品是根据商品编号进行处理,添加商品需要输入商品编号、商品数量、商品价格等关键信息
3.ShoppingMenu为顾客进行购物车操作的菜单,有添加到购物车,查看购物车商品数量、结算、显示购物车、退出的操作,均通过商品编号实行
Commodity
package shopping;
/**
* 商品类:用来存放商品的信息(商品名称name、商品价格price、商品编号id)
*/
public class Commodity {
private String name;
private double price;
private int id;
public Commodity(String name, double price) {
this.name = name;
this.price = price;
this.buyNumber = buyNumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
功能介绍:
存放商品信息(商品数量、商品价格、商品编号)
ShoppingCart
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* 购物车类:可以用来存放商品,且包含购物车常用的操作方法。
*/
public class ShoppingCart {
private HashMap<Commodity, Integer> items = new HashMap<>();
// 存放商品的容器,键为商品对象,值为商品数量
/**
* 往购物车里面存放商品。
* 如果购物车中已经存在相同的商品,则将数量加1;否则,添加新商品到购物车。
*/
public void add(Commodity item) {
if (items.containsKey(item)) {
int quantity = items.get(item);
items.put(item, quantity + 1);
} else {
items.put(item, 1);
}
}
/**
* 获得购物车内商品的数量
*/
public int getQty() {
int totalQuantity = 0;
for (int quantity : items.values()) {
totalQuantity += quantity;
}
return totalQuantity;
}
/**
* 结算
*
* @return 返回购物车中所有商品的总价
*/
public double checkout() {
double totalPrice = 0;
for (Map.Entry<Commodity, Integer> entry : items.entrySet()) {
Commodity commodity = entry.getKey();
int quantity = entry.getValue();
double price = commodity.getPrice();
totalPrice += price * quantity;
}
return totalPrice;
}
/**
* 显示购物车中的商品
*/
public void show() {
for (Map.Entry<Commodity, Integer> entry : items.entrySet()) {
Commodity commodity = entry.getKey();
int quantity = entry.getValue();
printCommodity(commodity, quantity);
System.out.println();
}
}
private void printCommodity(Commodity commodity, int quantity) {
System.out.printf("name: %s, price: %f, quantity: %d", commodity.getName(), commodity.getPrice(), quantity);
}
}
功能介绍:
使用哈希表和图的结构
1.向购物车里添加、删除商品
2.显示购物车里的所有商品
3.对购物车里的商品进行结算
Shop
import java.util.ArrayList;
import java.util.List;
public class Shop {
private List<Commodity> commodityList;
public Shop() {
commodityList = new ArrayList<>();
}
public void addCommodity(Commodity commodity) {
commodityList.add(commodity);
}
public Commodity searchCommodity(String name) {
for (Commodity commodity : commodityList) {
if (commodity.getName().equals(name)) {
return commodity;
}
}
return null;
}
}
public class Main {
public static void main(String[] args) {
Shop shop = new Shop();
// 初始化商品
Commodity phone = new Commodity("手机", 1999.99, "P001");
Commodity clothes = new Commodity("衣服", 99.99, "C001");
Commodity vegetable = new Commodity("蔬菜", 9.99, "V001");
Commodity apple = new Commodity("苹果", 5.99, "A001");
Commodity toy = new Commodity("玩具", 49.99, "T001");
// 添加商品到商城
shop.addCommodity(phone);
shop.addCommodity(clothes);
shop.addCommodity(vegetable);
shop.addCommodity(apple);
shop.addCommodity(toy);
// 搜索商品
Commodity searchedCommodity = shop.searchCommodity("手机");
}
}
}
功能介绍:
1.对商品进行初始化
2.添加商品到商城
3.搜索商品
四.实现思路
1.具体功能设计
(1)在商城中初始化部分商品,并对商城中的商品进行基础操作
(2)对购物车里的商品进行增加、删除、展示、结算等基础操作
2.设计小原则
(1)命名、代码的规范性
(2)方法与类之间存在紧密练习
(3)将输入输出信息放在Menu目录中,尽量不在后续的代码过程中从控制台进行输入输出