Bankas_parvaldes_sistema
using System;
using System.Collections.Generic;

class BankasKonts
{
    private static HashSet<int> izmantotieNumuri = new HashSet<int>();
    private static Random rng = new Random();

    private int kontaNumurs;
    private string ipašnieks;
    private decimal atlikums;

    public BankasKonts(string ipašnieks, decimal sakumaAtlikums)
    {
        this.kontaNumurs = GeneretUnikuNumuru();
        this.ipašnieks = ipašnieks;
        this.atlikums = sakumaAtlikums;
    }

    private int GeneretUnikuNumuru()
    {
        int numurs;
        do
        {
            numurs = rng.Next(1000, 10000); // 1000 - 9999
        } while (izmantotieNumuri.Contains(numurs));
        izmantotieNumuri.Add(numurs);
        return numurs;
    }

    ~BankasKonts()
    {
        Console.WriteLine($"Konts #{kontaNumurs} iznīcināts.");
    }

    public void Noguldit(decimal summa)
    {
        if (summa <= 0) throw new ArgumentException("Summai jābūt pozitīvai.");
        atlikums += summa;
    }

    public void Iznemt(decimal summa)
    {
        if (summa <= 0) throw new ArgumentException("Summai jābūt pozitīvai.");
        if (summa > atlikums) throw new InvalidOperationException("Nepietiek līdzekļu.");
        atlikums -= summa;
    }

    public void Paradit()
    {
        Console.WriteLine("\n--- Konta informācija ---");
        Console.WriteLine($"Konta numurs: {kontaNumurs}");
        Console.WriteLine($"Īpašnieks: {ipašnieks}");
        Console.WriteLine($"Atlikums: {atlikums:C}");
    }

    public int Numurs => kontaNumurs;
}

class Program
{
    static List<BankasKonts> konti = new List<BankasKonts>();

    static void Main()
    {
        while (true)
        {
            Console.Clear();
            Console.WriteLine("1. Izveidot kontu\n2. Noguldit\n3. Izņemt\n4. Paradit\n5. Dzēst\n6. Iziet");
            Console.Write("\nIzvēle: ");
            switch (Console.ReadLine())
            {
                case "1": Izveidot(); break;
                case "2": Nauda(true); break;
                case "3": Nauda(false); break;
                case "4": Paradit(); break;
                case "5": Dzest(); break;
                case "6": return;
                default: Console.WriteLine("Nederīga izvēle."); break;
            }
            Console.WriteLine("\nENTER turpināt..."); Console.ReadLine();
        }
    }

    static void Izveidot()
    {
        Console.Write("Īpašnieks: "); var vards = Console.ReadLine();
        Console.Write("Sākuma atlikums: ");
        if (decimal.TryParse(Console.ReadLine(), out var atlikums))
        {
            var konts = new BankasKonts(vards, atlikums);
            konti.Add(konts);
            Console.WriteLine($"Konts izveidots. Konta numurs: {konts.Numurs}");
        }
        else Console.WriteLine("Kļūda summā.");
    }

    static BankasKonts Meklet()
    {
        Console.Write("Konta numurs: ");
        return int.TryParse(Console.ReadLine(), out var nr) ? konti.Find(k => k.Numurs == nr) : null;
    }

    static void Nauda(bool noguldijums)
    {
        var konts = Meklet();
        if (konts == null) { Console.WriteLine("Konts nav atrasts."); return; }
        Console.Write("Summa: ");
        if (decimal.TryParse(Console.ReadLine(), out var summa))
        {
            try
            {
                if (noguldijums) konts.Noguldit(summa); else konts.Iznemt(summa);
                Console.WriteLine("Veiksmīgi.");
            }
            catch (Exception ex) { Console.WriteLine("Kļūda: " + ex.Message); }
        }
    }

    static void Paradit()
    {
        var konts = Meklet();
        if (konts != null) konts.Paradit(); else Console.WriteLine("Konts nav atrasts.");
    }

    static void Dzest()
    {
        var konts = Meklet();
        if (konts != null && konti.Remove(konts)) Console.WriteLine("Konts dzēsts.");
        else Console.WriteLine("Neizdevās dzēst kontu.");
    }
}
