04. FELADAT · FORRÁSKÓD

Iskolai büfé – napi zárás

Program.cs letöltése
namespace Feladat04_BufeNapiZaras
{
    internal class Program
    {
        static void Main(string[] args)
        {
            const double KEDVEZMENY_HATAR = 1000.0;   // e fölötti vásárlásra jár a diákkedvezmény
            const double KEDVEZMENY_SZAZALEK = 0.10;  // 10%

            Console.WriteLine("=== Iskolai büfé – napi zárás ===");

            Console.Write("Hány vásárlás volt ma? ");
            int vasarlasokSzama = int.Parse(Console.ReadLine());

            double bevetelSzendvics = 0;
            double bevetelItal = 0;
            double bevetelEdesseg = 0;
            double adottKedvezmeny = 0;
            int kedvezmenyesTetelek = 0;
            int ervenyesTetelek = 0;
            int hibasTetelek = 0;
            double legnagyobbVasarlas = 0;
            int legnagyobbSorszama = 0;

            for (int i = 1; i <= vasarlasokSzama; i++)
            {
                Console.Write($"{i}. vásárlás kategóriája (1-szendvics, 2-ital, 3-édesség): ");
                int kategoria = int.Parse(Console.ReadLine());

                if (kategoria < 1 || kategoria > 3)
                {
                    hibasTetelek++;
                    Console.WriteLine("   Érvénytelen kategória, a tétel nem kerül rögzítésre.");
                }
                else
                {
                    Console.Write($"{i}. vásárlás összege (Ft): ");
                    double osszeg = double.Parse(Console.ReadLine());

                    double kedvezmeny = Kedvezmeny(osszeg, KEDVEZMENY_HATAR, KEDVEZMENY_SZAZALEK);
                    double fizetett = osszeg - kedvezmeny;

                    if (kedvezmeny > 0)
                    {
                        kedvezmenyesTetelek++;
                        adottKedvezmeny += kedvezmeny;
                        Console.WriteLine($"   Diákkedvezmény: -{kedvezmeny:F2} Ft, fizetendő: {fizetett:F2} Ft");
                    }

                    switch (kategoria)
                    {
                        case 1: bevetelSzendvics += fizetett; break;
                        case 2: bevetelItal += fizetett; break;
                        case 3: bevetelEdesseg += fizetett; break;
                    }

                    ervenyesTetelek++;

                    if (fizetett > legnagyobbVasarlas)
                    {
                        legnagyobbVasarlas = fizetett;
                        legnagyobbSorszama = i;
                    }
                }
            }

            double osszBevetel = bevetelSzendvics + bevetelItal + bevetelEdesseg;

            Console.WriteLine();
            Console.WriteLine("--- Napi zárás ---");
            Console.WriteLine($"{KategoriaNev(1)}: {bevetelSzendvics:F2} Ft");
            Console.WriteLine($"{KategoriaNev(2)}: {bevetelItal:F2} Ft");
            Console.WriteLine($"{KategoriaNev(3)}: {bevetelEdesseg:F2} Ft");
            Console.WriteLine($"Összes bevétel: {osszBevetel:F2} Ft");
            Console.WriteLine($"Rögzített tételek: {ervenyesTetelek} db, hibás tételek: {hibasTetelek} db");
            Console.WriteLine($"Kedvezményes vásárlások: {kedvezmenyesTetelek} db");
            Console.WriteLine($"Összes adott kedvezmény: {adottKedvezmeny:F2} Ft");

            if (ervenyesTetelek > 0)
            {
                double atlag = osszBevetel / ervenyesTetelek;
                Console.WriteLine($"Átlagos kosárérték: {atlag:F2} Ft");
                Console.WriteLine($"A legnagyobb vásárlás a(z) {legnagyobbSorszama}. tétel volt: {legnagyobbVasarlas:F2} Ft");
            }
            else
            {
                Console.WriteLine("Ma egyetlen érvényes vásárlás sem volt, ezért átlag és legnagyobb tétel sincs.");
            }
        }

        // A határ FÖLÖTTI vásárlásra jár a kedvezmény; egyébként 0 Ft.
        static double Kedvezmeny(double osszeg, double hatar, double szazalek)
        {
            double kedvezmeny = 0;

            if (osszeg > hatar)
            {
                kedvezmeny = osszeg * szazalek;
            }

            return kedvezmeny;
        }

        static string KategoriaNev(int kod)
        {
            string nev;

            switch (kod)
            {
                case 1: nev = "Szendvics"; break;
                case 2: nev = "Ital"; break;
                case 3: nev = "Édesség"; break;
                default: nev = "Ismeretlen"; break;
            }

            return nev;
        }
    }
}