Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.*;
- import java.io.File;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.util.*;
- record Student(String surname, int group, String discipline, float avgScore){}
- record Discipline(String name, int group, float avgScore){}
- public class Main {
- static final String discipline1 = "ОАиП";
- static final String discipline2 = "АиСД";
- static final String discipline3 = "КПО";
- static final String discipline4 = "ИКГ";
- static final String discipline5 = "физика";
- static Scanner scanner = new Scanner(System.in);
- static Student[] arrOfRec = new Student[1];
- public static void main(String[] args) throws IOException {
- int num = 0;
- System.out.println("Эта программа записывает студентов, которые хотят слушать выбранную ими дисциплину");
- do {
- getInfo();
- num = getNum();
- getUserChoice(num);
- } while (num != 0);
- scanner.close();
- }
- private static void getInfo () {
- System.out.println("1 - Добавить запись. \n2 - Редактировать запись. \n3 - Удалить запись. \n4 - Показать все записи." +
- "\n5 - Сохранить данные в файл. \n6 - Получить данные из файла. \n7 - Вывести информацию о студентах. \n0 - Нажмите чтобы выйти" +
- ".");
- }
- private static int getNum() {
- int choice = 0;
- int MIN = 0;
- int MAX = 8;
- boolean isCorrect;
- do {
- isCorrect = true;
- try{
- choice = Integer.parseInt(scanner.nextLine());
- } catch (NumberFormatException e) {
- isCorrect = false;
- System.out.println("Проверьте корректность данных");
- }
- if (isCorrect & (choice < MIN || choice > MAX)) {
- isCorrect = false;
- }
- } while (!isCorrect);
- return choice;
- }
- private static Student[] addRecord() {
- String surname, discipline;
- int group;
- float avgScore;
- boolean isCorrect = true;
- surname = inputName();
- group = inputGroup();
- discipline = inputDisc("которую хочет слушать студент");
- avgScore = inputScore();
- if (arrOfRec.length > 1) {
- isCorrect = checkRepeats(surname, group, discipline, avgScore);
- }
- if (isCorrect) {
- arrOfRec[arrOfRec.length - 1] = new Student(surname, group, discipline, avgScore);
- arrOfRec = Arrays.copyOf(arrOfRec, arrOfRec.length + 1);
- }
- return arrOfRec;
- }
- public static String inputName() {
- String str;
- boolean isCorrect;
- do {
- isCorrect = true;
- System.out.print("Введите фамилию: ");
- str = scanner.nextLine();
- isCorrect = checkName(str);
- } while (!isCorrect);
- return str;
- }
- private static boolean checkName(String name) {
- boolean isCorrect = false;
- int MIN = 1;
- int MAX = 20;
- if (name.length() < MIN || name.length() > MAX) {
- System.out.println("Вы вышли за пределы диапазона [1; 20]");
- } else {
- isCorrect = true;
- }
- return isCorrect;
- }
- public static String inputDisc(String str) {
- System.out.println("Введите от 1 до 5, чтобы выбрать дисциплину "+ str + ":");
- System.out.println("1. "+discipline1+"\n2. "+discipline2+"\n3. "+discipline3+"\n4. "+discipline4+"\n5. "+discipline5);
- int num = selectDisc();
- switch (num) {
- case (1) -> str = discipline1;
- case (2) -> str = discipline2;
- case (3) -> str = discipline3;
- case (4) -> str = discipline4;
- case (5) -> str = discipline5;
- }
- return str;
- }
- private static boolean checkDiscipline(String str) {
- boolean isCorrect = false;
- if ((Objects.equals(str, discipline1)) || (Objects.equals(str, discipline2)) || (Objects.equals(str, discipline3)) || (Objects.equals(str, discipline4)) || (Objects.equals(str, discipline5))) {
- isCorrect = true;
- } else {
- System.out.println("Ошибка ввода дисциплины");
- }
- return isCorrect;
- }
- public static int inputGroup() {
- boolean isCorrect;
- int num = 0;
- do {
- isCorrect = true;
- System.out.print("Введите группу: ");
- try {
- num = Integer.parseInt(scanner.nextLine());
- } catch (NumberFormatException e) {
- System.out.println("Проверьте корректность введенных данных");
- isCorrect = false;
- }
- if (isCorrect) {
- isCorrect = checkGroup(num);
- }
- } while (!isCorrect);
- return num;
- }
- public static boolean checkGroup(int num) {
- boolean isCorrect = false;
- int MIN = 251001;
- int MAX = 251005;
- if (num < MIN || num > MAX) {
- System.out.println("Введите группы " + MIN + " - " + MAX);
- } else {
- isCorrect = true;
- }
- return isCorrect;
- }
- public static float inputScore() {
- boolean isCorrect;
- float score = 0;
- do {
- isCorrect = true;
- System.out.print("Введите средний балл: ");
- try {
- score = Float.parseFloat(scanner.nextLine());
- } catch (Exception e) {
- System.out.println("Проверьте корректность введенных данных");
- isCorrect = false;
- }
- if(isCorrect) {
- isCorrect = checkAvrScore(score);
- }
- } while (!isCorrect);
- return score;
- }
- public static boolean checkAvrScore (float score) {
- boolean isCorrect = false;
- int MIN = 1;
- int MAX = 10;
- if (score < MIN || score > MAX) {
- System.out.println("Введите оценки от " + MIN + " до " + MAX);
- } else {
- isCorrect = true;
- }
- return isCorrect;
- }
- private static Student[] editRecord() {
- boolean isCorrect = true;
- int numOfRecord = getNumberOfRecord(arrOfRec.length - 1, "редактировать");
- String surname, discipline;
- int group;
- float avgScore;
- surname = inputName();
- group = inputGroup();
- discipline = inputDisc("которую хотите редактировать");
- avgScore = inputScore();
- if (arrOfRec.length > 1) {
- isCorrect = checkRepeats(surname, group, discipline, avgScore);
- }
- if (isCorrect) {
- arrOfRec[numOfRecord - 1] = new Student(surname, group, discipline, avgScore);
- }
- return arrOfRec;
- }
- private static Student[] deleteRecord() {
- int numOfRecord = getNumberOfRecord(arrOfRec.length - 1, "удалить");
- arrOfRec[numOfRecord - 1] = null;
- arrOfRec = Arrays.copyOf(arrOfRec, arrOfRec.length - 1);
- if (numOfRecord < arrOfRec.length) {
- for (int i = numOfRecord; i < arrOfRec.length; i++) {
- arrOfRec[i - 1] = arrOfRec[i];
- }
- arrOfRec[arrOfRec.length - 1] = null;
- }
- return arrOfRec;
- }
- private static int getNumberOfRecord(int length, String str) {
- int num = 0;
- final int MIN_NUM = 1;
- Scanner scan = new Scanner(System.in);
- boolean isIncorrect;
- do {
- isIncorrect = false;
- System.out.print("Введите номер записи которую хотите " + str + ": ");
- try {
- num = Integer.parseInt(scan.nextLine());
- } catch (Exception q) {
- isIncorrect = true;
- System.out.println("You didn't enter number. Input must consist only digits.");
- }
- if (!isIncorrect & (num < MIN_NUM || num > length)) {
- isIncorrect = true;
- System.out.println("Invalid input range.");
- }
- } while (isIncorrect);
- return num;
- }
- public static boolean checkRepeats(String surname, int group, String discipline, float avgScore) {
- boolean isCorrect = true;
- if(arrOfRec.length > 1) {
- for(int i = 0; i < arrOfRec.length - 1; i++) {
- if((surname.equals(arrOfRec[i].surname())) & (group == arrOfRec[i].group()) & (discipline.equals(arrOfRec[i].discipline())) & (avgScore == arrOfRec[i].avgScore())) {
- isCorrect = false;
- System.out.println("Такая запись уже существует");
- break;
- }
- }
- }
- return isCorrect;
- }
- private static void outputRecord() {
- for(int i = 0; i < arrOfRec.length - 1; i++) {
- System.out.print(arrOfRec[i].surname() + " " + arrOfRec[i].group() + " " + arrOfRec[i].discipline() + " " + arrOfRec[i].avgScore() + "\n");
- }
- }
- private static int selectDisc() {
- int num = 0;
- boolean isCorrect;
- do {
- System.out.print("Выберите дисциплину: ");
- isCorrect = true;
- try {
- num = Integer.parseInt(scanner.nextLine());
- } catch (Exception e) {
- isCorrect = false;
- System.out.println("Проверьте корректность данных");
- }
- if (isCorrect & (num < 1 || num > 5)) {
- isCorrect = false;
- System.out.println("Введите числа от 1 до 5");
- }
- } while (!isCorrect);
- return num;
- }
- private static void newArrRec() {
- String str = inputDisc("которая будет читаться");
- Discipline[] newArrOfRec = new Discipline[1];
- String surname;
- int group;
- float avgScore;
- for(int i = 0; i < arrOfRec.length - 1; i++) {
- if(Objects.equals(arrOfRec[i].discipline(), str)) {
- surname = arrOfRec[i].surname();
- group = arrOfRec[i].group();
- avgScore = arrOfRec[i].avgScore();
- newArrOfRec[newArrOfRec.length - 1] = new Discipline(surname, group, avgScore);
- newArrOfRec = Arrays.copyOf(newArrOfRec, newArrOfRec.length + 1);
- }
- }
- Discipline temp;
- for(int i = 0; i < newArrOfRec.length - 2; i++) {
- for(int j = 0; j < newArrOfRec.length - 2; j++) {
- if (newArrOfRec[j].avgScore() < newArrOfRec[j + 1].avgScore()) {
- temp = newArrOfRec[j];
- newArrOfRec[j] = newArrOfRec[j + 1];
- newArrOfRec[j + 1] = temp;
- }
- }
- }
- if ((newArrOfRec.length - 1) > 0) {
- if ((newArrOfRec.length - 1) > 8) {
- for (int i = 0; i < 8; i++) {
- System.out.print(newArrOfRec[i].name() + "\t" + newArrOfRec[i].group() + "\t" + newArrOfRec[i].avgScore() + "\n");
- }
- } else {
- for (int i = 0; i < newArrOfRec.length - 1; i++) {
- System.out.print(newArrOfRec[i].name() + "\t" + newArrOfRec[i].group() + "\t" + newArrOfRec[i].avgScore() + "\n");
- }
- }
- Arrays.fill(newArrOfRec, null);
- } else {
- System.out.println("нет студентов, которые будут слушать данную дисциплину");
- }
- }
- private static String inputPath() {
- String path;
- boolean isCorrect;
- do {
- isCorrect = true;
- System.out.println("Введите полный путь к файлу");
- path = scanner.nextLine();
- File file = new File(path);
- if (!file.exists()) {
- isCorrect = false;
- System.out.println("Неверно введен путь");
- }
- if (!isCorrect && !file.canRead()) {
- isCorrect = false;
- System.out.println("Невозможно считать данные с файла");
- }
- if (!isCorrect && !file.canWrite()) {
- isCorrect = false;
- System.out.println("Невозможно записать данные в файл");
- }
- } while (!isCorrect);
- return path;
- }
- private static boolean checkDataCorrectness(String path) {
- boolean isCorrect = true;
- boolean isCorrectName, isCorrectGroup, isCorrectDiscipline, isCorrectAvrScore;
- String str = null;
- String[] mas;
- try {
- Scanner fileReader = new Scanner(new File(path));
- while((fileReader.hasNext()) & isCorrect) {
- str = fileReader.nextLine();
- mas = str.split(" ");
- if (mas.length > 4) {
- System.out.println("Проверьте корректность данных в файле");
- isCorrect = false;
- } else {
- isCorrectName = checkName(mas[0]);
- isCorrectGroup = checkGroup(Integer.parseInt(mas[1]));
- isCorrectDiscipline = checkDiscipline(mas[2]);
- isCorrectAvrScore = checkAvrScore(Float.parseFloat(mas[3]));
- if (!isCorrectName || !isCorrectGroup || !isCorrectDiscipline || !isCorrectAvrScore)
- isCorrect = false;
- }
- }
- } catch (Exception q) {
- System.out.println("Проверьте корректность данных в файле.");
- isCorrect = false;
- }
- return isCorrect;
- }
- private static Student[] openData(String path) {
- String str;
- boolean isIncorrect = true;
- String[] mas;
- int i = 2;
- try {
- Scanner fileReader = new Scanner(new File(path));
- while((fileReader.hasNext()) & isIncorrect) {
- str = fileReader.nextLine();
- mas = str.split(" ");
- isIncorrect = checkRepeats(mas[0], Integer.parseInt(mas[1]), mas[2], Float.parseFloat(mas[3]));
- if(isIncorrect) {
- arrOfRec[arrOfRec.length - 1] = new Student(mas[0], Integer.parseInt(mas[1]), mas[2], Float.parseFloat(mas[3]));
- arrOfRec = Arrays.copyOf(arrOfRec, i);
- i += 1;
- } else {
- System.out.println("Такая запись уже существует.");
- }
- }
- } catch (Exception q) {}
- return arrOfRec;
- }
- private static void saveData(String path) throws IOException {
- FileWriter writer = new FileWriter(path);
- for (int i = 0; i < arrOfRec.length - 1; i++) {
- writer.write(arrOfRec[i].surname() + " " + arrOfRec[i].group() + " " +
- arrOfRec[i].discipline() + " " + arrOfRec[i].avgScore());
- writer.write("\n");
- }
- writer.close();
- }
- private static void getUserChoice(int num) throws IOException {
- switch (num) {
- case 1:
- addRecord();
- break;
- case 2:
- if (arrOfRec.length > 1) {
- editRecord();
- break;
- } else {
- System.out.println("Добавьте запись.");
- break;
- }
- case 3:
- if (arrOfRec.length > 1) {
- deleteRecord();
- break;
- } else {
- System.out.println("Добавьте запись.");
- break;
- }
- case 4:
- if (arrOfRec.length > 1) {
- outputRecord();
- break;
- } else {
- System.out.println("Добавьте запись.");
- break;
- }
- case 5:
- if (arrOfRec.length > 1) {
- saveData(inputPath());
- break;
- } else {
- System.out.println("Добавьте запись.");
- break;
- }
- case 6:
- String path = inputPath();
- boolean isIncorrect = checkDataCorrectness(path);
- if (isIncorrect) {
- System.out.println("Данные были успешно считаны.");
- arrOfRec = openData(path);
- break;
- }
- case 7:
- if (arrOfRec.length > 1) {
- newArrRec();
- break;
- } else {
- System.out.println("Добавьте запись.");
- break;
- }
- case 0:
- System.exit(0);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement