一、项目准备
1、开发工具:JDK、Eclipse
2、需求分析:
包括商品管理和购物车管理。
1)商品管理主要功能
- 商品信息导入
- 显示所有商品信息
2)购物车主要功能
- 添加商品到购物车
- 修改购物车中的商品数量
- 显示购物车中的所有商品信息
- 结算
4、详细设计
包括如下类的设计: - 商品类(Goods)
- 商品管理类(GoodsManage)
- 购物车中的商品信息类(GoodsInCart)
- 购物车类(ShoppingCart)
- 测试类 (TestDemo)
- 下面分别对各个类进行介绍:
1)商品类(Goods),包括如下属性和方法
方法:
-构造方法
-getter和setter方法
-hashCode()和equals()方法
-toString()方法
2)商品管理类(GoodsManage)
属性:存放商品的容器(goodsSet):Set类型
方法:
-构造方法
-getter和setter方法
-商品信息导入:public void importGoods();
-显示所有商品信息:public void displayAllGoods();
3)购物车中的商品信息类(GoodsInCart)
属性:
- 商品信息(goods):Goods类型
- 商品数量(num):int类型
方法:
-构造方法
-getter和setter方法
4)购物车类(ShoppingCart)
属性:
- 购物车(shoppingCart):Map类型,其中key为String类型,value为GoodsInCart类型
方法:
-添加商品到购物车:
public void addGoodsToCart(GoodsManage gm);
-修改购物车中的商品数量:public void updateNumInCart();如果购物车中没有商品,需要给出提示信息
- 显示购物车中的所有商品:public void displayAllInCart();如果购物车中没有商品,需要给出提示信息
- 结算:public void settleAccounts();结算后购物车要清空。
- 构造方法及getter和setter方法
5)测试类(TestDemo)
- 根据需求设计完成主流程实现
代码实现:
- 商品类(Goods):
package pers.szl.shopping;
public class Goods {
private String goodsId;
private String goodsName;
private double price;
private String goodDes;
@Override
public boolean equals(Object o) {
if(o==this){
return true;
}
if(o instanceof Goods){
Goods goods=(Goods) o;
if(this.getGoodsId().equals(goods.goodsId)&&this.goodsName.equals(goods.goodsName)&&this.price==goods.price&&this.goodDes.equals(goods.goodDes)) {
return true;
}
}
return false;
}
@Override
public int hashCode() {
return (goodsId.hashCode()+goodsName.hashCode()+goodDes.hashCode()+(int)price)*31;
}
public Goods() {
}
public Goods(String goodsId, String goodsName, double price, String goodDes) {
this.goodsId = goodsId;
this.goodsName = goodsName;
this.price = price;
this.goodDes = goodDes;
}
/**
* 获取
* @return goodsId
*/
public String getGoodsId() {
return goodsId;
}
/**
* 设置
* @param
*/
public void setGoodsId(String goodsId) {
this.goodsId = goodsId;
}
/**
* 获取
* @return goodsName
*/
public String getGoodsName() {
return goodsName;
}
/**
* 设置
* @param
*/
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
/**
* 获取
* @return price
*/
public double getPrice() {
return price;
}
/**
* 设置
* @param price
*/
public void setPrice(double price) {
this.price = price;
}
/**
* 获取
* @return goodDes
*/
public String getGoodDes() {
return goodDes;
}
/**
* 设置
* @param goodDes
*/
public void setGoodDes(String goodDes) {
this.goodDes = goodDes;
}
public String toString() {
return "商品编号:" + goodsId + ",商品名称:" + goodsName + ",商品单价:" + price+"元" + ",商品描述:" + goodDes;
}
}
商品管理类(GoodsManage):
package pers.szl.shopping;
import java.util.HashSet;
public class GoodManage {
HashSet<Goods> goodsSet = new HashSet<>();
public GoodManage() {
}
public void importGoods() {//商品信息导入
Goods g1 = new Goods("goods001", "水杯", 56.0, "不锈钢");
Goods g2 = new Goods("goods002", "电脑", 5556.0, "笔记本电脑");
Goods g3 = new Goods("goods003", "手机", 2556.0, "智能手机");
Goods g4 = new Goods("goods004", "饮水机", 556.0, "智能饮水机");
Goods g5 = new Goods("goods005", "篮球", 256.0, "专业篮球");
goodsSet.add(g1);
goodsSet.add(g2);
goodsSet.add(g3);
goodsSet.add(g4);
goodsSet.add(g5);
System.out.println("商品信息导入成功!");
}
public void displayAllGoods() {//显示所有商品信息
System.out.println("显示所有商品信息:");
for (Object object : goodsSet) {
System.out.println(object);
}
}
}
购物车中的商品信息类(GoodsInCart):
package pers.szl.shopping;
public class GoodsInCart {
private Goods goods;
private int num;
public GoodsInCart() {
}
public Goods getGoods() {
return goods;
}
public void setGoods(Goods goods) {
this.goods = goods;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String toString() {
return goods + ",商品数量:" + num +";";
}
}
购物车类(ShoppingCart):
package pers.szl.shopping;
import java.util.*;
public class ShoppingCart {
Map<String, GoodsInCart> shoppingCart = new HashMap<>();
Scanner sc=new Scanner(System.in);
public ShoppingCart() {
}
public void addGoodsToCart(GoodManage gm ){//添加商品到购物车
GoodsInCart goods=new GoodsInCart();
if(gm.goodsSet.isEmpty()){
System.out.println("商品信息未导入,请先导入商品信息!");
return ;
}
gm.displayAllGoods();
System.out.println("请输入商品编号:");
String goodId=sc.next();
Set <String> keys=shoppingCart.keySet();
for(String key:keys){
if(key.equals(goodId))
{
System.out.println("该商品已添加到购物车,请重新输入商品编号!");
addGoodsToCart(gm );
}
}
for (Goods object : gm.goodsSet) {
if(object.getGoodsId().equals(goodId)){
goods.setGoods( object);
System.out.println("请输入商品数量:");
int num=sc.nextInt();
while(num<=0){
System.out.println("商品数量不能为负,请重新输入商品数量:");
num=sc.nextInt();
}
goods.setNum(num);
shoppingCart.put(goods.getGoods().getGoodsId(),goods);
System.out.println("添加商品到购物车成功!");
return;
}
}
System.out.println("商品信息中不存在该编号的商品,请重新输入商品编号!");
addGoodsToCart( gm );
}
public void updateNumInCart(){//修改购物车中的商品数量
GoodsInCart goods=new GoodsInCart();
if(shoppingCart!=null&&shoppingCart.isEmpty()){
System.out.println("购物车没有添加商品,请先进行添加商品操作!");
return;
}
System.out.println("请输入修改商品编号:");
String goodId=sc.next();
Set <String> keys=shoppingCart.keySet();
for(String key:keys){
if(key.equals(goodId))
{
Goods goods1= shoppingCart.get(key).getGoods();
goods.setGoods(goods1);
System.out.println("请输入修改商品数量:");
int num=sc.nextInt();
if(num==0){
shoppingCart.remove(key);
System.out.println("商品数量为零,已从购物车中删除!");
return;
}
while(num<0){
System.out.println("商品数量不能为负,请重新输入商品数量:");
num=sc.nextInt();
}
goods.setNum(num);
goods.getGoods().setGoodsId(goodId);
shoppingCart.put(goods.getGoods().getGoodsId(),goods);
System.out.println("修改购物车中的商品数量成功!");
return;
}
}
System.out.println("购物车中不存在该编号的商品,请重新输入商品编号!");
updateNumInCart();
}
public void displayAllInCart() {//显示购物车中的商品信息
if(shoppingCart!=null&&shoppingCart.isEmpty()){
System.out.println("购物车没有添加商品,请先进行添加商品操作!");
return;
}
System.out.println("购物车商品信息如下:");
Set <String> keys=shoppingCart.keySet();
for(String key:keys){
System.out.println(shoppingCart.get(key).getGoods()+",商品数量:"+shoppingCart.get(key).getNum());
}
}
public void settleAccounts(){//结算
if(shoppingCart!=null&&shoppingCart.isEmpty()){
System.out.println("购物车没有添加商品,请先进行添加商品操作!");
return;
}
Set <String> keys=shoppingCart.keySet();
double sumPrice=0;
for(String key:keys){
GoodsInCart value=shoppingCart.get(key);
sumPrice+= value.getGoods().getPrice()*value.getNum();
}
System.out.println("结算成功,您一共需要支付"+sumPrice+"元。");
displayAllInCart();
shoppingCart.clear();
System.out.println("支付成功,购物车已清空!");
}
}
测试类(TestDemo):
package pers.szl.shopping;
import java.util.Scanner;
public class TestDemo {
public static void main(String[]args){
Menu menu=new Menu();
Scanner input= new Scanner(System.in);
while(true){
menu.home();
switch(input.next()){
case "1":
menu.shoppingHome();
break;
case "2":
menu.goodsHome();
break;
case "0":
System.out.println("成功退出系统!");
System.exit(0);
break;
default:
System.out.println("没有此操作,请重新输入!");
}
}
}
}
菜单类Menu:
package pers.szl.shopping;
import java.util.Scanner;
public class Menu {
Scanner input = new Scanner(System.in);
ShoppingCart shoppingCart = new ShoppingCart();
GoodManage gm = new GoodManage();
public void home() {
System.out.println(" ************************");
System.out.println(" **主菜单**");
System.out.println(" 1--商品管理");
System.out.println(" 2--购物车");
System.out.println(" 0--退出");
System.out.println(" ************************");
System.out.println("请输入对应数字进行操作:");
}
public void shoppingHome() {
boolean flag = true;
while (flag) {
System.out.println(" **************************");
System.out.println(" **商品管理**");
System.out.println(" 1--商品信息导入");
System.out.println(" 2--显示所有商品信息");
System.out.println(" 9--返回上一级菜单");
System.out.println(" **************************");
System.out.println("请输入对应数字对商品进行管理:");
switch (input.next()) {
case "1":
gm.importGoods();
break;
case "2":
gm.displayAllGoods();
break;
case "9":
System.out.println("成功返回上一级菜单!");
flag = false;
break;
default:
System.out.println("输入错误,请重新输入!");
}
}
}
public void goodsHome() {
boolean flag = true;
while (flag) {
System.out.println(" ************************");
System.out.println(" **购物车管理**");
System.out.println(" 1--添加商品到购物车");
System.out.println(" 2--修改购物车中的商品数量");
System.out.println(" 3--显示购物车中的所有商品");
System.out.println(" 4--结算");
System.out.println(" 9--返回上一级菜单");
System.out.println(" ***********************");
System.out.println("请输入对应的数字对购物车进行管理:");
switch (input.next()) {
case "1":
shoppingCart.addGoodsToCart(gm);
break;
case "2":
shoppingCart.updateNumInCart();
break;
case "3":
shoppingCart.displayAllInCart();
break;
case "4":
shoppingCart.settleAccounts();
break;
case "9":
System.out.println("成功返回上一级菜单!");
flag = false;
break;
default:
System.out.println("输入错误,请重新输入!");
}
}
}
}