zoukankan      html  css  js  c++  java
  • 第1次任务:购物车程序的面向对象设计

    任务

    编码规范:使用英文对类、方法、包进行命名(查英文词典,不得出现拼音)。参考JAVA编码规范,进行类命名,方法命名、包命名,合适的缩进,有意义的变量名。见参考资料1中的1.1-1.4。
    前期调查与功能设计:调查京东商城或者亚马逊商城中的购物车,体验从搜索商品、加入购物车、操作购物车、下单全过程,思考该过程可能包含的类。演示中要求图多字少。
    面向对象设计:以面向对象的方法编写购物车代码。先设计有什么类,再考虑什么方法放到那个类中合适。初期可不用完成具体功能,只要将类名、类之间的关系、方法名设计好即可。见参考资料2、3。注意学习类与类之间的关系(先重点掌握关联关系与依赖关系)。
    PPT制作或博客制作并上台演示:演示前,请务必自己在同学面前预演一遍。
    注意:初期将重点放在面向对象设计、命名规范。

    0、人员分工

    1、前期调查


    • 以淘宝为例,搜索商品联想拯救者电脑,需要商品类Goods将其存放。
    • 可将其加入购物车,需要购物车类ShoppingCart。
    • 点开商品可显示详细属性,如商品名称,价格,库存,单价等。
    • 用户可在购物车中进行对商品进行数量增减,选择并删除商品,选择并下单商品等相关操作
    • 购物车具有计算所有商品的价格与数量的功能。

    2、系统功能结构图

    3、系统描述

    商城类:
    显示菜单,展示商城所具有的商品给用户。
    商品类:

    存储商品相关信息

    购物车类:

    添加,减少,删除购物车商品,计算购物车内商品总价格。

    4、UML图

    5、面向对象的封装性

    JAVA:面向对象的编程语言。在此购物车案例中,不同的执行对象有不同的操作要实行,因此,先将对象和方法先找出来一一对应,即将名词与动词找出来,再将名词与动词逐一对应相应的对象与方法来设计代码。这样针对不同对象设计不同的方法,更加的具有逻辑,条理更清楚,

    而对于商品类,展示商品信息,搜索商品信息,商品列表这些方法,可以设置成public属性,供其他包调用这些方法,使功能更完善。

    增加商品到购物车与获得购物车列表,设置成public属性

    6、项目包结构与关键代码

    Shopping

    商城类

    
    package shoppingcart;
    import java.util.Scanner;
    import java.util.ArrayList;
    public class Shopping {
    
    	public static void Menu(ArrayList good,ArrayList cart)
    	{
    		System.out.println("亲爱的用户,您好!欢迎来到XX商城!");
    		   System.out.println("请选择以下服务:");
    		   System.out.println("1.进入市场查看商品:");
    		   System.out.println("2.查看我的购物车:");
    		   System.out.println("3.离开商场:");
    		    Scanner stdin=new Scanner(System.in);
    		   int choice=stdin.nextInt();
    		   while(choice<=0||choice>3)
    		   {
    			   System.out.println("输入的选择有误!!请重新选择!");
    			   choice=stdin.nextInt();
    		   }
    		   switch(choice)
    		   {
    		   case 1:Market(good,cart);
    		   break;
    		   case 2:System.out.println("我的购物车:");
    		   ShoppingCart.ShowCar(cart, good);
    		   break;
    		   case 3:System.out.println("欢迎下次再来!!!");
    		   return;
    		   }
    	  }
    	public static void Market(ArrayList good,ArrayList cart)
    	{
    		System.out.println("欢迎进入商城:");
    		   for(Object goods:good)
    		   {
    			   System.out.println(goods.toString());
    		   }
    		   
    		   System.out.println("请输入你的选择:");
    		   System.out.println("1.添加商品到购物车");
    		   System.out.println("2.通过商品种类查找商品");
    		   System.out.println("3.通过商品名查找商品");
    		   System.out.println("4.通过商品编号查找商品");
    		   Scanner stdin=new Scanner(System.in);
    		   int choice=stdin.nextInt();
    		   while(choice<=0||choice>4)
    		   {
    			   System.out.println("输入的选择有误!!请重新选择!");
    			   choice=stdin.nextInt();
    		   }
    		   switch(choice)				
    		   {
    		   case 1:
    			   ShoppingCart.Add(good, cart);
    		   break;
    		   case 2:Goods.TypeToGoods(good,cart);
    		   break;
    		   case 3:Goods.NameToGoods(good,cart);
    		   break;
    		   case 4:Goods.MarkToGoods(good,cart);
    		   return;
    		   }
    	}
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		 
    		
    		 ArrayList good=new ArrayList<Goods>();
    		 ArrayList cart=new ArrayList<ShoppingCart>();
    		 Goods  goods0=new Goods("原神抱枕", "日用品", 302, 11.9, 0);// Goods(String name, String type, int num, double price)
    		 Goods  goods1=new Goods("卡通二次元水杯", "日用品", 453, 39.8, 1);
    		 Goods  goods2=new Goods("CHRISTINA小提琴", "乐器", 32, 7650, 2);
    		  Goods goods3=new Goods("德国进口嘉云糖", "食品", 554, 33.4, 3);
    		  Goods goods4=new Goods("百达翡丽腕表", "奢侈品", 23, 555006, 4);
    		  Goods goods5=new Goods("KASHAT41寸亮光单板吉他", "乐器", 344, 458, 5);
    		 
    		   good.add(goods0);
    		   good.add(goods1);
    		   good.add(goods2);
    		   good.add(goods3);
    		   good.add(goods4);
    		   good.add(goods5);
    		   Menu(good,cart);
    	}
    
    }
    
    

    Goods

    商品类

    package shoppingcart;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.Scanner;
    public class Goods {
        private String name,type;//商品名、商品种类
        private int num;//商品剩余数量
        private double price;//商品价格
        private int mark=0;//商品编号
    	public Goods(String name, String type, int num, double price,int mark) {
    		super();
    		this.name = name;
    		this.type = type;
    		this.num = num;
    		this.price = price;
    		this.mark=mark;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getType() {
    		return type;
    	}
    	public void setType(String type) {
    		this.type = type;
    	}
    	public int getNum() {
    		return num;
    	}
    	public void setNum(int num) {
    		this.num = num;
    	}
    	public double getPrice() {
    		return price;
    	}
    	public void setPrice(double price) {
    		this.price = price;
    	}
    	public int getMark() {
    		return mark;
    	}
    	public void setMark(int mark) {
    		this.mark = mark;
    	}
    	
    		@Override
    	public String toString() {
    	return "编号:"+mark+"  商品名:"+name+"  价格:"+price+"  剩余数量:"+num+"  商品种类:"+type;
    	}
    	public void Display()
    	{
    		System.out.println(this.toString());
    	}
      public static void MarkToGoods(ArrayList good,ArrayList cart)//测试正确
      {
    	  Scanner stdin=new Scanner(System.in);
    	  System.out.println("请输入所寻商品的编码:");
    	  int mark=stdin.nextInt();
    	  int bool=0;
    	  for(Object e:good)
    	  {
    		  if(((Goods)e).getMark()==mark)
    		  {
    			  bool=1;
    			  System.out.println("查找到以下结果:");
    			  System.out.println(e.toString());
    		  }
    	  }
    
    	  if(bool==0)
    	  {
    		  System.out.println("未找到相关商品!");
    	  }
    	  Choice(cart,good);
      }
      public static void NameToGoods(ArrayList good,ArrayList cart)//测试正确
      {
    	  Scanner stdin=new Scanner(System.in);
    	  System.out.println("请输入所寻商品的名字:");
    	  String name=stdin.next();
    	  int bool=0;
    	  for(Object e:good)
    	  {
    		  if(name.equals(((Goods)e).getName()))
    		  {
    			  bool=1;
    			  System.out.println("查找到以下结果:");
    			  System.out.println(e.toString());
    		  }
    	  }
    
    	  if(bool==0)
    	  {
    		  System.out.println("未找到相关商品!");
    	  }
    	  Choice(cart,good);
      }
      public static void TypeToGoods(ArrayList good,ArrayList cart)//测试正确
      
      {
    	  Scanner stdin=new Scanner(System.in);
    	  System.out.println("请输入所寻商品的种类:");
    	  String type=stdin.next();
    	  int bool=0;
    	  for(Object e:good)
    	  {
    		  if(type.equals(((Goods)e).getType()))
    		  {
    			  bool=1;
    			  System.out.println("查找到以下结果:");
    			  System.out.println(e.toString());
    		  }
    	  }
    	  //使用下方注释掉的代码,输出的总是所查找的商品的下一个商品
    //	  Iterator<Goods>it=good.iterator();
    //	  while(it.hasNext())
    //	  {
    //		  if(type.equals(((Goods)(it.next())).getType()))
    //		  {
    //			  bool=1;
    //			  System.out.println("查找到以下结果:");
    //			  System.out.println(it.next());
    //		  }
    //	  }
    	  if(bool==0)
    	  {
    		  System.out.println("未找到相关商品!");
    	  }
    	  Choice(cart,good);
      }
     
      public static void Choice(ArrayList cart,ArrayList good)
      {
    	  System.out.println("请输入你的选择:");
    	   System.out.println("1.返回商城");
    	   System.out.println("2.返回主菜单");
    	   System.out.println("3.返回购物车");
    	   System.out.println("4.离开系统");
    	   Scanner stdin=new Scanner(System.in);
    	   int choice=stdin.nextInt();
    	   while(choice<=0||choice>4)
    	   {
    		   System.out.println("输入的选择有误!!请重新选择!");
    		   choice=stdin.nextInt();
    	   }
    	   switch(choice)
    	   {
    	   case 1:Shopping.Market(good, cart);
    	   
    	   break;
    	   case 2:Shopping.Menu(good, cart);
    	   break;
    	   case 3:ShoppingCart.ShowCar(cart, good);
    		   break;
    	   case 4:return; 
    	   }
    	  
      }
    }
    

    ShoppingCart

    购物车类

    package shoppingcart;
    import java.util.ArrayList;
    import java.util.Scanner;
    public class ShoppingCart extends Goods{
    private int count=0;//购物车内商品数量
    private int number;//商品加购的数量 
    private double total;
    
    
    public ShoppingCart(String name, String type, int num, double price, int mark, int number,double total) {
    	super(name, type, num, price, mark);
    
    	this.number = number;
        this.total=total;
    }
    
    public int getNumber() {
    	return number;
    }
    
    public void setNumber(int number) {
    	this.number = number;
    }
    
    public int getCount() {
    	return count;
    }
    public void setCount(int count) {
    	this.count = count;
    }
    public double getTotal() {
    	return total;
    }
    public void setTotal(double total) {
    	this.total = total;
    }
       public static void Delete(ArrayList good,ArrayList cart)
       {
    	   //考虑没有该商品的情况
    	   System.out.println("请输入要删除的购物车商品编号");
    	   Scanner stdin=new Scanner(System.in);
    	   int mark=stdin.nextInt();
    	  boolean bool=true;
    	  for(int i=0;i<cart.size();i++)
    	  {
    		  if(((Goods)cart.get(i)).getMark()==mark)
    		  {
    			  cart.remove(i);
    			  bool=false;
    		  }
    	  }
    	  if(bool)
    	  {
    		  System.out.println("抱歉,没有在购物车找到该商品");
    	  }
    	  else
    		  System.out.println("删除成功");
    	  ShowCar(cart,good);
       }
       public static void Add(ArrayList good,ArrayList cart)
       {
    	   //还需要考虑没有该商品的情况
    	   System.out.println("请输入要加入购物车商品编号以及所要添加的数量");
    	   Scanner stdin=new Scanner(System.in);
    	   int mark=stdin.nextInt();
    	   while(mark<=0||mark>=6)
    	   {
    		   System.out.println("商城内没有该商品。请重新选择商品!");
    		   System.out.println("请重新输入商品编号和添加数量:");
    		    mark=stdin.nextInt();
    	   }
    	   int number=stdin.nextInt();
    	  Goods id=(Goods)good.get(mark);
    //	  System.out.println("测试");
    	  ShoppingCart mycart=new ShoppingCart(id.getName(), id.getType(), id.getNum(), id.getPrice(), id.getMark(),number,number*id.getPrice());
    	 //String name, String type, int num, double price, int mark, int number
    	  int bool=0;
    //	  System.out.println("测试");
    	  for(int i=0;i<cart.size();i++)
    	  {
    		  //System.out.println("测试");
    		  if(((Goods)cart.get(i)).getMark()==mark)
    		  {
    			  bool=1;
    			  System.out.println("该商品已存在购物车,请问是否需要对该商品的数量加"+number+"!");
    			  System.out.println("1.需要 2.不需要");
    			 
    			  int choice=stdin.nextInt();
    			  while(choice<=0||choice>2)
    			   {
    				   System.out.println("输入的选择有误!!请重新选择!");
    				   choice=stdin.nextInt();
    			   }
    			  switch(choice)
    			  {
    			  case 1:
    				  //改变总数
    				  
    				  ((ShoppingCart)cart.get(i)).setNumber( ((ShoppingCart)cart.get(i)).getNumber()+number);
    				  //改变总价
    				  ((ShoppingCart)cart.get(i)).setTotal( ((ShoppingCart)cart.get(i)).getTotal()+number*((ShoppingCart)cart.get(i)).getPrice());
    				  //这边忽略了加入之后总价也要改变
    				  System.out.println("已对购物车中商品数量加"+number+"!");
    				  ShowCar(cart,good);
    				  break;
    			  case 2:
    				  System.out.println("您已取消该操作!");
    				  ShowCar(cart,good);
    				  break;
    			  }
    		  }
    	  }
    	 // System.out.println("测试");
    	  if(bool==0)
    	  {
    		  cart.add(mycart);
    		  System.out.println("添加成功!!");
    		  ShowCar(cart,good);//没有输出添加的数量
    		 
    	  }
    	  
    		  
    	  
       }
       public static void ShowCar(ArrayList cart,ArrayList good)
       {
    	   for(Object e:cart)
    	   {
    		   System.out.println(e.toString());
    	   }
    	   Choice1();
    		  Choice(cart, good);
       }
       public static void Choice1()
       {
    	   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("7.计算购物车商品总价格");
    	   System.out.println("8.离开系统");
       }
       public static void Choice(ArrayList cart,ArrayList good)
       {
    	   Scanner stdin=new Scanner(System.in);
    	   int choice=stdin.nextInt();
    	   while(choice<=0||choice>8)
    	   {
    		   System.out.println("输入的选择有误!!请重新选择!");
    		   choice=stdin.nextInt();
    	   }
    	   switch(choice)
    	   {
    	   case 1:Shopping.Market(good, cart);
    	   break;
    	   case 2:Shopping.Menu(good, cart);
    	   break;
    	   case 3:ShoppingCart.Add(good, cart);
    	   break;
    	   case 4:ShoppingCart.Delete(good, cart);
    	   break;
    	   case 5:ShoppingCart.Subtraction(cart,good);
    	   break;
    	   case 6:ShoppingCart.Addition(cart,good);
    	   break;
    	   case 7:ShoppingCart.Total(cart,good);
    	   break;
    	   case 8:return; 
    	   }
       }
       public  static void Total(ArrayList cart,ArrayList good)
       {
    	   double sum=0;
    	 for(Object e:cart)
    	 {
    		 sum+=((ShoppingCart)e).getTotal();
    	 }
    	System.out.println("购物车内商品总价为:"+sum);
    	ShowCar(cart,good);
       }
      public static void Addition(ArrayList cart,ArrayList good)//加
      {
    	  //如果购物车内没有该商品,就无法增加
    	  Scanner stdin=new Scanner(System.in);
    	  System.out.println("请输入你想要增加数量的商品编码,以及所想要增加的数量:");
    	  int mark=stdin.nextInt();
    	  int number=stdin.nextInt();
    	  int bool=0;
    	 for(Object e:cart)
    	 {
    		 if(((ShoppingCart)e).getMark()==mark)
    		 {
    			 bool=1;
    			 //这边相同,记得总价也要改变!!
    			 ((ShoppingCart)e).setNumber(((ShoppingCart)e).getNumber()+number);
    			 ((ShoppingCart)e).setTotal(((ShoppingCart)e).getTotal()+number*((ShoppingCart)e).getPrice());
    		 }
    	 }
    	 if(bool==0)
    		 {System.out.println("购物车内没有该商品,请先将该商品加入购物车");}
    	 ShowCar(cart,good);
      }
      public static void Subtraction(ArrayList cart,ArrayList good)//减
      {
    	  //
    	  int bool=0;
    	  Scanner stdin=new Scanner(System.in);
    	  System.out.println("请输入你想要减少数量的商品编码,以及所想要减少的数量:");
    	  int mark=stdin.nextInt();
    	  int number=stdin.nextInt();
    	 for(Object e:cart)
    	 {
    		 bool=1;
    		 if(((ShoppingCart)e).getMark()==mark)
    		 {
    			 if(number<=((ShoppingCart)e).getNumber())
    			 {
    				 ((ShoppingCart)e).setNumber(((ShoppingCart)e).getNumber()-number);
    				 ((ShoppingCart)e).setTotal(((ShoppingCart)e).getTotal()-number*((ShoppingCart)e).getPrice());
    				 
    			 }
    			 else
    			 { 
    				 System.out.println("减少的数量大于购物车内该商品的加购数量,是否选择直接删除?");
    				 System.out.println("1.是 2.否");
    				 
    				  int choice=stdin.nextInt();
    				  while(choice<=0||choice>2)
    				   {
    					   System.out.println("输入的选择有误!!请重新选择!");
    					   choice=stdin.nextInt();
    				   }
    				  switch(choice)
    				  {
    				  case 1:
    					  ShoppingCart.Delete(good, cart);
    					  break;
    				  case 2:
    					 System.out.println("您已取消该操作!");
    					  break;
    				  }
    			  }
    		  }
    	 }
    	 if(bool==0)
    	 {System.out.println("购物车内没有该商品,请先将该商品加入购物车");}
    	 ShowCar(cart,good);
      }
    
    @Override
    public String toString() {
    	return super.toString()+"  加购数量:"+number+"  总价:"+total;
    }
    
    
    }
    

    运行结果展示






  • 相关阅读:
    栈的概念
    什么是 JavaConfig?
    数据库连接池的原理。为什么要使用连接池。
    根据你以往的经验简单叙述一下MYSQL的优化
    动态横切
    横切技术
    什么是AOP
    BIO ,NIO ,AIO 有什么区别?
    简述Comparable和Comparator两个接口的区别
    Spring Boot 客户端?
  • 原文地址:https://www.cnblogs.com/letmee/p/15436975.html
Copyright © 2011-2022 走看看