Bank baru kami membutuhkan sistem transaksi teller tetapi ada masalah. Hanya ada beberapa ratus byte ruang yang tersisa di server kami, jadi Anda harus menulis kode yang sangat ringkas.
Basis data
Syukurlah database kami sangat sederhana (itu dibangun oleh anak sekolah presiden bank kami), dan kami hanya memiliki beberapa pelanggan sejauh ini.
file Bank.dataadalah:
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
Spesifikasi Aplikasi
Aplikasi bank kami harus menerapkan perintah berikut:
open <firstname> <lastname>
Membuat (membuka) akun baru dengan mencetak nomor akun 3 digit yang unik.
withdraw <account> <amount>
Tarik jumlah dari akun.
deposit <account> <amount>
Setor jumlah ke dalam akun.
close <account>
Tutup akun jika kosong.
report <fieldname>
Cetak laporan dari database yang diurut berdasarkan fieldname. Pindahkan kolom fieldname ke posisi pertama. Setiap lebar kolom akan menjadi maksimum data terluas dan lebar fieldname, dipisahkan oleh satu spasi. Baris pertama akan menjadi judul bidang. Saldo hanya harus benar dibenarkan dengan $tanda terkemuka .
print <account>
Cetak nama field dan catat untuk akun ini yang diformat seperti laporan.
Setiap kali catatan diubah, Datebidang dalam catatan harus diperbarui ke tanggal saat ini.
Aplikasi akan menampilkan prompt "#" ketika menunggu perintah. Jika perintah gagal (seperti operasi pada akun yang tidak dikenal atau dana tidak mencukupi), aplikasi harus mencetak pesan kesalahan informatif "gagal". Program harus menulis perubahan kembali ke file setelah setiap perubahan, dan membaca dari file pada setiap perintah karena ada banyak program teller di seluruh dunia yang beroperasi pada file secara bersamaan (kita tidak perlu penguncian file - yang dapat mengurangi kinerja).
EDIT: Bidang string adalah ASCII sederhana (az, AZ, -) tanpa spasi putih dan jumlahnya akan selalu antara 0,00 dan 10.00000000,00 (1 miliar) dolar dengan 2 tempat desimal yang menunjukkan sen. Tanggal akan di waktu setempat di setiap cabang (solusi sederhana tetapi dapat menyebabkan beberapa masalah nanti ...).
Keluaran
Jawaban perlu menunjukkan bahwa mereka memenuhi spesifikasi. Silakan lampirkan output dari program Anda setelah memproses perintah berikut:
report Balance
open Clark Kent
print 001
deposit 001 4530
withdraw 105 893
close 105
report Date
Pastikan Anda menggunakan salinan asli dari Bank.datafile yang diberikan di atas.
Mencetak gol
Ini adalah kode-golf, sehingga skor Anda akan menjadi jumlah byte kode Anda. Celah standar dilarang.
<firstname>dan <lastname>dan jangkauan dan ketepatan <amount>? (Misalnya mungkin ada beberapa optimisasi yang dimungkinkan jika <amount>selalu memiliki dua tempat desimal - atau Anda mungkin ingin program tersebut dapat digunakan oleh cabang Timur Tengah, di mana sebagian besar mata uang menggunakan tiga tempat desimal).
<firstname>dan <lastname>keduanya hanya menggunakan a-zA-Z, tetapi bahkan pernyataan sederhana bahwa mereka tidak pernah mengandung karakter tab memungkinkan menggunakan TSV. Jika mereka bisa berupa urutan karakter ASCII, beberapa bentuk melarikan diri atau membatasi selain dengan pembatas satu-char diperlukan.