Git Product home page Git Product logo

bank's Introduction

Описание/Пошаговая инструкция выполнения домашнего задания: Реализовать библиотеку предоставляющую базовый банковский функционал:

  • Создавать счёт.
  • Пополнять счёт и снимать с него деньги.
  • Переводить деньги со одного счёта на другой.
  • Предоставлять историю операций.

Подробности:

Счет:

  • На счету хранятся деньги - целое число.
  • Счёт имеет имя - уникальный идентификатор.
  • Перед выполнением любых операций по счёту, его необходимо создать.
  • Выполнение операции с несуществующим счётом - ошибка.
  • Если счёт с именем Х существует, то создание нового счёта с именем Х - ошибка.
  • Клиент может получить свой баланс.

Пополнение:

  • Пополнение увеличивает количество денег на счете на указанную сумму.
  • Пополнение на ноль денежных единиц - ошибка.

Снятие:

  • Снятие уменьшает количество денег на счете на указанную сумму.
  • Снятие нуля денежных единиц - ошибка.
  • Попытка снять больше чем есть на счете - ошибка.

Переводы:

  • Перевод уменьшает баланс отправителя и увеличивает баланс получателя на указанную сумму.
  • Перевод нуля денежных единиц - ошибка.
  • Перевод самому себе - ошибка.
  • Если сумма перевода больше баланса отправителя - ошибка.

История операций:

  • Каждая операция (регистрация счёта, пополнение, снятие, перевод) должна сохраняться.

  • Каждая успешная операция возвращает уникальный идентификатор, по которому данные об этой операции могут быть в дальнейшем запрошены.

  • Можно получить всю историю операций.

  • Можно получить историю операций связанных с конкретным счётом. Если в истории всего М операций, а со счётом X связано N операций, то получение всех операций связанных со счётом Х должно выполняться за O(N), а не за О(М). Иными словами, обычно М много больше N, поэтому мы должны хранить индекс операций по пользователям

  • Операции должны храниться в порядке их выполнения.

  • Есть возможность восстановить состояние счетов, повторно выполнив все операции из истории в новом экземпляре банка.

  • После этого новый экземпляр банка должен совпадать с тем, историю которого мы использовали.

  • Требования:

    • Библиотека реализует весь описанный функционал.
    • Весь функционал протестирован.
    • Приведён пример использования библиотеки.
    • Все публичные методы задокументированы. Документационные комментарии содержат тесты.
    • Библиотека предосталяет данные о каждой произошедшей ошибке.
    • ''cargo clippy™' n '"cargo fmt-check!' не выдают предупреждений и ошибок.
  • Дополнительные задачи (по желанию):
  • Счёт - обобщённый тип, реализацию которого выбирает клиент библиотеки.
  • За все операции взымается комиссия и добавляется на специальный счёт.
  • Банк хранит данные в базе данных (Redis, SQLite, ...).

bank's People

Contributors

dmitry-ov avatar

Watchers

 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.