» »

[c#] Meni s pomočjo switch stavka

[c#] Meni s pomočjo switch stavka

Cvenemir ::

Lp. Zanima me, kako naj popravim meni, da se bo po koncu izvajanje določene metode v konzoli spet izpisal začetni meni.

switch (izbira)
            {
                //Glavni meni
                case "0":
                    Console.WriteLine("GLAVNI MENI");
                    Console.WriteLine("===========");
                    Console.WriteLine("1) Delo z osebami");
                    Console.WriteLine("2) Delo z seznami");
                    Console.WriteLine("3) Izvoz/uvoz podatkov");
                    break;

                case "1":
                    Console.WriteLine("==============");
                    Console.WriteLine("DELO Z OSEBAMI");
                    Console.WriteLine("==============");
                    Console.WriteLine("1.1) Usvari novo osebo in jo dodaj na seznam");
                    Console.WriteLine("1.2) Poišči in izpiši podatke določene osebe glede na ime");
                    Console.WriteLine("1.3) Poišči in izpiši podatke določene osebe glede na priimek");
                    Console.WriteLine("1.4) Poišči in izpiši podatke določene osebe glede na naslov");
                    Console.WriteLine("1.5) Uredi podatke določene osebe");
                    break;

                //Sub-menu 1
                case "1.1":
                    UstvariOsebo(osebe);
                    break;
                case "1.2":
                    IzpisiOseboIme(osebe);
                    break;
                case "1.3":
                    IzpisiOseboPriimek(osebe);
                    break;
                case "1.4":
                    IzpisiOseboNaslov(osebe);
                    break;
                case "1.5":
                   UrediOsebo(osebe);
                    break;

                case "2":
                    Console.WriteLine("==============");
                    Console.WriteLine("DELO Z SEZNAMI");
                    Console.WriteLine("==============");
                    Console.WriteLine("2.1) Izpiši začetni seznam");
                    Console.WriteLine("2.2) Razvrsti seznam po imenu");
                    Console.WriteLine("2.3) Razvrsti seznam po priimku");
                    Console.WriteLine("2.4) Razvrsti seznam po naslovu");
                    break;

                //Sub-menu 2
                case "2.1":
                    IzpisSeznama(osebe);
                    break;
                case "2.2":
                    RazvrstiIme(osebe);                    
                    break;
                case "2.3":
                    RazvrstiPriimek(osebe);
                    break;
                case "2.4":
                    RazvrstiNaslov(osebe);
                    break;
                case "3":
                    Console.WriteLine("===================");
                    Console.WriteLine("IZVOZ/UVOZ PODATKOV");
                    Console.WriteLine("===================");
                    Console.WriteLine("3.1) Izvozi seznam v .txt datoteko");
                    Console.WriteLine("3.2) Naloži seznam iz datoteke na disku");
                    Console.WriteLine("3.3) Nalaganje seznama na datoteko na disku");
                    break;
                case "3.1":
                    ZapisiVTxt(osebe);
                    break;
            }

Ciklamen ::

Tu imaš princip kako ohraniš meni gor:

do {
        //koda iz menija(pri tebi to kaj imaš pod case "0":
        cout << "Izbira: "; 
        cin>>a;
        cout<<endl;
        switch (a) {
              case 1:
                   auverge
                   break;
              case 2:
                   jade jade
                   break;
              case 3:
                   ratatatata
                   break;
              case 4:
                   bla
                   break;
              case 5:
                   blabla
                   break;
              default:
                   bla
                   break;
              }
    } while (a !=6);


Upam da ti kaj pomaga :)
- End of the Post ->

Zgodovina sprememb…

  • spremenil: Ciklamen ()

Cvenemir ::

v tem primeru ne, ker imam za izpis seznama napisano funkcijo :)
public static void IzpisiMeni(string izbira, List<Oseba> osebe)
        {
                switch (izbira)
                {
                    //Glavni meni
                    case "0":
                        Console.WriteLine("GLAVNI MENI");
                        Console.WriteLine("===========");
                        Console.WriteLine("1) Delo z osebami");
                        Console.WriteLine("2) Delo z seznami");
                        Console.WriteLine("3) Izvoz/uvoz podatkov");
                        break;

                    case "1":
                        Console.WriteLine("==============");
                        Console.WriteLine("DELO Z OSEBAMI");
                        Console.WriteLine("==============");
                        Console.WriteLine("1.1) Usvari novo osebo in jo dodaj na seznam");
                        Console.WriteLine("1.2) Poišči in izpiši podatke določene osebe glede na ime");
                        Console.WriteLine("1.3) Poišči in izpiši podatke določene osebe glede na priimek");
                        Console.WriteLine("1.4) Poišči in izpiši podatke določene osebe glede na naslov");
                        Console.WriteLine("1.5) Uredi podatke določene osebe");
                        break;

                    //Sub-menu 1
                    case "1.1":
                        UstvariOsebo(osebe);
                        break;
                    case "1.2":
                        IzpisiOseboIme(osebe);
                        break;
                    case "1.3":
                        IzpisiOseboPriimek(osebe);
                        break;
                    case "1.4":
                        IzpisiOseboNaslov(osebe);
                        break;
                    case "1.5":
                        UrediOsebo(osebe);
                        break;

                    case "2":
                        Console.WriteLine("==============");
                        Console.WriteLine("DELO Z SEZNAMI");
                        Console.WriteLine("==============");
                        Console.WriteLine("2.1) Izpiši začetni seznam");
                        Console.WriteLine("2.2) Razvrsti seznam po imenu");
                        Console.WriteLine("2.3) Razvrsti seznam po priimku");
                        Console.WriteLine("2.4) Razvrsti seznam po naslovu");
                        break;

                    //Sub-menu 2
                    case "2.1":
                        IzpisSeznama(osebe);
                        break;
                    case "2.2":
                        RazvrstiIme(osebe);
                        break;
                    case "2.3":
                        RazvrstiPriimek(osebe);
                        break;
                    case "2.4":
                        RazvrstiNaslov(osebe);
                        break;
                    case "3":
                        Console.WriteLine("===================");
                        Console.WriteLine("IZVOZ/UVOZ PODATKOV");
                        Console.WriteLine("===================");
                        Console.WriteLine("3.1) Izvozi seznam v .txt datoteko");
                        Console.WriteLine("3.2) Naloži seznam iz datoteke na disku");
                        Console.WriteLine("3.3) Nalaganje seznama na datoteko na disku");
                        break;
                    case "3.1":
                        ZapisiVTxt(osebe);
                        break;
                }
        }


Tole je pa v Main():
string choice = "0";

            do
            {
                Console.Clear();
                IzpisiMeni(choice, osebe);
                choice = Console.ReadLine();
            } while (true);

mallard ::

Ne razumem, zakaj tlačiš vnos, izpis menija, za v povrhu pa še glavni meni in podmenije, v eno debelo funkcijo? Loči logične enote med seboj... Nekaj v tem smislu, poenostavljeno:
private static void Podmeni_osebe_izpis()
{
    Console.Clear();
    Console.WriteLine("DELO Z OSEBAMI");
    Console.WriteLine("==============");
    Console.WriteLine("1) Usvari novo osebo in jo dodaj na seznam");
    Console.WriteLine("2) Nazaj");
}

private static bool Podmeni_osebe_vnos()
{
    string choice = "0";
    choice = Console.ReadLine();
    switch(choice) {
        case "1":
            Ustvari_osebo();
            break;
        case "2":
            return false;
    }
    return true;
}

public static void Podmeni_osebe()
{
    do ( Podmeni_osebe_izpis(); ) while (Podmeni_osebe_vnos());
}

private static void Glavni_meni_izpis()
{
    Console.Clear();
    Console.WriteLine("GLAVNI MENI");
    Console.WriteLine("===========");
    Console.WriteLine("1) Delo z osebami");
    Console.WriteLine("2) Izhod");
}

private static bool Glavni_meni_vnos() {
    string choice = "0";
    choice = Console.ReadLine();
    switch(choice) {
        case "1":
            Podmeni_osebe();
            break;
        case "2":
            return false;
    }
    return true;
}

public static void Glavni_meni()
{
    do { Glavni_meni_izpis(); } while (Glavni_meni_vnos());
}

V Main-u pa:
Glavni_meni();


Cel kup switch stavkov je precej smotan za vzdrževanje. Sicer ne govorim C#, ampak sem prepričan, da bi lahko menije zapisal v nek Dictionary ( string / delegate ), potem pa napisal razred za meni, ki bi sam oštevilčil izbire, jih izpisal v konzolo, in klical ustrezne funkcije glede na uporabnikov vnos. Spreminjanje menija bi bilo potem enostavno dodajanje/brisanje elementov iz slovarja.

Zgodovina sprememb…

  • spremenilo: mallard ()

Cvenemir ::

Vse skupaj tlačim v eno funkcijo zato, ker že imam veliko drugih metod, in jih nočem met še "10" zram :) Kar se tiče Dictionary-ja, pa tega še nismo jemali in ga posledično ne znam uporabljat.

Looooooka ::

O...lepoti kode ne bom nic rekel.Ampak ok...ce ze pustimo zgornjo logiko pri miru..nic ne ustavlja, da iz iste funkcije se enkrat poklices isto funkcijo s parametrom za glavni meni.
Vazn, da se ne zaloopas :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C#] Evidenca oseb

Oddelek: Programiranje
71153 (838) DaMachk
»

C# Menjalec Valut (EUR to ...)

Oddelek: Programiranje
71609 (1522) Goran's Blog
»

[c#] Ustvarjanje objekta v drugem razredu

Oddelek: Programiranje
81648 (1593) Cvenemir
»

c sharp LinkedList - Naloga

Oddelek: Programiranje
91842 (1793) Msatir
»

Naloga v C#

Oddelek: Programiranje
72609 (2109) Hardstyle

Več podobnih tem