Skip to content

Latest commit

 

History

History
132 lines (98 loc) · 11.6 KB

File metadata and controls

132 lines (98 loc) · 11.6 KB

XML, JSON, CSV

Памятка к домашнему заданию

Перед тем, как отправить своё решение на проверку преподавателю, сверьтесь с чеклистом

Что делать, если возникли сложности?

И это здорово! Если их преодолевать правильно, то можно получить большую образовательную пользу для себя. Периодическое возникновение вопросов, недопонимание пройденного материала - нормальная и неотъемлемая часть обучения. А мы здесь, чтобы помочь вам пройти этот путь.

Что делать, если непонятна теория?

  1. Если подобный вопрос разбирался на лекции, посмотрите еще раз раздел с этой темой в видеозаписи.
  2. Если вопрос не решился, попробуйте поискать ответ самостоятельно в интернете, этот навык пригодится вам в работе.
  3. Если самостоятельно разобраться не удалось, задайте вопрос в общем чате, мы обязательно поможем.

Что делать, если непонятно условие задания?

  1. Прежде чем задать вопрос по условию задачи, перечитайте его ещё раз и убедитесь, что в тексте условия нет прямого ответа на этот вопрос. Умение работать с текстом - важный навык работы с информацией.
  2. Если ответа на свой вопрос в тексте условия не увидели, задайте его в общем чате, мы раскроем детали условия подробнее. Не забудьте при этом скинуть и ссылку на условие задания, про которую у вас вопрос.

Что делать,если не получается задача?

Если ваша проблема это ошибка компиляции (подчёркивает красным, не даёт запустить программу), сборки проекта, CI и прочие подобные ошибки, то:

  1. Найдите и прочитайте текст ошибки, который вам подсвечивает реплит, идея (или логи); "подчёркивает красным" - это не описание ошибки.
  2. Попробуйте понять текст ошибки, при необходимости воспользуйтесь переводчиком. Нестрашно, если вы переведёте неточно, тут главное сам процесс: со временем и с нашей помощью вы будете это делать лучше и лучше, но, пропуская этот этап, вы не сможете научиться это делать.
  3. Если не получилось понять ошибку по её тексту, попробуйте её загуглить и изучить подобную ошибку у других людей. Попробуйте примерить решения их проблем на свой код. Соотнесите найденные описания ошибки с пройденной теорией.
  4. Если все равно вашу трудности не разрешились, напишите в общий чат, обязательно указав:
    1. Название задачи и ссылку на условие
    2. Ссылку на вашу работу
    3. Текст и скриншот (не фотография) ошибки.
    4. Ваши размышления и описание шагов, которые вы совершили для решения.

Если ваша проблема это ошибка исполнения (программа умирает уже после запуска) или она отрабатывает неправильно, то:

  1. Воспользуйтесь отладчиком для пошагового анализа работы вашей программы. Так вы либо убедитесь в неправильности придуманного вами алгоритма или найдёте конкретное место, где ожидаемое поведение программы разошлось с фактическим.
  2. Если проблему найти не получилось, напишите в общий чат, обязательно указав:
    1. Название задачи и ссылку на условие
    2. Ссылку на вашу работу
    3. Конкретное и подробное описание проблемы или затруднения при решении задачи ("Помогите что не так" - это не описание)
    4. Подробное описание вашего анализа программы с помощью отладчика вместе со скринами
    5. Ваши размышления и описание шагов, которые вы совершили для решения.

В решении выполнены все требования задания

Убедитесь, что все требования задания выполнены. Для этого перед отправкой внимательно прочтите весь текст условия задания и соотнесите сказанное в нём с вашим решением. Навык самопроверки работы перед ревью пригодится вам как при обучении, так и на работе.


Сдаём через гитхаб

Время пришло познакомиться с профессиональными инструментами для контроля версий вашего кода. Теперь мы не сдаём домашние задания в реплите, а заливаем проект из идеи сразу же в публичный гитхаб-репозиторий. Одна задача - один репозиторий.

Для того чтобы в репозитории не отслеживался всякий мусор, не забывайте добавлять .gitignore. В нём должны игнорироваться файлы идеи (правила *.iml и .idea), папки для автогенерируемых результатов сборки (out, позже - target). Этот файл должен находиться в корне вашего репозитория, а сам репозиторий должен быть инициализирован в корне вашего проекта. Т.е. открывая репозиторий вы должны сразу видеть папку src. Если вы забыли проигнорировать какие-либо файлы и они попали в репозиторий, используйте команду git rm.

Работаем с мавен-проектами 🆕

Эту и последующие задачи делаем в мавен-проектах. Gradle нельзя, как и сдавать без систем сборки. Убедитесь, что все нужные файлы закоммичены (pom.xml, src,..), а мусор проигнорирован (например, автосгенеренная target).


Задача 1 (обязательная)

⚠️ Эта задача является продолжением задачи про сериализацию, поэтому для выполнения этой лучше сперва нужно получить по ней зачёт.

Возьмите репо с решением задачи про сериализацию и отведите новую ветку json от main.

Создайте класс ClientLog для сохранения всех операций, которые ввёл пользователь. Т.е. покупатель добавил покупку, то это действие должно быть там сохранено. Для этого создайте там метод log(int productNum, int amount). Также у объекта этого класса должен быть метод exportAsCSV(File txtFile) для сохранения всего журнала действия в файл в формате csv. Пример файла который должен получиться:

productNum,amount
3,4
1,1
3,2
5,12

В конце работы программы сохраняйте журнал действий в файл log.csv.

Также вместо вызова метода saveTxt в методе main сериализуйте корзину в json-формате в файл basket.json. Аналогично при старте программы загружайте корзину десериализацией из json-а из файла basket.json, а не из обычной текстовой сериализации как было до того. При этом логику сериализации в методах в классе корзины трогать не нужно.

Коммит и пуш в ветку json.

Задача 2 (обязательная)

Эту задачу делайте в том же репозитории и ветке, что и первую.

В корне вашего проекта разместите: shop.xml с содержимым:

<config>
  <load>
    <enabled>false</enabled>
    <fileName>basket.json</fileName>
    <format>json</format>
  </load>
  
  <save>
    <enabled>true</enabled>
    <fileName>basket.json</fileName>
    <format>json</format>
  </save>
  
  <log>
    <enabled>true</enabled>
    <fileName>client.csv</fileName>
  </log>
</config>

При старте ваша программа должна считывать этот файл и загружать из него настройки:

  • блок load говорит нужно ли загружать данные корзины при старте программы из файла (enabled), указывает имя этого файла (fileName) и формат (json или text). Ваша программа должна вести себя соответствующим образом.
  • блок save говорит нужно ли сохранять данные корзины после каждого ввода, куда и в каком формате (text или json).
  • блок log говорит нужно ли сохранять лог при завершении программы и в какой файл; формат лога всегда csv.

Сделайте коммит и пуш в ветку json.