Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import java.io.*;
- import java.nio.file.Files;
- import java.nio.file.Paths;
- import java.util.*;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public class Main {
- private static Scanner scConsole;
- private static List<Student> students = new ArrayList();
- private static List<Student> studentsCopy = new ArrayList();
- private static String pathToLastFile = "";
- private static boolean dataISSaved;
- private static boolean nowFilteredGroup, nowFilteredAvScore;
- private static short sortedBy;
- private static final String REG_EX_FOR_GROUP_NUMBER = "\\d{1,9}";
- private static final String REG_EX_FOR_SURNAME = "[a-zA-Zа-яА-Я][-a-zA-Zа-яА-Я]{0,14}[a-zA-Zа-яА-Я]";
- private static final String REG_EX_FOR_GRADE = "10|[1-9]|-";
- private static final String REG_EX_FOR_GROUP_NUMBER_PLUS_SURNAME = "(" + REG_EX_FOR_GROUP_NUMBER + " *|)" + REG_EX_FOR_SURNAME;
- private static final String REG_EX_FOR_ALL_GRADES = "((" + REG_EX_FOR_GRADE + ") *){0,3}(" + REG_EX_FOR_GRADE + ")?";
- private static final String REG_EX_FOR_WHOLE_STUDENT = REG_EX_FOR_GROUP_NUMBER_PLUS_SURNAME + " *" + REG_EX_FOR_ALL_GRADES;
- private static final String REG_EX_FOR_SEQUENCES = "^(\\d+( *, *| *- *\\d+ *, *))*\\d+(| *- *\\d+)$";
- private static final String REG_EX_PATH_TO_TXT_FILE = ".+\\.txt|^$";
- private static final String MES_PRESS_ENTER_TO_STOP = "(Нажмите Enter для отмены ввода)";
- private static final String ASK_PATH_TO_FILE = "Введите путь к файлу. " + MES_PRESS_ENTER_TO_STOP;
- private static final String CLARIFICATION_ASK_PATH_TO_FILE = "Введите абсолютный путь к текстовому файлу (.txt).";
- private static final String FORMAT_FOR_SPREADSHEET = "%-5s %-9s %-16s %-6s %-6s %-6s %-6s\n";
- private static final String HELP_INFO_STUDENT_INPUT = "Помощь по вводу информации о студенте:\n" +
- "\tДля ввода информации о студенте введите номер группы студента, фамилию, " +
- "оценки (математика, физика, программирование, инженерная графика).\n" +
- "\tВводить данные рекомендуется через пробел, но для увеличения скорости ввода данные можно вводить " +
- "и без пробелов.\n" +
- "\tГруппу и оценки вводить необязательно. На месте неизвестной оценки, если после неё есть известные " +
- "оценки, надо поставить знак \"-\".\n" +
- "\tНапример: \n\t\t- \"051007 Панев 10 9 8 7\", если известна вся информация\n\t\t- \"Хотянович - - 9\", " +
- "если известна только фомилия и оценка по программированию\n\t\t- \"Шаплов\", если известна только " +
- "фамилия.\n";
- private static short choose(String sQuestion, String[] Options) { // не больше 9-ти вариантов ответа
- short nChoice;
- String answer;
- StringBuilder optionsDigits = new StringBuilder();
- System.out.println(sQuestion + "\n\tВарианты: ");
- for (int i = 0; i < Options.length; i++) {
- System.out.println("\t" + (i + 1) + " - " + Options[i]);
- optionsDigits.append(i + 1);
- }
- answer = getAnythingFromConsole("", "^[" + optionsDigits + "]$", "Нужно ввести " +
- "цифру (одну из предложенных).");
- nChoice = (short) (Short.parseShort(answer) - 1);
- return nChoice;
- }
- private static String getAnythingFromConsole(String Question, String regEx, String clarification) {
- String sInput;
- String sOutput;
- final String stringIfNothingIsFoundInString = findRegEx(regEx, "\\^\\$", "")[0].equals("") ?
- "" : "EmptyStringIsAllowed,SoThisStringShouldNotBeEmpty";
- if (!Question.equals("")) {
- System.out.println(Question);
- }
- do {
- sInput = scConsole.nextLine().trim();
- sOutput = findRegEx(sInput, regEx, stringIfNothingIsFoundInString)[0];
- if (sOutput.equals(stringIfNothingIsFoundInString)) {
- System.err.println("Данные введены неверно. " + clarification + "\nПовторите попытку:");
- }
- } while (sOutput.equals(stringIfNothingIsFoundInString));
- System.out.println();
- return sOutput;
- }
- private static void sortingStudents(List<Student> studentList, short whatToSort) {
- switch (whatToSort) {
- case 0 -> studentList.sort(Comparator.comparing(Student::getGroupNumberForSorting));
- case 1 -> studentList.sort(Comparator.comparing(Student::getSurname));
- case 2 -> studentList.sort(Comparator.comparing(Student::getAverageScoreForSorting));
- }
- }
- private static String[] findRegEx(String sInput, String regEx, String outputIfNothingFound) {
- ArrayList<String> arrStringOutput = new ArrayList<>();
- Pattern pattern = Pattern.compile(regEx);
- Matcher matcher = pattern.matcher(sInput);
- if (matcher.find()) {
- do {
- arrStringOutput.add(matcher.group());
- } while (matcher.find());
- } else
- arrStringOutput.add(outputIfNothingFound);
- return arrStringOutput.toArray(new String[0]);
- }
- private static List<Integer> getNumbersFromGivenRanges(String input) {
- final String ERR_INCORRECT_INPUT = "Ошибка. Некорректный ввод.";
- final String ERR_INCORRECT_NUMBERS = "Ошибка. Некорректные числа (число).";
- final String REG_EX_RANGE = "\\b\\d+ *- *\\d+\\b";
- final String REG_EX_ANY_NUMBER = "\\b\\d+\\b";
- List<Integer> output = new ArrayList<>();
- boolean isCorrect = true;
- input = input.trim();
- String[] arrOfRanges = findRegEx(input, REG_EX_RANGE, "");
- if (!arrOfRanges[0].equals("")) {
- int n1 = 0;
- int n2 = 0;
- int i = 0;
- String range;
- while (isCorrect && i < arrOfRanges.length) {
- range = arrOfRanges[i];
- try {
- n1 = Integer.parseInt(findRegEx(range, "\\d+ *-", "")[0].
- replaceAll(" *-", ""));
- n2 = Integer.parseInt(findRegEx(range, "- *\\d+", "")[0].
- replaceAll("- *", ""));
- } catch (NumberFormatException e) {
- System.out.println(ERR_INCORRECT_INPUT);
- isCorrect = false;
- }
- if (isCorrect && (n1 > n2 || n1 < 1 || n2 > students.size())) {
- System.out.println(ERR_INCORRECT_NUMBERS);
- isCorrect = false;
- }
- if (isCorrect) {
- for (int j = n1; j < n2 + 1; j++) {
- if (!output.contains(j)) {
- output.add(j);
- }
- }
- }
- i++;
- }
- }
- String[] arrOfSingleNumbers = findRegEx(input.replaceAll(REG_EX_RANGE, ""), REG_EX_ANY_NUMBER, "");
- if (isCorrect && !arrOfSingleNumbers[0].equals("")) {
- int i = 0;
- int n = 0;
- while (isCorrect && i < arrOfSingleNumbers.length) {
- try {
- n = Integer.parseInt(arrOfSingleNumbers[i]);
- } catch (NumberFormatException e) {
- System.out.println(ERR_INCORRECT_INPUT);
- isCorrect = false;
- }
- if (isCorrect && (n < 1 || n > students.size())) {
- System.out.println(ERR_INCORRECT_NUMBERS);
- isCorrect = false;
- }
- if (isCorrect) {
- if (!output.contains(n)) {
- output.add(n);
- }
- }
- i++;
- }
- }
- return output;
- }
- private static void showStudentInfo(Student student, int numberBeforeStudent) {
- String output = String.format("%-5d %-9s %-16s %-6d %-6d %-6d %-6d", numberBeforeStudent, student.getGroupNumber(),
- student.getSurname(), student.getGradeMath(), student.getGradePhys(), student.getGradeProgramming(),
- student.getGradeEngGraph());
- output = output.replaceAll("\\b0\\b", " ");
- System.out.println(output);
- }
- private static void showData(List<Student> studentList, boolean shouldBeSortedByGroupAndAlphabet) {
- if (shouldBeSortedByGroupAndAlphabet) {
- sortedBy = 0;
- }
- switch (sortedBy) {
- case 0 -> System.out.println("Таблица отсортирована по умолчанию (по группам и по алфавиту внутри групп).");
- case 1 -> System.out.println("Таблица отсортирована по алфавиту.");
- case 2 -> System.out.println("Таблица отсортирована по среднему баллу по убыванию.");
- case 3 -> System.out.println("Таблица отсортирована по среднему баллу по возрастанию.");
- }
- if (nowFilteredGroup) {
- System.out.println("Показаны только студенты группы " + studentsCopy.get(0).getGroupNumber() + ".");
- }
- if (nowFilteredAvScore) {
- System.out.println("Включен фильтр среднего балла.");
- }
- System.out.println("\nСведения о результатах комплексной контрольной.");
- System.out.printf(FORMAT_FOR_SPREADSHEET, "№", "Группа", "Фамилия", "Матем", "Физика", "Прогр", "ИнжГр");
- if (shouldBeSortedByGroupAndAlphabet) {
- sortingStudents(studentList, (short) 1); // по фамилии и потом сразу по номеру группы
- sortingStudents(studentList, (short) 0);
- }
- int i = 1;
- for (Student student : studentList) {
- showStudentInfo(student, i);
- i++;
- }
- System.out.println();
- }
- private static void deleteStudents() {
- final String HELP_SEQUENCE_OF_NUMBERS_INPUT = "Например: \"2, 3, 5-12, 49\"";
- dataISSaved = false;
- List<Integer> integerList = new ArrayList<>();
- boolean processIsNotAborted = true;
- do {
- String strNumbers = getAnythingFromConsole("Введите номера студентов, которых нужно удалить " +
- "из списка.\n" + HELP_SEQUENCE_OF_NUMBERS_INPUT + "\n" + MES_PRESS_ENTER_TO_STOP,
- REG_EX_FOR_SEQUENCES + "|^$", "Надо перечислять номера студентов, которых вы хотите удалить из " +
- "списка через запятые.\nМожно использовать дефис для последовательностей чисел.\n" +
- HELP_SEQUENCE_OF_NUMBERS_INPUT);
- if (strNumbers.equals("")) {
- processIsNotAborted = false;
- } else {
- integerList = getNumbersFromGivenRanges(strNumbers);
- integerList.sort(Comparator.comparing(Integer::intValue));
- Collections.reverse(integerList);
- if (integerList.size() > 0) {
- for (int i : integerList) {
- students.remove(studentsCopy.get(i - 1));
- studentsCopy.remove(i - 1);
- }
- }
- }
- } while (integerList.size() < 1 && processIsNotAborted);
- }
- private static int getOneIntegerFromConsoleAndCanBeAborted(final String question, final int N_MIN, final int N_MAX) {
- final String ERR_INPUT = "Надо ввести число от " + N_MIN + " до " + N_MAX;
- String answer;
- boolean isInCorrect;
- int n = 0;
- do {
- isInCorrect = false;
- answer = getAnythingFromConsole(question + "\n" + MES_PRESS_ENTER_TO_STOP, "^$|^\\d+$", ERR_INPUT);
- if (!answer.equals("")) {
- try {
- n = Integer.parseInt(answer);
- } catch (NumberFormatException e) {
- System.out.println(ERR_INPUT);
- isInCorrect = true;
- }
- if (!isInCorrect && (n < N_MIN || n > N_MAX)) {
- System.out.println(ERR_INPUT);
- isInCorrect = true;
- }
- }
- } while (isInCorrect);
- return n;
- }
- private static void changeStudent() {
- final String MES_QUESTION = "Введите номер студента, данные которого следует изменить.";
- dataISSaved = false;
- int n = getOneIntegerFromConsoleAndCanBeAborted(MES_QUESTION, 1, studentsCopy.size()) - 1;
- System.out.println("Было:");
- System.out.printf(FORMAT_FOR_SPREADSHEET, "№", "Группа", "Фамилия", "Матем", "Физика",
- "Прогр", "ИнжГр");
- showStudentInfo(studentsCopy.get(n), n + 1);
- boolean processIsDone = addNewStudent("Теперь введите новые данные этого студента. ",
- "Данные студента успешно изменены.");
- if (processIsDone) {
- students.remove(studentsCopy.get(n));
- }
- }
- private static void sortStudents() {
- short answerOnQuestion = choose("Сортировать по...", new String[]{"группе",
- "алфавиту", "среднему баллу по убыванию",
- "среднему баллу по возрастанию", "назад"});
- switch (answerOnQuestion) {
- case 0 -> {
- sortingStudents(studentsCopy, (short) 1);
- sortingStudents(studentsCopy, (short) 0);
- }
- case 1 -> {
- sortingStudents(studentsCopy, (short) 0);
- sortingStudents(studentsCopy, (short) 1);
- }
- case 2 -> {
- sortingStudents(studentsCopy, (short) 1);
- sortingStudents(studentsCopy, (short) 0);
- sortingStudents(studentsCopy, (short) 2);
- Collections.reverse(studentsCopy);
- }
- case 3 -> {
- sortingStudents(studentsCopy, (short) 1);
- sortingStudents(studentsCopy, (short) 0);
- sortingStudents(studentsCopy, (short) 2);
- }
- }
- sortedBy = answerOnQuestion;
- }
- private static void filterByGroup() {
- final String ERR_NO_SUCH_GROUP_EXIST = "Ни одного человека с таким номером группы не найдено.";
- boolean isNotReady = true;
- do {
- String groupNumber = getAnythingFromConsole("Введите номер группы.\n" + MES_PRESS_ENTER_TO_STOP,
- "^$|^\\d+$", "Надо ввести последовательность цифр.")
- .replaceAll("\\b0+\\b", "0");
- if (groupNumber.equals("")) {
- isNotReady = false;
- } else if (groupNumber.equals("0")) {
- System.out.println(ERR_NO_SUCH_GROUP_EXIST);
- } else {
- List<Student> studentsCopyCopy = new ArrayList<>(studentsCopy);
- studentsCopyCopy.removeIf(st -> !st.getGroupNumber().equals(groupNumber));
- if (studentsCopyCopy.size() > 0) {
- studentsCopy = studentsCopyCopy;
- isNotReady = false;
- nowFilteredGroup = true;
- } else {
- System.out.println(ERR_NO_SUCH_GROUP_EXIST);
- }
- }
- } while (isNotReady);
- }
- private static void filterByAverageScore() {
- final String ERR_NO_RESULTS = "Ни одного человека с подходящим средним баллом не найдено.";
- boolean moreThan = choose("Средний балл должен быть...", new String[]{"больше или равен...",
- "меньше или равен..."}) == (short) 0;
- boolean isNotReady = true;
- do {
- int number = getOneIntegerFromConsoleAndCanBeAborted("введите число, с которым нужно сравнивать:",
- 1, 10);
- if (number > 0) {
- List<Student> studentsCopyCopy = new ArrayList<>(studentsCopy);
- if (moreThan) {
- studentsCopyCopy.removeIf(st -> st.getAverageScoreForSorting() < number);
- } else {
- studentsCopyCopy.removeIf(st -> st.getAverageScoreForSorting() > number);
- }
- if (studentsCopyCopy.size() > 0) {
- studentsCopy = studentsCopyCopy;
- isNotReady = false;
- nowFilteredAvScore = true;
- } else {
- System.out.println(ERR_NO_RESULTS);
- }
- } else {
- isNotReady = false;
- }
- } while (isNotReady);
- }
- private static void filterAndSortReset() {
- sortingStudents(students, (short) 1);
- sortingStudents(students, (short) 0);
- studentsCopy = new ArrayList<>(students);
- nowFilteredAvScore = false;
- nowFilteredGroup = false;
- sortedBy = 0;
- }
- private static void filterStudents() {
- final String[] OPTIONS = new String[]{"убрать все фильтры и сбросить сортировку",
- "добавить фильтр по группе", "добавить фильтр по среднему баллу", "назад"};
- String[] options;
- if (!nowFilteredAvScore && !nowFilteredGroup) {
- options = new String[]{OPTIONS[1], OPTIONS[2], OPTIONS[3]};
- } else if (!nowFilteredAvScore) {
- options = new String[]{OPTIONS[0], OPTIONS[2], OPTIONS[3]};
- } else if (!nowFilteredGroup) {
- options = new String[]{OPTIONS[0], OPTIONS[1], OPTIONS[3]};
- } else {
- options = new String[]{OPTIONS[0], OPTIONS[3]};
- }
- short answerOnQuestion = choose("Фильтры", options);
- if (options.length == 3) {
- if (options[0].equals(OPTIONS[0])) {
- switch (answerOnQuestion) {
- case 0 -> filterAndSortReset();
- case 1 -> {
- if (options[1].equals(OPTIONS[1])) {
- filterByGroup();
- } else {
- filterByAverageScore();
- }
- }
- }
- } else {
- switch (answerOnQuestion) {
- case 0 -> filterByGroup();
- case 1 -> filterByAverageScore();
- }
- }
- } else if (answerOnQuestion == 0) {
- filterAndSortReset();
- }
- }
- private static void watchData() {
- short answerOnQuestion;
- boolean isSorted = false;
- filterAndSortReset();
- do {
- if (students.size() < 1) {
- System.err.println("База данных пуста.\n");
- answerOnQuestion = 5;
- } else {
- showData(studentsCopy, !isSorted);
- answerOnQuestion = choose("Просмотр и изменение данных", new String[]{"добавить студента(ов)",
- "удалить студента(ов)", "изменить информацию об одном студенте",
- "сортировать по...", "фильтры...", "назад"});
- switch (answerOnQuestion) {
- case 0 -> {
- addNewStudents();
- filterAndSortReset();
- isSorted = false;
- }
- case 1 -> deleteStudents();
- case 2 -> {
- changeStudent();
- filterAndSortReset();
- isSorted = false;
- }
- case 3 -> {
- sortStudents();
- isSorted = true;
- }
- case 4 -> filterStudents();
- }
- System.out.println();
- }
- } while (answerOnQuestion != 5);
- }
- private static void addNewStudentBasedOnString(String input) {
- short gradeMath;
- short gradePhys = 0;
- short gradeProgramming = 0;
- short gradeEngGraph = 0;
- String groupNumberWithSurname = findRegEx(input, REG_EX_FOR_GROUP_NUMBER_PLUS_SURNAME, "")[0];
- String groupNumber = groupNumberWithSurname.replaceAll(REG_EX_FOR_SURNAME, "").trim().
- replaceAll("\\b0+\\b", "");
- String surname = findRegEx(input, REG_EX_FOR_SURNAME, "")[0];
- String gradesWithSurname = findRegEx(input, REG_EX_FOR_SURNAME + " *" + REG_EX_FOR_ALL_GRADES, "")[0];
- String grades = gradesWithSurname.replaceAll(REG_EX_FOR_SURNAME, "").trim();
- String[] arrGrades = findRegEx(grades, REG_EX_FOR_GRADE, "0");
- gradeMath = Short.parseShort(arrGrades[0].equals("-") ? "0" : arrGrades[0]);
- if (arrGrades.length > 1) {
- gradePhys = Short.parseShort(arrGrades[1].equals("-") ? "0" : arrGrades[1]);
- }
- if (arrGrades.length > 2) {
- gradeProgramming = Short.parseShort(arrGrades[2].equals("-") ? "0" : arrGrades[2]);
- }
- if (arrGrades.length > 3) {
- gradeEngGraph = Short.parseShort(arrGrades[3].equals("-") ? "0" : arrGrades[3]);
- }
- students.add(new Student(groupNumber, surname, gradeMath, gradePhys, gradeProgramming, gradeEngGraph));
- }
- private static boolean addNewStudent(final String MES_QUESTION, final String MES_PROCESS_DONE) {
- String input = getAnythingFromConsole(MES_QUESTION + MES_PRESS_ENTER_TO_STOP + ": ",
- "^$|^(" + REG_EX_FOR_WHOLE_STUDENT + ")$",
- "Номером группы может являться последовательность цифр длиной до 9-ти. Фамилия может " +
- "состоять из букв и знаков \"-\" (от 2-ух до 16-ти символов).");
- if (!input.equals("")) {
- dataISSaved = false;
- addNewStudentBasedOnString(input);
- System.out.println(MES_PROCESS_DONE);
- }
- return !input.equals("");
- }
- private static void addNewStudents() {
- final String MES_QUESTION = "Введите информацию о студенте. ";
- final String MES_PROCESS_DONE = "Студент успешно добавлен.\n";
- boolean processIsNotAborted;
- do {
- processIsNotAborted = addNewStudent(MES_QUESTION, MES_PROCESS_DONE);
- } while (processIsNotAborted);
- }
- private static void manageData() {
- short answerOnQuestion;
- do {
- answerOnQuestion = choose("Управление данными", new String[]{"просмотреть данные",
- "добавить студента(ов)", "помощь по вводу информации о студенте",
- "сохранить как...", pathToLastFile.equals("") ? "сохранить (сейчас функция недоступна)" :
- "сохранить в \"" + pathToLastFile + "\"", "выйти в главное меню"});
- switch (answerOnQuestion) {
- case 0 -> watchData();
- case 1 -> addNewStudents();
- case 2 -> System.out.println(HELP_INFO_STUDENT_INPUT);
- case 3 -> saveDBToFile("");
- case 4 -> {
- if (pathToLastFile.equals("")) {
- System.out.println("Эта функция станет доступна после того, как вы откроете файл или " +
- "сохраните данные в файл.\n");
- } else if (dataISSaved) {
- System.out.println("Данные уже сохранены.\n");
- } else {
- saveDBToFile(pathToLastFile);
- }
- }
- case 5 -> {
- if (!dataISSaved && choose("Вы уверены, что хотите выйти? " +
- "Все несохранённые данные будут безвозвратно утеряны.", new String[]{"да", "нет, вернуться"}) == 1) {
- answerOnQuestion = -1;
- }
- }
- }
- } while (answerOnQuestion != 5);
- }
- private static void createNewDB() {
- students.clear();
- dataISSaved = true;
- pathToLastFile = "";
- System.out.println(HELP_INFO_STUDENT_INPUT);
- addNewStudents();
- }
- private static void saveDBToFile(String sPathToFile) {
- final String MES_OUTPUT_DONE = "Данные успешно записаны в файл.\n";
- final String ERROR_COULD_NOT_OPEN_OR_CREATE_OR_WRITE_FILE = "Ошибка. Не удалось создать, открыть или записать " +
- "текстовый файл в заданной Вами директории.";
- sortingStudents(students, (short) 1); // по фамилии и потом сразу по номеру группы
- sortingStudents(students, (short) 0);
- boolean isNotCorrect = true;
- boolean processIsNotAborted = true;
- boolean loopIsNotFirstTime = false;
- do {
- if (sPathToFile.equals("") || loopIsNotFirstTime) {
- sPathToFile = getAnythingFromConsole(ASK_PATH_TO_FILE, REG_EX_PATH_TO_TXT_FILE,
- CLARIFICATION_ASK_PATH_TO_FILE);
- }
- loopIsNotFirstTime = true;
- if (sPathToFile.equals("")) {
- processIsNotAborted = false;
- } else {
- if (Files.exists(Paths.get(sPathToFile)) && choose("Файл \"" + sPathToFile +
- "\" уже существует.\n" + "Вы уверены, что хотите перезаписать файл? Все текущие данные в этом " +
- "файле будут безвозвратно утеряны.", new String[]{"да, перезаписать файл.",
- "нет, выбрать другой файл."}) == 0) {
- try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(new File(sPathToFile)))) {
- for (Student st : students) {
- bufferedWriter.append(st.getAllInfo()).append("\n");
- }
- isNotCorrect = false;
- System.out.println(MES_OUTPUT_DONE);
- dataISSaved = true;
- pathToLastFile = sPathToFile;
- } catch (java.io.IOException e) {
- System.out.println(ERROR_COULD_NOT_OPEN_OR_CREATE_OR_WRITE_FILE);
- }
- }
- }
- } while (isNotCorrect && processIsNotAborted);
- }
- private static boolean openDBFromFile() {
- final String MES_INPUT_DONE = "Данные успешно импортированы.\n";
- final String ERROR_COULD_NOT_OPEN_OR_READ_FILE = "Ошибка. Не удалось открыть или прочитать " +
- "текстовый файл в заданной Вами директории.";
- boolean isNotCorrect = true;
- boolean processIsNotAborted = true;
- do {
- String sPathToFile = getAnythingFromConsole(ASK_PATH_TO_FILE, REG_EX_PATH_TO_TXT_FILE,
- CLARIFICATION_ASK_PATH_TO_FILE);
- if (sPathToFile.equals("")) {
- processIsNotAborted = false;
- } else {
- try (BufferedReader bufferedReader = new BufferedReader(new FileReader(new File(sPathToFile)))) {
- String temp;
- students.clear();
- boolean isCorrect = true;
- do {
- temp = bufferedReader.readLine();
- if (temp != null) {
- temp = temp.replaceAll("\\b0\\b", "-");
- if (findRegEx(temp, REG_EX_FOR_WHOLE_STUDENT, "")[0].equals("")) {
- System.out.println("Ошибка. Как минимум одна строка в файле записана неверно. " +
- "Не удалось импортировать данные.");
- isCorrect = false;
- students.clear();
- } else {
- addNewStudentBasedOnString(temp);
- }
- }
- } while (temp != null && isCorrect);
- if (isCorrect) {
- isNotCorrect = false;
- System.out.println(MES_INPUT_DONE);
- dataISSaved = true;
- pathToLastFile = sPathToFile;
- }
- } catch (java.io.IOException e) {
- System.out.println(ERROR_COULD_NOT_OPEN_OR_READ_FILE);
- }
- }
- } while (isNotCorrect && processIsNotAborted);
- return processIsNotAborted;
- }
- private static void showHelp() {
- short answerOnQuestion;
- do {
- answerOnQuestion = choose("Справка", new String[]{"о программе", "задание", "автор", "назад"});
- switch (answerOnQuestion) {
- case 0 -> System.out.println("О программе:\n" +
- "\tВы можете просматривать базу данных, изменять её компоненты, добавлять и удалять строки.\n" +
- "\tВы также можете сортировать и фильровать данные.\n");
- case 1 -> System.out.println("Задание:\n\tВывести в алфавитном порядке список тех студентов группы Х" +
- ", у которых средний балл за контрольную 7 и выше.\n");
- case 2 -> System.out.println("Автор:\n\tПанев Александр, гр. 051007\n\tМинск, 2021\n");
- }
- } while (answerOnQuestion != 3);
- }
- private static void mainMenu() {
- short answerOnQuestion;
- do {
- answerOnQuestion = choose("Главное меню",
- new String[]{"создать новую базу", "открыть имеющуюся базу из файла", "показать справку", "закрыть программу"});
- switch (answerOnQuestion) {
- case 0 -> {
- createNewDB();
- manageData();
- }
- case 1 -> {
- if (openDBFromFile()) {
- manageData();
- }
- }
- case 2 -> showHelp();
- }
- } while (answerOnQuestion != 3);
- }
- public static void main(String[] args) {
- scConsole = new Scanner(System.in);
- System.out.println("Добро пожаловать в программу \"Laba 4.1 - Панев Александр, гр. 051007\"\n");
- // /Users/sasha/Documents/___Университет/ОАиП/Пз/Лабы/блок 4/laba 4_1/data.txt
- mainMenu();
- System.out.println("До свидания");
- scConsole.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment