Уявний замовник, директор Паркінгу, бажаючи автоматизувати рутинні процеси свого бізнесу, звернувся до тебе по допомогу, тож тобі треба створити простеньку програму для керування Паркінгом - “Cool Parking”.
Якщо баланс позитивний, але менше ніж поточна оплата за тарифом, то коефіцієнт буде застосований до відсутньої суми:
Наприклад на рахунку Тр. засобу 3у.о., тариф 5у.о., коефіцієнт 2.5. Бачимо що не вистачає 5-3 = 2у.о. і до цієї суми буде застосовано коефіцієнт, відповідно сума списання в даному випадку складе 3 + 2 * 2,5 = 8у.о.
гроші переводяться з балансу Тр. засобу на баланс Паркінгу згідно з тарифом, який залежить від типу Тр. засобу. Якщо гроші на балансі Тр. засобу закінчилися, то плата продовжує зніматися, але вже з Коефіцієнтом штрафу, через що утворюється борг (від'ємний баланс).
ставити та забирати Тр. засоби з Паркінгу;
поповнювати баланс Тр. засобів;
надавати поточну інформацію про паркомісця (вільно X з Y);
в автоматизованому режимі знімати оплату за послуги Паркінгу;
вести журнал поточних Транзакцій;
зберігати історію Транзакцій у файл.
Транспортні засоби (Тр. засоби) повинні мати Тип (один з 4х: Легкова, Вантажна, Автобус, Мотоцикл), Баланс та ID формату ХХ-YYYY-XX (де X - будь-яка літера англійського алфавіту у верхньому регістрі, а Y - будь-яка цифра, наприклад DV-2345-KJ).
У програмі мають бути передбачені Налаштування, чудово підійде статичний клас, у якому централізовано знаходяться глобальні змінні та конфігурації, необхідні для роботи програми. У Налаштуваннях потрібно вказати:
Період списання оплати відраховується не для кожного Тр. засобу з моменту його встановлення на Паркінг, а для Паркінгу (Тр. засобів на ньому) в цілому - з моменту початку роботи Паркінгу. Це допущення спрощує реалізацію.
Наприклад, якщо Період списання оплати дорівнює 5 сек і Паркінг почав роботу у 09:27:03, Тр. засіб №1 поставлен на Паркінг у 09:27:04, а Тр. засіб №2 у 09:27:06, то у 09:27:08 (09:27:13, 09:27:18, …) з обох Тр. засобів буде зніматися оплата, поки вони не будуть зняті з Паркінгу.
Процес оплати фіксується Транзакцією. У ній вказується час Транзакції, ідентифікатор Тр. засобу та кількість грошей, які були списані з нього. Програма зберігає поточні Транзакції та кожні N-секунд - Період запису у лог поточні Транзакції записуються у текстовому форматі y файл Transactions.log.
Наприклад, якщо Період запису у лог 60сек=1хв та Паркінг працює вже 5хв24сек, то у поточних транзакціях будуть тільки транзакції за останні 24сек, а у Transactions.log буде історія транзакцій з початку роботи Паркінгу до 5ти хвилин.