Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.util.*;
- import static java.lang.Math.round;
- public class Main {
- private static final int TYPE_CHOICE_CONTINUE_OR_EXIT = 1;
- private static final int TYPE_CHOICE_FUNCTION = 0;
- private static final int MIN_RATING = 0;
- private static final int MAX_RATING = 1000;
- private static final int MAX_COUNTRY_NAME_LENGTH = 25;
- private static final int MAX_NAME_LENGTH = 25;
- private static final int MAX_SECOND_NAME_LENGTH = 20;
- private static final Scanner consoleScan = new Scanner(System.in);
- static class footballTeam {
- String country;
- String name;
- String secondName;
- int rating;
- public footballTeam(String country, String name, String secondName, int rating) {
- this.country = country;
- this.name = name;
- this.secondName = secondName;
- this.rating = rating;
- }
- }
- static footballTeam[] listOfTeams = new footballTeam[1];
- private static void writeTask() {
- System.out.println("--------------------------------------------------------------" +
- "\nДанная программа позволяет вести учёт футбольных команд.");
- }
- private static void print(int typeChoice) {
- if (typeChoice == TYPE_CHOICE_FUNCTION)
- System.out.println("--------------------------------------------------------------\n" +
- "Выберите действие:\n" +
- "1 - добавить данные в список команд.\n" +
- "2 - редактировать данные в списке команд.\n" +
- "3 - удалить данные из списка команд.\n" +
- "4 - просмотр данных в списке команд.\n" +
- "5 - вывод отсортированного по рейтингу списка команд.\n" +
- "6 - импорт данных из файла.\n" +
- "7 - экспорт данных в файл.\n" +
- "0 - конец работы и выключение программы.\n" +
- "--------------------------------------------------------------");
- else if (typeChoice == TYPE_CHOICE_CONTINUE_OR_EXIT)
- System.out.println("Повторить действие?\n" +
- "1 - да.\n" +
- "2 - нет.");
- }
- private static int inputNumber(int min, int max) {
- int num = 0;
- boolean isNotCorrect;
- do {
- isNotCorrect = false;
- try {
- num = Integer.parseInt(consoleScan.nextLine());
- } catch (NumberFormatException e) {
- System.out.println("Вы ввели некорректные данные! Попробуйте еще:");
- isNotCorrect = true;
- }
- if (!isNotCorrect && (num < min || num > max)) {
- System.out.println("Введено значение не входящее в диапазон допустимых! Попробуйте еще:");
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- return num;
- }
- private static boolean checkDataString(String dataString, int maxLength) {
- boolean isIncorrect;
- int index;
- String enabledSimbols;
- enabledSimbols = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
- isIncorrect = false;
- if (dataString.length() > maxLength) {
- isIncorrect = true;
- System.out.println("Вы превысили допустимую длину!");
- }
- if (dataString.isEmpty()) {
- System.out.println("Значение не может быть пустым!");
- isIncorrect = true;
- }
- if (!isIncorrect) {
- for (int i = 0; i < dataString.length() && !isIncorrect; i++) {
- if (dataString.charAt(i) == '@'){
- isIncorrect = true;
- System.out.println("Строка не может содержать символ @!");
- }
- index = enabledSimbols.indexOf(dataString.charAt(i));
- if (index == -1){
- isIncorrect = true;
- System.out.println("Строка должна содержать латинские или кириллические буквы");
- }
- }
- }
- return isIncorrect;
- }
- private static String inputCountry() {
- String Country;
- boolean isIncorrect;
- do {
- System.out.println("Введите страну команды (до 25 символов):");
- Country = consoleScan.nextLine();
- isIncorrect = checkDataString(Country, MAX_COUNTRY_NAME_LENGTH);
- } while (isIncorrect);
- return Country;
- }
- private static String inputName() {
- String name;
- boolean isIncorrect;
- do {
- System.out.println("Введите название команды (до 25 символов):");
- name = consoleScan.nextLine();
- isIncorrect = checkDataString(name, MAX_NAME_LENGTH);
- } while (isIncorrect);
- return name;
- }
- private static String inputSecondName() {
- String secondName;
- boolean isIncorrect;
- do {
- System.out.println("Введите фамилию главного тренера (до 20 символов):");
- secondName = consoleScan.nextLine();
- isIncorrect = checkDataString(secondName, MAX_SECOND_NAME_LENGTH);
- } while (isIncorrect);
- return secondName;
- }
- private static int inputRating() {
- int rating;
- System.out.println("Введите рейтинг команды (число очков от 0 до 1000):");
- rating = inputNumber(MIN_RATING, MAX_RATING);
- return rating;
- }
- private static boolean checkOnSimilarRecord(String country, String name, String secondName) {
- boolean isEqualRecords = false;
- for (int i = 0; i < listOfTeams.length - 1 && !isEqualRecords; i++)
- isEqualRecords = (country.equals(listOfTeams[i].country) && name.equals(listOfTeams[i].name) && secondName.equals(listOfTeams[i].secondName));
- return isEqualRecords;
- }
- private static void takeInfoFromFile() {
- File file;
- String path = enterInputPath();
- String currentString;
- boolean isCorrect;
- file = new File(path);
- try (Scanner fileScan = new Scanner(file)) {
- while (fileScan.hasNextLine()) {
- currentString = fileScan.nextLine();
- String[] words = currentString.split("@");
- isCorrect = !(checkOnSimilarRecord(words[0], words[1], words[2]));
- if (isCorrect) {
- saveRecord(words[0], words[1], words[2], Integer.parseInt(words[3]));
- } else
- System.out.println("В файле встречена запись, идентичная уже имеющимся данным!\n" + "Запись импортирована не будет.");
- }
- } catch (Exception e) {
- System.out.println("Проверьте корректность данных в файле!");
- }
- }
- private static String enterOutputPath() {
- String path;
- boolean isFileIncorrect;
- do {
- isFileIncorrect = false;
- System.out.println("Введите путь к файлу:");
- path = consoleScan.nextLine();
- File file = new File(path);
- if (file.isDirectory()) {
- System.out.println("Ошибка! Файл не найден!");
- isFileIncorrect = true;
- }
- else {
- try {
- if (!file.createNewFile() && !file.canWrite()) {
- System.out.println("Ошибка! Файл доступен только для чтения!");
- isFileIncorrect = true;
- }
- } catch (IOException e) {
- System.out.println("Ошибка! Не удалось записать информацию в файл!");
- isFileIncorrect = true;
- }
- }
- } while (isFileIncorrect);
- return path;
- }
- private static String enterInputPath() {
- String path;
- boolean isFileIncorrect;
- do {
- isFileIncorrect = false;
- System.out.println("Введите путь к файлу:");
- path = consoleScan.nextLine();
- File file = new File(path);
- if (!file.isFile()) {
- System.out.println("Файл не найден! Пожалуйста проверьте существование файла и введите путь заново");
- isFileIncorrect = true;
- }
- if (!isFileIncorrect && !file.canRead() ) {
- System.out.println("Файл не может быть прочитан! Пожалуйста проверьте файл и введите путь заново");
- isFileIncorrect = true;
- }
- if (!isFileIncorrect) {
- isFileIncorrect = checkInfInFile(path);
- }
- } while (isFileIncorrect);
- return path;
- }
- private static boolean checkInfInFile(String path) {
- String currentString;
- File checkFile;
- boolean isNotCorrectCountry;
- boolean isNotCorrectName;
- boolean isNotCorrectSecondName;
- boolean isNotCorrectRating;
- boolean isIncorrect;
- checkFile = new File(path);
- isNotCorrectRating = false;
- isIncorrect = false;
- try (Scanner fileScan = new Scanner(checkFile)) {
- while (fileScan.hasNextLine() && !isIncorrect) {
- currentString = fileScan.nextLine();
- String[] words = currentString.split("@");
- if (words.length > 4) {
- System.out.println("Некорректные данные! Убедитесь, что поля каждой записи резделены символом '@'.");
- isIncorrect = true;
- } else {
- isNotCorrectCountry = checkDataString(words[0], MAX_COUNTRY_NAME_LENGTH);
- isNotCorrectName = checkDataString(words[1], MAX_NAME_LENGTH);
- isNotCorrectSecondName = checkDataString(words[2], MAX_SECOND_NAME_LENGTH);
- if ((Integer.parseInt(words[3]) < MIN_RATING) || (Integer.parseInt(words[3]) > MAX_RATING)) {
- isNotCorrectRating = true;
- }
- if (isNotCorrectCountry || isNotCorrectName || isNotCorrectSecondName || isNotCorrectRating) {
- isIncorrect = true;
- }
- }
- }
- } catch (Exception e) {
- System.out.println("Проверьте корректность данных в файле!");
- isIncorrect = true;
- }
- return isIncorrect;
- }
- private static void saveRecord(String country,String name, String secondName, int rating) {
- listOfTeams[listOfTeams.length - 1] = new footballTeam(country, name, secondName, rating);
- listOfTeams = Arrays.copyOf(listOfTeams, listOfTeams.length + 1);
- System.out.println("Запись была добавлена успешно!");
- }
- private static void enterInf() {
- String country;
- String name;
- String secondName;
- int rating;
- int choice;
- boolean isEqualRecord = false;
- do {
- country = inputCountry();
- name = inputName();
- secondName = inputSecondName();
- if (listOfTeams.length > 1)
- isEqualRecord = checkOnSimilarRecord (country, name, secondName);
- if (!isEqualRecord) {
- rating = inputRating();
- saveRecord(country, name, secondName, rating);
- } else
- System.out.println("Данная запись уже присутствует в списке!");
- print(TYPE_CHOICE_CONTINUE_OR_EXIT);
- choice = inputNumber(1, 2);
- } while (choice != 2);
- }
- private static int inputNumOfRecord(String str) {
- int number;
- final int MIN_NUM = 1;
- lookInf();
- System.out.println("Введите номер записи, которую нужно " + str + ".");
- number = inputNumber(MIN_NUM, listOfTeams.length-1);
- return number - 1;
- }
- private static void correctInf() {
- String country;
- String name;
- String secondName;
- int rating;
- int choice;
- int numOfRecord;
- do {
- numOfRecord = inputNumOfRecord("изменить");
- country = inputCountry();
- name = inputName();
- secondName = inputSecondName();
- rating = inputRating();
- listOfTeams[numOfRecord] = new footballTeam(country, name, secondName, rating);
- System.out.println("Запись номер " + (numOfRecord + 1) + " была успешно изменена!");
- print(TYPE_CHOICE_CONTINUE_OR_EXIT);
- choice = inputNumber(1, 2);
- } while (choice != 2);
- }
- private static void deleteInf() {
- int numberOfRecord;
- int choice = 0;
- int recordsCount;
- do {
- numberOfRecord = inputNumOfRecord("удалить");
- recordsCount = listOfTeams.length;
- listOfTeams[numberOfRecord] = null;
- for (int i = numberOfRecord+1; i < recordsCount; i++) {
- listOfTeams[i - 1] = listOfTeams[i];
- }
- listOfTeams[recordsCount-1] = null;
- listOfTeams = Arrays.copyOf(listOfTeams, recordsCount - 1);
- System.out.println("Запись номер " + (numberOfRecord + 1) + " была успешно удалена!");
- if (listOfTeams.length == 1) {
- System.out.println("Список записей пуст!");
- } else {
- print(TYPE_CHOICE_CONTINUE_OR_EXIT);
- choice = inputNumber(1, 2);
- }
- } while ((choice != 2) && (listOfTeams.length > 1));
- }
- private static void saveToFile() {
- String path = enterOutputPath();
- try (PrintWriter fileOut = new PrintWriter(path)) {
- for (int i = 0; i < listOfTeams.length - 1; i++)
- fileOut.println(listOfTeams[i].country + "@" + listOfTeams[i].name + "@" + listOfTeams[i].secondName + "@" + listOfTeams[i].rating);
- } catch (Exception e) {
- System.out.println("Не удалось вывести в файл!");
- }
- System.out.println("Данные успешно выведены в файл!");
- }
- private static void lookInf() {
- for (int i = 0; i < listOfTeams.length - 1; i++) {
- System.out.println("------------------------------" + "\nЗапись №" + (i + 1) + "\nСтрана команды: " + listOfTeams[i].country + "\nНазвание команды: " + listOfTeams[i].name + "\nФамилия тренера: " + listOfTeams[i].secondName + "\nРейтинг: " + listOfTeams[i].rating + "\n------------------------------");
- }
- }
- private static void lookTeamInfo(){
- for (int i = 0; i < listOfTeams.length - 1; i++) {
- System.out.println("------------------------------" + "\nНазвание команды: " + listOfTeams[i].name + "\nРейтинг команды: " + listOfTeams[i].rating + "\n------------------------------");
- }
- }
- private static void sortList(){
- int i, k, iMax;
- footballTeam tempTeam;
- for (k = 0; k < listOfTeams.length - 2; k++) {
- iMax = k;
- for (i = k + 1; i < listOfTeams.length - 1; i++) {
- if (listOfTeams[i].rating > listOfTeams[iMax].rating){
- iMax = i;
- }
- }
- tempTeam = listOfTeams[iMax];
- listOfTeams[iMax] = listOfTeams[k];
- listOfTeams[k] = tempTeam;
- }
- }
- private static void workWithCatalog () {
- final int MIN_OPTION = 0, MAX_OPTION = 7;
- int num;
- do {
- print(TYPE_CHOICE_FUNCTION);
- num = inputNumber(MIN_OPTION, MAX_OPTION);
- switch (num) {
- case 1:
- enterInf();
- break;
- case 2:
- if (listOfTeams.length > 1)
- correctInf();
- else
- System.out.println("Для выполнения данного действия необходимо либо ввести, либо импортировать данные.");
- break;
- case 3:
- if (listOfTeams.length > 1)
- deleteInf();
- else
- System.out.println("Для выполнения данного действия необходимо либо ввести, либо импортировать данные.");
- break;
- case 4:
- if (listOfTeams.length > 1)
- lookInf();
- else
- System.out.println("Для выполнения данного действия необходимо либо ввести, либо импортировать данные.");
- break;
- case 5:
- if (listOfTeams.length > 1) {
- sortList();
- lookTeamInfo();
- } else
- System.out.println("Для выполнения данного действия необходимо либо ввести, либо импортировать данные.");
- break;
- case 6:
- takeInfoFromFile();
- break;
- case 7:
- if (listOfTeams.length > 1) {
- saveToFile();
- } else
- System.out.println("Для выполнения данного действия необходимо либо ввести, либо импортировать данные.");
- break;
- }
- } while (num != 0);
- }
- public static void main (String[]args){
- writeTask();
- workWithCatalog();
- consoleScan.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement