<?php
namespace F;
$records = [];
function addRecord($input) {
global $records;
echo "Введите дату в формате ГГГГ-ММ-ДД: ";
[$date] = fscanf($input, "%s");
echo "Введите название: ";
[$category] = fscanf($input, "%s");
echo "Введите сумму: ";
[$amount] = fscanf($input, "%f");
$records[] = ['date' => $date, 'category' => $category, 'amount' => $amount];
echo "Расход успешно добавлен\n";
}
function showByDay($input) {
global $records;
echo "Введите дату в формате ГГГГ-ММ-ДД: ";
[$targetDate] = fscanf($input, "%s");
$total = 0;
foreach ($records as $record) {
if ($record['date'] === $targetDate) {
printf("%s: %.2f\n", $record['category'], $record['amount']);
$total += $record['amount'];
}
}
printf("Итого: %.2f\n", $total);
}
function showByMonth($input) {
global $records;
echo "Введите месяц в формате ГГГГ-ММ: ";
[$month] = fscanf($input, "%s");
$total = 0;
foreach ($records as $record) {
if (strpos($record['date'], $month) === 0) {
printf("%s – %s: %.2f\n", $record['date'], $record['category'], $record['amount']);
$total += $record['amount'];
}
}
printf("Итого: %.2f\n", $total);
}
function statsByMonth($input) {
global $records;
echo "Введите месяц в формате ГГГГ-ММ: ";
[$month] = fscanf($input, "%s");
$groups = [];
$total = 0;
foreach ($records as $record) {
if (strpos($record['date'], $month) === 0) {
$cat = $record['category'];
if (!isset($groups[$cat])) {
$groups[$cat] = 0;
}
$groups[$cat] += $record['amount'];
$total += $record['amount'];
}
}
foreach ($groups as $name => $sum) {
printf("%s: %.2f\n", $name, $sum);
}
printf("Итого за месяц: %.2f\n", $total);
}
function printMenu() {
echo "1. Добавить расход\n";
echo "2. Показать расходы за день\n";
echo "3. Показать расходы за месяц\n";
echo "4. Статистика расходов за месяц\n";
echo "5. Выход\n";
echo "Выберите действие: ";
}
function run() {
$input = fopen('php://stdin', 'r');
while (true) {
printMenu();
[$action] = fscanf($input, "%d");
switch ($action) {
case 1:
addRecord($input);
break;
case 2:
showByDay($input);
break;
case 3:
showByMonth($input);
break;
case 4:
statsByMonth($input);
break;
case 5:
fclose($input);
return;
default:
echo "Некорректный пункт меню\n";
fclose($input);
return;
}
}
}