Нашему новому банку нужна система банковских операций, но есть проблема. На нашем сервере осталось всего несколько сотен байт, поэтому вам придется писать очень компактный код.
База данных
К счастью, наша база данных очень проста (она была создана школьным сыном президента нашего банка), и у нас пока всего несколько клиентов.
файл Bank.data
:
Account Firstname Lastname Balance Date
123 Maree Jones 346.22 2014-12-13
035 Thomas Breakbone 3422.02 2015-01-03
422 Henrietta Throsby-Borashenko 277847.74 2014-11-21
501 Timmy Bongo 7.95 2014-11-04
105 William Greene 893.00 2015-01-06
300 Mary Galoway 1228.73 2014-12-28
203 Samantha Richardson 2055.44 2014-11-01
151 Bruce Wayne 956119.66 2014-10-09
166 Chip Stonesmith 266.71 2014-12-15
888 Alexandria Cooper 1299.82 2014-12-30
Спецификация приложения
Наше банковское приложение должно реализовывать следующие команды:
open <firstname> <lastname>
Создает (открывает) новую учетную запись, печатая уникальный трехзначный номер учетной записи.
withdraw <account> <amount>
Снять сумму со счета.
deposit <account> <amount>
Внесите сумму на счет.
close <account>
Закрыть счет, если он пуст.
report <fieldname>
Распечатать отчет по базе данных, отсортированной по имени поля. Переместите столбец с именем поля на первую позицию. Ширина каждого столбца будет максимальной шириной данных и ширины имени поля, разделенных одним пробелом. Первая строка будет заголовками полей. Только весы должны быть правильно выровнены с ведущим $
знаком.
print <account>
Напечатайте имена полей и записи для этой учетной записи, отформатированные как отчет.
Каждый раз, когда запись изменяется, Date
поле в записи должно обновляться до текущей даты.
Приложение покажет приглашение «#» при ожидании команды. Если команда не выполняется (например, операция на неизвестном счете или недостаточно средств), приложение должно распечатать информационное сообщение об ошибке «ошибка». Программа должна записывать изменения обратно в файл после каждого изменения и читать из файла каждой команды, так как в мире существует много программ кассира, работающих с файлом одновременно (нам не нужна блокировка файла - это может снизить производительность).
РЕДАКТИРОВАТЬ: строковые поля являются простыми ASCII (az, AZ, -) без пробелов, и сумма всегда будет между 0,00 и 1000000000.00 (1 миллиард) долларов с 2 десятичными знаками, указывающими центы. Дата будет по местному времени в каждой ветви (простое решение, но может привести к некоторым проблемам позже ...).
Выход
Ответы должны будут продемонстрировать, что они соответствуют спецификации. Пожалуйста, приложите вывод из вашей программы после обработки следующих команд:
report Balance
open Clark Kent
print 001
deposit 001 4530
withdraw 105 893
close 105
report Date
Убедитесь, что вы используете оригинальную копию Bank.data
файла, указанного выше.
счет
Это код-гольф, поэтому ваш счет будет количеством байтов вашего кода. Стандартные лазейки запрещены.
<firstname>
и <lastname>
и диапазон и точность <amount>
? (Например, могут быть некоторые оптимизации, которые возможны, если <amount>
всегда имеет ровно два десятичных знака - или вы можете захотеть, чтобы программа использовалась ближневосточной ветвью, где большинство валют используют три десятичных знака).
<firstname>
и <lastname>
как только использовать a-zA-Z
, но даже простое утверждение , что они никогда не содержат символы табуляции позволяет использовать TSV. Если они могут быть любой последовательностью символов ASCII, необходима некоторая форма экранирования или разделения, отличная от разделителя из одного символа.