Загрузка данных


<?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;
        }
    }
}