Advertisement
popovstefan

[NP] PostOffice

Nov 14th, 2018
459
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 18.08 KB | None | 0 0
  1. Да се имплементира класа пошта PostOffice во која се чуваат името на поштата,
  2. локацијата и листа од пратки. За пратките да се имплементира апстрактна класа Package во
  3. која се чуваат информации за пратка:
  4. • name (String) за кого е наменета,
  5. • address (String) ,
  6. • trackingNumber (int) за следење, и
  7. • weight (int) изразена во грамови.
  8. Во системот постојат интернационални пратки InternationalPackage за кои дополнително
  9. се чува за кој регион се пратени (Africa, Asia, Europe или America) и локални пратки
  10. LocalPackage за кои се чува дали пратката е со приоритет или не.
  11. Цената на интернационалните пратки се наплаќа според масата и тоа по 1.5 долари за
  12. грам, а локалните пратки со приоритет се наплаќаат по 5 долари од грам, односно 3 долари за
  13. пратки без приоритет.
  14. Дополнително, постои и групна пратка GroupPackage која се состои од една или повеќе
  15. пратки од било кој тип (интернационална, локална, или групна пратка). За групните пратки
  16. треба да постои метод за додавање на нова пратка (во рамки на групната пратка). Цената на
  17. групните пратки се пресметува како сума од цените на сите пратки кои се дел од групната
  18. пратка и 2 долари како дополнителен, фиксен трошок. Тежината на групните пратки се
  19. пресметува како сума од тежините на сите пратки кои се дел од групната пратка.
  20. Во класата PostOffice да се имплементираат следниве методи:
  21. void loadPackages(Scanner scanner) – метод преку кој се внесуваат пратките во следниот
  22. формат:
  23. тип на пратка (I или L), име, адреса, број, тежина, за локалните – приоритет
  24. (boolean) а за интернационалните регион
  25. Ако запис за пратка не одговара со опишаниот формат (типот на пратката е
  26. различен од I и L, или тежината е помала односно еднаква на нула, тогаш се фрла
  27. исклучок од класата InvalidPackageException во кој се проследува невалидниот
  28. запис.
  29. boolean addPackage(Package p) – за додавање на пакет во листата со пакети.
  30. Package mostExpensive() - ја враќа најскапата пратка.
  31. void printPackages(OutputStream outputStream) – метод кој ги печати пратките според
  32. цената (од највисока кон најниска) во следен формат:
  33. L, name, address, number, weight, true/false (за приоритет – локална пратка)
  34. I, name, address, number, weight, region – интернационална пратка
  35. G, number, weight – групна пратка
  36. Пратките кои се дел од групната пратка се печатат вовлечени со едно празно место во
  37. десно.
  38.  
  39.  
  40.  
  41. Почетен код:
  42. public class PostOfficeTester {
  43.     public static void main (String [] args) {
  44.         Scanner scanner = new Scanner(System.in);
  45.         int test = Integer.parseInt(scanner.nextLine());
  46.         if(test == 1) {
  47.             //Group Package printing
  48.             System.out.println("======Packages======");
  49.             PostOffice office = new PostOffice("Poshta", "Skopje");
  50.             office.addPackage(new InternationalPackage("John_Doe", "Main_St_123", 111, 4, "America"));
  51.             GroupPackage groupPackage = new GroupPackage("John_Done", "Main_St_123", 232, 0);
  52.             groupPackage.addPackage(new LocalPackage("Jon_Snow", "The_Wall", 432, 5, true));
  53.             office.addPackage(groupPackage);
  54.             office.printPackages(System.out);
  55.         }
  56.         if(test == 2) {
  57.             //Nested Group Package printing
  58.             System.out.println("======Packages======");
  59.             PostOffice office = new PostOffice("Poshta", "Skopje");
  60.             office.addPackage(new InternationalPackage("Richard_Hendricks", "Noble_Pathway", 325, 4, "Africa"));
  61.             office.addPackage(new LocalPackage("Jalisa_Acheson", "Emerald_Harbour", 600, 14, false));
  62.  
  63.             GroupPackage groupPackage = new GroupPackage("Meagan_Schuette", "Westeros", 232, 0);
  64.             groupPackage.addPackage(new LocalPackage("Meagan_Schuette", "Westeros", 432, 5, true));
  65.             groupPackage.addPackage(new InternationalPackage("Sansa_Stark", "Westeros", 332, 3, "Asia"));
  66.  
  67.             GroupPackage nestedGroupPackage = new GroupPackage("Marline_Bohling", "Crystal_Hills", 284, 0);
  68.             nestedGroupPackage.addPackage(new InternationalPackage("Edie_Bramblett", "Lazy_Treasure", 382, 7, "Europe"));
  69.             nestedGroupPackage.addPackage(new InternationalPackage("Cassaundra_Huff", "Sleepy_Farms", 696, 1, "Asia"));
  70.             nestedGroupPackage.addPackage(new InternationalPackage("German_Sabbagh", "Tawny_Heath", 963, 12, "Africa"));
  71.  
  72.             groupPackage.addPackage(nestedGroupPackage);
  73.             office.addPackage(groupPackage);
  74.             office.addPackage(new LocalPackage("Clemmie_Reves", "Little_Cloud", 217, 5, true));
  75.             office.printPackages(System.out);
  76.         }
  77.         if(test == 3) {
  78.             //Most expensive Group Package
  79.             System.out.println("======Packages======");
  80.             PostOffice office = new PostOffice("Poshta", "Skopje");
  81.             office.addPackage(new InternationalPackage("Dohn_Joe", "Main_St_321", 444, 4, "Europe"));
  82.             GroupPackage groupPackage = new GroupPackage("John_Jon", "First_St_123", 232, 0);
  83.             groupPackage.addPackage(new LocalPackage("Jon_Snow", "Westeros", 432, 5, true));
  84.             groupPackage.addPackage(new InternationalPackage("Sansa_Stark", "Westeros", 332, 3, "Asia"));
  85.             office.addPackage(groupPackage);
  86.             office.addPackage(new LocalPackage("Littlefinger", "The_Eyrie", 987, 7, false));
  87.             office.printPackages(System.out);
  88.             System.out.println();
  89.             System.out.println("======MostExpensive======");
  90.             System.out.println(office.mostExpensive());
  91.         }
  92.         if(test == 4) {
  93.             //Most expensive Local Package
  94.             System.out.println("======Packages======");
  95.             PostOffice office = new PostOffice("Poshta", "Skopje");
  96.             office.addPackage(new InternationalPackage("Dohn_Joe", "Main_St_321", 444, 15, "Europe"));
  97.             office.addPackage(new LocalPackage("Jon_Snow", "Westeros", 432, 5, true));
  98.             office.addPackage(new InternationalPackage("Sansa_Stark", "Westeros", 332, 3, "Asia"));
  99.             office.addPackage(new LocalPackage("Littlefinger", "The_Eyrie", 987, 7, false));
  100.             office.printPackages(System.out);
  101.             System.out.println();
  102.             System.out.println("======MostExpensive======");
  103.             System.out.println(office.mostExpensive());
  104.         }
  105.         if (test == 5) {
  106.             PostOffice office = new PostOffice("Poshta", "Skopje");
  107.             office.loadPackages(scanner);
  108.             System.out.println("======Packages======");
  109.             office.printPackages(System.out);
  110.         }
  111.         scanner.close();
  112.     }
  113. }
  114.  
  115. Решение:
  116.  
  117.  
  118. package poshta;
  119.  
  120. import java.io.OutputStream;
  121. import java.io.PrintWriter;
  122. import java.util.ArrayList;
  123. import java.util.Comparator;
  124. import java.util.List;
  125. import java.util.Scanner;
  126.  
  127. public class PostOfficeTester {
  128.     public static void main (String [] args) {
  129.         Scanner scanner = new Scanner(System.in);
  130.         int test = Integer.parseInt(scanner.nextLine());
  131.         if(test == 1) {
  132.             //Group Package printing
  133.             System.out.println("======Packages======");
  134.             PostOffice office = new PostOffice("Poshta", "Skopje");
  135.             office.addPackage(new InternationalPackage("John_Doe", "Main_St_123", 111, 4, "America"));
  136.             GroupPackage groupPackage = new GroupPackage("John_Done", "Main_St_123", 232, 0);
  137.             groupPackage.addPackage(new LocalPackage("Jon_Snow", "The_Wall", 432, 5, true));
  138.             office.addPackage(groupPackage);
  139.             office.printPackages(System.out);
  140.         }
  141.         if(test == 2) {
  142.             //Nested Group Package printing
  143.             System.out.println("======Packages======");
  144.             PostOffice office = new PostOffice("Poshta", "Skopje");
  145.             office.addPackage(new InternationalPackage("Richard_Hendricks", "Noble_Pathway", 325, 4, "Africa"));
  146.             office.addPackage(new LocalPackage("Jalisa_Acheson", "Emerald_Harbour", 600, 14, false));
  147.  
  148.             GroupPackage groupPackage = new GroupPackage("Meagan_Schuette", "Westeros", 232, 0);
  149.             groupPackage.addPackage(new LocalPackage("Meagan_Schuette", "Westeros", 432, 5, true));
  150.             groupPackage.addPackage(new InternationalPackage("Sansa_Stark", "Westeros", 332, 3, "Asia"));
  151.  
  152.             GroupPackage nestedGroupPackage = new GroupPackage("Marline_Bohling", "Crystal_Hills", 284, 0);
  153.             nestedGroupPackage.addPackage(new InternationalPackage("Edie_Bramblett", "Lazy_Treasure", 382, 7, "Europe"));
  154.             nestedGroupPackage.addPackage(new InternationalPackage("Cassaundra_Huff", "Sleepy_Farms", 696, 1, "Asia"));
  155.             nestedGroupPackage.addPackage(new InternationalPackage("German_Sabbagh", "Tawny_Heath", 963, 12, "Africa"));
  156.  
  157.             groupPackage.addPackage(nestedGroupPackage);
  158.             office.addPackage(groupPackage);
  159.             office.addPackage(new LocalPackage("Clemmie_Reves", "Little_Cloud", 217, 5, true));
  160.             office.printPackages(System.out);
  161.         }
  162.         if(test == 3) {
  163.             //Most expensive Group Package
  164.             System.out.println("======Packages======");
  165.             PostOffice office = new PostOffice("Poshta", "Skopje");
  166.             office.addPackage(new InternationalPackage("Dohn_Joe", "Main_St_321", 444, 4, "Europe"));
  167.             GroupPackage groupPackage = new GroupPackage("John_Jon", "First_St_123", 232, 0);
  168.             groupPackage.addPackage(new LocalPackage("Jon_Snow", "Westeros", 432, 5, true));
  169.             groupPackage.addPackage(new InternationalPackage("Sansa_Stark", "Westeros", 332, 3, "Asia"));
  170.             office.addPackage(groupPackage);
  171.             office.addPackage(new LocalPackage("Littlefinger", "The_Eyrie", 987, 7, false));
  172.             office.printPackages(System.out);
  173.             System.out.println();
  174.             System.out.println("======MostExpensive======");
  175.             System.out.println(office.mostExpensive());
  176.         }
  177.         if(test == 4) {
  178.             //Most expensive Local Package
  179.             System.out.println("======Packages======");
  180.             PostOffice office = new PostOffice("Poshta", "Skopje");
  181.             office.addPackage(new InternationalPackage("Dohn_Joe", "Main_St_321", 444, 15, "Europe"));
  182.             office.addPackage(new LocalPackage("Jon_Snow", "Westeros", 432, 5, true));
  183.             office.addPackage(new InternationalPackage("Sansa_Stark", "Westeros", 332, 3, "Asia"));
  184.             office.addPackage(new LocalPackage("Littlefinger", "The_Eyrie", 987, 7, false));
  185.             office.printPackages(System.out);
  186.             System.out.println();
  187.             System.out.println("======MostExpensive======");
  188.             System.out.println(office.mostExpensive());
  189.         }
  190.         if (test == 5) {
  191.             PostOffice office = new PostOffice("Poshta", "Skopje");
  192.             office.loadPackages(scanner);
  193.             System.out.println("======Packages======");
  194.             office.printPackages(System.out);
  195.         }
  196.         scanner.close();
  197.     }
  198. }
  199.  
  200. class PostOffice {
  201.     String name;
  202.     String location;
  203.     List<Package> packageList;
  204.  
  205.     PostOffice (String name, String location) {
  206.         this.name = name;
  207.         this.location = location;
  208.         this.packageList = new ArrayList<>();
  209.     }
  210.  
  211.     void loadPackages(Scanner scanner) {
  212.         while (scanner.hasNext()) {
  213.             String line = scanner.nextLine();
  214.             if (line.equals("KRAJ"))
  215.                 break;
  216.             String [] parts = line.split(", ");
  217.             if (parts[0].equals("I")) {
  218.                 // International
  219.                 int weight = Integer.parseInt(parts[4]);
  220.                 if (weight <= 0)
  221.                     throw new InvalidPackageException(line);
  222.  
  223.                 this.packageList.add(new InternationalPackage(
  224.                         parts[1],
  225.                         parts[2],
  226.                         Integer.parseInt(parts[3]),
  227.                         weight,
  228.                         parts[5])
  229.                 );
  230.             }
  231.             else if (parts[0].equals("L")) {
  232.                 // Local
  233.                 int weight = Integer.parseInt(parts[4]);
  234.                 if (weight <= 0)
  235.                     throw new InvalidPackageException(line);
  236.  
  237.                 this.packageList.add(new LocalPackage(
  238.                         parts[1],
  239.                         parts[2],
  240.                         Integer.parseInt(parts[3]),
  241.                         weight,
  242.                         Boolean.parseBoolean(parts[5]))
  243.                 );
  244.             }
  245.             else
  246.                 throw new InvalidPackageException(line);
  247.         }
  248.     }
  249.  
  250.     boolean addPackage(Package p) {
  251.         return this.packageList.add(p);
  252.     }
  253.  
  254.     Package mostExpensive() {
  255.         Package mostExpensivePackage = this.packageList.get(0);
  256.         for (Package p : packageList)
  257.             if (mostExpensivePackage.getPrice() < p.getPrice())
  258.                 mostExpensivePackage = p;
  259.         return mostExpensivePackage;
  260.     }
  261.  
  262.     void printPackages(OutputStream outputStream) {
  263.         PrintWriter printWriter = new PrintWriter(outputStream);
  264.         this.packageList.sort(new Comparator<Package>() {
  265.             @Override
  266.             public int compare(Package o1, Package o2) {
  267.                 return Double.compare(o1.getPrice(), o2.getPrice());
  268.             }
  269.         });
  270.         for (Package p : packageList)
  271.             printWriter.println(p.format(""));
  272.         printWriter.flush();
  273.     }
  274. }
  275.  
  276. abstract class Package {
  277.     String name;
  278.     String address;
  279.     int trackingNumber;
  280.     int weight;
  281.  
  282.     Package (String name, String address, int trackingNumber, int weight) {
  283.         this.name = name;
  284.         this.address = address;
  285.         this.trackingNumber = trackingNumber;
  286.         this.weight = weight;
  287.     }
  288.  
  289.     abstract double getPrice();
  290.  
  291.     abstract String format(String spaces);
  292.  
  293.     abstract int getWeight();
  294.  
  295.     @Override
  296.     public String toString() {
  297.         return String.format("%s, %s, %d",
  298.                 name,
  299.                 address,
  300.                 trackingNumber);
  301.     }
  302. }
  303.  
  304. class InternationalPackage extends Package {
  305.     String region;
  306.  
  307.     InternationalPackage (String name, String address, int trackingNumber, int weight, String region) {
  308.         super(name, address, trackingNumber, weight);
  309.         this.region = region;
  310.     }
  311.  
  312.     @Override
  313.     double getPrice() {
  314.         return 1.5 * this.weight;
  315.     }
  316.  
  317.     @Override
  318.     public int getWeight() {
  319.         return this.weight;
  320.     }
  321.  
  322.     @Override
  323.     public String format(String spaces) {
  324.         return spaces + this.toString();
  325.     }
  326.  
  327.     @Override
  328.     public String toString() {
  329.         return String.format("I, %s, %s", super.toString(), this.getWeight());
  330.     }
  331. }
  332.  
  333. class LocalPackage extends Package {
  334.     boolean priority;
  335.  
  336.     LocalPackage (String name, String address, int trackingNumber, int weight, boolean priority) {
  337.         super(name, address, trackingNumber, weight);
  338.         this.priority = priority;
  339.     }
  340.  
  341.     @Override
  342.     double getPrice() {
  343.         double factor = this.priority ? 5 : 3;
  344.         return this.weight * factor;
  345.     }
  346.  
  347.     @Override
  348.     public int getWeight() {
  349.         return this.weight;
  350.     }
  351.  
  352.     @Override
  353.     public String format(String spaces) {
  354.         return spaces + this.toString();
  355.     }
  356.  
  357.     @Override
  358.     public String toString() {
  359.         return String.format("L, %s, %s", super.toString(), this.getWeight());
  360.     }
  361. }
  362.  
  363. class GroupPackage extends Package {
  364.     List<Package> packages;
  365.  
  366.     GroupPackage (String name, String address, int trackingNumber, int weight) {
  367.         super(name, address, trackingNumber, weight);
  368.         this.packages = new ArrayList<>();
  369.     }
  370.  
  371.     void addPackage(Package p) {
  372.         this.packages.add(p);
  373.     }
  374.  
  375.  
  376.     @Override
  377.     double getPrice() {
  378.         double price = 2;
  379.         for (Package p : packages)
  380.             price += p.getPrice();
  381.         return price;
  382.     }
  383.  
  384.     @Override
  385.     public int getWeight() {
  386.         int result = 0;
  387.         for (Package p : packages)
  388.             result += p.getWeight();
  389.         return result;
  390.     }
  391.  
  392.     @Override
  393.     public String format(String spaces) {
  394.         StringBuilder stringBuilder = new StringBuilder();
  395.         stringBuilder.append(spaces).append(this.toString());
  396.         for (Package p: packages)
  397.             stringBuilder.append(p.format(spaces + " ")).append("\n");
  398.         return stringBuilder.toString();
  399.     }
  400.  
  401.     @Override
  402.     public String toString() {
  403.         return String.format("G, %d, %d\n", this.trackingNumber, this.getWeight());
  404.     }
  405. }
  406.  
  407. class InvalidPackageException extends RuntimeException {
  408.     InvalidPackageException(String message) {
  409.         super(message);
  410.     }
  411. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement