欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > > 文章正文

javase实现购物车功能,javase实现购物车

来源: javaer 分享于  点击 723 次 点评:67

javase实现购物车功能,javase实现购物车


一、主类

package com.tlstudio.shopping.map.price;
import java.util.*;
/**
 * @类名 购物系统(主类)
 * @功能 程序的入口
 */
public class ShopingSystem {
	public static void main(String[] args) {
		if (login()) {// 登陆
			shopping();// 购物
		} else {// 登陆失败,退出系统
			System.exit(0);
		}
	}
	/**
	 * @function 购物
	 */
	public static void shopping() {
		Storage storage = new Storage();// 实例化仓库对象
		storage.showGoods();// 首次 显示商品信息
		ShoppingCart shoppingCart = new ShoppingCart(storage);// 实例化购物车对象,将购物车与仓库对接
		while (true) {// 除非选择了退出系统,否则可重复操作里面的功能
			shoppingCart.showFunction();// 显示可选功能界面
			Scanner scn = new Scanner(System.in);
			System.out.print("请输入:");
			int function = 0;
			try {
				function = scn.nextInt();// 获取用户输入的功能(序号)
			} catch (InputMismatchException e) {
				System.out.println("您的输入不合法,必须是1-7的数字哦");
				continue;
			}
			switch (function) {
			case 1:
				if (shoppingCart.addGoods()) {// 调用购物车的添加商品到购物车的方法,返回是否成功
					System.out.println("商品添加成功");
				} else {
					System.out.println("商品添加失败!");
				}
				break;
			case 2:
				if (shoppingCart.alterGoodsNum()) {// 调用购物车的修改购物车中商品数量的方法,返回是否成功
					System.out.println("修改商品数量成功");
				} else {
					System.out.println("修改商品数量失败");
				}
				break;
			case 3:
				if (shoppingCart.removeGoods()) {// 调用购物车的删除购物车中商品的方法,返回是否成功
					System.out.println("删除购物车中的商品成功");
				} else {
					System.out.println("删除购物车中的商品失败");
				}
				break;
			case 4:
				shoppingCart.showGoods();// 调用购物车的显示购物车中商品的方法
				break;
			case 5:
				storage.showGoods();// 调用仓库中显示仓库中商品信息的方法
				break;
			case 6:
				shoppingCart.accountAll();// 结账
				break;
			case 7:
				System.out.println("您选择了退出系统,欢迎您下次光临");
				System.exit(0);
				break;
			default:
				System.out.println("您的输入有误,没有该功能,请重新选择【序号只有  1-7】");
				break;
			}
		}
	}
	/**
	 * @function 用户登录——系统拥有的判断登陆功能
	 * 
	 * @return 是否登陆成功(true,false)
	 */
	public static boolean login() {
		System.out.println("*****************************************");
		System.out.println("*\t\t用户登录\t\t\t*");
		System.out.println("*****************************************");
		int count = 3;// 有三次输错的机会
		String input_userName = "";// 用户输入的用户名
		String input_pwd = "";// 用户输入的密码
		Scanner scn = new Scanner(System.in);
		while (true) {
			System.out.print("请输入用户名:");
			input_userName = scn.next();// 获取用户输入的用户名
			System.out.print("请输入密    码:");
			input_pwd = scn.next();// 获取用户输入的密码
			Users users = new Users(input_userName, input_pwd);// 声明一个用户类
			if (users.checkedUser()) {// 判断用户名和密码是否存在
				System.out.println("登陆成功!欢迎您  " + users.getUserName());
				return true;
			} else {
				count--;// 输错一次,可输入次数减一
				if (count > 0) {
					System.out.println("用户名或密码错误,请重来(您还有次 " + count + " 机会)");
					continue;
				} else {// 次数用完,冻结账户
					System.out.println("三次机会已用完,您的账户已冻结,请与管理员联系!");
					return false;
				}
			}
		}
	}
}

二、用户类

package com.tlstudio.shopping.map.price;
/**
 * 
 * @类名 用户类
 * @功能 用于登陆到系统的凭证,可以检查用户名和密码是否合法
 * @属性 userName(用户名),pwd(密码)
 * @方法 checkedUser()用于检查用户名密码是否合法
 * @author HDL
 */
class Users {
	private String userName;// 用户名
	private String pwd;// 密码
	// 封装属性——属性的get set方法
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	// 构造方法
	public Users() {
	}
	public Users(String userName, String pwd) {
		this.userName = userName;
		this.pwd = pwd;
	}
	/**
	 * @function 判断用户是否合法
	 * @return 是否存在该用户(true,false)
	 */
	public boolean checkedUser() {
		if ("123".equals(userName) && "132".equals(pwd)) {
			return true;
		}
		return false;
	}
}

三、仓库类

package com.tlstudio.shopping.map.price;
import java.util.*;
/**
 * 
 * @类名 仓库类
 * @function 用于存放未出售的商品的地方
 * @属性 goods_map
 * @方法 checkedGIDNum() alertGoodsNum() getGoods() showGoods()
 * @author HDL
 */
public class Storage {
	private static Map<String, Goods> goods_map = new HashMap<String, Goods>();// 仓库中的商品列表(用于存放商品)
	static {
		addGoods(new Goods("WD8720D", "美特斯邦威T恤", 100, 110));
		addGoods(new Goods("MK8287V", "太阳雨男士T恤", 100, 200));
		addGoods(new Goods("TC9927K", "纯棉高领潮男衣", 100, 50));
		addGoods(new Goods("BMG228S", "蝙蝠侠情侣套装", 100, 80));
		addGoods(new Goods("JKW832A", "胖子男孩休闲衣", 100, 88));
		addGoods(new Goods("RH2987V", "胖人服饰显瘦衣", 100, 400));
		addGoods(new Goods("OSP387L", "紫烟格圆领短袖", 100, 298));
		addGoods(new Goods("PL2988S", "喇叭袖藏青色衣", 100, 300));
		addGoods(new Goods("BM2987U", "半袖纯棉休闲衣", 100, 20));
		addGoods(new Goods("KOG887W", "街舞鬼步舞T恤", 100, 70));
	}
	/**
	 * @function 获取商品列表
	 * @return 商品列表
	 */
	public Map<String, Goods> getGoods_map() {
		return goods_map;
	}
	/**
	 * @function 设置商品列表
	 * @param goods_map
	 */
	@SuppressWarnings("static-access")
	public void setGoods_map(Map<String, Goods> goods_map) {
		this.goods_map = goods_map;
	}
	public Storage() {
	}
	/**
	 * @function 添加商品——入库的时候使用
	 * 
	 * @param goods
	 *            需要添加的商品
	 */
	public static void addGoods(Goods goods) {
		goods_map.put(goods.getgId(), goods);
	}
	/**
	 * @function 显示仓库中的商品
	 */
	public void showGoods() {
		int count = 0;
		int sum = 0;
		System.out.println("***************显示货存商品信息****************");
		System.out
				.println("-----------------------------------------------------------------");
		System.out.println("商品编号\t|\t商品名\t\t|\t库存\t|\t价格\t|");
		System.out
				.println("-----------------------------------------------------------------");
		Set<Map.Entry<String, Goods>> goods_sets = goods_map.entrySet();
		for (Map.Entry<String, Goods> goods_entry : goods_sets) {
			Goods goods = goods_entry.getValue();
			System.out.println(goods_entry.getKey() + "\t|\t"
					+ goods.getgName() + "\t|\t" + goods.getNum() + "\t|\t"
					+ goods.getPrice() + "\t|");
			count += goods.getNum();
			sum += goods.getPrice() * goods.getNum();
		}
		System.out
				.println("-----------------------------------------------------------------");
		System.out
				.println("\t\t\t\t\t还有 " + count + " 件商品,总价值 " + sum + "元\t|");
		System.out
				.println("-----------------------------------------------------------------");
	}
	/**
	 * @function 判断是否存在商品编号和数量
	 * @param input_gId
	 *            用户输入的商品编号
	 * @param input_num
	 *            用户输入的数量
	 * @return 是否添加成功(true,false)
	 */
	public boolean checkedGIDNum(String input_gId, int input_num) {
		Goods goods = goods_map.get(input_gId);
		if (goods != null && input_num <= goods.getNum() && input_num > 0) {
			return true;
		} else {
			System.out.println("找不到商品编号或数量不够");
		}
		return false;
	}
	/**
	 * @function 获取商品——出库的时候使用
	 * @param input_gId
	 *            用户输入的商品编号
	 * @param input_num
	 *            用户输入的商品数量
	 * @return 商品对象
	 */
	public Goods getGoods(String input_gId, int input_num) {
		Goods goods = goods_map.get(input_gId);
		if (goods != null && goods.getNum() >= input_num && input_num > 0) {
			goods.setNum(goods.getNum() - input_num);
			return new Goods(input_gId, goods.getgName(), input_num,
					goods.getPrice());
		}
		return null;
	}
}

四、购物车类


package com.tlstudio.shopping.map.price;
import java.util.*;
/**
 * 
 * @类名 购物车类
 * @功能 用户存放用户购买的商品的“地方”,可以增删查改商品的功能
 * @属性 goods_map,storage,input_gId,input_num
 * @方法 alterGoodsNum() addGoods() removeGoods() checkedGIDNum() showGoods()
 *     showFunction()
 * @author HDL
 */
public class ShoppingCart {
	private Map<String, Goods> goods_map;// 购物车中商品列表对象
	private Storage storage;// 对接仓库对象
	private String input_gId = "";// 声明一个用户输入的商品编号
	private int input_num = 0;// 声明一个用户输入的商品数量
	public ShoppingCart() {// 初始化商品列表对象和键盘录入对象
		goods_map = new HashMap<String, Goods>();
	}
	public ShoppingCart(Storage storage) {
		this();// 调用无参构造方法
		this.storage = storage;// 关联仓库对象
	}
	/**
	 * @function 显示仓库中的商品
	 */
	public void showGoods() {
		if (goods_map.size() != 0) {
			int count = 0;
			int sum = 0;
			System.out.println("***************查询购物车中的商品***************");
			System.out
					.println("-------------------------------------------------------------------------");
			System.out.println("商品编号\t|\t商品名\t\t|\t数量\t|\t价格\t\t|");
			System.out
					.println("-------------------------------------------------------------------------");
			Set<Map.Entry<String, Goods>> goods_set = goods_map.entrySet();
			for (Map.Entry<String, Goods> goods_entry : goods_set) {
				Goods goods = goods_entry.getValue();
				System.out.println(goods_entry.getKey() + "\t|\t"
						+ goods.getgName() + "\t|\t" + goods.getNum() + "\t|"
						+ goods.getNum() + " * " + goods.getPrice() + " = "
						+ goods.getNum() * goods.getPrice() + "(元)\t|");
				count += goods.getNum();// 计件
				sum += goods.getNum() * goods.getPrice();// 计价
			}
			System.out
					.println("-------------------------------------------------------------------------");
			System.out.println("\t\t\t\t\t\t有 " + count + " 件商品,总价值 " + sum
					+ " 元\t|");
			System.out
					.println("-------------------------------------------------------------------------");
		} else {
			System.out.println("购物车中还没有任何商品,请先添加");
		}
	}
	/**
	 * @function 添加商品到购物车中
	 * 
	 * @return 是否添加成功(true,false)
	 */
	public boolean addGoods() {
		System.out.println("***************添加商品到购物车中***************");
		System.out.print("要添加商品的编号:");
		Scanner scn = new Scanner(System.in);
		input_gId = scn.next();
		// 用户输入有误就叫用户重新输入
		System.out.print("要添加商品的数量:");
		try {
			input_num = scn.nextInt();
		} catch (InputMismatchException e) {
			System.out.println("您输入的商品数量不合法,必须是数字1-100哦");
			return false;
		}
		if (storage.checkedGIDNum(input_gId, input_num)) {// 检查用户输入的商品编号和数量的合法性
			Goods goods = goods_map.get(input_gId);
			// 判断是否存在该商品
			if (goods != null) {
				// 存在 就将购物车中相应的商品数量增加input_num,仓库中的数量也相应的减少
				goods.setNum(goods.getNum() + input_num);// 增加购物车中的商品数量
				Goods goods_storage = storage.getGoods_map().get(input_gId);// 获取仓库中的商品对象
				goods_storage.setNum(goods_storage.getNum() - input_num);// 将仓库中的商品数量减少input_num
			} else {
				goods_map
						.put(input_gId, storage.getGoods(input_gId, input_num));// 没有添加过——直接添加
			}
			return true;
		}
		return false;
	}
	/**
	 * @function 显示功能界面
	 */
	public void showFunction() {
		System.out.println("*****************************************");
		System.out.println("*  请选择操作(输入序号即可)!\t\t\t*");
		System.out.println("*\t\t\t\t\t*");
		System.out.println("*  1、添加商品到购物车\t\t2、修改购物车中的商品数量\t*");
		System.out.println("*  3、从购物车中删除商品  \t4、查询购物车中的商品\t*");
		System.out.println("*  5、显示货存商品信息\t\t6、结账\t\t*");
		System.out.println("*  7、退出系统\t\t\t\t*");
		System.out.println("*****************************************");
	}
	/**
	 * @function 从购物车中删除商品
	 * 
	 * @return 是否删除成功(true,false)
	 */
	public boolean removeGoods() {
		if (goods_map.size() != 0) {// 必须要有商品存在才能继续一下面的操作
			System.out.println("***************从购物车中删除商品 ***************");
			System.out.print("要删除商品的编号:");
			Scanner scn = new Scanner(System.in);
			input_gId = scn.next();
			Goods goods = goods_map.get(input_gId);
			if (goods != null) {// 商品存在才能删除
				goods_map.remove(input_gId);
				storage.getGoods_map().get(input_gId).setNum(100);// 恢复仓库中的商品数量
				return true;
			} else {
				System.out.println("没有编号为: " + input_gId + " 的商品,请检查您的输入!");
			}
		} else {
			System.out.println("购物车中还没有任何的商品,不能删除,请先添加");
		}
		return false;
	}
	/**
	 * @function 修改购物车中的商品数量
	 * 
	 * @return 是否修改成功(true,false)
	 */
	public boolean alterGoodsNum() {
		if (goods_map.size() != 0) {// 必须要购物车中有商品的时候才能修改
			System.out.println("**************修改购物车中的商品数量**************");
			System.out.print("要修改商品的编号:");
			Scanner scn = new Scanner(System.in);// 必须要定义为局部变量,否则有异常抛出的时候,下一次输入就会出错
			input_gId = scn.next();
			System.out.print("将商品数量修改为:");
			try {
				input_num = scn.nextInt();
			} catch (InputMismatchException e) {
				System.out.println("您输入的商品数量不合法,必须是数字1-100哦");
				return false;
			}
			Goods goods = goods_map.get(input_gId);// 获取用户输入的商品
			Goods goods_storage = storage.getGoods_map().get(input_gId);// 获取用户输入的对应仓库的商品
			if (goods != null && input_num <= 100 && input_num > 0) {// 商品要存在,且输入的数量必须满足一定的条件
				goods.setNum(input_num);// 修改购物车中商品中的数量
				goods_storage.setNum(100 - input_num);// 修改仓库中商品的数量
			} else {
				System.out.println("您输入的商品编号不存在,或商品数量不够哦!");
				return false;
			}
		} else {
			System.out.println("购物车中还没有任何商品,不能修改,请先添加");
			return false;
		}
		return true;
	}
	/**
	 * @function 结账
	 */
	public void accountAll() {
		if (goods_map.size() != 0) {
			System.out.println("***************结  账***************");
			System.out.println("*\t\t\t\t*");
			int sum = 0;// 统计总价
			int count = 0;// 统计商品数量
			Set<Map.Entry<String, Goods>> goods_set = goods_map.entrySet();// 变为Set集合
			for (Map.Entry<String, Goods> goods_entry : goods_set) {
				Goods goods = goods_entry.getValue();
				sum += (goods.getNum()) * (goods.getPrice());
				count += goods.getNum();
			}
			System.out.println("*\t有 " + count + " 件商品,共花费 " + sum + " 元\t*");
			System.out.println("*\t\t\t\t*");
			System.out.println("*********************************\n");
		} else {
			System.out.println("您的购物车中还没有任何商品,还不能结账哦");
		}
	}
}

五、商品类

package com.tlstudio.shopping.map.price;
/**
 * 
 * @类名 商品类
 * @功能 用于设定商品的信息
 * @属性 gId gName num price
 * @author HDL
 */
public class Goods {
	private String gId;// 商品编号
	private String gName;// 商品名
	private int num;// 商品的数量
	private int price;//商品价格
	// 封装属性——属性的get set方法
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	public String getgId() {
		return gId;
	}
	public void setgId(String gId) {
		this.gId = gId;
	}
	public String getgName() {
		return gName;
	}
	public void setgName(String gName) {
		this.gName = gName;
	}
	// 构造方法
	public Goods() {
	}
	public Goods(String gId, String gName, int num, int price) {
		this.price = price;
		this.gId = gId;
		this.gName = gName;
		this.num = num;
	}
}

运行结果:



相关文章

    暂无相关文章

用户点评