Forum » Programiranje » [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:
Upam da ti kaj pomaga :)
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 :)
Tole je pa v Main():
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:
V Main-u pa:
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.
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 :)
Vazn, da se ne zaloopas :)
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C#] Evidenca osebOddelek: Programiranje | 1156 (841) | DaMachk |
» | C# Menjalec Valut (EUR to ...)Oddelek: Programiranje | 1630 (1543) | Goran's Blog |
» | [c#] Ustvarjanje objekta v drugem razreduOddelek: Programiranje | 1653 (1598) | Cvenemir |
» | c sharp LinkedList - NalogaOddelek: Programiranje | 1852 (1803) | Msatir |
» | Naloga v C#Oddelek: Programiranje | 2610 (2110) | Hardstyle |