购物车程序的面向对象设计
1.人员分工:
姓名 | 任务 |
---|---|
陈丹宇 | 编码规范、面向对象设计、功能设计 |
韦早辉 | 前期调查、博客制作 |
2.前期调查:
2.1登录京东我们可以在搜索栏中搜索先要购买的商品名称
2.2搜索后可以看见商品的名称,价格,然后将心仪的一定数量的商品添加入购物车
2.3在购物车我们可以看见商品的总价,删除一定数量的商品,或者一键清空购物车,最后进行结账
3.系统系统描述:
登录京东,然后在搜索栏中输入商品名称,搜索后可以看见商品的编号,名称,价格,然后将心仪的一定数量的商品添加至购物车,在购物车中可见看见所展示的商品,可以对一定数量的商品进行删除或者清空购物车,最后得出商品的总价后结账
4.系统结构图:
5.UML类图:
6.体现了面向对象的封装性:
在同一个包内调用Class文件
7.程序的实现
7.1浏览商品及功能界面
7.2实现向购物车内添加商品
7.3删除购物车内的物品
7.4查看购物车内的商品
7.5实现结账功能
7.6清空购物车
8.项目包结构与关键代码:
8.1Main类
package Shoppingcart;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Product[] products = new Product[4];
products[0] = new Product(100,"华为P50",4988);
products[1] = new Product(200,"小米11",3699);
products[2] = new Product(300,"红魔6s",4899);
products[3] = new Product(400,"苹果13",6799);
Scanner scanner = new Scanner(System.in);
System.out.println("是否开始购物?(Y/N)");
String ans = scanner.nextLine();
if (ans.equals("Y") || ans.equals("y")){
ShoppingCart shoppingCart = new ShoppingCart();
System.out.println("\t\t华强手机旗舰店");
Menu.show();
while (true){
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("5:结账");
System.out.println("6:退出购物");
System.out.println("===========================================");
int choose = scanner.nextInt();
if (choose == 1){
System.out.println("请输入您要添加的商品的编号");
int productNum = scanner.nextInt();
Product p = getProduct(productNum,products);
if (p != null){
System.out.println("请输入要该类商品的添加数量");
int addCount = scanner.nextInt();
shoppingCart.addProducts(p,addCount);
}else {
System.out.println("输入的商品编号有误!");
}
}
if (choose == 2){
System.out.println("请输入您要删除的商品的编号");
int productNum = scanner.nextInt();
Product p = getProduct(productNum,products);
if (p != null){
System.out.println("请输入要该类商品的删除数量");
int delCount = scanner.nextInt();
shoppingCart.removeProducts(p,delCount);
}else {
System.out.println("输入的商品编号有误!");
}
}
if (choose == 3){
shoppingCart.clearShoppingCar();
}if (choose == 4){
shoppingCart.lookCart();
}
if (choose == 5){
shoppingCart.checkOut();
}if (choose == 6){
System.out.println("感谢您的惠顾,祝您生活愉快!");
break;
}
}
}
else {
System.exit(0);
}
}
//传入一个商品编号 返回一个商品
public static Product getProduct(int num,Product[] products){
for (int i=0 ;i<products.length;i++){
int id = products[i].getId();
if (id == num){
return products[i];
}
}
return null;
}
}
8.2Menu类
package Shoppingcart;
public class Menu{
public static void show(){
System.out.println("===========================================");
Product[] products = new Product[4];
products[0] = new Product(100,"华为P50",4988);
products[1] = new Product(200,"小米11",3699);
products[2] = new Product(300,"红魔6s",4899);
products[3] = new Product(400,"苹果13",6799);
System.out.println(products[0]);
System.out.println(products[1]);
System.out.println(products[2]);
System.out.println(products[3]);
System.out.println("===========================================");
}
}
8.3Product类
package Shoppingcart;
public class Product{
private Integer id;
private String name;
private double price;
public Product(Integer id, String name, double price) {
this.id = id;
this.name = name;
this.price = price;
}
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;
}
@Override
public String toString() {
System.out.println("编号"+"\t"+"商品名"+"\t "+"售价");
return id+"\t"+name+"\t "+price;
//
// " 编号:" + id +
// " 名称:" + name +
// " 单价:" + price ;
}
}
8.4ShoppingCart类
package Shoppingcart;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
public class ShoppingCart {
private Map<Product,Integer> cars;
private double totalPrice;
public ShoppingCart(){
cars = new HashMap<>();
}
//对外提供添加多个一类商品的方法
public void addProducts(Product p,Integer num){
if (num<=0){
System.out.println("商品数量不能小于1!");
return;
}
if (cars.containsKey(p)){
//说明购物车已经包含此商品了 这时需要累加 商品的数量
int productcount_before = cars.get(p);
int productcount_after = productcount_before + num;
cars.put(p,productcount_after);
System.out.println("添加商品成功!");
}else {
//程序执行到这里说明购物车中没有此商品 则添加
cars.put(p,num);
System.out.println("添加商品成功!");
}
double price = (p.getPrice())*num;
totalPrice = totalPrice + price;
}
//提供添加一个商品的方法
public void addProducts(Product product){
addProducts(product,1);
System.out.println("添加一个商品成功!");
}
//删除一类商品(指定数量)
public void removeProducts(Product product,Integer deletenum){
if (!cars.containsKey(product)){
System.out.println("您要删除的商品不存在!");
return;
}
//获取这个商品此时的数量 要删除的数量不能大于这个数量
int productNum = cars.get(product);
if (deletenum>productNum){
System.out.println("删除的商品数量不能大于已有的数量!");
return;
}
//更新key,重复 value覆盖
int afterDelete = productNum - deletenum;
//判断删除的数量是否的存在的数量相等 如果相等 则应连同商品删除
if (productNum == deletenum){
cars.remove(product);
System.out.println("删除商品成功!");
}else {
cars.put(product,afterDelete);
System.out.println("删除商品成功!");
}
//删去对应的价格
double price = (product.getPrice()) * deletenum;
totalPrice = totalPrice - price;
}
//清空购物车
public void clearShoppingCar(){
if (cars.size()<=0){
System.out.println("购物车还没有商品"+"\n");
return;
}
cars.clear();
totalPrice = 0.0;
System.out.println("清空购物车成功!");
}
//结账
public void checkOut(){
if (cars.size()<=0){
System.out.println("购物车还没有商品"+"\n");
return;
}else {
System.out.println("\t\t购物详单"+"\n");
System.out.println("==============================================================\n");
for (Map.Entry<Product,Integer> me : cars.entrySet()){
int num = me.getValue();
Product product = me.getKey();
int pid = product.getId();
String pname = product.getName();
double price = product.getPrice();
System.out.println("商品编号:"+pid+" 商品名称:"+pname+" 商品单价:"+price+" 商品数量:"+num+"\n");
}
System.out.println("==============================================================\n");
System.out.println("总价:"+totalPrice+"\n");
System.out.println("祝您购物愉快,欢迎下次光临!");
clearShoppingCar();
}
}
//查看购物车
public void lookCart(){
if (cars.size()<=0){
System.out.println("购物车里没有商品"+"\n");
return;
}else {
System.out.println("您的购物车"+"\n\n");
for (Map.Entry<Product,Integer> me : cars.entrySet()){
int num = me.getValue();
Product product = me.getKey();
int pid = product.getId();
String pname = product.getName();
double price = product.getPrice();
System.out.println("商品编号:"+pid+" 商品名称:"+pname+" 商品单价:"+price+" 商品数量:"+num+"\n");
}
}
}
}
总结
购物车的应用是我和小伙伴写的第一个程序,因此大部分是在模仿,代码层面第一次接触hashMap类,其中的大部分方法还是容易忘记,以及在Object中的默认方法是我们今后学习需要特别注意的地方。
最后感谢DanceDonkey博主的代码参考。