Advertisement
Ewerlost

Lab4_1 Java

Feb 25th, 2024
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 19.23 KB | None | 0 0
  1.  
  2. import java.io.*;
  3. import java.util.*;
  4.  
  5. import static java.lang.Math.round;
  6.  
  7. public class Main {
  8.     private static final int TYPE_CHOICE_CONTINUE_OR_EXIT = 1;
  9.     private static final int TYPE_CHOICE_FUNCTION = 0;
  10.     private static final int MIN_RATING = 0;
  11.     private static final int MAX_RATING = 1000;
  12.     private static final int MAX_COUNTRY_NAME_LENGTH = 25;
  13.     private static final int MAX_NAME_LENGTH = 25;
  14.     private static final int MAX_SECOND_NAME_LENGTH = 20;
  15.     private static final Scanner consoleScan = new Scanner(System.in);
  16.  
  17.     static class footballTeam {
  18.         String country;
  19.         String name;
  20.         String secondName;
  21.         int rating;
  22.  
  23.         public footballTeam(String country, String name, String secondName, int rating) {
  24.             this.country = country;
  25.             this.name = name;
  26.             this.secondName = secondName;
  27.             this.rating = rating;
  28.         }
  29.     }
  30.  
  31.     static footballTeam[] listOfTeams = new footballTeam[1];
  32.  
  33.     private static void writeTask() {
  34.         System.out.println("--------------------------------------------------------------" +
  35.                 "\nДанная программа позволяет вести учёт футбольных команд.");
  36.     }
  37.  
  38.     private static void print(int typeChoice) {
  39.         if (typeChoice == TYPE_CHOICE_FUNCTION)
  40.             System.out.println("--------------------------------------------------------------\n" +
  41.                     "Выберите действие:\n" +
  42.                     "1 - добавить данные в список команд.\n" +
  43.                     "2 - редактировать данные в списке команд.\n" +
  44.                     "3 - удалить данные из списка команд.\n" +
  45.                     "4 - просмотр данных в списке команд.\n" +
  46.                     "5 - вывод отсортированного по рейтингу списка команд.\n" +
  47.                     "6 - импорт данных из файла.\n" +
  48.                     "7 - экспорт данных в файл.\n" +
  49.                     "0 - конец работы и выключение программы.\n" +
  50.                     "--------------------------------------------------------------");
  51.         else if (typeChoice == TYPE_CHOICE_CONTINUE_OR_EXIT)
  52.             System.out.println("Повторить действие?\n" +
  53.                     "1 - да.\n" +
  54.                     "2 - нет.");
  55.     }
  56.  
  57.     private static int inputNumber(int min, int max) {
  58.         int num = 0;
  59.         boolean isNotCorrect;
  60.         do {
  61.             isNotCorrect = false;
  62.             try {
  63.                 num = Integer.parseInt(consoleScan.nextLine());
  64.             } catch (NumberFormatException e) {
  65.                 System.out.println("Вы ввели некорректные данные! Попробуйте еще:");
  66.                 isNotCorrect = true;
  67.             }
  68.             if (!isNotCorrect && (num < min || num > max)) {
  69.                 System.out.println("Введено значение не входящее в диапазон допустимых! Попробуйте еще:");
  70.                 isNotCorrect = true;
  71.             }
  72.         } while (isNotCorrect);
  73.         return num;
  74.     }
  75.  
  76.     private static boolean checkDataString(String dataString, int maxLength) {
  77.         boolean isIncorrect;
  78.         int index;
  79.         String enabledSimbols;
  80.         enabledSimbols = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
  81.         isIncorrect = false;
  82.         if (dataString.length() > maxLength) {
  83.             isIncorrect = true;
  84.             System.out.println("Вы превысили допустимую длину!");
  85.         }
  86.         if (dataString.isEmpty()) {
  87.             System.out.println("Значение не может быть пустым!");
  88.             isIncorrect = true;
  89.         }
  90.         if (!isIncorrect) {
  91.             for (int i = 0; i < dataString.length() && !isIncorrect; i++) {
  92.                 if (dataString.charAt(i) == '@'){
  93.                     isIncorrect = true;
  94.                     System.out.println("Строка не может содержать символ @!");
  95.                 }
  96.                 index = enabledSimbols.indexOf(dataString.charAt(i));
  97.                 if (index == -1){
  98.                     isIncorrect = true;
  99.                     System.out.println("Строка должна содержать латинские или кириллические буквы");
  100.                 }
  101.             }
  102.  
  103.         }
  104.         return isIncorrect;
  105.     }
  106.  
  107.     private static String inputCountry() {
  108.         String Country;
  109.         boolean isIncorrect;
  110.         do {
  111.             System.out.println("Введите страну команды (до 25 символов):");
  112.             Country = consoleScan.nextLine();
  113.             isIncorrect = checkDataString(Country, MAX_COUNTRY_NAME_LENGTH);
  114.         } while (isIncorrect);
  115.         return Country;
  116.     }
  117.  
  118.     private static String inputName() {
  119.         String name;
  120.         boolean isIncorrect;
  121.         do {
  122.             System.out.println("Введите название команды (до 25 символов):");
  123.             name = consoleScan.nextLine();
  124.             isIncorrect = checkDataString(name, MAX_NAME_LENGTH);
  125.         } while (isIncorrect);
  126.         return name;
  127.     }
  128.  
  129.     private static String inputSecondName() {
  130.         String secondName;
  131.         boolean isIncorrect;
  132.         do {
  133.             System.out.println("Введите фамилию главного тренера (до 20 символов):");
  134.             secondName = consoleScan.nextLine();
  135.             isIncorrect = checkDataString(secondName, MAX_SECOND_NAME_LENGTH);
  136.         } while (isIncorrect);
  137.         return secondName;
  138.     }
  139.  
  140.     private static int inputRating() {
  141.         int rating;
  142.         System.out.println("Введите рейтинг команды (число очков от 0 до 1000):");
  143.         rating = inputNumber(MIN_RATING, MAX_RATING);
  144.         return rating;
  145.     }
  146.  
  147.     private static boolean checkOnSimilarRecord(String country, String name, String secondName) {
  148.         boolean isEqualRecords = false;
  149.         for (int i = 0; i < listOfTeams.length - 1 && !isEqualRecords; i++)
  150.             isEqualRecords = (country.equals(listOfTeams[i].country) && name.equals(listOfTeams[i].name) && secondName.equals(listOfTeams[i].secondName));
  151.         return isEqualRecords;
  152.     }
  153.  
  154.     private static void takeInfoFromFile() {
  155.         File file;
  156.         String path = enterInputPath();
  157.         String currentString;
  158.         boolean isCorrect;
  159.  
  160.         file = new File(path);
  161.         try (Scanner fileScan = new Scanner(file)) {
  162.             while (fileScan.hasNextLine()) {
  163.                 currentString =  fileScan.nextLine();
  164.                 String[] words = currentString.split("@");
  165.                 isCorrect = !(checkOnSimilarRecord(words[0], words[1], words[2]));
  166.                 if (isCorrect) {
  167.                     saveRecord(words[0], words[1], words[2], Integer.parseInt(words[3]));
  168.                 } else
  169.                     System.out.println("В файле встречена запись, идентичная уже имеющимся данным!\n" + "Запись импортирована не будет.");
  170.             }
  171.         } catch (Exception e) {
  172.             System.out.println("Проверьте корректность данных в файле!");
  173.         }
  174.     }
  175.  
  176.     private static String enterOutputPath() {
  177.         String path;
  178.         boolean isFileIncorrect;
  179.         do {
  180.             isFileIncorrect = false;
  181.             System.out.println("Введите путь к файлу:");
  182.             path = consoleScan.nextLine();
  183.             File file = new File(path);
  184.  
  185.             if (file.isDirectory()) {
  186.                 System.out.println("Ошибка! Файл не найден!");
  187.                 isFileIncorrect = true;
  188.             }
  189.             else {
  190.                 try {
  191.                     if (!file.createNewFile() && !file.canWrite()) {
  192.                         System.out.println("Ошибка! Файл доступен только для чтения!");
  193.                         isFileIncorrect = true;
  194.                     }
  195.                 } catch (IOException e) {
  196.                     System.out.println("Ошибка! Не удалось записать информацию в файл!");
  197.                     isFileIncorrect = true;
  198.                 }
  199.             }
  200.  
  201.         } while (isFileIncorrect);
  202.         return path;
  203.     }
  204.     private static String enterInputPath() {
  205.         String path;
  206.         boolean isFileIncorrect;
  207.         do {
  208.             isFileIncorrect = false;
  209.             System.out.println("Введите путь к файлу:");
  210.             path = consoleScan.nextLine();
  211.             File file = new File(path);
  212.  
  213.             if (!file.isFile()) {
  214.                 System.out.println("Файл не найден! Пожалуйста проверьте существование файла и введите путь заново");
  215.                 isFileIncorrect = true;
  216.             }
  217.             if (!isFileIncorrect && !file.canRead() ) {
  218.                 System.out.println("Файл не может быть прочитан! Пожалуйста проверьте файл и введите путь заново");
  219.                 isFileIncorrect = true;
  220.             }
  221.             if (!isFileIncorrect) {
  222.                 isFileIncorrect = checkInfInFile(path);
  223.             }
  224.         } while (isFileIncorrect);
  225.         return path;
  226.     }
  227.  
  228.     private static boolean checkInfInFile(String path) {
  229.         String currentString;
  230.         File checkFile;
  231.         boolean isNotCorrectCountry;
  232.         boolean isNotCorrectName;
  233.         boolean isNotCorrectSecondName;
  234.         boolean isNotCorrectRating;
  235.         boolean isIncorrect;
  236.  
  237.         checkFile = new File(path);
  238.  
  239.         isNotCorrectRating = false;
  240.         isIncorrect = false;
  241.  
  242.         try (Scanner fileScan = new Scanner(checkFile)) {
  243.             while (fileScan.hasNextLine() && !isIncorrect) {
  244.                 currentString = fileScan.nextLine();
  245.                 String[] words = currentString.split("@");
  246.                 if (words.length > 4) {
  247.                     System.out.println("Некорректные данные! Убедитесь, что поля каждой записи резделены символом '@'.");
  248.                     isIncorrect = true;
  249.                 } else {
  250.                     isNotCorrectCountry = checkDataString(words[0], MAX_COUNTRY_NAME_LENGTH);
  251.                     isNotCorrectName = checkDataString(words[1], MAX_NAME_LENGTH);
  252.                     isNotCorrectSecondName = checkDataString(words[2], MAX_SECOND_NAME_LENGTH);
  253.                     if ((Integer.parseInt(words[3]) < MIN_RATING) || (Integer.parseInt(words[3]) > MAX_RATING)) {
  254.                         isNotCorrectRating = true;
  255.                     }
  256.  
  257.                     if (isNotCorrectCountry || isNotCorrectName || isNotCorrectSecondName || isNotCorrectRating) {
  258.                         isIncorrect = true;
  259.                     }
  260.                 }
  261.             }
  262.         } catch (Exception e) {
  263.             System.out.println("Проверьте корректность данных в файле!");
  264.             isIncorrect = true;
  265.         }
  266.         return isIncorrect;
  267.     }
  268.  
  269.     private static void saveRecord(String country,String name, String secondName, int rating) {
  270.         listOfTeams[listOfTeams.length - 1] = new footballTeam(country, name, secondName, rating);
  271.         listOfTeams = Arrays.copyOf(listOfTeams, listOfTeams.length + 1);
  272.         System.out.println("Запись была добавлена успешно!");
  273.     }
  274.  
  275.     private static void enterInf() {
  276.         String country;
  277.         String name;
  278.         String secondName;
  279.         int rating;
  280.         int choice;
  281.         boolean isEqualRecord = false;
  282.         do {
  283.             country = inputCountry();
  284.             name = inputName();
  285.             secondName = inputSecondName();
  286.             if (listOfTeams.length > 1)
  287.                 isEqualRecord = checkOnSimilarRecord (country, name, secondName);
  288.             if (!isEqualRecord) {
  289.                 rating = inputRating();
  290.                 saveRecord(country, name, secondName, rating);
  291.             } else
  292.                 System.out.println("Данная запись уже присутствует в списке!");
  293.  
  294.             print(TYPE_CHOICE_CONTINUE_OR_EXIT);
  295.             choice = inputNumber(1, 2);
  296.         } while (choice != 2);
  297.     }
  298.  
  299.     private static int inputNumOfRecord(String str) {
  300.         int number;
  301.         final int MIN_NUM = 1;
  302.         lookInf();
  303.         System.out.println("Введите номер записи, которую нужно " + str + ".");
  304.         number = inputNumber(MIN_NUM, listOfTeams.length-1);
  305.         return number - 1;
  306.     }
  307.  
  308.     private static void correctInf() {
  309.         String country;
  310.         String name;
  311.         String secondName;
  312.         int rating;
  313.         int choice;
  314.         int numOfRecord;
  315.         do {
  316.             numOfRecord = inputNumOfRecord("изменить");
  317.             country = inputCountry();
  318.             name = inputName();
  319.             secondName = inputSecondName();
  320.             rating = inputRating();
  321.  
  322.             listOfTeams[numOfRecord] = new footballTeam(country, name, secondName, rating);
  323.             System.out.println("Запись номер " + (numOfRecord + 1) + " была успешно изменена!");
  324.  
  325.             print(TYPE_CHOICE_CONTINUE_OR_EXIT);
  326.             choice = inputNumber(1, 2);
  327.  
  328.         } while (choice != 2);
  329.     }
  330.  
  331.     private static void deleteInf() {
  332.         int numberOfRecord;
  333.         int choice = 0;
  334.         int recordsCount;
  335.         do {
  336.             numberOfRecord = inputNumOfRecord("удалить");
  337.             recordsCount = listOfTeams.length;
  338.             listOfTeams[numberOfRecord] = null;
  339.             for (int i = numberOfRecord+1; i < recordsCount; i++) {
  340.                 listOfTeams[i - 1] = listOfTeams[i];
  341.             }
  342.             listOfTeams[recordsCount-1] = null;
  343.             listOfTeams = Arrays.copyOf(listOfTeams, recordsCount - 1);
  344.             System.out.println("Запись номер " + (numberOfRecord + 1) + " была успешно удалена!");
  345.  
  346.             if (listOfTeams.length == 1) {
  347.                 System.out.println("Список записей пуст!");
  348.             } else {
  349.                 print(TYPE_CHOICE_CONTINUE_OR_EXIT);
  350.                 choice = inputNumber(1, 2);
  351.             }
  352.         } while ((choice != 2) && (listOfTeams.length > 1));
  353.     }
  354.  
  355.     private static void saveToFile() {
  356.         String path = enterOutputPath();
  357.         try (PrintWriter fileOut = new PrintWriter(path)) {
  358.             for (int i = 0; i < listOfTeams.length - 1; i++)
  359.                 fileOut.println(listOfTeams[i].country + "@" + listOfTeams[i].name + "@" + listOfTeams[i].secondName + "@" + listOfTeams[i].rating);
  360.         } catch (Exception e) {
  361.             System.out.println("Не удалось вывести в файл!");
  362.         }
  363.         System.out.println("Данные успешно выведены в файл!");
  364.     }
  365.  
  366.     private static void lookInf() {
  367.         for (int i = 0; i < listOfTeams.length - 1; i++) {
  368.             System.out.println("------------------------------" + "\nЗапись №" + (i + 1) + "\nСтрана команды: " + listOfTeams[i].country + "\nНазвание команды: " + listOfTeams[i].name + "\nФамилия тренера: " + listOfTeams[i].secondName + "\nРейтинг: " + listOfTeams[i].rating + "\n------------------------------");
  369.         }
  370.     }
  371.  
  372.     private static void lookTeamInfo(){
  373.         for (int i = 0; i < listOfTeams.length - 1; i++) {
  374.             System.out.println("------------------------------" + "\nНазвание команды: " + listOfTeams[i].name + "\nРейтинг команды: " + listOfTeams[i].rating + "\n------------------------------");
  375.         }
  376.     }
  377.     private static void sortList(){
  378.         int i, k, iMax;
  379.         footballTeam tempTeam;
  380.  
  381.         for (k = 0; k < listOfTeams.length - 2; k++) {
  382.             iMax = k;
  383.             for (i = k + 1; i < listOfTeams.length - 1; i++) {
  384.                 if (listOfTeams[i].rating > listOfTeams[iMax].rating){
  385.                     iMax = i;
  386.                 }
  387.             }
  388.             tempTeam = listOfTeams[iMax];
  389.             listOfTeams[iMax] = listOfTeams[k];
  390.             listOfTeams[k] = tempTeam;
  391.         }
  392.     }
  393.  
  394.     private static void workWithCatalog () {
  395.         final int MIN_OPTION = 0, MAX_OPTION = 7;
  396.         int num;
  397.         do {
  398.             print(TYPE_CHOICE_FUNCTION);
  399.             num = inputNumber(MIN_OPTION, MAX_OPTION);
  400.             switch (num) {
  401.                 case 1:
  402.                     enterInf();
  403.                     break;
  404.                 case 2:
  405.                     if (listOfTeams.length > 1)
  406.                         correctInf();
  407.                     else
  408.                         System.out.println("Для выполнения данного действия необходимо либо ввести, либо импортировать данные.");
  409.                     break;
  410.                 case 3:
  411.                     if (listOfTeams.length > 1)
  412.                         deleteInf();
  413.                     else
  414.                         System.out.println("Для выполнения данного действия необходимо либо ввести, либо импортировать данные.");
  415.                     break;
  416.                 case 4:
  417.                     if (listOfTeams.length > 1)
  418.                         lookInf();
  419.                     else
  420.                         System.out.println("Для выполнения данного действия необходимо либо ввести, либо импортировать данные.");
  421.                     break;
  422.                 case 5:
  423.                     if (listOfTeams.length > 1) {
  424.                         sortList();
  425.                         lookTeamInfo();
  426.                     } else
  427.                         System.out.println("Для выполнения данного действия необходимо либо ввести, либо импортировать данные.");
  428.                     break;
  429.                 case 6:
  430.                     takeInfoFromFile();
  431.                     break;
  432.                 case 7:
  433.                     if (listOfTeams.length > 1) {
  434.                         saveToFile();
  435.                     } else
  436.                         System.out.println("Для выполнения данного действия необходимо либо ввести, либо импортировать данные.");
  437.                     break;
  438.             }
  439.         } while (num != 0);
  440.     }
  441.     public static void main (String[]args){
  442.         writeTask();
  443.         workWithCatalog();
  444.         consoleScan.close();
  445.     }
  446. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement