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 | 1211 (896) | DaMachk |
» | C# Menjalec Valut (EUR to ...)Oddelek: Programiranje | 1741 (1654) | Goran's Blog |
» | [c#] Ustvarjanje objekta v drugem razreduOddelek: Programiranje | 1715 (1660) | Cvenemir |
» | c sharp LinkedList - NalogaOddelek: Programiranje | 1961 (1912) | Msatir |
» | Naloga v C#Oddelek: Programiranje | 2663 (2163) | Hardstyle |