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;
    }
    
    
    }
    

    运行结果展示






  • 相关阅读:
    bzoj 1176 cdq分治套树状数组
    Codeforces 669E cdq分治
    Codeforces 1101D 点分治
    Codeforces 1100E 拓扑排序
    Codeforces 1188D Make Equal DP
    Codeforces 1188A 构造
    Codeforces 1188B 式子转化
    Codeforces 1188C DP 鸽巢原理
    Codeforces 1179D 树形DP 斜率优化
    git commit -m "XX"报错 pre -commit hook failed (add --no-verify to bypass)问题
  • 原文地址:https://www.cnblogs.com/letmee/p/15436975.html
Copyright © 2011-2022 走看看