Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Да се имплементира класа пошта PostOffice во која се чуваат името на поштата,
- локацијата и листа од пратки. За пратките да се имплементира апстрактна класа Package во
- која се чуваат информации за пратка:
- • name (String) за кого е наменета,
- • address (String) ,
- • trackingNumber (int) за следење, и
- • weight (int) изразена во грамови.
- Во системот постојат интернационални пратки InternationalPackage за кои дополнително
- се чува за кој регион се пратени (Africa, Asia, Europe или America) и локални пратки
- LocalPackage за кои се чува дали пратката е со приоритет или не.
- Цената на интернационалните пратки се наплаќа според масата и тоа по 1.5 долари за
- грам, а локалните пратки со приоритет се наплаќаат по 5 долари од грам, односно 3 долари за
- пратки без приоритет.
- Дополнително, постои и групна пратка GroupPackage која се состои од една или повеќе
- пратки од било кој тип (интернационална, локална, или групна пратка). За групните пратки
- треба да постои метод за додавање на нова пратка (во рамки на групната пратка). Цената на
- групните пратки се пресметува како сума од цените на сите пратки кои се дел од групната
- пратка и 2 долари како дополнителен, фиксен трошок. Тежината на групните пратки се
- пресметува како сума од тежините на сите пратки кои се дел од групната пратка.
- Во класата PostOffice да се имплементираат следниве методи:
- • void loadPackages(Scanner scanner) – метод преку кој се внесуваат пратките во следниот
- формат:
- тип на пратка (I или L), име, адреса, број, тежина, за локалните – приоритет
- (boolean) а за интернационалните регион
- Ако запис за пратка не одговара со опишаниот формат (типот на пратката е
- различен од I и L, или тежината е помала односно еднаква на нула, тогаш се фрла
- исклучок од класата InvalidPackageException во кој се проследува невалидниот
- запис.
- • boolean addPackage(Package p) – за додавање на пакет во листата со пакети.
- • Package mostExpensive() - ја враќа најскапата пратка.
- • void printPackages(OutputStream outputStream) – метод кој ги печати пратките според
- цената (од највисока кон најниска) во следен формат:
- L, name, address, number, weight, true/false (за приоритет – локална пратка)
- I, name, address, number, weight, region – интернационална пратка
- G, number, weight – групна пратка
- Пратките кои се дел од групната пратка се печатат вовлечени со едно празно место во
- десно.
- Почетен код:
- public class PostOfficeTester {
- public static void main (String [] args) {
- Scanner scanner = new Scanner(System.in);
- int test = Integer.parseInt(scanner.nextLine());
- if(test == 1) {
- //Group Package printing
- System.out.println("======Packages======");
- PostOffice office = new PostOffice("Poshta", "Skopje");
- office.addPackage(new InternationalPackage("John_Doe", "Main_St_123", 111, 4, "America"));
- GroupPackage groupPackage = new GroupPackage("John_Done", "Main_St_123", 232, 0);
- groupPackage.addPackage(new LocalPackage("Jon_Snow", "The_Wall", 432, 5, true));
- office.addPackage(groupPackage);
- office.printPackages(System.out);
- }
- if(test == 2) {
- //Nested Group Package printing
- System.out.println("======Packages======");
- PostOffice office = new PostOffice("Poshta", "Skopje");
- office.addPackage(new InternationalPackage("Richard_Hendricks", "Noble_Pathway", 325, 4, "Africa"));
- office.addPackage(new LocalPackage("Jalisa_Acheson", "Emerald_Harbour", 600, 14, false));
- GroupPackage groupPackage = new GroupPackage("Meagan_Schuette", "Westeros", 232, 0);
- groupPackage.addPackage(new LocalPackage("Meagan_Schuette", "Westeros", 432, 5, true));
- groupPackage.addPackage(new InternationalPackage("Sansa_Stark", "Westeros", 332, 3, "Asia"));
- GroupPackage nestedGroupPackage = new GroupPackage("Marline_Bohling", "Crystal_Hills", 284, 0);
- nestedGroupPackage.addPackage(new InternationalPackage("Edie_Bramblett", "Lazy_Treasure", 382, 7, "Europe"));
- nestedGroupPackage.addPackage(new InternationalPackage("Cassaundra_Huff", "Sleepy_Farms", 696, 1, "Asia"));
- nestedGroupPackage.addPackage(new InternationalPackage("German_Sabbagh", "Tawny_Heath", 963, 12, "Africa"));
- groupPackage.addPackage(nestedGroupPackage);
- office.addPackage(groupPackage);
- office.addPackage(new LocalPackage("Clemmie_Reves", "Little_Cloud", 217, 5, true));
- office.printPackages(System.out);
- }
- if(test == 3) {
- //Most expensive Group Package
- System.out.println("======Packages======");
- PostOffice office = new PostOffice("Poshta", "Skopje");
- office.addPackage(new InternationalPackage("Dohn_Joe", "Main_St_321", 444, 4, "Europe"));
- GroupPackage groupPackage = new GroupPackage("John_Jon", "First_St_123", 232, 0);
- groupPackage.addPackage(new LocalPackage("Jon_Snow", "Westeros", 432, 5, true));
- groupPackage.addPackage(new InternationalPackage("Sansa_Stark", "Westeros", 332, 3, "Asia"));
- office.addPackage(groupPackage);
- office.addPackage(new LocalPackage("Littlefinger", "The_Eyrie", 987, 7, false));
- office.printPackages(System.out);
- System.out.println();
- System.out.println("======MostExpensive======");
- System.out.println(office.mostExpensive());
- }
- if(test == 4) {
- //Most expensive Local Package
- System.out.println("======Packages======");
- PostOffice office = new PostOffice("Poshta", "Skopje");
- office.addPackage(new InternationalPackage("Dohn_Joe", "Main_St_321", 444, 15, "Europe"));
- office.addPackage(new LocalPackage("Jon_Snow", "Westeros", 432, 5, true));
- office.addPackage(new InternationalPackage("Sansa_Stark", "Westeros", 332, 3, "Asia"));
- office.addPackage(new LocalPackage("Littlefinger", "The_Eyrie", 987, 7, false));
- office.printPackages(System.out);
- System.out.println();
- System.out.println("======MostExpensive======");
- System.out.println(office.mostExpensive());
- }
- if (test == 5) {
- PostOffice office = new PostOffice("Poshta", "Skopje");
- office.loadPackages(scanner);
- System.out.println("======Packages======");
- office.printPackages(System.out);
- }
- scanner.close();
- }
- }
- Решение:
- package poshta;
- import java.io.OutputStream;
- import java.io.PrintWriter;
- import java.util.ArrayList;
- import java.util.Comparator;
- import java.util.List;
- import java.util.Scanner;
- public class PostOfficeTester {
- public static void main (String [] args) {
- Scanner scanner = new Scanner(System.in);
- int test = Integer.parseInt(scanner.nextLine());
- if(test == 1) {
- //Group Package printing
- System.out.println("======Packages======");
- PostOffice office = new PostOffice("Poshta", "Skopje");
- office.addPackage(new InternationalPackage("John_Doe", "Main_St_123", 111, 4, "America"));
- GroupPackage groupPackage = new GroupPackage("John_Done", "Main_St_123", 232, 0);
- groupPackage.addPackage(new LocalPackage("Jon_Snow", "The_Wall", 432, 5, true));
- office.addPackage(groupPackage);
- office.printPackages(System.out);
- }
- if(test == 2) {
- //Nested Group Package printing
- System.out.println("======Packages======");
- PostOffice office = new PostOffice("Poshta", "Skopje");
- office.addPackage(new InternationalPackage("Richard_Hendricks", "Noble_Pathway", 325, 4, "Africa"));
- office.addPackage(new LocalPackage("Jalisa_Acheson", "Emerald_Harbour", 600, 14, false));
- GroupPackage groupPackage = new GroupPackage("Meagan_Schuette", "Westeros", 232, 0);
- groupPackage.addPackage(new LocalPackage("Meagan_Schuette", "Westeros", 432, 5, true));
- groupPackage.addPackage(new InternationalPackage("Sansa_Stark", "Westeros", 332, 3, "Asia"));
- GroupPackage nestedGroupPackage = new GroupPackage("Marline_Bohling", "Crystal_Hills", 284, 0);
- nestedGroupPackage.addPackage(new InternationalPackage("Edie_Bramblett", "Lazy_Treasure", 382, 7, "Europe"));
- nestedGroupPackage.addPackage(new InternationalPackage("Cassaundra_Huff", "Sleepy_Farms", 696, 1, "Asia"));
- nestedGroupPackage.addPackage(new InternationalPackage("German_Sabbagh", "Tawny_Heath", 963, 12, "Africa"));
- groupPackage.addPackage(nestedGroupPackage);
- office.addPackage(groupPackage);
- office.addPackage(new LocalPackage("Clemmie_Reves", "Little_Cloud", 217, 5, true));
- office.printPackages(System.out);
- }
- if(test == 3) {
- //Most expensive Group Package
- System.out.println("======Packages======");
- PostOffice office = new PostOffice("Poshta", "Skopje");
- office.addPackage(new InternationalPackage("Dohn_Joe", "Main_St_321", 444, 4, "Europe"));
- GroupPackage groupPackage = new GroupPackage("John_Jon", "First_St_123", 232, 0);
- groupPackage.addPackage(new LocalPackage("Jon_Snow", "Westeros", 432, 5, true));
- groupPackage.addPackage(new InternationalPackage("Sansa_Stark", "Westeros", 332, 3, "Asia"));
- office.addPackage(groupPackage);
- office.addPackage(new LocalPackage("Littlefinger", "The_Eyrie", 987, 7, false));
- office.printPackages(System.out);
- System.out.println();
- System.out.println("======MostExpensive======");
- System.out.println(office.mostExpensive());
- }
- if(test == 4) {
- //Most expensive Local Package
- System.out.println("======Packages======");
- PostOffice office = new PostOffice("Poshta", "Skopje");
- office.addPackage(new InternationalPackage("Dohn_Joe", "Main_St_321", 444, 15, "Europe"));
- office.addPackage(new LocalPackage("Jon_Snow", "Westeros", 432, 5, true));
- office.addPackage(new InternationalPackage("Sansa_Stark", "Westeros", 332, 3, "Asia"));
- office.addPackage(new LocalPackage("Littlefinger", "The_Eyrie", 987, 7, false));
- office.printPackages(System.out);
- System.out.println();
- System.out.println("======MostExpensive======");
- System.out.println(office.mostExpensive());
- }
- if (test == 5) {
- PostOffice office = new PostOffice("Poshta", "Skopje");
- office.loadPackages(scanner);
- System.out.println("======Packages======");
- office.printPackages(System.out);
- }
- scanner.close();
- }
- }
- class PostOffice {
- String name;
- String location;
- List<Package> packageList;
- PostOffice (String name, String location) {
- this.name = name;
- this.location = location;
- this.packageList = new ArrayList<>();
- }
- void loadPackages(Scanner scanner) {
- while (scanner.hasNext()) {
- String line = scanner.nextLine();
- if (line.equals("KRAJ"))
- break;
- String [] parts = line.split(", ");
- if (parts[0].equals("I")) {
- // International
- int weight = Integer.parseInt(parts[4]);
- if (weight <= 0)
- throw new InvalidPackageException(line);
- this.packageList.add(new InternationalPackage(
- parts[1],
- parts[2],
- Integer.parseInt(parts[3]),
- weight,
- parts[5])
- );
- }
- else if (parts[0].equals("L")) {
- // Local
- int weight = Integer.parseInt(parts[4]);
- if (weight <= 0)
- throw new InvalidPackageException(line);
- this.packageList.add(new LocalPackage(
- parts[1],
- parts[2],
- Integer.parseInt(parts[3]),
- weight,
- Boolean.parseBoolean(parts[5]))
- );
- }
- else
- throw new InvalidPackageException(line);
- }
- }
- boolean addPackage(Package p) {
- return this.packageList.add(p);
- }
- Package mostExpensive() {
- Package mostExpensivePackage = this.packageList.get(0);
- for (Package p : packageList)
- if (mostExpensivePackage.getPrice() < p.getPrice())
- mostExpensivePackage = p;
- return mostExpensivePackage;
- }
- void printPackages(OutputStream outputStream) {
- PrintWriter printWriter = new PrintWriter(outputStream);
- this.packageList.sort(new Comparator<Package>() {
- @Override
- public int compare(Package o1, Package o2) {
- return Double.compare(o1.getPrice(), o2.getPrice());
- }
- });
- for (Package p : packageList)
- printWriter.println(p.format(""));
- printWriter.flush();
- }
- }
- abstract class Package {
- String name;
- String address;
- int trackingNumber;
- int weight;
- Package (String name, String address, int trackingNumber, int weight) {
- this.name = name;
- this.address = address;
- this.trackingNumber = trackingNumber;
- this.weight = weight;
- }
- abstract double getPrice();
- abstract String format(String spaces);
- abstract int getWeight();
- @Override
- public String toString() {
- return String.format("%s, %s, %d",
- name,
- address,
- trackingNumber);
- }
- }
- class InternationalPackage extends Package {
- String region;
- InternationalPackage (String name, String address, int trackingNumber, int weight, String region) {
- super(name, address, trackingNumber, weight);
- this.region = region;
- }
- @Override
- double getPrice() {
- return 1.5 * this.weight;
- }
- @Override
- public int getWeight() {
- return this.weight;
- }
- @Override
- public String format(String spaces) {
- return spaces + this.toString();
- }
- @Override
- public String toString() {
- return String.format("I, %s, %s", super.toString(), this.getWeight());
- }
- }
- class LocalPackage extends Package {
- boolean priority;
- LocalPackage (String name, String address, int trackingNumber, int weight, boolean priority) {
- super(name, address, trackingNumber, weight);
- this.priority = priority;
- }
- @Override
- double getPrice() {
- double factor = this.priority ? 5 : 3;
- return this.weight * factor;
- }
- @Override
- public int getWeight() {
- return this.weight;
- }
- @Override
- public String format(String spaces) {
- return spaces + this.toString();
- }
- @Override
- public String toString() {
- return String.format("L, %s, %s", super.toString(), this.getWeight());
- }
- }
- class GroupPackage extends Package {
- List<Package> packages;
- GroupPackage (String name, String address, int trackingNumber, int weight) {
- super(name, address, trackingNumber, weight);
- this.packages = new ArrayList<>();
- }
- void addPackage(Package p) {
- this.packages.add(p);
- }
- @Override
- double getPrice() {
- double price = 2;
- for (Package p : packages)
- price += p.getPrice();
- return price;
- }
- @Override
- public int getWeight() {
- int result = 0;
- for (Package p : packages)
- result += p.getWeight();
- return result;
- }
- @Override
- public String format(String spaces) {
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.append(spaces).append(this.toString());
- for (Package p: packages)
- stringBuilder.append(p.format(spaces + " ")).append("\n");
- return stringBuilder.toString();
- }
- @Override
- public String toString() {
- return String.format("G, %d, %d\n", this.trackingNumber, this.getWeight());
- }
- }
- class InvalidPackageException extends RuntimeException {
- InvalidPackageException(String message) {
- super(message);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement