zoukankan      html  css  js  c++  java
  • 购物车程序的面向对象设计

    0. 人员分工

    任务 姓名
    编码规范、前期调查与功能设计、面向对象设计 余智康
    代码检查,功能矫正,博客制作 喻文康

    1. 前期调查

    根据在京东商城的体验和调查,列出个人观点:商品应有对应的全部商品的列表或清单,供顾客挑选
    以及记录商品剩余量(即确认是否缺货),购物车用于存放用户选择的所有商品信息,包含商品名称
    数量价格(单类商品价格和购物车所有商品总价格)等等。

    2. 系统功能结构图

    系统结构及功能脑图描述

    3. 系统描述


    4. UML类图



    5. 项目包结构与关键代码

    系统菜单:

    package Page;
    import java.util.Scanner;
    
    import Item.ItemsList;
    import Item.ShopCart;
    
    public class Menu {
    	public static void begin(ItemsList itemsList, ShopCart cart) {		
    		Scanner sc = new Scanner(System.in);
    		
    		while(true) {
    			System.out.println("欢迎使用购物车系统(0.1版)!");
    			System.out.println("-----1.进入商品选购页面------");
    			System.out.println("-----2.进入“购物车”页面------");
    			System.out.println("-----3.退出-----------------");
    			System.out.print("请输入你的选择(1或2或3): ");
    			String chose = sc.next();
    			switch (chose) {
    			case "1":
    				SelectPage.shopWindow(itemsList, cart);
    				break;
    
    			case "2":
    				CartPage.cartWindow(itemsList, cart);
    				break;
    			
    			case "3":
    				sc.close();
    				System.out.println("欢迎下次再来!");
    				System.exit(0);
    				break;
    				
    			default:
    				System.out.println("
    输出错了!请输入数字 1 或 2 或 3");
    				System.out.print("请输入你的选择(1或2或3): ");
    				break;
    			}
    		}
    	}
    }
    
    

    购物车:

    package Item;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class ShopCart {
    	Map<Integer,Integer> shopCart = new HashMap<Integer, Integer>();	
    	List<Integer> itemsShop = new ArrayList<>();
    	
    	public int getNumber(int id) {
    		return shopCart.get(id);
    	}
    	
    	public int calculatePrice(ItemsList itemsList) {
    		int sum = 0;
    		for(int i=0; i<itemsShop.size(); i++) {
    			int id = itemsShop.get(i);
    			sum += shopCart.get(id) *  itemsList.getPrice(id);
    		}
    		return sum;
    	}
    	
    	public void putItems(int id, int number, ItemsList itemsList) {
    		if(itemsShop.contains(id)) {	//存在 数量增加
    			int old = shopCart.get(id);
    			shopCart.put(id, old+number);
    		}
    		else {		
    			itemsShop.add(id);
    			shopCart.put(id, number);
    		}
    		
    		int stock = itemsList.getStoke(id) - number;
    		itemsList.setStoke(id, stock);
    	}
    	
    	//扩展:可以在购物车里面没有东西的时候,输出“购物车是空的,快去选择心仪的物品吧!”之类的。实现进一步的交互
    	public void showCart(ItemsList itemsList) {
    		System.out.println("       商品ID       商品名称            单价           个数");
    		for(int i=0; i<itemsShop.size(); i++) {
    			int id = itemsShop.get(i);
    			System.out.printf("%12d %12s %12s元 %12s个
    ", id, itemsList.getName(id), itemsList.getPrice(id), shopCart.get(id));
    		}
    	}
    }
    

    商品选择功能:

    package Page;
    import java.util.Scanner;
    
    import Item.Items;
    import Item.ItemsList;
    import Item.Protect;
    import Item.ShopCart;
    
    public class SelectPage {
    	public static void shopWindow(ItemsList itemsList, ShopCart cart) {
    		String choose = new String();
    		Scanner sc = new Scanner(System.in);
    		System.out.println("正在导入目前已有的商品信息...");
    		
    		System.out.println("导入完毕!");
    		//System.out.println("若要输入新的商品信息,请输入 Y  ;若不需要录入新的信息,请输入 N。");
    		//System.out.print("(选N选N,录入的代码还没写0.0)您的选择:");
    		//choose = sc.next();
    		choose = "N";
    		if(choose.equals("Y")) {
    			System.out.println("输入格式如:悠悠球 15 火力店 2021/10/06");
    			System.out.println("请开始输入:");
    		}
    		
    		Items item = new Items();
    		
    		choose = "N";
    		int id, number;
    		String str = new String();
    		while(!(choose.equals("Y")||(choose.equals("y")))) {
    			SelectPage.showItems(itemsList);
    			System.out.print("购物车(“ 请输入某一件商品的ID ”):");
    			
    			str = sc.next();
    			while(!Protect.isLegal(str, 0, item.getCount())) {
    				System.out.printf("
    抱歉,你输入有误,请输入范围 0 到 %d 的商品数字ID!
    ",item.getCount()-1);
    				System.out.print("购物车(“ 输入某一件商品的ID ”):");
    				str = sc.next();
    				//System.out.print(str);
    			}
    			id = Integer.parseInt(str);
    			
    			System.out.println();
    			System.out.printf("你的选择是%s,请选择想要的数量:",itemsList.getName(id));		
    			str = sc.next();
    			while(!Protect.isLegal(str, 0, itemsList.getStoke(id))) {
    				System.out.printf("
    抱歉,你输入有误,请输入范围 0 到 %d 的商品个数!
    ",itemsList.getStoke(id));
    				System.out.printf("你需要多少个%s: ",itemsList.getName(id));
    				str = sc.next();
    			}
    			number = Integer.parseInt(str);
    			
    			cart.putItems(id, number, itemsList);
    			
    			System.out.println();
    			System.out.print("
    若要展示当前购物车内的商品,请输入 Y , 否则输入其它任意键继续购物:");
    			if((choose = sc.next()).equals("Y") || choose.equals("y"))
    				cart.showCart(itemsList);
    			System.out.print("
    输入Y,则停止购物返回主菜单;否则输入任意键继续购物:");
    			choose = sc.next();
    		}	
    		System.out.println("
    欢迎下次再使用我们的购物系统!");
    		//sc.close();
    	}
    	
    	public static void showItems(ItemsList itemsList) {
    		System.out.println("接下来将展示可供选择的商品:");
    		Items item = new Items();
    		System.out.println("        商品ID       商品名称         商品价格         店铺         生产日期           库存");
    		for(int i=0; i<item.getCount(); i++) {
    			System.out.printf("%12d %12s %12s元 %12s %16s %12d
    ",i ,itemsList.getName(i), itemsList.getPrice(i), itemsList.getStore(i), itemsList.getDateMake(i), itemsList.getStoke(i));
    		}
    		System.out.println("来吧!正在进入选购操作,你将可以挑选你喜欢的商品!(注意:输入时请输入商品ID)");
    	}
    }
    

    购物车编辑页面:

    package Page;
    import java.util.Scanner;
    
    import Item.ItemsList;
    import Item.Protect;
    import Item.ShopCart;
    
    public class CartPage {
    	public static void cartWindow(ItemsList itemsList, ShopCart cart) {
    		Scanner sc = new Scanner(System.in);
    		String chose = new String();
    		String str = new String();
    		String stop = new String();
    		int id;
    		cart.showCart(itemsList);
    		
    		while(true) {
    			System.out.println("以下是对购物车商品的操作:");
    			System.out.println("----1.输入 D 进行删除购物车商品操作");
    			System.out.println("----2.输入 M 进行添加已有商品的个数");
    			System.out.println("----3.输入 C 计算购物车里全部商品总价");
    			System.out.println("----4.输入 R 返回主菜单");
    			
    			chose = sc.next();
    			switch (chose) {
    
    			case "D" :
    			case "M" :
    				String strDM = new String();
    				int change = 1;	//删除是变为 -1, 添加时为 1;
    				if(chose.equals("D")) {
    					change = -1;
    					strDM = "删除";
    				}
    				if(chose.equals("M")) {
    					change = 1;
    					strDM = "添加";
    				}
    					
    				
    				String mChose = new String();
    				mChose = "N";
    				while(!mChose.equals("Y")) {
    					cart.showCart(itemsList);
    					System.out.print("请输入要选择的商品的ID:(只能选择在购物车中出现的ID)");	
    					str = sc.next();
    					
    					while(!Protect.isLegal(str, cart)) {
    						System.out.println("你的输入有误!请输入正确的ID!(只能选择在购物车中出现的ID)");
    						System.out.print("请输入要选择的商品的ID:");
    						str = sc.next();
    					}	
    					id = Integer.parseInt(str);
    					
    					System.out.printf("要%s多少个%s呢?  ",strDM ,itemsList.getName(id)); //
    					
    					str = sc.next();					
    					if(chose.equals("M"))
    						while(!Protect.isLegal(str, itemsList.getStoke(id))) {
    							System.out.printf("你的输入有误!请输入范围从0到%d之间的数字
    ",itemsList.getStoke(id));
    							System.out.printf("请输入要添加的%s的数量:",itemsList.getName(id));
    							str = sc.next();
    						}
    					if(chose.equals("D"))
    						while(!Protect.isLegal(str, cart.getNumber(id))) {
    							System.out.printf("你的输入有误!请输入范围从0到%d之间的数字
    ",cart.getNumber(id));
    							System.out.printf("请输入要删除的%s的数量:",itemsList.getName(id));
    							str = sc.next();
    						}
    					
    					int number = Integer.parseInt(str);
    					System.out.printf("
    确定要%s%d个%s吗? ", strDM, number, itemsList.getName(id)); //库存
    					
    					System.out.printf("
    输入 Y 确定%s,其它键取消
    ",strDM);
    					
    					String flag = sc.next();
    					if(flag.equals("Y")) {	
    						cart.putItems(id, number * change, itemsList);
    						System.out.printf("%s成功!
    ", strDM);
    					}
    					else {
    						System.out.printf("%s失败!
    ", strDM);
    					}		
    					
    					System.out.printf("输入 Y 确定结束%s,其它键继续操作!
    ",strDM);
    					mChose = sc.next();
    				}		
    				break;
    				
    			case "C":
    				System.out.printf("
    你的购物车里所有商品的总价为 %d元 
    ", cart.calculatePrice(itemsList));
    				System.out.println("输入任意键继续!");
    				stop = sc.next();
    				break;
    				
    			case "R":
    				return;
    				
    			default:
    				System.out.println("
    输出错了!请输入字符 D 或 M 或 C 或 R");
    				System.out.print("请输入你的选择: ");
    				break;
    			}
    		}
    	}
    }
    

    输入合法检测功能:

    package Item;
    
    public class Protect {
    	private static boolean isDigit(String str){
    		char[] cList = str.toCharArray();
    		for (char c : cList) {
    			if(!Character.isDigit(c)) {
    				return false;
    			}
    		}
    		return true;
    	}
    	
    	private static boolean isExtent(int low, int high, int number) {
    		if(number > high)
    			return false;
    		if(number < low)
    			return false;
    		
    		return true;
    	}
    	
    	//输入str,检查是否合法
    	public static boolean isLegal(String str, int low, int high) {
    		if(!Protect.isDigit(str)) 
    			return false;
    		
    		Integer number = Integer.parseInt(str);
    		if(!Protect.isExtent( low, high, number))
    			return false;
    			
    		return true;
    	}
    	
    	public static boolean isLegal(String str, ShopCart cart) {	//判断ID是否存在在购物车中
    		if(!Protect.isDigit(str))
    			return false;
    		
    		for(int i=0; i<cart.itemsShop.size(); i++) {
    			int id = cart.itemsShop.get(i);
    			if(Integer.parseInt(str) == id)
    				return true;
    		}
    		return false;
    	}
    	
    	public static boolean isLegal(String str, int stock) {
    		if(!Protect.isDigit(str))
    			return false;
    		
    		if(Integer.parseInt(str) > stock)
    			return false;
    		
    		return true;
    	}
    }
    
  • 相关阅读:
    Hanoi塔
    采药
    进制转换(大数)
    Load Balancing with NGINX 负载均衡算法
    upstream模块实现反向代理的功能
    epoll
    在nginx启动后,如果我们要操作nginx,要怎么做呢 别增加无谓的上下文切换 异步非阻塞的方式来处理请求 worker的个数为cpu的核数 红黑树
    粘性会话 session affinity sticky session requests from the same client to be passed to the same server in a group of servers
    负载均衡 4层协议 7层协议
    A Secure Cookie Protocol 安全cookie协议 配置服务器Cookie
  • 原文地址:https://www.cnblogs.com/ywk2002/p/15376990.html
Copyright © 2011-2022 走看看