Java sdut acm 3869购物车
来源:互联网 发布:淘宝装修市场 编辑:程序博客网 时间:2024/05/17 20:33
题目链接:点击打开链接
购物车
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
代码实现:
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;}}
- Java sdut acm 3869购物车
- sdut 3869 购物车
- SDUT 3869 购物车
- 购物车(java)sdut.com
- 分数四则运算(Java)acm.sdut
- Java sdut acm 2402 水杯
- 判定Java源文件名称(Java)acm.sdut
- Java sdut acm 2174 回文时间
- Java sdut acm 2562 相似三角形
- 回文时间(Java)acm.sdut
- Java sdut acm 2504 多项式求和
- Java sdut acm 2728 最佳拟合直线
- Java sdut acm 2618 手机键盘
- 时间日期格式转换(Java)acm.sdut
- 小学数学(Java)acm.sdut
- 加密术(Java)acm.sdut
- Java sdut acm 2787 加密术
- Java sdut acm 2445 小学数学
- SSL 1072——砝码称重
- 如何portingADSP中的sensor
- 程序员的故事
- 使用git码云为unity版本控制1
- hdu 1698 Just a Hook(线段树)
- Java sdut acm 3869购物车
- LightOJ-1265-Island of Survival (概率dp)
- 2017.4.21 2^k进制数 思考记录
- 对所提取的ip进行有效性检测
- 内连接(inner join)
- eclipse Java 运行环境配置之添加已安装的 JRE(Java Runtime Environment)
- textile 自定义文本格式
- Java核心技术II:为多个客户端服务
- 链表的有序集合