Advertisement
dzocesrce

[NP] Domino's Prilep

Apr 29th, 2025
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.09 KB | None | 0 0
  1. class Pizza {
  2.     String pizzaName;
  3.     double price;
  4.  
  5.     public Pizza(String pizzaName, float price) {
  6.         this.pizzaName = pizzaName;
  7.         this.price = price;
  8.     }
  9.  
  10.     public String getPizzaName() {
  11.         return pizzaName;
  12.     }
  13.  
  14.     public double getPrice() {
  15.         return price;
  16.     }
  17. }
  18.  
  19. class PizzaApp {
  20.     Map<String,User> users;
  21.     Map<String,Pizza> pizzas;
  22.     Map<String, Double> pizzasByRevenue;
  23.     Map<String,Map<User,Integer>> mostOrderedByUser;
  24.  
  25.     public PizzaApp() {
  26.         this.users = new LinkedHashMap<>();
  27.         this.pizzas = new LinkedHashMap<>();
  28.         this.pizzasByRevenue = new LinkedHashMap<>();
  29.         this.mostOrderedByUser = new LinkedHashMap<>();
  30.     }
  31.  
  32.     public void registerUser(String email, String name, String phone) throws UserAlreadyExistsException {
  33.         if(users.containsKey(email)) {
  34.             throw new UserAlreadyExistsException(email);
  35.         }
  36.         users.putIfAbsent(email,new User(email,name,phone));
  37.     }
  38.  
  39.     public void makeOrder(String email, String pizzaName, float price) {
  40.         pizzas.putIfAbsent(pizzaName,new Pizza(pizzaName,price));
  41.         pizzasByRevenue.putIfAbsent(pizzaName,0.0);
  42.         pizzasByRevenue.computeIfPresent(pizzaName,(k,v)->v+price);
  43.         mostOrderedByUser.putIfAbsent(pizzaName,new HashMap<>());
  44.         mostOrderedByUser.get(pizzaName).putIfAbsent(users.get(email),0);
  45.         mostOrderedByUser.get(pizzaName).computeIfPresent(users.get(email),(k,v)->v=v+1);
  46.     }
  47.  
  48.     public void printRevenueByPizza() {
  49.         pizzasByRevenue.entrySet().stream().sorted(Comparator.comparing((Map.Entry<String, Double> entry) ->
  50.                                 entry.getValue(),Comparator.reverseOrder())
  51.                         .thenComparing(entry->entry.getKey(),Comparator.naturalOrder()))
  52.                 .forEach(i-> System.out.println(String.format("%s %.2f",i.getKey(),i.getValue())));
  53.     }
  54.  
  55.     public void printMostFrequentForPizza() {
  56.         for(Map.Entry<String,Map<User,Integer>> mostOrderedByUser : mostOrderedByUser.entrySet()) {
  57.             System.out.println(String.format("Pizza: %s",mostOrderedByUser.getKey()));
  58.             int maxOrdersForPizza = mostOrderedByUser.getValue().values().stream().max(Comparator.naturalOrder()).orElse(0);
  59.             mostOrderedByUser.getValue().entrySet().stream()
  60.                     .sorted(Comparator.comparing((Map.Entry<User, Integer> entry) ->
  61.                             entry.getKey().id,Comparator.reverseOrder()))
  62.                     .filter(i->i.getValue()==maxOrdersForPizza)
  63.                     .forEach(i-> System.out.println(String.format("%d %s %d",i.getKey().id,i.getKey().email,i.getValue())));
  64.         }
  65.  
  66.     }
  67. }
  68.  
  69. class User {
  70.     String email;
  71.     String name;
  72.     String phone;
  73.     int id;
  74.     public static int ID_GENERATOR = 0;
  75.     public User(String email, String name, String phone) {
  76.         this.email = email;
  77.         this.name = name;
  78.         this.phone = phone;
  79.         ID_GENERATOR++;
  80.         this.id = ID_GENERATOR;
  81.     }
  82.  
  83.     public String getEmail() {
  84.         return email;
  85.     }
  86.  
  87.     public String getName() {
  88.         return name;
  89.     }
  90.  
  91.     public String getPhone() {
  92.         return phone;
  93.     }
  94.  
  95.     public int getId() {
  96.         return id;
  97.     }
  98.  
  99.     @Override
  100.     public String toString() {
  101.         return "User{" +
  102.                 "email='" + email + '\'' +
  103.                 ", name='" + name + '\'' +
  104.                 ", phone='" + phone + '\'' +
  105.                 ", id=" + id +
  106.                 '}';
  107.     }
  108. }
  109.  
  110. public class PizzaAppTest {
  111.     public static void main(String[] args) {
  112.         Scanner sc = new Scanner(System.in);
  113.  
  114.         PizzaApp pizzaApp = new PizzaApp();
  115.         while (sc.hasNextLine()) {
  116.  
  117.  
  118.             String line = sc.nextLine();
  119.             String[] parts = line.split("\\s+");
  120.  
  121.             String method = parts[0];
  122.  
  123.             if (method.equalsIgnoreCase("registerUser")) {
  124.                 String email = parts[1];
  125.                 String name = parts[2];
  126.                 String phone = parts[3];
  127.                 try {
  128.                     pizzaApp.registerUser(email, name, phone);
  129.                 } catch (UserAlreadyExistsException e) {
  130.                     System.out.println(e.getMessage());
  131.                 }
  132.             } else if (method.equalsIgnoreCase("makeOrder")) {
  133.                 String email = parts[1];
  134.                 String pizzaName = parts[2];
  135.                 float price = Float.parseFloat(parts[3]);
  136.                 pizzaApp.makeOrder(email, pizzaName, price);
  137.             } else if (method.equalsIgnoreCase("printRevenueByPizza")) {
  138.                 System.out.println("Print revenue by pizza");
  139.                 pizzaApp.printRevenueByPizza();
  140.             } else {
  141.                 System.out.println("Print most frequent user(s) by pizza");
  142.                 pizzaApp.printMostFrequentForPizza();
  143.             }
  144.  
  145.         }
  146.     }
  147. }
  148.  
  149. class UserAlreadyExistsException extends Exception {
  150.     public UserAlreadyExistsException(String email) {
  151.         super(String.format("User with email %s already exists", email));
  152.     }
  153. }
  154.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement