Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Arrays;
- import java.util.Scanner;
- import java.io.*;
- public class Main {
- static Scanner scan = new Scanner(System.in);
- static final int MAX_LENGTH = 15;
- static final int MIN_LENGTH = 1;
- static final int MAX_FORMAT = 6;
- static final int MIN_FORMAT = 1;
- static final int MAX_COST_RUB = 1000;
- static final int MAX_COST_COP = 99;
- static final int MIN_COST = 0;
- static final int MAX_OPERATION_COUNT = 5;
- static final int MIN_OPERATION_COUNT = 0;
- public static void main(String[] args) {
- boolean isContinue = true;
- writeTask();
- System.out.println("Получить записи из файла? 1 - да, 2 - нет");
- int choice = chooseInputOutputMethod();
- if (choice == 1) {
- openFileWithRecords();
- }
- do {
- choice = chooseOperation();
- switch (choice) {
- case 1:
- addNewRecordOperation();
- break;
- case 2:
- changeRecordOperation();
- break;
- case 3:
- deleteRecordOperation();
- break;
- case 4:
- seeRecordsOperation();
- break;
- case 5:
- taskSearch();
- break;
- case 0:
- isContinue = false;
- break;
- }
- } while (isContinue);
- System.out.println("Сохранить записи в файл? 1 - да, 2 - нет");
- choice = chooseInputOutputMethod();
- if (choice == 1) {
- saveToFile();
- }
- scan.close();
- }
- public static void writeTask() {
- System.out.println("Данная программа позволяет работать с записями со сведениями о принтерах");
- System.out.println("Список возможных функций: 1. Добавление новых записей.");
- System.out.println(" 2. Коррекция записей.");
- System.out.println(" 3. Удаление записи.");
- System.out.println(" 4. Просмотр записей.");
- System.out.println(" 5. Вывести среднюю цену и общее количество принтеров формата X.");
- System.out.println(" 0. Завершение работы.");
- }
- static class Printers {
- String brand;
- int type;
- int format;
- int costRub;
- int costCop;
- public Printers(String brand, int type, int format, int costRub, int costCop) {
- this.brand = brand;
- this.type = type;
- this.format = format;
- this.costRub = costRub;
- this.costCop = costCop;
- }
- }
- static Printers[] Records = new Printers[1];
- public static String takeBrandFromConsole() {
- boolean isNotCorrect;
- String brand = "";
- do {
- isNotCorrect = false;
- try {
- brand = scan.nextLine();
- } catch (Exception e) {
- isNotCorrect = true;
- System.out.println("Некорректно введена строка");
- }
- if ((brand.length() > MAX_LENGTH) || (brand.length() < MIN_LENGTH)) {
- isNotCorrect = true;
- System.out.println("Длина марки бренда должна быть от " + MIN_LENGTH + " до " + MAX_LENGTH);
- }
- } while (isNotCorrect);
- return brand;
- }
- public static int takeTypeFromConsole() {
- boolean isNotCorrect;
- int type = 0;
- do {
- isNotCorrect = false;
- try {
- type = Integer.parseInt(scan.nextLine());
- } catch (NumberFormatException e) {
- isNotCorrect = true;
- System.out.println("Номер вида введён некорректно");
- }
- if ((!isNotCorrect) && ((type != 1) && (type != 2) && (type != 3))) {
- isNotCorrect = true;
- System.out.println("Необходимо ввести либо 1, либо 2, либо 3");
- }
- } while (isNotCorrect);
- return type;
- }
- public static int takeFormatFromConsole() {
- boolean isNotCorrect;
- int format = 0;
- do {
- isNotCorrect = false;
- try {
- format = Integer.parseInt(scan.nextLine());
- } catch (NumberFormatException e) {
- isNotCorrect = true;
- System.out.println("Некорректно введено число");
- }
- if ((!isNotCorrect) && (format < MIN_FORMAT || format > MAX_FORMAT)) {
- isNotCorrect = true;
- System.out.println("Номер формата должен быть от " + MIN_FORMAT + " до " + MAX_FORMAT);
- }
- } while (isNotCorrect);
- return format;
- }
- public static int takeCostFromConsole(boolean isRub) {
- int cost = 0;
- boolean isNotCorrect;
- do {
- isNotCorrect = false;
- try {
- cost = Integer.parseInt(scan.nextLine());
- } catch (NumberFormatException e) {
- isNotCorrect = true;
- System.out.println("Некорректно введено значение цены");
- }
- if ((!isNotCorrect) && (isRub) && (cost > MAX_COST_RUB || cost < MIN_COST)) {
- isNotCorrect = true;
- System.out.println("Цена (рубли) должна быть от " + MIN_COST + " до " + MAX_COST_RUB);
- }
- if ((!isNotCorrect) && (!isRub) && (cost > MAX_COST_COP || cost < MIN_COST)) {
- isNotCorrect = true;
- System.out.println("Цена (копейки) должна быть от " + MIN_COST + " до " + MAX_COST_COP);
- }
- } while (isNotCorrect);
- return cost;
- }
- public static void addingNewRecord(String brand, int type, int format, int rub, int cop) {
- Records[Records.length - 1] = new Printers(brand, type, format, rub, cop);
- int newLength = Records.length + 1;
- Records = Arrays.copyOf(Records, newLength);
- }
- public static String takePathToFile() {
- String path;
- boolean isNotCorrect;
- do {
- isNotCorrect = false;
- System.out.println("Введите путь к файлу: ");
- path = scan.nextLine();
- File file = new File(path);
- if (!file.exists()) {
- System.out.println("Не удалось найти файл по заданному пути. Повторите попытку...");
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- return path;
- }
- public static int chooseInputOutputMethod() {
- boolean isNotCorrect;
- int choice = 0;
- do {
- isNotCorrect = false;
- try {
- choice = Integer.parseInt(scan.nextLine());
- } catch (NumberFormatException e) {
- System.out.println("Число введено некорректно. Повторите попытку...");
- isNotCorrect = true;
- }
- if ((!isNotCorrect) && (choice != 1) && (choice != 2)) {
- System.out.print("Введите либо 1, либо 2. Ваш выбор: ");
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- return choice;
- }
- public static int chooseOperation() {
- int choice = 0;
- boolean isNotCorrect;
- do {
- System.out.println("Введите номер операции, которую необходимо выполнить.");
- isNotCorrect = false;
- try {
- choice = Integer.parseInt(scan.nextLine());
- } catch (NumberFormatException e) {
- isNotCorrect = true;
- System.out.println("Некорректно введён номер операции. Повторите попытку.");
- }
- if ((!isNotCorrect) && (choice > MAX_OPERATION_COUNT || choice < MIN_OPERATION_COUNT)) {
- isNotCorrect = true;
- System.out.println("Введён неправильный номер операции. Он должен быть от " + MIN_OPERATION_COUNT + " до " + MAX_OPERATION_COUNT + ". Повторите попытку.");
- }
- } while (isNotCorrect);
- return choice;
- }
- public static int chooseNumberOfRecord() {
- int choice = 0;
- boolean isNotCorrect;
- do {
- isNotCorrect = false;
- try {
- choice = Integer.parseInt(scan.nextLine());
- } catch (NumberFormatException e) {
- isNotCorrect = true;
- System.out.println("Некорректно введён номер записи. Повторите попытку.");
- }
- if ((!isNotCorrect) && (choice < 1 || choice > Records.length)) {
- isNotCorrect = true;
- System.out.println("Записи с таким номером не существует! Повторите попытку.");
- }
- } while (isNotCorrect);
- choice -= 1;
- return choice;
- }
- public static void addRecordFromConsole() {
- String brand;
- int type;
- int rub, cop, format, choice;
- boolean isRub = true;
- do {
- System.out.println("Введите название марки принтера.");
- brand = takeBrandFromConsole();
- System.out.println("Введите тип принтера: 1 - матричный, 2 - струйный, 3 - лазерный.");
- type = takeTypeFromConsole();
- System.out.println("Введите номер формата печати принтера (значение от " + MIN_FORMAT + " до " + MAX_FORMAT + ").");
- format = takeFormatFromConsole();
- System.out.println("Введите цену (рубли) принтера.");
- rub = takeCostFromConsole(isRub);
- System.out.println("Введите цену (копейки) принтера.");
- cop = takeCostFromConsole(!isRub);
- addingNewRecord(brand, type, format, rub, cop);
- System.out.println("Хотите ли вы добавить ещё одну запись? 1 - да, 2 - нет");
- choice = chooseInputOutputMethod();
- } while (choice != 2);
- }
- public static Printers addRecordFromFile() {
- String path = takePathToFile();
- boolean isNotCorrect;
- String brand = "";
- int typeNumber = 0;
- int rub = 0, cop = 0, format = 0;
- do {
- isNotCorrect = false;
- try (Scanner fileReader = new Scanner(new File(path))) {
- try {
- brand = fileReader.nextLine();
- typeNumber = Integer.parseInt(fileReader.nextLine());
- format = Integer.parseInt(fileReader.nextLine());
- rub = Integer.parseInt(fileReader.nextLine());
- cop = Integer.parseInt(fileReader.nextLine());
- } catch (NumberFormatException e) {
- isNotCorrect = true;
- System.out.println("Некорректно введено одно из значений в файле. Попробуйте заново.");
- }
- if ((brand.length() > MAX_LENGTH) || (brand.length() < MIN_LENGTH)) {
- isNotCorrect = true;
- System.out.println("Длина марки бренда должна быть от " + MIN_LENGTH + " до " + MAX_LENGTH);
- }
- if ((!isNotCorrect) && ((typeNumber != 1) && (typeNumber != 2) && (typeNumber != 3))) {
- isNotCorrect = true;
- System.out.println("Необходимо ввести для типа принтера либо 1, либо 2, либо 3");
- }
- if ((!isNotCorrect) && (format < MIN_FORMAT || format > MAX_FORMAT)) {
- isNotCorrect = true;
- System.out.println("Номер формата должен быть от " + MIN_FORMAT + " до " + MAX_FORMAT);
- }
- if ((!isNotCorrect) && (rub > MAX_COST_RUB || rub < MIN_COST)) {
- isNotCorrect = true;
- System.out.println("Цена (рубли) должна быть от " + MIN_COST + " до " + MAX_COST_RUB);
- }
- if ((!isNotCorrect) && (cop > MAX_COST_COP || cop < MIN_COST)) {
- isNotCorrect = true;
- System.out.println("Цена (копейки) должна быть от " + MIN_COST + " до " + MAX_COST_COP);
- }
- } catch (IOException e) {
- isNotCorrect = true;
- System.out.println("Не выходит получить данные из файла. Попробуйте ещё раз.");
- path = takePathToFile();
- }
- } while (isNotCorrect);
- Printers print = new Printers(brand, typeNumber, format, rub, cop);
- System.out.println("Запись из файла записана");
- return print;
- }
- public static void addNewRecordOperation() {
- System.out.println("Выберите способ получения новой записи (1 - консоль, 2 - файл): ");
- int choice = chooseInputOutputMethod();
- if (choice == 1) {
- addRecordFromConsole();
- } else {
- Printers print = addRecordFromFile();
- addingNewRecord(print.brand, print.type, print.format, print.costRub, print.costCop);
- }
- }
- public static void changeRecordFromConsole(int number) {
- String brand;
- int type;
- int rub, cop, format;
- boolean isRub = true;
- System.out.println("Введите название марки принтера.");
- brand = takeBrandFromConsole();
- System.out.println("Введите тип принтера: 1 - матричный, 2 - струйный, 3 - лазерный.");
- type = takeTypeFromConsole();
- System.out.println("Введите номер формата печати принтера (значение от " + MIN_FORMAT + " до " + MAX_FORMAT + ").");
- format = takeFormatFromConsole();
- System.out.println("Введите цену (рубли) принтера.");
- rub = takeCostFromConsole(isRub);
- System.out.println("Введите цену (копейки) принтера.");
- cop = takeCostFromConsole(!isRub);
- Records[number] = new Printers(brand, type, format, rub, cop);
- }
- public static void changeRecordOperation() {
- if (Records.length > 1) {
- System.out.println("Введите номер записи, которую желаете отредактировать.");
- int number = chooseNumberOfRecord();
- System.out.println("Выберите способ получения новой записи (1 - консоль, 2 - файл): ");
- int choice = chooseInputOutputMethod();
- if (choice == 1) {
- changeRecordFromConsole(number);
- } else {
- Printers print = addRecordFromFile();
- Records[number] = print;
- }
- } else {
- System.out.println("На данный момент не существует записей, чтобы их редактировать.");
- }
- }
- public static int numberForDeleteFromFile() {
- int number = 0;
- String path = takePathToFile();
- boolean isNotCorrect;
- do {
- isNotCorrect = false;
- try (Scanner fileReader = new Scanner(new File(path))) {
- try {
- number = Integer.parseInt(fileReader.nextLine());
- } catch (NumberFormatException e) {
- isNotCorrect = true;
- System.out.println("Некорректно введён номер записи. Повторите попытку.");
- }
- if ((!isNotCorrect) && (number < 1 || number > Records.length)) {
- isNotCorrect = true;
- System.out.println("Записи с таким номером не существует! Повторите попытку.");
- }
- } catch (IOException e) {
- isNotCorrect = true;
- System.out.println("Ошибка считывания с файла. Попробуйте ещё раз.");
- path = takePathToFile();
- }
- } while (isNotCorrect);
- number -= 1;
- return number;
- }
- public static void deletingRecord(int number) {
- Records[number] = null;
- for (int i = 1; i < Records.length; i++) {
- Records[i - 1] = Records[i];
- Records[i] = null;
- }
- int newLength = Records.length - 1;
- Records = Arrays.copyOf(Records, newLength);
- }
- public static void deleteRecordOperation() {
- if (Records.length > 1) {
- int number;
- System.out.println("Выберите способ получения номера удаляемой записи (1 - консоль, 2 - файл): ");
- int choice = chooseInputOutputMethod();
- if (choice == 1) {
- System.out.println("Введите номер записи, которую желаете удалить.");
- number = chooseNumberOfRecord();
- } else {
- number = numberForDeleteFromFile();
- }
- deletingRecord(number);
- } else {
- System.out.println("На данный момент не существует записей, чтобы их удалять.");
- }
- }
- public static void seeRecordsOperation() {
- String type = "";
- if (Records.length > 1) {
- for (int i = 0; i < (Records.length - 1); i++) {
- System.out.println("Запись №" + (i + 1));
- System.out.println("Марка принтера: " + Records[i].brand);
- switch (Records[i].type) {
- case 1:
- type = "Матричный";
- break;
- case 2:
- type = "Струйный";
- break;
- case 3:
- type = "Лазерный";
- break;
- }
- System.out.println("Тип принтера: " + type);
- System.out.println("Формат печати: A" + Records[i].format);
- System.out.println("Цена: " + Records[i].costRub + " руб. " + Records[i].costCop + "коп.");
- }
- } else {
- System.out.println("Введено недостаточно записей для просмотра.");
- }
- }
- public static double takeAveragePrice(int count, int rub, int cop) {
- int allRub = rub + (cop / 100);
- double newCop = cop & 100;
- double allPrice = (newCop / 100) + allRub ;
- return (allPrice / count);
- }
- public static void taskSearch() {
- int count = 0;
- int rub = 0;
- int cop = 0;
- if (Records.length > 1) {
- System.out.println("Введите искомый формат: ");
- int searchedFormat = takeFormatFromConsole();
- for (int i = 0; i < (Records.length - 1); i++) {
- if ((Records[i].type == 1) && (Records[i].format == searchedFormat)) {
- count++;
- rub += Records[i].costRub;
- cop += Records[i].costCop;
- }
- }
- if (count > 0) {
- double averagePrice = takeAveragePrice(count, rub, cop);
- System.out.println("Общее количество матричных принтеров с заданным форматом печати: " + count);
- System.out.println("Средняя цена на них: " + averagePrice);
- }
- } else {
- System.out.println("Введено недостаточно записей для выполения задания.");
- }
- }
- public static void saveToFile() {
- boolean isNotCorrect;
- String path = takePathToFile();
- do {
- isNotCorrect = false;
- try (PrintWriter fileWriter = new PrintWriter(path)) {
- for (int i = 0; i < (Records.length - 1); i++) {
- fileWriter.println(Records[i].brand + " " + Records[i].type + " " + Records[i].format + " " + Records[i].costRub + " " + Records[i].costCop);
- }
- fileWriter.println();
- } catch (IOException e) {
- isNotCorrect = true;
- System.out.println("Не удалось вывести в файл.");
- path = takePathToFile();
- }
- } while (isNotCorrect);
- }
- public static void openFileWithRecords() {
- boolean isNotCorrect;
- String path = takePathToFile();
- String endFile = " ";
- String brand;
- int type;
- int format;
- int costRub;
- int costCop;
- do {
- isNotCorrect = false;
- try (Scanner fileReader = new Scanner(new File(path))) {
- try {
- while ((!endFile.equals(""))) {
- endFile = fileReader.nextLine();
- if (!endFile.equals("")) {
- String[] print = endFile.split(" ");
- brand = print[0];
- type = Integer.parseInt(print[1]);
- format = Integer.parseInt(print[2]);
- costRub = Integer.parseInt(print[3]);
- costCop = Integer.parseInt(print[4]);
- if ((!isNotCorrect) && ((brand.length() > MAX_LENGTH) || (brand.length() < MIN_LENGTH))) {
- isNotCorrect = true;
- System.out.println("Длина марки бренда должна быть от " + MIN_LENGTH + " до " + MAX_LENGTH);
- }
- if ((!isNotCorrect) && ((type != 1) && (type != 2) && (type != 3))) {
- isNotCorrect = true;
- System.out.println("Необходимо ввести для типа принтера либо 1, либо 2, либо 3");
- }
- if ((!isNotCorrect) && (format < MIN_FORMAT || format > MAX_FORMAT)) {
- isNotCorrect = true;
- System.out.println("Номер формата должен быть от " + MIN_FORMAT + " до " + MAX_FORMAT);
- }
- if ((!isNotCorrect) && (costRub > MAX_COST_RUB || costRub < MIN_COST)) {
- isNotCorrect = true;
- System.out.println("Цена (рубли) должна быть от " + MIN_COST + " до " + MAX_COST_RUB);
- }
- if ((!isNotCorrect) && (costCop > MAX_COST_COP || costCop < MIN_COST)) {
- isNotCorrect = true;
- System.out.println("Цена (копейки) должна быть от " + MIN_COST + " до " + MAX_COST_COP);
- }
- addingNewRecord(brand, type, format, costRub, costCop);
- }
- }
- } catch (Exception e) {
- isNotCorrect = true;
- System.out.println("Обнаружены некорректные данные в файле. Выберите дальнейшее действие.");
- System.out.println("1 - ввести путь заново, 2 - продолжить без получения исходных данных из файла.");
- int choice = chooseInputOutputMethod();
- if (choice == 1) {
- path = takePathToFile();
- } else {
- isNotCorrect = false;
- }
- }
- } catch (IOException e) {
- isNotCorrect = true;
- System.out.println("Ошибка считывания с файла. Выберите дальнейшее действие.");
- System.out.println("1 - ввести путь заново, 2 - продолжить без получения исходных данных из файла.");
- int choice = chooseInputOutputMethod();
- if (choice == 1) {
- path = takePathToFile();
- } else {
- isNotCorrect = false;
- }
- }
- } while (isNotCorrect);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement