相信大家通过前面的学习已经对集合有了一定的了解,下面就是需要练习来多多实验自己学习到的东西,废话不多说,下面让我们来简单做一个粗糙的Java购物车吧!
项目架构:
项目目的:实现对集合的运用和加深集合的了解。
目录
项目架构:
前台:
实体类:商品实体类(Javabean,存储商品信息,前台与后台传递数据)与购物车实体类
商品实体类:
购物车实体类:
后台:面向接口编程(完成商品操作)
商品定义接口?
商品接口实现类
购物车接口
购物车接口实现类
收获:
前台:
主函数(菜单的设置)
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class TextShop {
public static void main(String[] args){
Scanner input =new Scanner(System.in);
do{
System.out.println("\t\t********欢迎加入商城********");
System.out.println("\t1: 添加商品");
System.out.println("\t2: 查看全部商品");
System.out.println("\t3: 查看指定编号的商品信息");
System.out.println("\t4: 删除商品" );
System.out.println("\t5: 添加到购物车");
System.out.println("\t6: 显示我的购物车商品");
System.out.println("\t7: 删除购物车商品");
System.out.println("\t8: 退出程序");
System.out.println("***********************************************");
System.out.println("请输入您的选择:");
int choice=input.nextInt();
// TextShop textShop = new TextShop();
switch (choice){
case 1:
addProduct();
break;
case 2:
showall();
break;
case 3:
System.out.println("请输入商品编号:");
showbyid();
break;
case 4:
removeProduct();
break;
case 5:
addCartItem();
break;
case 6:
System.out.println("显示我的购物车商品");
showcart();
break;
case 7:
removeItem();
break;
case 8:
System.out.println("欢迎您的下次使用");
return;
default:
System.out.println("输入错误(没有该选项!!!)");
System.out.println("请重新输入!!!");
}
}while (true);
}
//添加商品
private static void addProduct() {
Scanner input = new Scanner(System.in);
System.out.println("请输入商品id");
int id = input.nextInt();
System.out.println("请输入商品名称");
String name = input.next();
System.out.println("请输入商品价格");
double price = input.nextDouble();
System.out.println("请输入商品颜色");
String color = input.next();
System.out.println("请输入商品尺寸");
int size = input.nextInt();
System.out.println("请输入商品库存");
int stock = input.nextInt();
Product product=new Product(id,name,price,color,size,stock);
ProductDao productDao=new ProductDaoImpl();
productDao.add(product);
}
private static void removeProduct(){
Scanner input = new Scanner(System.in);
System.out.println("请输入商品id");
int id = input.nextInt();
ProductDao productDao=new ProductDaoImpl();
productDao.removeid(id);
}
// 获取后台商品信息并输出
public static void showall(){
//获取后台商品信息
ProductDao productDao=new ProductDaoImpl();
List<Product> productList=productDao.findall();
//输出菜单
System.out.println("编号 \t商品名称\t\t价格\t颜色\t尺寸\t库存 ");
for (Product product:productList) {
System.out.println(product.getId()+"\t"+product.getName()+"\t\t"+product.getPrice()+"\t"+product.getColor()+"\t"+product.getSize()+"\t"+product.getStock());
}
}
//查找商品
public static void showbyid(){
//输入商品编号
Scanner input=new Scanner(System.in);
int id=input.nextInt();
//获取后台商品信息
ProductDao productDao=new ProductDaoImpl();
Product product =productDao.findid(id);
//比较输出
System.out.println("编号 \t商品名称\t\t价格\t颜色\t尺寸\t库存 ");
if (product==null){
System.out.println("此商品不存在");
}else {
System.out.println(product.getId()+"\t"+product.getName()+"\t"+product.getPrice()+"\t"+product.getColor()+"\t"+product.getSize()+"\t"+product.getStock());
}
}
//购物车
// CartItemDao itemDao = new CartItemDaoImpl();
//展示购物车
public static void showcart(){
//获取条目
CartItemDao itemDao = new CartItemDaoImpl();
Map<Integer,CartItem> shop=itemDao.findCart();
//输出
Collection<CartItem> items = shop.values();
System.out.println("编号 \t商品名称\t\t价格\t颜色\t数量\t合计 ");
//实现总计1,给定初始值
double total = 0;
for (CartItem item:items) {
//输出条目信息
System.out.println(item.getId()+"\t"+item.getName()+"\t\t"+item.getPrice()+item.getColor()+"\t"+item.getAmount()+"\t"+item.getPrice()*item.getAmount());
//实现总计2:计算总计
total=total+item.getAmount()*item.getPrice();
}
//实现总计3:输出
System.out.println("总计:"+total);
}
//添加购物车
public static void addCartItem(){
//输入购买商品编号
Scanner input= new Scanner(System.in);
System.out.println("请输入商品的编号");
int id = input.nextInt();
//输入商品数量
System.out.println("请输入商品的数量");
int amount = input.nextInt();
//根据编号获取其他信息
ProductDao productDao = new ProductDaoImpl();
Product product =productDao.findid(id);
//构建购物车条目
CartItem item = new CartItem();
item.setId(id);
item.setName(product.getName());
item.setPrice(product.getPrice());
item.setColor(product.getColor());
item.setAmount(amount);
//后台添加
CartItemDao itemDao=new CartItemDaoImpl();
itemDao.addCartItem(item);
}
//删除购物车
public static void removeItem(){
//输入购买商品编号
Scanner input= new Scanner(System.in);
System.out.println("请输入商品的编号");
int id = input.nextInt();
//输入商品数量
System.out.println("请重写输入商品的数量");
int amount = input.nextInt();
//根据编号获取其他信息
ProductDao productDao = new ProductDaoImpl();
Product product =productDao.findid(id);
//构建购物车条目
CartItem item = new CartItem();
item.setId(id);
item.setName(product.getName());
item.setPrice(product.getPrice());
item.setColor(product.getColor());
item.setAmount(amount);
//后台删除
CartItemDao itemDao=new CartItemDaoImpl();
itemDao.removeCartItem(item);
}
}
实体类:商品实体类(Javabean,存储商品信息,前台与后台传递数据)与购物车实体类
商品实体类:
import java.util.Objects;
/**设置商品类
* 这就是一个标准的Javabean
* Javabean:实体类,用来存储数据
* (1,通过私有属性
* 2,公共构造方法(并且还有一个无参构造)
* 3,所有的取值通过set与git方法)
* equals与hashCode方法:可以存储哈希表结构的集合
* compareTo方法:可以比较排序(要实现Comparable接口)
* 成为Javabean条件
* 1,类public修饰
* 2,属性private修饰
* 3,通过public的set与git方法
* 4,通过无参构造
*
*/
public class Product implements Comparable<Product> {
private int id;//编号
private String name;//名称
private double price;//价格
private String color;//颜色
private int size; //尺寸
private int stock;//库存
public Product() {
}
public Product(int id, String name, double price, String color, int size, int stock) {
this.id = id;
this.name = name;
this.price = price;
this.color = color;
this.size = size;
this.stock = stock;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public String getColor() {
return color;
}
public int getSize() {
return size;
}
public int getStock() {
return stock;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setPrice(double price) {
this.price = price;
}
public void setColor(String color) {
this.color = color;
}
public void setSize(int size) {
this.size = size;
}
public void setStock(int stock) {
this.stock = stock;
}
@Override
public String toString() {
return "Product{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
", color='" + color + '\'' +
", size=" + size +
", stock=" + stock +
'}';
}
//方便存储进集合(HashSet,HashMap中生成equals与hashCode方法)
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Product product = (Product) o;
return id == product.id &&
Double.compare(product.price, price) == 0 &&
size == product.size &&
stock == product.stock &&
Objects.equals(name, product.name) &&
Objects.equals(color, product.color);
}
@Override
public int hashCode() {
return Objects.hash(id, name, price, color, size, stock);
}
//方便存储进集合(二叉树)
@Override
public int compareTo(Product o) {
return this.id-o.id;
}
}
购物车实体类:
import java.util.LinkedHashMap;
import java.util.Objects;
//购物车实体类
public class CartItem implements Comparable<CartItem>{
private int id;//编号
private String name;//名称
private double price;//价格
private String color;//颜色
private int amount; //数量
public CartItem() {
}
public CartItem(int id, String name, double price, String color, int amount) {
this.id = id;
this.name = name;
this.price = price;
this.color = color;
this.amount = amount;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public String getColor() {
return color;
}
public int getAmount() {
return amount;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setPrice(double price) {
this.price = price;
}
public void setColor(String color) {
this.color = color;
}
public void setAmount(int amount) {
this.amount = amount;
}
@Override
public String toString() {
return "CartItem{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
", color='" + color + '\'' +
", amount=" + amount +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
CartItem cartItem = (CartItem) o;
return id == cartItem.id &&
Double.compare(cartItem.price, price) == 0 &&
amount == cartItem.amount &&
Objects.equals(name, cartItem.name) &&
Objects.equals(color, cartItem.color);
}
@Override
public int hashCode() {
return Objects.hash(id, name, price, color, amount);
}
@Override
public int compareTo(CartItem o) {
return this.id-o.id;
}
}
后台:面向接口编程(完成商品操作)
商品定义接口?
import java.util.List;
public interface ProductDao {
public void add(Product pr);
public List<Product> findall();
public Product findid(int id);
public Product removeid(int id);
}
商品接口实现类
商品选择:
Arraylist:商品应该是使用数据库进行存储,小项目就使用Arraylist进行实现(查找方便,商品添加在尾部,实现还方便)
import java.util.ArrayList;
import java.util.List;
/**定义实现接口
* 分层编程思想
*
*/
public class ProductDaoImpl implements ProductDao {
/**
* 功能添加
* add()添加商品
* findall() 显示商品
* findid() 查找指定商品
* removeid() 删除商品
*/
//存储商品信息,所有商品列表只有一个 static
private static List<Product> productList=new ArrayList<Product>();
//static 静态代码块,第一次加载的时候执行,只执行一次,一般是静态变量进行初始化
static {
productList.add(new Product(1000,"手机",2999,"蓝色",250,100));
productList.add(new Product(1001,"电脑",12999,"蓝色",250,10));
productList.add(new Product(1002,"充电器",9.9,"蓝色",250,1000));
}
public void add(Product pr){
boolean flag=false;
for (int i = 0; i <productList.size() ; i++) {
Product product=productList.get(i);
if (pr.getId()==product.getId()){
flag=true;
break;
}
}
if(flag){
System.out.println("商品已经存在");
}else{
System.out.println("添加成功");
productList.add(pr);
}
}
public List<Product> findall(){
return productList;
}
public Product findid(int id){
//比较查找编号
for (int i = 0; i <productList.size() ; i++) {
Product product=productList.get(i);
if (product.getId()==id){
return product;
}
}
return null;
}
public void removeid(int id){
boolean flag=false;
//比较查找编号
for (int i = 0; i <productList.size() ; i++) {
Product product=productList.get(i);
if (product.getId() == id){
productList.remove(product);
flag=true;
}
}
if (flag){
System.out.println("删除成功");
}else {
System.out.println("没有该商品");
}
}
}
购物车接口
import java.util.LinkedHashMap;
public interface CartItemDao {
public void addCartItem(CartItem item);
public LinkedHashMap<Integer,CartItem> findCart();
public void removeCartItem(CartItem item);
}
购物车接口实现类
购物车选择:
ArrayList : (购物车的删除与修改频繁,不推荐使用)
Linklist : (满足删除与添加,查看也有序,可以考虑)
HashSet : (无序,并且不好数量统计,不推荐)
linkhashSet : (有序(添加顺序),数量不好统计)
TreeSet? : (希望按照添加顺序进行排列,数量不好统计,不推荐)
HashMap : (无序,可以考虑)
linkhashSet : (有序(添加顺序),推荐(根据判读key值进行数量增加))
TreeSet? : (希望按照添加顺序进行排列,不推荐)
import java.util.LinkedHashMap;
public class CartItemDaoImpl implements CartItemDao {
//购物车实现,不能static修饰,每个人购物车不一样。
private static LinkedHashMap<Integer,CartItem> shoppingCart=new LinkedHashMap<>();
public void addCartItem(CartItem item){
//判断指定商品是否存在(存在修改数量,不存在添加在购物车)
//获取key
CartItem item2=shoppingCart.get(item.getId());
//判断商品是否存在
if (item2==null){
//不存在直接添加
shoppingCart.put(item.getId(),item);
}else {
//获取原来数量
int num=item2.getAmount();
//获取现在数量
int num1=item.getAmount();
//数量增加
int num2=num1+num;
//修改数量
item2.setAmount(num2);
}
shoppingCart.put(item.getId(),item);
}
//显示购物车全部物品
public LinkedHashMap<Integer,CartItem> findCart(){
// shoppingCart.put(1111,new CartItem(1111,"libai",120,"ns",2));
return shoppingCart;
}
//删除购物车条目
public void removeCartItem(CartItem item){
//获取key
CartItem item2=shoppingCart.get(item.getId());
//判断商品是否存在
if (item2 == null || item2.getAmount()==0 ){
//不存在
System.out.println("不存在该商品");
}else {
//获取原来的数量
int num=item2.getAmount();
//获取要删除的数量
int num1=item.getAmount();
//减少的数量
int num2=num-num1;
//修改数量
item2.setAmount(num2);
}
shoppingCart.put(item.getId(),item);
}
}
收获:
1,复习集合选择与使用。
2,了解到了分层开发(接口与实现类的使用)
3,扩展实现删除,增加自己的编程逻辑能力。
|