Advertisement
SmnVadik

Lab 4.1 (Java)

Mar 27th, 2023 (edited)
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 17.75 KB | None | 0 0
  1. import java.awt.*;
  2. import java.io.File;
  3. import java.io.FileWriter;
  4. import java.io.IOException;
  5. import java.util.*;
  6.  
  7. record Student(String surname, int group, String discipline, float avgScore){}
  8.  
  9. record Discipline(String name, int group, float avgScore){}
  10.  
  11. public class Main {
  12.  
  13.     static final String discipline1 = "ОАиП";
  14.     static final String discipline2 = "АиСД";
  15.     static final String discipline3 = "КПО";
  16.     static final String discipline4 = "ИКГ";
  17.     static final String discipline5 = "физика";
  18.     static Scanner scanner = new Scanner(System.in);
  19.     static Student[] arrOfRec = new Student[1];
  20.  
  21.     public static void main(String[] args) throws IOException {
  22.  
  23.         int num = 0;
  24.         System.out.println("Эта программа записывает студентов, которые хотят слушать выбранную ими дисциплину");
  25.         do {
  26.             getInfo();
  27.             num = getNum();
  28.             getUserChoice(num);
  29.         } while (num != 0);
  30.         scanner.close();
  31.     }
  32.  
  33.     private static void getInfo () {
  34.         System.out.println("1 - Добавить запись. \n2 - Редактировать запись. \n3 - Удалить запись. \n4 - Показать все записи." +
  35.                 "\n5 - Сохранить данные в файл. \n6 - Получить данные из файла. \n7 - Вывести информацию о студентах. \n0 - Нажмите чтобы выйти" +
  36.                 ".");
  37.     }
  38.  
  39.     private static int getNum() {
  40.         int choice = 0;
  41.         int MIN = 0;
  42.         int MAX = 8;
  43.         boolean isCorrect;
  44.         do {
  45.             isCorrect = true;
  46.             try{
  47.                 choice = Integer.parseInt(scanner.nextLine());
  48.             } catch (NumberFormatException e) {
  49.                 isCorrect = false;
  50.                 System.out.println("Проверьте корректность данных");
  51.             }
  52.             if (isCorrect & (choice < MIN || choice > MAX)) {
  53.                 isCorrect = false;
  54.             }
  55.         } while (!isCorrect);
  56.         return choice;
  57.     }
  58.  
  59.     private static Student[] addRecord() {
  60.         String surname, discipline;
  61.         int group;
  62.         float avgScore;
  63.         boolean isCorrect = true;
  64.         surname = inputName();
  65.         group = inputGroup();
  66.         discipline = inputDisc("которую хочет слушать студент");
  67.         avgScore = inputScore();
  68.  
  69.         if (arrOfRec.length > 1) {
  70.             isCorrect = checkRepeats(surname, group, discipline, avgScore);
  71.         }
  72.         if (isCorrect) {
  73.             arrOfRec[arrOfRec.length - 1] = new Student(surname, group, discipline, avgScore);
  74.             arrOfRec = Arrays.copyOf(arrOfRec, arrOfRec.length + 1);
  75.         }
  76.         return arrOfRec;
  77.     }
  78.  
  79.     public static String inputName() {
  80.         String str;
  81.         boolean isCorrect;
  82.         do {
  83.             isCorrect = true;
  84.             System.out.print("Введите фамилию: ");
  85.             str = scanner.nextLine();
  86.             isCorrect = checkName(str);
  87.         } while (!isCorrect);
  88.         return str;
  89.     }
  90.  
  91.     private static boolean checkName(String name) {
  92.         boolean isCorrect = false;
  93.         int MIN = 1;
  94.         int MAX = 20;
  95.         if (name.length() < MIN || name.length() > MAX) {
  96.             System.out.println("Вы вышли за пределы диапазона [1; 20]");
  97.         } else {
  98.             isCorrect = true;
  99.         }
  100.         return isCorrect;
  101.     }
  102.  
  103.     public static String inputDisc(String str) {
  104.         System.out.println("Введите от 1 до 5, чтобы выбрать дисциплину "+ str + ":");
  105.         System.out.println("1. "+discipline1+"\n2. "+discipline2+"\n3. "+discipline3+"\n4. "+discipline4+"\n5. "+discipline5);
  106.         int num = selectDisc();
  107.         switch (num) {
  108.             case (1) -> str = discipline1;
  109.             case (2) -> str = discipline2;
  110.             case (3) -> str = discipline3;
  111.             case (4) -> str = discipline4;
  112.             case (5) -> str = discipline5;
  113.         }
  114.         return str;
  115.     }
  116.  
  117.     private static boolean checkDiscipline(String str) {
  118.         boolean isCorrect = false;
  119.         if ((Objects.equals(str, discipline1)) || (Objects.equals(str, discipline2)) || (Objects.equals(str, discipline3)) || (Objects.equals(str, discipline4)) || (Objects.equals(str, discipline5))) {
  120.             isCorrect = true;
  121.         } else {
  122.             System.out.println("Ошибка ввода дисциплины");
  123.         }
  124.         return isCorrect;
  125.     }
  126.  
  127.     public static int inputGroup() {
  128.         boolean isCorrect;
  129.         int num = 0;
  130.         do {
  131.             isCorrect = true;
  132.             System.out.print("Введите группу: ");
  133.             try {
  134.                 num = Integer.parseInt(scanner.nextLine());
  135.             } catch (NumberFormatException e) {
  136.                 System.out.println("Проверьте корректность введенных данных");
  137.                 isCorrect = false;
  138.             }
  139.             if (isCorrect) {
  140.                 isCorrect = checkGroup(num);
  141.             }
  142.         } while (!isCorrect);
  143.         return num;
  144.     }
  145.  
  146.     public static boolean checkGroup(int num) {
  147.         boolean isCorrect = false;
  148.         int MIN = 251001;
  149.         int MAX = 251005;
  150.         if (num < MIN || num > MAX) {
  151.             System.out.println("Введите группы " + MIN + " - " + MAX);
  152.         } else {
  153.             isCorrect = true;
  154.         }
  155.         return isCorrect;
  156.     }
  157.  
  158.     public static float inputScore() {
  159.         boolean isCorrect;
  160.         float score = 0;
  161.         do {
  162.             isCorrect = true;
  163.             System.out.print("Введите средний балл: ");
  164.             try {
  165.                 score = Float.parseFloat(scanner.nextLine());
  166.             } catch (Exception e) {
  167.                 System.out.println("Проверьте корректность введенных данных");
  168.                 isCorrect = false;
  169.             }
  170.             if(isCorrect) {
  171.                 isCorrect = checkAvrScore(score);
  172.             }
  173.         } while (!isCorrect);
  174.         return score;
  175.     }
  176.  
  177.     public static boolean checkAvrScore (float score) {
  178.         boolean isCorrect = false;
  179.         int MIN = 1;
  180.         int MAX = 10;
  181.         if (score < MIN || score > MAX) {
  182.             System.out.println("Введите оценки от " + MIN + " до " + MAX);
  183.         } else {
  184.             isCorrect = true;
  185.         }
  186.         return isCorrect;
  187.     }
  188.  
  189.     private static Student[] editRecord() {
  190.         boolean isCorrect = true;
  191.         int numOfRecord = getNumberOfRecord(arrOfRec.length - 1, "редактировать");
  192.         String surname, discipline;
  193.         int group;
  194.         float avgScore;
  195.         surname = inputName();
  196.         group = inputGroup();
  197.         discipline = inputDisc("которую хотите редактировать");
  198.         avgScore = inputScore();
  199.  
  200.         if (arrOfRec.length > 1) {
  201.             isCorrect = checkRepeats(surname, group, discipline, avgScore);
  202.         }
  203.         if (isCorrect) {
  204.             arrOfRec[numOfRecord - 1] = new Student(surname, group, discipline, avgScore);
  205.         }
  206.         return arrOfRec;
  207.     }
  208.  
  209.     private static Student[] deleteRecord() {
  210.         int numOfRecord = getNumberOfRecord(arrOfRec.length - 1, "удалить");
  211.         arrOfRec[numOfRecord - 1] = null;
  212.         arrOfRec = Arrays.copyOf(arrOfRec, arrOfRec.length - 1);
  213.         if (numOfRecord < arrOfRec.length) {
  214.             for (int i = numOfRecord; i < arrOfRec.length; i++) {
  215.                 arrOfRec[i - 1] = arrOfRec[i];
  216.             }
  217.             arrOfRec[arrOfRec.length - 1] = null;
  218.         }
  219.         return arrOfRec;
  220.     }
  221.  
  222.     private static int getNumberOfRecord(int length, String str) {
  223.         int num = 0;
  224.         final int MIN_NUM = 1;
  225.         Scanner scan = new Scanner(System.in);
  226.         boolean isIncorrect;
  227.         do {
  228.             isIncorrect = false;
  229.             System.out.print("Введите номер записи которую хотите " + str + ": ");
  230.             try {
  231.                 num = Integer.parseInt(scan.nextLine());
  232.             } catch (Exception q) {
  233.                 isIncorrect = true;
  234.                 System.out.println("You didn't enter number. Input must consist only digits.");
  235.             }
  236.             if (!isIncorrect & (num < MIN_NUM || num > length)) {
  237.                 isIncorrect = true;
  238.                 System.out.println("Invalid input range.");
  239.             }
  240.         } while (isIncorrect);
  241.         return num;
  242.     }
  243.  
  244.     public static boolean checkRepeats(String surname, int group, String discipline, float avgScore) {
  245.         boolean isCorrect = true;
  246.         if(arrOfRec.length > 1) {
  247.             for(int i = 0; i < arrOfRec.length - 1; i++) {
  248.                 if((surname.equals(arrOfRec[i].surname())) & (group == arrOfRec[i].group()) & (discipline.equals(arrOfRec[i].discipline())) & (avgScore == arrOfRec[i].avgScore())) {
  249.                     isCorrect = false;
  250.                     System.out.println("Такая запись уже существует");
  251.                     break;
  252.                 }
  253.             }
  254.         }
  255.         return isCorrect;
  256.     }
  257.  
  258.     private static void outputRecord() {
  259.         for(int i = 0; i < arrOfRec.length - 1; i++) {
  260.             System.out.print(arrOfRec[i].surname() + " " + arrOfRec[i].group() + " " + arrOfRec[i].discipline() + " " + arrOfRec[i].avgScore() + "\n");
  261.         }
  262.     }
  263.  
  264.     private static int selectDisc() {
  265.         int num = 0;
  266.         boolean isCorrect;
  267.         do {
  268.             System.out.print("Выберите дисциплину: ");
  269.             isCorrect = true;
  270.             try {
  271.                 num = Integer.parseInt(scanner.nextLine());
  272.             } catch (Exception e) {
  273.                 isCorrect = false;
  274.                 System.out.println("Проверьте корректность данных");
  275.             }
  276.             if (isCorrect & (num < 1 || num > 5)) {
  277.                 isCorrect = false;
  278.                 System.out.println("Введите числа от 1 до 5");
  279.             }
  280.         } while (!isCorrect);
  281.  
  282.         return num;
  283.     }
  284.  
  285.     private static void newArrRec() {
  286.         String str = inputDisc("которая будет читаться");
  287.  
  288.         Discipline[] newArrOfRec = new Discipline[1];
  289.         String surname;
  290.         int group;
  291.         float avgScore;
  292.         for(int i = 0; i < arrOfRec.length - 1; i++) {
  293.             if(Objects.equals(arrOfRec[i].discipline(), str)) {
  294.                 surname = arrOfRec[i].surname();
  295.                 group = arrOfRec[i].group();
  296.                 avgScore = arrOfRec[i].avgScore();
  297.                 newArrOfRec[newArrOfRec.length - 1] = new Discipline(surname, group, avgScore);
  298.                 newArrOfRec = Arrays.copyOf(newArrOfRec, newArrOfRec.length + 1);
  299.             }
  300.         }
  301.  
  302.         Discipline temp;
  303.         for(int i = 0; i < newArrOfRec.length - 2; i++) {
  304.             for(int j = 0; j < newArrOfRec.length - 2; j++) {
  305.                 if (newArrOfRec[j].avgScore() < newArrOfRec[j + 1].avgScore()) {
  306.                     temp = newArrOfRec[j];
  307.                     newArrOfRec[j] = newArrOfRec[j + 1];
  308.                     newArrOfRec[j + 1] = temp;
  309.                 }
  310.             }
  311.         }
  312.         if ((newArrOfRec.length - 1) > 0) {
  313.             if ((newArrOfRec.length - 1) > 8) {
  314.                 for (int i = 0; i < 8; i++) {
  315.                     System.out.print(newArrOfRec[i].name() + "\t" + newArrOfRec[i].group() + "\t" + newArrOfRec[i].avgScore() + "\n");
  316.                 }
  317.             } else {
  318.                 for (int i = 0; i < newArrOfRec.length - 1; i++) {
  319.                     System.out.print(newArrOfRec[i].name() + "\t" + newArrOfRec[i].group() + "\t" + newArrOfRec[i].avgScore() + "\n");
  320.                 }
  321.             }
  322.  
  323.             Arrays.fill(newArrOfRec, null);
  324.         } else {
  325.             System.out.println("нет студентов, которые будут слушать данную дисциплину");
  326.         }
  327.  
  328.     }
  329.  
  330.     private static String inputPath() {
  331.         String path;
  332.         boolean isCorrect;
  333.         do {
  334.             isCorrect = true;
  335.             System.out.println("Введите полный путь к файлу");
  336.             path = scanner.nextLine();
  337.             File file = new File(path);
  338.             if (!file.exists()) {
  339.                 isCorrect = false;
  340.                 System.out.println("Неверно введен путь");
  341.             }
  342.             if (!isCorrect && !file.canRead()) {
  343.                 isCorrect = false;
  344.                 System.out.println("Невозможно считать данные с файла");
  345.             }
  346.             if (!isCorrect && !file.canWrite()) {
  347.                 isCorrect = false;
  348.                 System.out.println("Невозможно записать данные в файл");
  349.             }
  350.         } while (!isCorrect);
  351.         return path;
  352.     }
  353.  
  354.     private static boolean checkDataCorrectness(String path) {
  355.         boolean isCorrect = true;
  356.         boolean isCorrectName, isCorrectGroup, isCorrectDiscipline, isCorrectAvrScore;
  357.         String str = null;
  358.         String[] mas;
  359.  
  360.         try {
  361.             Scanner fileReader = new Scanner(new File(path));
  362.             while((fileReader.hasNext())  & isCorrect) {
  363.                 str = fileReader.nextLine();
  364.                 mas = str.split(" ");
  365.                 if (mas.length > 4) {
  366.                     System.out.println("Проверьте корректность данных в файле");
  367.                     isCorrect = false;
  368.                 } else {
  369.                     isCorrectName = checkName(mas[0]);
  370.                     isCorrectGroup = checkGroup(Integer.parseInt(mas[1]));
  371.                     isCorrectDiscipline = checkDiscipline(mas[2]);
  372.                     isCorrectAvrScore = checkAvrScore(Float.parseFloat(mas[3]));
  373.                     if (!isCorrectName || !isCorrectGroup || !isCorrectDiscipline || !isCorrectAvrScore)
  374.                         isCorrect = false;
  375.                 }
  376.             }
  377.         } catch (Exception q) {
  378.             System.out.println("Проверьте корректность данных в файле.");
  379.             isCorrect = false;
  380.         }
  381.         return isCorrect;
  382.     }
  383.  
  384.     private static Student[] openData(String path) {
  385.         String str;
  386.         boolean isIncorrect = true;
  387.         String[] mas;
  388.         int i = 2;
  389.         try {
  390.             Scanner fileReader = new Scanner(new File(path));
  391.             while((fileReader.hasNext())  & isIncorrect) {
  392.                 str = fileReader.nextLine();
  393.                 mas = str.split(" ");
  394.                 isIncorrect = checkRepeats(mas[0], Integer.parseInt(mas[1]), mas[2], Float.parseFloat(mas[3]));
  395.                 if(isIncorrect) {
  396.                     arrOfRec[arrOfRec.length - 1] = new Student(mas[0], Integer.parseInt(mas[1]), mas[2], Float.parseFloat(mas[3]));
  397.                     arrOfRec = Arrays.copyOf(arrOfRec, i);
  398.                     i += 1;
  399.                 } else {
  400.                     System.out.println("Такая запись уже существует.");
  401.                 }
  402.             }
  403.         } catch (Exception q) {}
  404.         return arrOfRec;
  405.     }
  406.  
  407.     private static void saveData(String path) throws IOException {
  408.         FileWriter writer = new FileWriter(path);
  409.         for (int i = 0; i < arrOfRec.length - 1; i++) {
  410.             writer.write(arrOfRec[i].surname() + " " + arrOfRec[i].group() + " " +
  411.                     arrOfRec[i].discipline() + " " + arrOfRec[i].avgScore());
  412.             writer.write("\n");
  413.         }
  414.         writer.close();
  415.     }
  416.  
  417.     private static void getUserChoice(int num) throws IOException {
  418.         switch (num) {
  419.             case 1:
  420.                 addRecord();
  421.                 break;
  422.             case 2:
  423.                 if (arrOfRec.length > 1) {
  424.                     editRecord();
  425.                     break;
  426.                 } else {
  427.                     System.out.println("Добавьте запись.");
  428.                     break;
  429.                 }
  430.             case 3:
  431.                 if (arrOfRec.length > 1) {
  432.                     deleteRecord();
  433.                     break;
  434.                 } else {
  435.                     System.out.println("Добавьте запись.");
  436.                     break;
  437.                 }
  438.             case 4:
  439.                 if (arrOfRec.length > 1) {
  440.                     outputRecord();
  441.                     break;
  442.                 } else {
  443.                     System.out.println("Добавьте запись.");
  444.                     break;
  445.                 }
  446.             case 5:
  447.                 if (arrOfRec.length > 1) {
  448.                     saveData(inputPath());
  449.                     break;
  450.                 } else {
  451.                     System.out.println("Добавьте запись.");
  452.                     break;
  453.                 }
  454.             case 6:
  455.                 String path = inputPath();
  456.                 boolean isIncorrect = checkDataCorrectness(path);
  457.                 if (isIncorrect) {
  458.                     System.out.println("Данные были успешно считаны.");
  459.                     arrOfRec = openData(path);
  460.                     break;
  461.                 }
  462.             case 7:
  463.                 if (arrOfRec.length > 1) {
  464.                     newArrRec();
  465.                     break;
  466.                 } else {
  467.                     System.out.println("Добавьте запись.");
  468.                     break;
  469.                 }
  470.             case 0:
  471.                 System.exit(0);
  472.         }
  473.     }
  474. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement