Sauka1337

4.1

May 19th, 2024
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.70 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.ArrayList;
  3. import java.util.Comparator;
  4. import java.util.Scanner;
  5.  
  6. public class Main {
  7.     public enum ErrorsCode {
  8.         CORRECT,
  9.         INCORRECT_CHOICE,
  10.         INCORRECT_BRAND,
  11.         INCORRECT_MANUFACTURER,
  12.         IS_NOT_TXT,
  13.         IS_NOT_EXIST,
  14.         IS_NOT_READABLE,
  15.         IS_NOT_WRITEABLE,
  16.     }
  17.  
  18.     static final String[] ERRORS = new String[]{
  19.             "",
  20.             "Incorrect choice!",
  21.             "Incorrect brand!",
  22.             "Incorrect manufacturer!",
  23.             "The file extension is not .txt!",
  24.             "Incorrect file path!",
  25.             "The file is closed for reading!",
  26.             "The file is closed for writing",
  27.             "Extra data in the file!"
  28.     };
  29.  
  30.     public static class Car {
  31.         public int carNumber;
  32.         public String carBrand;
  33.         public String carManufacturer;
  34.         public int carReleaseDate;
  35.         public double carPrice;
  36.         public double getCarPrice() {
  37.             return carPrice;
  38.         }
  39.     }
  40.  
  41.         public enum Actions {
  42.             Exit,
  43.             AddCar,
  44.             DeleteCar,
  45.             EditCar,
  46.             SearchCar,
  47.             WriteFile,
  48.             ShowCars,
  49.         }
  50.  
  51.         static void writeError(ErrorsCode error) {
  52.             System.err.println(ERRORS[error.ordinal()]);
  53.         }
  54.  
  55.         static int chooseOptionWithinRange(int borderBottom, int borderTop) {
  56.             ErrorsCode error;
  57.             int option = 1;
  58.             do {
  59.                 error = ErrorsCode.CORRECT;
  60.                 try {
  61.                     Scanner scanner = new Scanner(System.in);
  62.                     option = scanner.nextInt();
  63.                 } catch (Exception e) {
  64.                     error = ErrorsCode.INCORRECT_CHOICE;
  65.                 }
  66.                 if ((error == ErrorsCode.CORRECT) && ((option < borderBottom) || (option > borderTop)))
  67.                     error = ErrorsCode.INCORRECT_CHOICE;
  68.                 if (error != ErrorsCode.CORRECT) {
  69.                     writeError(error);
  70.                     System.out.print("Try again: ");
  71.                 }
  72.             } while (error != ErrorsCode.CORRECT);
  73.             return option;
  74.         }
  75.  
  76.         static String readStringTypeCar(String message, String tempString, ErrorsCode probableError) {
  77.             final int MAX_STRING_LEN = 20;
  78.             ErrorsCode error;
  79.             do {
  80.                 error = ErrorsCode.CORRECT;
  81.                 System.out.print(message + " [1.." + MAX_STRING_LEN + "]: ");
  82.                 Scanner scanner = new Scanner(System.in);
  83.                 tempString = scanner.nextLine();
  84.                 if (tempString.equals("") || tempString.length() > MAX_STRING_LEN) {
  85.                     error = probableError;
  86.                     writeError(error);
  87.                 }
  88.             } while (error != ErrorsCode.CORRECT);
  89.             return tempString;
  90.         }
  91.  
  92.         static Car readCar() {
  93.             ErrorsCode error;
  94.             Car car = new Car();
  95.             do {
  96.                 error = ErrorsCode.CORRECT;
  97.                 car.carBrand = readStringTypeCar("Enter car brand", car.carBrand, ErrorsCode.INCORRECT_BRAND);
  98.                 if (error == ErrorsCode.CORRECT)
  99.                     car.carManufacturer = readStringTypeCar("Enter manufacturer (country)", car.carManufacturer, ErrorsCode.INCORRECT_MANUFACTURER);
  100.                 if (error == ErrorsCode.CORRECT) {
  101.                     System.out.print("Enter release date (year): ");
  102.                     Scanner scanner = new Scanner(System.in);
  103.                     car.carReleaseDate = scanner.nextInt();
  104.                 }
  105.                 if (error == ErrorsCode.CORRECT) {
  106.                     System.out.print("Enter price: ");
  107.                     Scanner scanner = new Scanner(System.in);
  108.                     car.carPrice = scanner.nextDouble();
  109.                 }
  110.                 if (error != ErrorsCode.CORRECT)
  111.                     writeError(error);
  112.             } while (error != ErrorsCode.CORRECT);
  113.             return car;
  114.         }
  115.  
  116.         static void sortCars(ArrayList<Car> carsList) {
  117.             carsList.sort(Comparator.comparing(car -> car.carBrand));
  118.         }
  119.  
  120.         static void fillCarsNumber(ArrayList<Car> carsList) {
  121.             for (int i = 0; i < carsList.size(); i++) {
  122.                 Car tempCar = carsList.get(i);
  123.                 tempCar.carNumber = i + 1;
  124.                 carsList.set(i, tempCar);
  125.             }
  126.         }
  127.  
  128.         static ErrorsCode isReadable(String filePath) {
  129.             ErrorsCode error = ErrorsCode.CORRECT;
  130.             try {
  131.                 new BufferedReader(new FileReader(filePath)).close();
  132.             } catch (Exception e) {
  133.                 error = ErrorsCode.IS_NOT_READABLE;
  134.             }
  135.             return error;
  136.         }
  137.  
  138.         static ErrorsCode isWriteable(String filePath) {
  139.             ErrorsCode error = ErrorsCode.CORRECT;
  140.             try {
  141.                 new BufferedWriter(new FileWriter(filePath)).close();
  142.             } catch (Exception e) {
  143.                 error = ErrorsCode.IS_NOT_WRITEABLE;
  144.             }
  145.             return error;
  146.         }
  147.  
  148.         static String readIOFilePath(char ioMode) {
  149.             ErrorsCode error;
  150.             String filePath;
  151.             do {
  152.                 error = ErrorsCode.CORRECT;
  153.                 System.out.print("Write path to file: ");
  154.                 filePath = new Scanner(System.in).nextLine();
  155.  
  156.                 if (!filePath.endsWith(".txt"))
  157.                     error = ErrorsCode.IS_NOT_TXT;
  158.                 if (error == ErrorsCode.CORRECT && !new File(filePath).exists())
  159.                     error = ErrorsCode.IS_NOT_EXIST;
  160.                 if (error == ErrorsCode.CORRECT) {
  161.                     switch (ioMode) {
  162.                         case 'i':
  163.                             error = isReadable(filePath);
  164.                             break;
  165.                         case 'o':
  166.                             error = isWriteable(filePath);
  167.                             break;
  168.                     }
  169.                 }
  170.                 if (error != ErrorsCode.CORRECT)
  171.                     writeError(error);
  172.             } while (error != ErrorsCode.CORRECT);
  173.             return filePath;
  174.         }
  175.  
  176.         static void writeTable(PrintWriter writer, ArrayList<Car> carsList) {
  177.             Car car;
  178.             writer.println("Cars:");
  179.             for (int j = 0; j < 90; j++) writer.print("-");
  180.             writer.printf("\n| %2s| %20s| %20s| %20s| %10s| \n", "#", "Brand", "Manufacturer", "Release date", "Price");
  181.             for (int i = 0; i < carsList.size(); i++) {
  182.                 for (int j = 0; j < 90; j++) writer.print("-");
  183.                 car = carsList.get(i);
  184.                 writer.printf("\n| %2d| %20s| %20s| %20s| %20s| \n",
  185.                         car.carNumber, car.carBrand, car.carManufacturer, car.carReleaseDate, car.carPrice);
  186.             }
  187.             for (int j = 0; j < 90; j++) writer.print("-");
  188.             writer.println();
  189.             writer.flush();
  190.         }
  191.  
  192.         static void writeCFData(char cfMode, ArrayList<Car> carsList) {
  193.             PrintWriter writer = null;
  194.  
  195.             if (carsList.size() == 0)
  196.                 System.out.println("You haven't added any cars yet!");
  197.             else {
  198.                 switch (cfMode) {
  199.                     case 'c':
  200.                         writer = new PrintWriter(System.out);
  201.                         break;
  202.                     case 'f':
  203.                         try {
  204.                             writer = new PrintWriter(new FileWriter(readIOFilePath('o')));
  205.                         } catch (IOException e) {
  206.                             e.printStackTrace();
  207.                         }
  208.                         break;
  209.                 }
  210.                 writeTable(writer, carsList);
  211.             }
  212.         }
  213.  
  214.         static void addCar(ArrayList<Car> carsList) {
  215.             Car tempCar;
  216.             tempCar = readCar();
  217.             tempCar.carNumber = carsList.size() + 1;
  218.             carsList.add(tempCar);
  219.             sortCars(carsList);
  220.             fillCarsNumber(carsList);
  221.         }
  222.  
  223.         static void deleteCar(ArrayList<Car> carsList) {
  224.             int numberOfDeletedCar;
  225.             if (carsList.size() == 0)
  226.                 System.out.println("You haven't added any cars yet!");
  227.             else {
  228.                 writeCFData('c', carsList);
  229.                 System.out.print("Enter the number of the car to be deleted: ");
  230.                 numberOfDeletedCar = chooseOptionWithinRange(1, carsList.size());
  231.                 System.out.print("Are you sure you want to delete the car?:\n" +
  232.                         "1 - yes\n" +
  233.                         "2 - no\n" +
  234.                         "Your choice: ");
  235.                 if (chooseOptionWithinRange(1, 2) == 1) {
  236.                     carsList.remove(numberOfDeletedCar - 1);
  237.                     fillCarsNumber(carsList);
  238.                 }
  239.             }
  240.         }
  241.  
  242.         static void editCar(ArrayList<Car> carsList) {
  243.             int numberOfEditedCar;
  244.             if (carsList.size() == 0)
  245.                 System.out.println("You haven't added any cars yet!");
  246.             else {
  247.                 writeCFData('c', carsList);
  248.                 System.out.print("Enter the number of the cars to be edited: ");
  249.                 numberOfEditedCar = chooseOptionWithinRange(1, carsList.size());
  250.                 carsList.set(numberOfEditedCar - 1, readCar());
  251.                 sortCars(carsList);
  252.                 fillCarsNumber(carsList);
  253.             }
  254.         }
  255.  
  256.         static void searchCar(ArrayList<Car> carsList) {
  257.             if (carsList.size() == 0)
  258.                 System.out.println("You haven't added any cars yet!");
  259.             else {
  260.                 System.out.print("Enter the year you are interested in: ");
  261.                 Scanner scanner = new Scanner(System.in);
  262.                 int year = scanner.nextInt();
  263.                 carsList.stream()
  264.                         .filter(car -> car.carReleaseDate == year)
  265.                         .sorted(Comparator.comparing(Car::getCarPrice).reversed())
  266.                         .forEach(car -> System.out.printf("Brand: %s\nManufacturer: %s\nYear: %d\nPrice: %.2f\n",
  267.                                 car.carBrand, car.carManufacturer, car.carReleaseDate, car.carPrice));
  268.             }
  269.         }
  270.  
  271.         static void writeFile(ArrayList<Car> carsList) {
  272.             writeCFData('f', carsList);
  273.         }
  274.  
  275.         static void showCars(ArrayList<Car> carsList) {
  276.             writeCFData('c', carsList);
  277.         }
  278.  
  279.         static void exit(ArrayList<Car> carsList) {
  280.             boolean isSaved = false;
  281.             if (!isSaved) {
  282.                 System.out.print("You didn't save the file, do you want to save the file before exiting?\n" +
  283.                         "1 - yes\n" +
  284.                         "2 - no\n" +
  285.                         "Your choice: ");
  286.                 if (chooseOptionWithinRange(1, 2) == 1)
  287.                     writeFile(carsList);
  288.             }
  289.         }
  290.  
  291.         static void chooseAction(ArrayList<Car> carsList) {
  292.             Actions action;
  293.             boolean isSaved = false;
  294.             do {
  295.                 System.out.print("Choose one of the following actions:\n" +
  296.                         "1 - add car(max 100)\n" +
  297.                         "2 - delete car\n" +
  298.                         "3 - edit car\n" +
  299.                         "4 - search cars\n" +
  300.                         "5 - save file\n" +
  301.                         "6 - show cars\n" +
  302.                         "0 - exit\n" +
  303.                         "Your choice: ");
  304.                 action = Actions.values()[chooseOptionWithinRange(0, Actions.values().length - 1)];
  305.                 switch (action) {
  306.                     case AddCar:
  307.                         addCar(carsList);
  308.                         break;
  309.                     case DeleteCar:
  310.                         deleteCar(carsList);
  311.                         break;
  312.                     case EditCar:
  313.                         editCar(carsList);
  314.                         break;
  315.                     case SearchCar:
  316.                         searchCar(carsList);
  317.                         break;
  318.                     case WriteFile:
  319.                         writeFile(carsList);
  320.                         break;
  321.                     case ShowCars:
  322.                         showCars(carsList);
  323.                         break;
  324.                     case Exit:
  325.                         exit(carsList);
  326.                         break;
  327.                 }
  328.             } while (action != Actions.Exit);
  329.         }
  330.  
  331.         public static void main(String[] args) {
  332.             ArrayList<Car> carsList = new ArrayList<>();
  333.             chooseAction(carsList);
  334.         }
  335.  
  336.     }
  337.  
  338.  
Add Comment
Please, Sign In to add comment