Java sdut acm 3869购物车

来源:互联网 发布:淘宝装修市场 编辑:程序博客网 时间:2024/05/17 20:33

题目链接:点击打开链接

购物车

Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic

Problem Description

各位亲爱的小伙伴们,大家好!

欢迎来到美美自助购物商场,首先请您帮忙建立商品信息,然后选购商品、确定数量,计算出总价格到结算中心进行结算。美美祝您购物愉快噢!

首先读取N行商品信息,每行包含:商品编号、商品名称、生产商、商品价格、库存数量;

接着输入M行购买信息:商品编号、商品数量、购买标志。

输出购物车中的商品数量T,以及T种商品的详细信息(商品编号、商品名称、生产商、商品价格、库存数量)、实际购买数量和购物车商品总价格(保留2位小数)。

美美商场友情提示:商品数量充分时,您才能购买;另外,您购物成功后,一定要记得增减商品库存数量噢!

Input

首行是商品种类的数量N;

接下来是N行的商品信息,每行商品信息为:商品编号、商品名称、生产商、商品价格、库存数量;

购物操作的次数M;

接下来是M行的商品购买操作的信息,每行购买信息为:商品编号、购买数量count(count>0)、购买标志(1--购买,购物车中该商品数量增加;2--退货,购物车中该商品数量减少,3-删除商品,删除操作时count列的值无效)。

Output

购物车中商品的数量T;

购物车中的所有商品详情,每种商品详情占一行,中间数据用1个空格符隔开。商品详情包括:商品编号、商品名称、生产商、商品价格、商品最新库存数量、已购买的商品数量。(商品价格保留2位小数),按照商品编号从小到大的顺序进行输出。若T=0,则无商品详情信息输出。

最后一行输出购物车中商品的总价格。(保留2位小数)

Example Input

51 运动鞋  Adidas  300.80   102 蓝球服  李宁    268.00    103 苹果    栖霞    5.00     5004 智能手表  苹果  4888.00   105 鼠标   罗技     120.00    5091 5 13 5 14 1 13 2 25 2 1 1 2 15 0 33 1 13 5 2

Example Output

21 运动鞋 Adidas 300.80 3 74 智能手表 苹果 4888.00 9 16993.60

Hint

1、购买商品的实际数量要小于或等于库存数量,退货时的数量要小于购物车中该商品的现有数量。

2、购买行为发生时,注意库存的变化。购买商品之后减库存,退货之后加库存。

3、购物车中某商品的实际数量为0时,就移除它。

Author

zhouxq

代码实现:

package hhh;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.List;import java.util.Scanner;import java.util.Arrays;import java.util.Set;import java.util.TreeSet;public class Main {public static void main(String[] args) {Scanner input = new Scanner(System.in);int n = input.nextInt();List<Product> productList = new ArrayList<Product>(); for(int i = 0;i < n;i++){Product product = new Product(input.nextInt(), input.next(), input.next(), input.nextDouble(), input.nextInt());productList.add(product);}Cart cart = new Cart();int m = input.nextInt();for(int i = 0;i < m;i++){int num = input.nextInt();int count = input.nextInt();int op = input.nextInt();Product product = null;//在商品中按商品编号进行查找for(Product p : productList){if(p.getNum() == num){product = p;break;}}if(op == 1){cart.addToCart(product, count);}else if(op == 2){cart.reduceFromCart(product, count);}else if(op == 3){cart.removeFromCart(product, count);}}//cart.totalPrice();cart.showCart();input.close();}}/** * 购物车类 */class Cart{HashMap<Product,Integer> goods = new HashMap<Product,Integer>();/** * 向购物车中增加商品 */public void addToCart(Product product,int count){//购买商品的实际数量要小于或等于库存数量count = (count > product.getKnum()) ? product.getKnum() : count;//1.如果购物车中存在此商品,更新其数量//否组,在购物车中增加此条商品if(goods.containsKey(product)){goods.put(product, count+goods.get(product));}else{goods.put(product, count);}//防止出现购买数量为0件的情况if(goods.get(product) == 0){goods.remove(product);}//2.修改库存数量product.setKnum(product.getKnum()-count);}/** * 退货 */public void reduceFromCart(Product product,int count){//1.若购物车中存在此物品,则进行购物车中商品货物数量的减少//否则忽略此操作if(goods.containsKey(product)){//退货时的数量要小于购物车中该商品的现有数量。count = (count > goods.get(product)) ? goods.get(product):count;goods.put(product, goods.get(product)-count);//2.若购物车中该商品的数量减为0,就从购物车中移除if(goods.get(product) == 0)goods.remove(product);//3.修改商品的库存数量,增加增加增加product.setKnum(product.getKnum()+count);}}/** * 删除此商品 */public void removeFromCart(Product product,int count){//删除操作时count列的值无效//如果购物车中存在此商品,则删除它;否则,忽略此操作if(goods.containsKey(product)){//1.必须先修改库存数量,否则此product对应的映射景不存在,出现异常product.setKnum(product.getKnum()+goods.get(product));//2.从购物车中直接删除商品goods.remove(product);}}/** * 输出购物车中的商品 */public void showCart(){//将HashMap中的数据按照商品编号排序List<Product> list = new ArrayList<Product>(goods.keySet());Collections.sort(list, new Comparator<Product>() {@Overridepublic int compare(Product arg0, Product arg1) {// TODO Auto-generated method stubint num1 = arg0.getNum();int num2 = arg1.getNum();return num1 - num2;}});System.out.println(goods.size());for(Product product:list){System.out.println(product.toString()+" "+goods.get(product));}System.out.println(String.format("%.2f", totalPrice()));}/** * 计算总价 */public double totalPrice(){double sum = 0;for(Product product:goods.keySet()){sum += product.getPrice()*goods.get(product);}return sum;}}/** * 商品类 */class Product {private int num;private String name;private String product;private double price;private int knum;public Product() {}public Product(int num, String name, String product, double price, int knum) {super();this.num = num;this.name = name;this.product = product;this.price = price;this.knum = knum;}public int getNum() {return num;}public void setNum(int num) {this.num = num;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getProduct() {return product;}public void setProduct(String product) {this.product = product;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public int getKnum() {return knum;}public void setKnum(int knum) {this.knum = knum;}public String toString(){return num+" "+name+" "+product+" "+String.format("%.2f", price)+" "+knum;}}


0 0
原创粉丝点击