Ngân hàng mới của chúng tôi cần một hệ thống giao dịch rút tiền nhưng có một vấn đề. Chỉ còn lại vài trăm byte dung lượng trên máy chủ của chúng tôi, vì vậy bạn sẽ phải viết mã rất nhỏ gọn.
Cơ sở dữ liệu
Rất may, cơ sở dữ liệu của chúng tôi rất đơn giản (nó được xây dựng bởi con trai học sinh của chủ tịch ngân hàng của chúng tôi) và cho đến nay chúng tôi chỉ có một vài khách hàng.
tập tin Bank.datalà:
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
Đặc tả ứng dụng
Ứng dụng ngân hàng của chúng tôi phải thực hiện các lệnh sau:
open <firstname> <lastname>
Tạo (mở) một tài khoản mới in số tài khoản 3 chữ số duy nhất.
withdraw <account> <amount>
Rút số tiền từ một tài khoản.
deposit <account> <amount>
Số tiền gửi vào một tài khoản.
close <account>
Đóng tài khoản nếu trống.
report <fieldname>
In một báo cáo của cơ sở dữ liệu được sắp xếp theo tên trường. Di chuyển cột tên trường đến vị trí đầu tiên. Mỗi chiều rộng cột sẽ là tối đa của chiều rộng dữ liệu và tên trường rộng nhất, cách nhau bởi một khoảng trắng. Dòng đầu tiên sẽ là tiêu đề trường. Số dư chỉ phải được chứng minh là đúng với một $dấu hiệu hàng đầu .
print <account>
In tên trường và hồ sơ cho tài khoản này được hình thành như báo cáo.
Mỗi lần thay đổi bản ghi, Datetrường trong bản ghi phải được cập nhật vào ngày hiện tại.
Ứng dụng sẽ hiển thị lời nhắc "#" khi chờ lệnh. Nếu một lệnh thất bại (chẳng hạn như một hoạt động trên một tài khoản không xác định hoặc không đủ tiền), ứng dụng phải in thông báo lỗi thông tin "không thành công". Chương trình phải ghi lại các thay đổi vào tệp sau mỗi thay đổi và đọc từ tệp trên mỗi lệnh vì có nhiều chương trình rút tiền trên toàn thế giới hoạt động đồng thời trên tệp (chúng tôi không cần khóa tệp - điều đó có thể làm giảm hiệu suất).
EDIT: Các trường chuỗi là ASCII đơn giản (az, AZ, -) không có khoảng trắng và số tiền sẽ luôn nằm trong khoảng từ 0,00 đến 1000000000,00 (1 tỷ) đô la với 2 chữ số thập phân chỉ số xu. Ngày sẽ theo giờ địa phương tại mỗi chi nhánh (một giải pháp đơn giản nhưng có thể dẫn đến một số vấn đề sau này ...).
Đầu ra
Câu trả lời sẽ cần phải chứng minh rằng họ đáp ứng các đặc điểm kỹ thuật. Vui lòng đính kèm đầu ra từ chương trình của bạn sau khi xử lý các lệnh sau:
report Balance
open Clark Kent
print 001
deposit 001 4530
withdraw 105 893
close 105
report Date
Đảm bảo bạn sử dụng bản sao gốc của Bank.datatệp được cung cấp ở trên.
Chấm điểm
Đây là môn đánh gôn, vì vậy điểm của bạn sẽ là số byte của mã. Sơ hở tiêu chuẩn bị cấm.
<firstname>và <lastname>phạm vi và độ chính xác của <amount>? (Ví dụ: có thể có một số tối ưu hóa có thể nếu <amount>luôn có chính xác hai chữ số thập phân - hoặc bạn có thể muốn chương trình có thể sử dụng được bởi chi nhánh Trung Đông, nơi hầu hết các loại tiền tệ sử dụng ba chữ số thập phân).
<firstname>và <lastname>cả hai chỉ sử dụng a-zA-Z, nhưng ngay cả một tuyên bố đơn giản rằng chúng không bao giờ chứa các ký tự tab cho phép sử dụng TSV. Nếu chúng có thể là bất kỳ chuỗi ký tự ASCII nào, một số hình thức thoát hoặc phân định khác với dấu phân cách một ký tự là cần thiết.