Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 19.13 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.io.File;
  4. import java.io.PrintWriter;
  5. import java.util.Scanner;
  6. import java.util.ArrayList;
  7. import java.io.FileNotFoundException;
  8.  
  9. public class Main {
  10.  
  11.     public static void main(String[] args) {
  12.         ArrayList<Collector> collectors;
  13.         boolean isNotCorrect;
  14.         boolean isStart = true;
  15.         boolean isEmpty;
  16.         do {
  17.             isNotCorrect = false;
  18.             isEmpty = checkFileEmptiness();
  19.             collectors = getDataFromFile();
  20.             if ((collectors.size() == 0) && (!isEmpty)) {
  21.                 isNotCorrect = true;
  22.                 System.out.println("Исправьте ошибку и нажмите Enter для продолжения");
  23.                 sc.nextLine();
  24.             }
  25.         } while (isNotCorrect);
  26.         userChoice(collectors);
  27.     }
  28.  
  29.     static Scanner sc = new Scanner(System.in);
  30.     static Scanner fileScan = null;
  31.     static final String FILE_NAME = "labaDB.txt";
  32.     static PrintWriter pWriter;
  33.  
  34.     static boolean checkFileEmptiness() {
  35.         boolean isFileEmpty = false;
  36.         File txtFile = new File(FILE_NAME);
  37.         if (!txtFile.exists() || (txtFile.exists() && txtFile.length() == 0)) {
  38.             try {
  39.                 if (txtFile.createNewFile()) {
  40.                     System.out.println("Файл  \"" + FILE_NAME + "\" не найден.");
  41.                     System.out.println("Был создан новый пустой файл.");
  42.                 }
  43.                 try {
  44.                     pWriter = new PrintWriter(txtFile);
  45.                     pWriter.write("0");
  46.                     pWriter.println();
  47.                     pWriter.close();
  48.                 } catch (Exception e) {
  49.                     e.printStackTrace();
  50.                 }
  51.                 isFileEmpty = true;
  52.             } catch (Exception e) {
  53.                 System.out.println("Ошибка! Что-то пошло не так.");
  54.             }
  55.         }
  56.         try {
  57.             fileScan = new Scanner(txtFile);
  58.             int n = fileScan.nextInt();
  59.             if (n == 0) {
  60.                 isFileEmpty = true;
  61.             }
  62.             fileScan = new Scanner(txtFile);
  63.         } catch (FileNotFoundException e) {
  64.         }
  65.         return (isFileEmpty);
  66.     }
  67.  
  68.     static void findNumber(ArrayList<Collector> collectors) {
  69.         System.out.println("Введите фамилию клиента: ");
  70.         String surname = sc.nextLine();
  71.         boolean flag = true;
  72.         for (int i = 0; i < collectors.size(); i++) {
  73.             if (collectors.get(i).getSurname().toUpperCase().equals(surname.toUpperCase())) {
  74.                 System.out.println("Номер  клиента " + collectors.get(i).getSurname() + " : " + collectors.get(i).getNumberInList());
  75.                 flag = false;
  76.             }
  77.         }
  78.         if (flag) {
  79.             System.out.println("Клиент с такой фамилией не найден!");
  80.         }
  81.         System.out.println("Нажмите Enter для продолжения");
  82.         sc.nextLine();
  83.     }
  84.  
  85.     static void findMaxProd(ArrayList<Collector> collectors) {
  86.         int maxValue = Integer.MIN_VALUE;
  87.         int index = 0;
  88.         int indexOfDay = 0;
  89.         String dayOfWeek = "";
  90.         for (int i = 0; i < collectors.size(); i++) {
  91.             if (collectors.get(i).getCollected() > maxValue) {
  92.                 maxValue = collectors.get(i).getCollected();
  93.                 index = i;
  94.             }
  95.         }
  96.         maxValue = Integer.MIN_VALUE;
  97.         for (int i = 0; i < 6; i++) {
  98.             if (collectors.get(index).getDailyCollect(i) > maxValue) {
  99.                 maxValue = collectors.get(index).getDailyCollect(i);
  100.                 indexOfDay = i;
  101.             }
  102.         }
  103.         switch (indexOfDay) {
  104.             case 0:
  105.                 dayOfWeek = "понедельник";
  106.                 break;
  107.             case 1:
  108.                 dayOfWeek = "вторник";
  109.                 break;
  110.             case 2:
  111.                 dayOfWeek = "среду";
  112.                 break;
  113.             case 3:
  114.                 dayOfWeek = "четверг";
  115.                 break;
  116.             case 4:
  117.                 dayOfWeek = "пятницу";
  118.                 break;
  119.             case 5:
  120.                 dayOfWeek = "субботу";
  121.                 break;
  122.         }
  123.         System.out.println("Фомилия сборщика: " + collectors.get(index).getSurname());
  124.         System.out.println("В " + dayOfWeek + " он собрал наибольшее кол-во делаей = " + collectors.get(index).getDailyCollect(indexOfDay));
  125.         System.out.println("Нажмите Enter для продолжения");
  126.         sc.nextLine();
  127.     }
  128.  
  129.  
  130.     static void showInfo() {
  131.         System.out.printf("Данная программа разработана студентом гр. 951007 Майским Владиславом\n" +
  132.                 "Чтобы загрузить в программу данные из файла, данные в файле должны бытьпредставлены в виде :\n" +
  133.                 "Кол-во записей\n" +
  134.                 "Фамилия\n" +
  135.                 "Ежедневный сбор за 6 рабочих дней через пробел\n");
  136.         System.out.println("Нажмите Enter для продолжения");
  137.         sc.nextLine();
  138.     }
  139.  
  140.     static String getSurnameFromConsole() {
  141.         String surname = "";
  142.         boolean isCorrect;
  143.         do {
  144.             isCorrect = true;
  145.             System.out.println("Введите фамилию:");
  146.             surname = sc.nextLine();
  147.             if (surname.length() > 15 || !Character.isUpperCase(surname.charAt(0))) {
  148.                 isCorrect = false;
  149.                 System.out.println("Некорректный ввод");
  150.             } else {
  151.                 for (int j = 1; j < surname.length(); j++) {
  152.                     if (!Character.isLetter(surname.charAt(j))) {
  153.                         isCorrect = false;
  154.                         System.out.println("Некорректный ввод.");
  155.                     }
  156.                 }
  157.             }
  158.         } while (!isCorrect);
  159.         return surname;
  160.     }
  161.  
  162.     static int[] getDailyCollectFromConsole() {
  163.         int[] dailyCollect = new int[6];
  164.         boolean isCorrect;
  165.         do {
  166.             System.out.println("Введите ежедневный сбор за 6-ти рабочую неделю через пробел");
  167.             isCorrect = true;
  168.             String[] data = sc.nextLine().split(" ");
  169.             if (data.length != 6) {
  170.                 isCorrect = false;
  171.             } else {
  172.                 for (int j = 0; j < data.length && isCorrect; j++) {
  173.                     try {
  174.                         dailyCollect[j] = Integer.parseInt(data[j]);
  175.                     } catch (NumberFormatException e) {
  176.                         isCorrect = false;
  177.                     }
  178.                     if (dailyCollect[j] < 0 || dailyCollect[j] > 300) {
  179.                         isCorrect = false;
  180.                     }
  181.                 }
  182.             }
  183.             if (!isCorrect) {
  184.                 System.out.println("Некорректный ввод");
  185.             }
  186.         } while (!isCorrect);
  187.         return dailyCollect;
  188.     }
  189.  
  190.     static void editCollectorRecord(ArrayList<Collector> collectors) {
  191.         showDataBase(collectors);
  192.         int line = 0;
  193.         boolean isCorrect;
  194.         do {
  195.             isCorrect = false;
  196.             try {
  197.                 System.out.println("Введите номер сборщика, запись о котором вы хотите изменить: ");
  198.                 line = sc.nextInt();
  199.                 isCorrect = true;
  200.                 sc.nextLine();
  201.             } catch (Exception e) {
  202.                 System.out.println("Некорректный ввод!");
  203.                 sc.nextLine();
  204.             }
  205.             if (isCorrect) {
  206.                 if ((line < 1) || (line > collectors.size())) {
  207.                     System.out.println("Сборщика с таким номер нет");
  208.                     isCorrect = false;
  209.                 }
  210.             }
  211.         } while (!isCorrect);
  212.         isCorrect = false;
  213.         System.out.println("Если Вы хотите изменить Фамилию - введите \"surname\".\n" +
  214.                 "Если Вы хотите изменить ежедневный сбор - введите \"collect\".\n" +
  215.                 "Если Вы хотите изменить все данные - введите \"all\".\n");
  216.         do {
  217.             isCorrect = true;
  218.             String answer = sc.nextLine();
  219.             switch (answer.toUpperCase()) {
  220.                 case "SURNAME":
  221.                     collectors.get(--line).setSurname(getSurnameFromConsole());
  222.                     break;
  223.                 case "COLLECT":
  224.                     collectors.get(--line).setDailyCollect(getDailyCollectFromConsole());
  225.                     break;
  226.                 case "ALL":
  227.                     collectors.get(--line).setSurname(getSurnameFromConsole());
  228.                     collectors.get(line).setDailyCollect(getDailyCollectFromConsole());
  229.                     break;
  230.                 default:
  231.                     System.out.println("Попробуйте еще раз");
  232.                     isCorrect = false;
  233.                     break;
  234.             }
  235.         } while (!isCorrect);
  236.         System.out.println("Успешно отредактировано");
  237.         System.out.println("Нажмите Enter для продолжения");
  238.         sc.nextLine();
  239.     }
  240.  
  241.     static void addCollector(ArrayList<Collector> collectors) {
  242.         String surname = getSurnameFromConsole();
  243.         int[] dailyCollecet = getDailyCollectFromConsole();
  244.         collectors.add(new Collector(collectors.size() + 1, surname, dailyCollecet));
  245.         System.out.println("Новый сборщик успешно добавлен\nНажмите Enter для проджолжения");
  246.         sc.nextLine();
  247.     }
  248.  
  249.  
  250.     private static void saveDataToFile(ArrayList<Collector> collectors) {
  251.         pWriter = null;
  252.         File file = new File(FILE_NAME);
  253.         try {
  254.             pWriter = new PrintWriter(file);
  255.             pWriter.write(Integer.toString(collectors.size()));
  256.             pWriter.println();
  257.             for (Collector collector : collectors) {
  258.                 pWriter.write(collector.getSurname());
  259.                 pWriter.println();
  260.                 for (int i = 0; i < 6; i++) {
  261.                     pWriter.write(collector.getDailyCollect(i) + " ");
  262.                 }
  263.                 pWriter.println();
  264.             }
  265.         } catch (Exception e) {
  266.             System.out.println("Ошибка сохранения данных!");
  267.         }
  268.         pWriter.close();
  269.         System.out.println("Данные были сохранены.");
  270.     }
  271.  
  272.     static void userChoice(ArrayList<Collector> collectors) {
  273.         boolean flag = true;
  274.         String choice = "";
  275.         do {
  276.             System.out.println("Если Вы хотите добавить сборщика - введите \"add\".\n" +
  277.                     "Если Вы хотите редактировать данные - введите \"edit\".\n" +
  278.                     "Если Вы хотите удалить сборщика - введите \"delete\".\n" +
  279.                     "Если Вы хотите просмотреть базу данных - введите \"show\".\n" +
  280.                     "Если Вы хотите узнать номер сборщика по его фамилии - введите \"find\".\n" +
  281.                     "Если Вы хотите узнать фамилию сборщика, собравшего наибольшее число изделий- введите. \"max\".\n" +
  282.                     "Если Вы хотите получить справку о программе - введите \"info\".\n" +
  283.                     "Если Вы хотите выйти из программы - введите \"exit\".");
  284.  
  285.             choice = sc.nextLine();
  286.             switch (choice.toUpperCase()) {
  287.                 case ("ADD"):
  288.                     addCollector(collectors);
  289.                     break;
  290.                 case ("SHOW"):
  291.                     showDataBase(collectors);
  292.                     System.out.println("Нажмите Enter чтобы продолжить");
  293.                     sc.nextLine();
  294.                     break;
  295.                 case ("EDIT"):
  296.                     editCollectorRecord(collectors);
  297.                     break;
  298.                 case ("DELETE"):
  299.                     removeCollector(collectors);
  300.                     break;
  301.                 case ("FIND"):
  302.                     findNumber(collectors);
  303.                     break;
  304.                 case ("MAX"):
  305.                     findMaxProd(collectors);
  306.                     break;
  307.                 case ("INFO"):
  308.                     showInfo();
  309.                     break;
  310.                 case ("EXIT"):
  311.                     saveDataToFile(collectors);
  312.                     flag = false;
  313.                     break;
  314.                 default:
  315.                     System.out.println("Попробуйте снова");
  316.             }
  317.         } while (flag);
  318.     }
  319.  
  320.  
  321.     static void showDataBase(ArrayList<Collector> dataBase) {
  322.         System.out.printf("%4s | %15s | %20s | %5s | %5s | %5s | %5s | %5s | %5s", "№", "Фамилия", "Количество изделий", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat\n");
  323.         for (Collector collector : dataBase) {
  324.             System.out.printf("%4s | %15s | %20s | %5s | %5s | %5s | %5s | %5s | " +
  325.                     "%5s", collector.getNumberInList(), collector.getSurname(), collector.getCollected(), collector.getDailyCollect(0), collector.getDailyCollect(1), collector.getDailyCollect(2), collector.getDailyCollect(3), collector.getDailyCollect(4), collector.getDailyCollect(5));
  326.             System.out.println();
  327.         }
  328.         System.out.println();
  329.     }
  330.  
  331.     static ArrayList<Collector> getDataFromFile() {
  332.         ArrayList<Collector> collectors = new ArrayList<>();
  333.         int[] dailyCollect;
  334.         int amountOfUsers = 0;
  335.         boolean isCorrect;
  336.         try {
  337.             amountOfUsers = fileScan.nextInt();
  338.             isCorrect = true;
  339.         } catch (Exception e) {
  340.             System.out.println("Файл содержит некорректные данные!");
  341.             isCorrect = false;
  342.         }
  343.         fileScan.nextLine();
  344.         if ((isCorrect) && (amountOfUsers != 0)) {
  345.             try {
  346.                 for (int i = 0; i < amountOfUsers && isCorrect; i++) {
  347.                     dailyCollect = new int[6];
  348.                     String surname = fileScan.nextLine();
  349.                     if (surname.length() > 15 || !Character.isUpperCase(surname.charAt(0))) {
  350.                         isCorrect = false;
  351.                     } else {
  352.                         for (int j = 1; j < surname.length(); j++) {
  353.                             if (!Character.isLetter(surname.charAt(j))) {
  354.                                 isCorrect = false;
  355.                             }
  356.                         }
  357.                         String[] fileData = fileScan.nextLine().split(" ");
  358.                         if (fileData.length != 6) {
  359.                             isCorrect = false;
  360.                         } else {
  361.                             for (int j = 0; j < fileData.length && isCorrect; j++) {
  362.                                 try {
  363.                                     dailyCollect[j] = Integer.parseInt(fileData[j]);
  364.                                 } catch (NumberFormatException e) {
  365.                                     isCorrect = false;
  366.                                 }
  367.                                 if (dailyCollect[j] < 0 || dailyCollect[j] > 300) {
  368.                                     isCorrect = false;
  369.                                 }
  370.                             }
  371.                         }
  372.                     }
  373.                     if (isCorrect) {
  374.                         collectors.add(new Collector((i + 1), surname, dailyCollect));
  375.                     } else {
  376.                         System.out.println("Файл содержит некорректные данные!");
  377.                     }
  378.                 }
  379.             } catch (Exception e) {
  380.                 System.out.println("Файл содержит некорректные данные!");
  381.                 isCorrect = false;
  382.             }
  383.         }
  384.         if (isCorrect) {
  385.             System.out.println("Данные успешно загружены.");
  386.         } else {
  387.             collectors.clear();
  388.         }
  389.         return collectors;
  390.     }
  391.  
  392.     static ArrayList<Collector> removeCollector(ArrayList<Collector> collectors) {
  393.         showDataBase(collectors);
  394.         int line = 0;
  395.         boolean isNotCorrect;
  396.         do {
  397.             isNotCorrect = true;
  398.             try {
  399.                 System.out.println("Введите номер сборщика, запись о котором хотите удалить: ");
  400.                 line = sc.nextInt();
  401.                 isNotCorrect = false;
  402.                 sc.nextLine();
  403.             } catch (Exception e) {
  404.                 System.out.println("Некорректный ввод!");
  405.                 sc.nextLine();
  406.             }
  407.             if (!isNotCorrect) {
  408.                 if ((line < 1) || (line > collectors.size())) {
  409.                     System.out.println("Сборщика с таким номер нет");
  410.                     isNotCorrect = true;
  411.                 }
  412.             }
  413.         } while (isNotCorrect);
  414.         collectors.remove(--line);
  415.         for (int i = line; i < collectors.size(); i++) {
  416.             collectors.get(i).setNumberInList(i + 1);
  417.         }
  418.         System.out.println("Запись удалена!\n");
  419.         return (collectors);
  420.     }
  421. }
  422.  
  423. class Collector {
  424.  
  425.     private String surname;
  426.     private int[] dailyCollect;
  427.     private int collected;
  428.     private int numberInList;
  429.  
  430.     Collector(int numberInList, String surname, int[] dailyCollect) {
  431.         int sum = 0;
  432.         for (int i : dailyCollect) {
  433.             sum += i;
  434.         }
  435.         this.collected = sum;
  436.         this.numberInList = numberInList;
  437.         this.surname = surname;
  438.         this.dailyCollect = dailyCollect;
  439.     }
  440.  
  441.     public void setSurname(String surname) {
  442.         this.surname = surname;
  443.     }
  444.  
  445.     public void setDailyCollect(int[] dailyCollect) {
  446.         int sum = 0;
  447.         for (int i : dailyCollect) {
  448.             sum += i;
  449.         }
  450.         collected = sum;
  451.         this.dailyCollect = dailyCollect;
  452.     }
  453.  
  454.  
  455.     public void setNumberInList(int numberInList) {
  456.         this.numberInList = numberInList;
  457.     }
  458.  
  459.     public String getSurname() {
  460.         return surname;
  461.     }
  462.  
  463.     public int getDailyCollect(int i) {
  464.         return dailyCollect[i];
  465.     }
  466.  
  467.     public int getCollected() {
  468.         return collected;
  469.     }
  470.  
  471.     public int getNumberInList() {
  472.         return numberInList;
  473.     }
  474. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement