06. FELADAT · FORRÁSKÓD

Önkiszolgáló kassza

Program.cs letöltése
namespace Feladat06_OnkiszolgaloKassza
{
    internal class Program
    {
        static void Main(string[] args)
        {
            const int CIMLETEK_SZAMA = 12;

            Console.WriteLine("=== Önkiszolgáló kassza ===");

            Console.Write("A vásárlás összege (Ft): ");
            int osszeg = int.Parse(Console.ReadLine());

            int fizetendo = OtreKerekit(osszeg);
            Console.WriteLine($"Kerekítés után fizetendő: {fizetendo} Ft");

            Console.Write("Átadott készpénz (Ft): ");
            int atadott = int.Parse(Console.ReadLine());

            if (atadott < fizetendo)
            {
                Console.WriteLine($"Nem elegendő: még {fizetendo - atadott} Ft hiányzik.");
            }
            else
            {
                int visszajaro = atadott - fizetendo;

                if (visszajaro == 0)
                {
                    Console.WriteLine("Pontos fizetés, nincs visszajáró.");
                }
                else
                {
                    Console.WriteLine($"Visszajáró: {visszajaro} Ft");
                    Console.WriteLine();
                    Console.WriteLine("A kiadott címletek:");

                    int maradek = visszajaro;
                    int osszesDarab = 0;

                    for (int i = 0; i < CIMLETEK_SZAMA; i++)
                    {
                        int cimlet = CimletErteke(i);
                        int darab = maradek / cimlet;

                        if (darab > 0)
                        {
                            Console.WriteLine($"{cimlet} Ft: {darab} db");
                            osszesDarab += darab;
                        }

                        maradek = maradek % cimlet;
                    }

                    Console.WriteLine($"Összesen {osszesDarab} darab pénzt adott ki a gép.");
                }
            }
        }

        // Magyarországon a készpénzes végösszeget 5 forintra kerekítjük.
        // 1 és 2 Ft-ra végződve lefelé, 3 és 4 Ft-ra végződve felfelé.
        static int OtreKerekit(int osszeg)
        {
            return (osszeg + 2) / 5 * 5;
        }

        // A forgalomban lévő címletek csökkenő sorrendben, sorszám szerint.
        static int CimletErteke(int sorszam)
        {
            int ertek;

            switch (sorszam)
            {
                case 0: ertek = 20000; break;
                case 1: ertek = 10000; break;
                case 2: ertek = 5000; break;
                case 3: ertek = 2000; break;
                case 4: ertek = 1000; break;
                case 5: ertek = 500; break;
                case 6: ertek = 200; break;
                case 7: ertek = 100; break;
                case 8: ertek = 50; break;
                case 9: ertek = 20; break;
                case 10: ertek = 10; break;
                case 11: ertek = 5; break;
                default: ertek = 1; break;
            }

            return ertek;
        }
    }
}