Giter Site home page Giter Site logo

pcs-jpat-diplom's Introduction

Курсовая работа. Менеджер задач

Вам предстоит разработать сервер, отвечающий за менеджмент списка дел. Разработать нужно на базе заготовки, размещённой в этом репозитории. Для этого склонируйте этот репозиторий и откройте в IDEA как maven-проект: File -> Open -> Папка репозитория.

TODOs

Центральным для логики программы компонентом будет класс Todos. Объект этого класса должен содержать в себе набор задач, добавленных в систему.

Каждая задача представляет собой обычное значение типа String. Например: "Сходить в магазин", "Пойти на пробежку". Все задачи добавленные в менеджер можно считать уникальными, т.е. без повторов.

Изначально объект этого класса не должен содержать никаких задач, но должна быть возможность:

  • добавить их через метод add;
  • удалить через метод remove.

Также у этого объекта должна быть возможность получить все актуальные задачи разом через метод getAllTasks - метод возвращает все задачи через пробел в отсортированном лексикографическом (словарном) порядке. Например, если мы добавили задачу "Пробежка", "Акробатика" и "Учёба", то этот метод должен вернуть строку вида Акробатика Пробежка Учёба.

Также есть дополнительное условие - в списке задач не должно быть больше чем 7 задач. Поэтому, при попытке добавления 8й задачи она добавляться не должна (клиент поймёт что задача не добавлена не увидев её в списке всех задач в ответе от сервера).

После реализации этого класса нужно написать на него тесты на основе JUnit 5, минимум 3 штуки, тестирующие его в разных сценариях. Для этого не забудьте подключить зависимость в проект (org.junit.jupiter:junit-jupiter:5.7.0). Перед отправкой проекта обязательно убедитесь, что тесты проходят.

Сервер

Ваша программа должна принимать запросы на добавление или удаление задач из списка через сервер. Сервер создаётя и запускается в классе Main, его менять нельзя. Реализацию же самому классу сервера (TodoServer) вам предстоит написать самим. После старта, он должен в бесконечном цикле принимать подключения и считывать с них одну строку, в которой будет располагаться json вида:

{ "type": "ADD", "task": "Название задачи" }

где type - тип операции (ADD или REMOVE), а task - сама задача.

Таким образом, одна операция соответствует одному запросу (а не один запрос с кучей строк-операций).

Для парсинга входных данных подключения воспользуйтесь библиотекой GSon (com.google.code.gson:gson:2.8.9). Мы предполагаем, что на сервер всегда приходят корректные данные.

В ответ на запрос сервер должен присылать текущее состояние списка задач после совершения операции и в том виде, в котором его возвращает операция getAllTasks (т.е. без всяких json и тп).

Напоминалка как выглядит простой сервер
      try (ServerSocket serverSocket = new ServerSocket(8989);) { // стартуем сервер один(!) раз
          while (true) { // в цикле(!) принимаем подключения
              try (
                      Socket socket = serverSocket.accept();
                      BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                      PrintWriter out = new PrintWriter(socket.getOutputStream());
                  ) {
                  // обработка одного подключения
              }
          }
      } catch (IOException e) {
          System.out.println("Не могу стартовать сервер");
          e.printStackTrace();
      }

Клиент

Для демонстрационных целей можете написать свой класс клиента. Он проверяться не будет и нужен только вам для самопроверки.

Дополнительное задание (НЕобязательно к вполнению)

Добавьте поддержку третьей операции. Она будет задаваться json-ом вида { "type": "RESTORE" }. В случае получения такой операции, сервер должен отменить действие последней не-RESTORE-операции. Т.е. после операций

  • { "type": "ADD", "task": "Первая" }
  • { "type": "ADD", "task": "Вторая" }
  • { "type": "REMOVE", "task": "Первая" }
  • { "type": "ADD", "task": "Третья" }
  • { "type": "RESTORE" }
  • { "type": "RESTORE" }

В списке задач в ответ на последнюю операцию должно быть прислано: "Вторая Первая".

Как сдавать готовую работу на проверку

Создайте свой пустой публичный репозиторий на гитхаб. Добавьте его в remotes локального репозитория под именем origin. Убедитесь, что все требования условия диплома выполнены и все тесты проходят. Запушьте все изменения в свой репозиторий и прикрепите ссылку на него при отправке на проверку.

pcs-jpat-diplom's People

Contributors

pjanoh avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.