Nasz nowy bank potrzebuje systemu transakcyjnego bankomatu, ale jest problem. Na naszym serwerze pozostało tylko kilkaset bajtów miejsca, więc będziesz musiał napisać bardzo zwarty kod.
Baza danych
Na szczęście nasza baza danych jest bardzo prosta (została zbudowana przez ucznia-syna naszego prezesa banku) i do tej pory mamy tylko kilku klientów.
plik Bank.datajest:
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
Specyfikacja aplikacji
Nasza aplikacja bankowa musi implementować następujące polecenia:
open <firstname> <lastname>
Tworzy (otwiera) nowe konto, drukując unikalny 3-cyfrowy numer konta.
withdraw <account> <amount>
Wypłać kwotę z konta.
deposit <account> <amount>
Wpłać kwotę na konto.
close <account>
Zamknij konto, jeśli jest puste.
report <fieldname>
Wydrukuj raport bazy danych posortowany według nazwy pola. Przenieś kolumnę nazwy pola na pierwszą pozycję. Szerokość każdej kolumny będzie maksymalną z najszerszych danych i szerokością nazwy pola, oddzieloną jedną spacją. Pierwszą linią będą tytuły pól. Wagi muszą być odpowiednio uzasadnione $znakiem wiodącym .
print <account>
Wydrukuj nazwy pól i zapisz dla tego konta sformatowanego jak raport.
Za każdym razem, gdy rekord jest zmieniany, Datepole w rekordzie musi być aktualizowane do bieżącej daty.
Aplikacja wyświetli monit „#” podczas oczekiwania na polecenie. Jeśli polecenie nie powiedzie się (np. Operacja na nieznanym koncie lub niewystarczające fundusze), aplikacja musi wydrukować informacyjny komunikat o błędzie „błąd”. Program musi zapisywać zmiany z powrotem do pliku po każdej zmianie i czytać z pliku przy każdej komendzie, ponieważ istnieje wiele programów kasjerskich na całym świecie działających jednocześnie na tym pliku (nie potrzebujemy blokowania pliku - może to zmniejszyć wydajność).
EDYCJA: Pola ciągów są prostymi ASCII (az, AZ, -) bez białych znaków, a kwota zawsze będzie wynosić od 0,00 do 1000000000,00 (1 miliard) dolarów z 2 miejscami po przecinku oznaczającymi centy. Data będzie podana w czasie lokalnym w każdym oddziale (proste rozwiązanie, ale może później spowodować pewne problemy ...).
Wynik
Odpowiedzi będą musiały wykazać, że spełniają specyfikację. Załącz dane wyjściowe z programu po przetworzeniu następujących poleceń:
report Balance
open Clark Kent
print 001
deposit 001 4530
withdraw 105 893
close 105
report Date
Upewnij się, że używasz oryginalnej kopii Bank.datapliku podanej powyżej.
Punktacja
To jest golf golfowy, więc twój wynik będzie liczbą bajtów twojego kodu. Standardowe luki są zabronione.
<firstname>oraz <lastname>zakres i precyzję <amount>? (Na przykład mogą istnieć pewne optymalizacje, które są możliwe, jeśli <amount>zawsze mają dokładnie dwa miejsca po przecinku - lub możesz chcieć, aby program był użyteczny przez oddział Bliskiego Wschodu, gdzie większość walut używa trzech miejsc po przecinku).
<firstname>i <lastname>oba wykorzystują tylko a-zA-Z, ale nawet proste stwierdzenie, że nigdy nie zawierają znaków tabulacji, pozwala na użycie TSV. Jeśli mogą to być dowolne sekwencje znaków ASCII, konieczna jest jakaś forma zmiany znaczenia lub rozdzielania znaków inna niż za pomocą separatora jednoznakowego.