我们的新银行需要一个柜员交易系统,但是有一个问题。我们的服务器上只剩下几百个字节的空间,因此您将必须编写非常紧凑的代码。
数据库
幸运的是,我们的数据库非常简单(它是由银行行长的小学生儿子建立的),到目前为止,我们只有几个客户。
文件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>
创建(开设)一个新帐户,并打印一个唯一的3位数帐号。
withdraw <account> <amount>
从账户中提款。
deposit <account> <amount>
将金额存入帐户。
close <account>
如果为空,请关闭帐户。
report <fieldname>
打印按字段名排序的数据库报告。将fieldname列移到第一个位置。每列宽度将是最大数据和字段名宽度的最大值,以一个空格分隔。第一行将是字段标题。余额仅需右对齐并带有前导$符号。
print <account>
打印字段名并记录该帐户的格式,使其类似于报告。
每次更改记录时,记录中的Date字段必须更新为当前日期。
等待命令时,应用程序将显示“#”提示。如果命令失败(例如,对未知帐户的操作或资金不足),则应用程序必须打印信息性错误消息“失败”。该程序必须在每次更改后将更改写回到文件中,并在每个命令上从文件中读取,因为世界上有许多柜员程序同时在文件上运行(我们不需要文件锁定-这可能会降低性能)。
编辑:字符串字段是没有空格的简单ASCII(az,AZ,-),金额始终在0.00到1000000000.00(10亿)美元之间,小数点后两位表示美分。日期将是每个分支机构的当地时间(一种简单的解决方案,但稍后可能会导致一些问题...)。
输出量
答案需要证明它们符合规范。处理以下命令后,请附加程序的输出:
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字符序列,则必须使用某种形式的转义或定界,而不是使用一个单字符定界符。