Java大作业——购物车
成员:詹毅斌,王昕,罗吉洋。
前期调查
系统功能结构图
系统描述
系统打印出所有商品,然后根据现有的商品的ID,可以将商品添加到购物车里,也可以进行删除,显示购物车里的商品信息,能清空购物车里的商品,最后结算购物车计算出总价。
UML类图
代码
1.Main类
mian方法,进入商品目录界面和进行选择操作。
package Shopping;
import java.awt.AWTException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws AWTException {
Scanner sc = new Scanner(System.in);
int n,num,id,flat = 0;
Mall mall = new Mall();
Cart cart = new Cart();
while(true) {
mall.showGoods();
Menu.menu();
n = Integer.valueOf(sc.nextLine());
switch (n) {
case 1:
System.out.println("请输入要增加的商品ID:");
id = Integer.valueOf(sc.nextLine());
System.out.println("请输入要增加的商品数量:");
num = Integer.valueOf(sc.nextLine());
if(id>5||id<=0)
{
System.out.println("不存在此商品");
System.out.println("请按任意键继续");
String s=sc.nextLine();
break;
}
for(int i = 0; i < num; i++) {
cart.add(mall.searchById(id));
}
System.out.println("请按任意键继续");
String s=sc.nextLine();
// Menu.clear_all();
break;
case 2:
if(cart.Len()==0) {
System.out.println("购物车为空");
System.out.println("请按任意键继续");
s=sc.nextLine();
// Menu.clear_all();
break;
}
System.out.println("请输入要删除的商品ID:");
id = Integer.valueOf(sc.nextLine());
System.out.println("请输入要减少的商品数量:");
num = Integer.valueOf(sc.nextLine());
if(cart.find(id)==0) {
System.out.println("请按任意键继续");
s=sc.nextLine();
// Menu.clear_all();
break;
}
for(int i = 0; i < num; i++) {
cart.remove(id);
}
System.out.println("删除成功");
System.out.println("请按任意键继续");
s=sc.nextLine();
// Menu.clear_all();
break;
case 3:
cart.diplayAll();
System.out.println("请按任意键继续");
s=sc.nextLine();
// Menu.clear_all();
break;
case 4:
cart.clear();
System.out.println("已清空");
System.out.println("请按任意键继续");
s=sc.nextLine();
// Menu.clear_all();
break;
case 5:
cart.settleaccounts();
System.out.println("请按任意键继续");
s=sc.nextLine();
// Menu.clear_all();
break;
case 0:
flat = 1;
break;
default:
break;
}
if(flat == 1) {
System.out.println("成功退出!");
break;
}
}
sc.close();
}
}
2.Commodity类
定义商品属性,商品的ID,商品名,商品价格,描述,数量
package Shopping;
public class Commodity { //商品
private Integer id;
private String name;
private Double price;
private String description;
public Commodity() {
}
public Commodity(Integer id, String name, Double price, String description) {
super();
this.id = id;
this.name = name;
this.price = price;
this.description = description;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
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 getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return "商品 [ID:" + id + ", 名称:" + name + ", 单价:" + price + ", 类型:" + description + "]";
}
}
3.CartDAO类
package Shopping;
public interface CartDAO {
public void add(Commodity e);
public boolean remove(Integer id);
public void diplayAll();
public int findById(Integer id);
public void clear();
public void settleaccounts();
}
4.Cart类
对购物车进行添加,删除,查看,结算,清空等操作
package Shopping;
import java.util.ArrayList;
import java.util.List;
public class Cart implements CartDAO{
private List<ItemEntry> itemList;
public Cart(){
itemList = new ArrayList<>();
}
public int Len() {//购物车商品条目数
return itemList.size();
}
public int find(int id)//判断购物车是否存在该商品
{
int index = findById(id);
if(index==-1)
{
System.out.println("不存在该商品");
return 0;
}
return 1;
}
public void add(Commodity e){//添加商品
if (e == null){
return ;
}
int index = findById(e.getId());
if (index == -1){//如果不包含该商品的条目
itemList.add(new ItemEntry(e));
}else{
itemList.get(index).increase();
}
}
public boolean remove(Integer id){//删除商品
if(itemList.size()==0) {
System.out.println("购物车为空");
return false;
}
if (id==null)
return false;
int index = findById(id);
if (index == -1){//未找到
return false;
}else{
ItemEntry entry = itemList.get(index);
if (entry.getQty() <= 1){//移除相关条目qty<=0,则删除条目
itemList.remove(index);
}else{
entry.decrease();
}
}
return true;
}
public void diplayAll(){
if(itemList.size()==0)
System.out.println("购物车为空");
for (ItemEntry itemEntry : itemList) {
System.out.println(itemEntry);
}
}
public int findById(Integer id){//在购物车中寻找商品
for (int i = 0; i < itemList.size(); i++) {
if (itemList.get(i).getItem().getId().equals(id))
return i;
}
return -1;
}
public void clear() {//清空购物车
itemList.clear();
}
public void settleaccounts() {//结算购物车
double sum=0;
int num=0;
for (int i=0;i<itemList.size();i++) {
sum=sum+itemList.get(i).totalPrice;
num=num+itemList.get(i).qty;
}
System.out.println("共"+itemList.size()+"种商品,共"+num+"件商品");
System.out.println("总计"+sum+"元");
this.clear();
}
private class ItemEntry{ //内部类:购物车条目类
Commodity item;//商品
Integer qty;//数量
private double totalPrice=0.0;
public ItemEntry(Commodity item) {
this.item = item;
qty = 1;
totalPrice=item.getPrice();
}
//添加
public void increase(){
qty++;
totalPrice=item.getPrice()*qty;
}
//减少
public void decrease(){
qty--;
totalPrice=item.getPrice()*qty;
}
public Commodity getItem() {
return item;
}
public Integer getQty() {
return qty;
}
@Override
public String toString() {
return item + ", 商品数量=" + qty + ", 小计=" + totalPrice + "]";
}
}
}
5.Mall类
打印商品目录和查找商品
package Shopping;
import java.util.ArrayList;
import java.util.List;
public class Mall {
private List<Commodity> commodities = new ArrayList<Commodity>();
{
commodities.add(new Commodity(1, "iphone 12", 8199.00,"手机"));
commodities.add(new Commodity(2, "华为 Mate40 Pro", 8199.00,"手机"));
commodities.add(new Commodity(3, "茅台飞天", 1499.00,"酒"));
commodities.add(new Commodity(4, "华硕VG259Q", 1449.00,"显示器"));
commodities.add(new Commodity(5, "java学习笔记", 94.10, "书"));
}
public void showGoods() {// 展示商品
for (Commodity e : commodities) {
System.out.println(e);
}
}
public Commodity searchById(int id) {// 按编号搜索商品
int i = 0;
for (i = 0; i < commodities.size(); i++) {
if (commodities.get(i).getId() == (id)) {
return commodities.get(i);
}
}
return null;
}
}
6.Menu类
操作选项
package Shopping;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
public class Menu {
public static void clear_all() throws AWTException {
Robot r = new Robot();
r.mousePress(InputEvent.BUTTON3_DOWN_MASK); //按下鼠标右键
r.mouseRelease(InputEvent.BUTTON3_DOWN_MASK); //释放鼠标右键
r.keyPress(KeyEvent.VK_CONTROL); // 按下Ctrl键
r.keyPress(KeyEvent.VK_R); // 按下R键
r.keyRelease(KeyEvent.VK_R); // 释放R键
r.keyRelease(KeyEvent.VK_CONTROL); // 释放Ctrl键
r.delay(10);
}
public static void menu() {
System.out.println("请选择:");
System.out.println("[1]:添加商品");
System.out.println("[2]:删除商品");
System.out.println("[3]:查看商品");
System.out.println("[4]:清空购物车");
System.out.println("[5]:结算购物车");
System.out.println("[0]:退出");
}
}
Gitee
https://gitee.com/zhan-yibin/java-code/tree/master/shopping/ShoppingCart/Shopping