Advertisement
Nikolovska

[НП] лаб3.1 Пицерија

Jun 3rd, 2018
1,093
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.02 KB | None | 0 0
  1. /*Исклучоци и File I/O (3)
  2. Пицерија Problem 1 (0 / 0)
  3. Треба да се развие систем за електронска нарачка од пицерија. Менито на пицеријата се состои од следново:
  4.  
  5. Pizza:
  6.  
  7. Standard: 10$
  8. Pepperoni: 12$
  9. Vegetarian: 8$
  10. Extra
  11.  
  12. Ketchup 3$
  13. Coke 5$
  14. За да го претставите менито, секоја ставка треба да имплементира interface Item која опишува една ставка од менито и ги
  15. дефинира следниве методи:
  16.  
  17. getPrice():int - ја дава цената за конкретната ставка
  18. Следно, дефинирајте две класи ExtraItem и PizzaItem за да може да правите разлика меѓу пици и останатите работи во
  19. нарачката. И двете класи треба да имаат еден конструктор кој прима еден String аргумент.
  20.  
  21. ExtraItem(String type) - валидни вредности за type се { "Coke", "Ketchup" }
  22. PizzaItem(String type) - валидни вредности за type се { Standard , Pepperoni , Vegetarian }
  23. Ако за type се проследи некоја невалидна вредност (која ја нема на менито) треба да се фрли исклучок
  24. InvalidExtraTypeException, односно InvalidPizzaTypeException.
  25.  
  26. Последно имплементирајте ја класата Order. Таа треба да ги нуди следните функционалности:
  27.  
  28. Order() - креира нова празна нарачка
  29. addItem(Item item, int count) - соодветната ставка се додава во нарачката (count означува колку примероци сакаме од
  30. дадената ставка). Aко count е поголем од 10 се фрла исклучок ItemOutOfStockException(item). Доколку во нарачката веќе
  31. ја има соодветната ставка Item тогаш истата се заменува со нова. Следниот код резултира со нарачка со една стандардна пица:
  32.  
  33. Order order = new Order(); order.addItem(new PizzaItem("Standard"), 2); order.addItem(new PizzaItem("Standard"), 1);
  34.  
  35. getPrice():int - ја враќа вкупната цена на нарачката
  36.  
  37. displayOrder() - ја печати содржината на нарачката со соодветни редни броеви пред секоја ставка, името, количината и
  38. збирна сума на ставката, како и вкупна сума за целата нарачка. За редниот број се резервирани 3 места порамнети во десно,
  39. за имињата на ставките се резервирани 15 места со порамнување од лево, за кардиналноста две места порамнети во десно и
  40. за цената на една ставка 5 места порамнети во десно. За "Total:" се резервирани 22 места со порамнување од лево и за
  41. вкупната цена 5 места порамнети во десно. Пример:
  42.   1.Standard       x 2   20$
  43.   2.Vegetarian     x 1    8$
  44.   3.Coke           x 3   15$
  45. Total:                   43$
  46. Редоследот по кој се печатат ставките е оној по кој тие се внесувани во нарачката. Доколку некоја ставка се внесе
  47. повторно нејзиното место не се менува.
  48.  
  49. removeItem(int idx) - се отстранува нарачката со даден индекс (сите нарачки со поголеми индекси се поместуваат во лево).
  50. Доколку не постои нарачка со таков индекс треба да се фрли исклучок ArrayIndexOutOfBоundsException(idx)
  51. lock() - ја заклучува нарачката. За да може нарачката да се заклучи треба истата да има барем една ставка, во спротивно
  52. фрлете исклучок EmptyOrderException.
  53. Откако ќе се заклучи нарачката треба веќе да не може да се менува со методите removeItem, addItem. Повикот на овие
  54. методи резултира со исклучок од типот OrderLockedException.
  55.  
  56. Sample input
  57. 0 Extra Ketchup
  58.  
  59. Sample output
  60. 3
  61. */
  62.  
  63.  
  64. import java.util.Scanner;
  65.  
  66. interface Item {
  67.     public int getPrice();
  68.     public  String getType();
  69. }
  70.  
  71. class InvalidExtraTypeException extends Exception {}
  72.  
  73. class InvalidPizzaTypeException extends Exception {}
  74.  
  75. class ItemOutOfStockException extends Exception {
  76.     public ItemOutOfStockException(Item item){
  77.         super(String.format("%s out of stock!", item));
  78.     }
  79. }
  80.  
  81. class OrderLockedException extends Exception {}
  82.  
  83. class EmptyOrder extends Exception {
  84.     public EmptyOrder(){
  85.         super("EmptyOrder");
  86.     }
  87. }
  88.  
  89.  
  90. class ExtraItem implements Item {
  91.     private String type;
  92.  
  93.     public ExtraItem(String type) throws InvalidExtraTypeException {
  94.         if (type.equals("Coke") || type.equals("Ketchup"))
  95.             this.type = type;
  96.         else throw new InvalidExtraTypeException();
  97.     }
  98.  
  99.     @Override
  100.     public String getType() {
  101.         return type;
  102.     }
  103.  
  104.     @Override
  105.     public int getPrice() {
  106.         if (type.equals("Coke"))
  107.             return 5;
  108.         return 3;
  109.     }
  110. }
  111.  
  112. class PizzaItem implements Item {
  113.     private String type;
  114.  
  115.     public PizzaItem(String type) throws InvalidPizzaTypeException{
  116.         if (type.equals("Standard") || type.equals("Pepperoni") || type.equals("Vegetarian"))
  117.             this.type = type;
  118.         else throw new InvalidPizzaTypeException();
  119.     }
  120.  
  121.     @Override
  122.     public String getType() {
  123.         return type;
  124.     }
  125.  
  126.     @Override
  127.     public int getPrice() {
  128.         if (type.equals("Standard"))
  129.             return 10;
  130.         if (type.equals("Pepperoni"))
  131.             return 12;
  132.         return 8;
  133.     }
  134. }
  135.  
  136. class Order {
  137.     private Item[] items;
  138.     private int[] counts;
  139.     private boolean isLocked;
  140.  
  141.     public Order() {
  142.         items = new Item[0];
  143.         counts = new int[0];
  144.         isLocked = false;
  145.     }
  146.  
  147.     public void addItem(Item item, int count) throws ItemOutOfStockException, OrderLockedException{
  148.         if (isLocked)
  149.             throw new OrderLockedException();
  150.         if (count > 10)
  151.             throw new ItemOutOfStockException(item);
  152.         if (alreadyInOrder(item) == -1){
  153.             Item[] tmpI = new Item[items.length+1];
  154.             int[] tmpC = new int[counts.length+1];
  155.             for (int i=0; i<items.length; i++){
  156.                 tmpC[i] = counts[i];
  157.                 tmpI[i] = items[i];
  158.             }
  159.             tmpI[items.length] = item;
  160.             tmpC[items.length] = count;
  161.             items = tmpI;
  162.             counts = tmpC;
  163.         }
  164.         else {
  165.             int index = alreadyInOrder(item);
  166.             counts[index] = count;
  167.         }
  168.  
  169.     }
  170.  
  171.     public int alreadyInOrder(Item item){
  172.         // ako vekje postoi vo narackata, vrati go indeksot, inaku vrati -1
  173.  
  174.         for (int i=0; i<items.length; i++) {
  175.             if (items[i].getType().equals(item.getType()))
  176.                 return i;
  177.         }
  178.         return -1;
  179.     }
  180.  
  181.     public int getPrice(){
  182.         int sum = 0;
  183.         for (int i=0; i<items.length; i++) {
  184.             sum += getPriceEach(i);
  185.         }
  186.         return sum;
  187.     }
  188.  
  189.     public int getPriceEach(int index){
  190.         return items[index].getPrice() * counts[index];
  191.     }
  192.  
  193.     public void displayOrder(){
  194.         StringBuilder sb = new StringBuilder();
  195.         for (int i=0; i<items.length; i++){
  196.             sb.append(String.format("%3d.%-15sx%2d%5d$\n", i+1,items[i].getType(),counts[i],getPriceEach(i)));
  197.         }
  198.         sb.append(String.format("%-22s%5d$","Total:",getPrice()));
  199.         System.out.println(sb.toString());
  200.     }
  201.  
  202.     public void removeItem(int idx) throws ArrayIndexOutOfBoundsException, OrderLockedException{
  203.         if (isLocked)
  204.             throw new OrderLockedException();
  205.         if (idx < 0 || idx >= counts.length)
  206.             throw new ArrayIndexOutOfBoundsException(idx);
  207.         Item[] tmpI = new Item[items.length-1];
  208.         int[] tmpC = new int[counts.length-1];
  209.         for (int i=0; i<idx; i++){
  210.             tmpI[i] = items[i];
  211.             tmpC[i] = counts[i];
  212.         }
  213.         for (int i=idx; i<items.length-1; i++){
  214.             tmpI[i] = items[i+1];
  215.             tmpC[i] = counts[i+1];
  216.         }
  217.         items = tmpI;
  218.         counts = tmpC;
  219.     }
  220.  
  221.     public void lock() throws EmptyOrder{
  222.         if (items.length != 0)
  223.             isLocked = true;
  224.         else throw new EmptyOrder();
  225.     }
  226. }
  227.  
  228.  
  229.  
  230. public class PizzaOrderTest {
  231.  
  232.     public static void main(String[] args) {
  233.         Scanner jin = new Scanner(System.in);
  234.         int k = jin.nextInt();
  235.         if (k == 0) { //test Item
  236.             try {
  237.                 String type = jin.next();
  238.                 String name = jin.next();
  239.                 Item item = null;
  240.                 if (type.equals("Pizza")) item = new PizzaItem(name);
  241.                 else item = new ExtraItem(name);
  242.                 System.out.println(item.getPrice());
  243.             } catch (Exception e) {
  244.                 System.out.println(e.getClass().getSimpleName());
  245.             }
  246.         }
  247.         if (k == 1) { // test simple order
  248.             Order order = new Order();
  249.             while (true) {
  250.                 try {
  251.                     String type = jin.next();
  252.                     String name = jin.next();
  253.                     Item item = null;
  254.                     if (type.equals("Pizza")) item = new PizzaItem(name);
  255.                     else item = new ExtraItem(name);
  256.                     if (!jin.hasNextInt()) break;
  257.                     order.addItem(item, jin.nextInt());
  258.                 } catch (Exception e) {
  259.                     System.out.println(e.getClass().getSimpleName());
  260.                 }
  261.             }
  262.             jin.next();
  263.             System.out.println(order.getPrice());
  264.             order.displayOrder();
  265.             while (true) {
  266.                 try {
  267.                     String type = jin.next();
  268.                     String name = jin.next();
  269.                     Item item = null;
  270.                     if (type.equals("Pizza")) item = new PizzaItem(name);
  271.                     else item = new ExtraItem(name);
  272.                     if (!jin.hasNextInt()) break;
  273.                     order.addItem(item, jin.nextInt());
  274.                 } catch (Exception e) {
  275.                     System.out.println(e.getClass().getSimpleName());
  276.                 }
  277.             }
  278.             System.out.println(order.getPrice());
  279.             order.displayOrder();
  280.         }
  281.         if (k == 2) { // test order with removing
  282.             Order order = new Order();
  283.             while (true) {
  284.                 try {
  285.                     String type = jin.next();
  286.                     String name = jin.next();
  287.                     Item item = null;
  288.                     if (type.equals("Pizza")) item = new PizzaItem(name);
  289.                     else item = new ExtraItem(name);
  290.                     if (!jin.hasNextInt()) break;
  291.                     order.addItem(item, jin.nextInt());
  292.                 } catch (Exception e) {
  293.                     System.out.println(e.getClass().getSimpleName());
  294.                 }
  295.             }
  296.             jin.next();
  297.             System.out.println(order.getPrice());
  298.             order.displayOrder();
  299.             while (jin.hasNextInt()) {
  300.                 try {
  301.                     int idx = jin.nextInt();
  302.                     order.removeItem(idx);
  303.                 } catch (Exception e) {
  304.                     System.out.println(e.getClass().getSimpleName());
  305.                 }
  306.             }
  307.             System.out.println(order.getPrice());
  308.             order.displayOrder();
  309.         }
  310.         if (k == 3) { //test locking & exceptions
  311.             Order order = new Order();
  312.             try {
  313.                 order.lock();
  314.             } catch (Exception e) {
  315.                 System.out.println(e.getClass().getSimpleName());
  316.             }
  317.             try {
  318.                 order.addItem(new ExtraItem("Coke"), 1);
  319.             } catch (Exception e) {
  320.                 System.out.println(e.getClass().getSimpleName());
  321.             }
  322.             try {
  323.                 order.lock();
  324.             } catch (Exception e) {
  325.                 System.out.println(e.getClass().getSimpleName());
  326.             }
  327.             try {
  328.                 order.removeItem(0);
  329.             } catch (Exception e) {
  330.                 System.out.println(e.getClass().getSimpleName());
  331.             }
  332.         }
  333.     }
  334.  
  335. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement