IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: kontrola kódu a ošetření uživatelského vstupu

Aktivity
Avatar
Jan Mareš
Člen
Avatar
Jan Mareš:8.9.2019 1:44

Ahoj, učím se programovat a jsem zatím začátečník a jsem u lekce podmínky,cvičení k lekci jsem úspěšně absolvoval a ted se začnu učit cykly. Zkouším si napsat aplikaci,která si nejprve zjistí zda je uživatel klientem banky a poté uživateli nabídne produkty. Dle toho zda je či není uživatel banky a dle zvoleného produktu. se vypíše telefonní číslo na operátora banky.
Prosím o kontrolu kodů,a případné rady ohledně zápisu kodu. A také zda není kod zbytečně dlouhý. Případné rady jak kod zkrátit. Dále mám problém s uživatelským vstupem. Když zadám špatné písmeno aplikace se beztak zeptá na produkt. A až poté mi napíše neznámá aplikace.
Mám zde dva kody jeden napsán jen pomocí if a else a v druhém je zakomponována funkce switch.

První kod:

Console.WriteLine("Dobrý den, vítejte na stránkách naší banky.");
Console.WriteLine("Jste klientem naší banky?");
Console.WriteLine("Stiskněte klávesu: Y - Ano jsem klientem.");
Console.WriteLine("Stiskněte klávesu: N - Ne jsem klientem.");
string klient = Console.ReadLine().ToUpper().Trim();

    Console.WriteLine("Zvolte si službu pro zobrazení telefonního čísla na operátora:");
    Console.WriteLine("1 - hypotéka");
    Console.WriteLine("2 - spořící účty");
    Console.WriteLine("3 - podílové fondy");
    sbyte volba = sbyte.Parse(Console.ReadLine());

if ((klient == "Y") || (volba == 1))
    Console.WriteLine("Telefonní číslo na operátora je: 100 200 500");

else if ((klient == "Y") || (volba == 2))
    Console.WriteLine("Telefonní číslo na operátora je: 100 200 600");

else if ((klient == "Y") || (volba == 3))
    Console.WriteLine("Telefonní číslo na operátora je: 100 200 700");

if ((klient == "N") || (volba == 1))
    Console.WriteLine("Telefonní číslo na operátora je: 100 300 500");

else if ((klient == "N") || (volba == 2))
    Console.WriteLine("Telefonní číslo na operátora je: 100 300 600");

else if ((klient == "N") || (volba == 3))
    Console.WriteLine("Telefonní číslo na operátora je: 100 300 700");

else
    Console.WriteLine("Neznámá volba");
    Console.ReadKey();

druhý kod:

Console.WriteLine("Dobrý den, vítejte na stránkách naší banky.");
Console.WriteLine("Jste klientem naší banky?");
Console.WriteLine("Stiskněte klávesu: Y - Ano jsem klientem.");
Console.WriteLine("Stiskněte klávesu: N - Ne jsem klientem.");
string klient = Console.ReadLine().ToUpper().Trim();


Console.WriteLine("Zvolte si službu pro zobrazení telefonního čísla na operátora:");
Console.WriteLine("1 - hypotéka");
Console.WriteLine("2 - spořící účty");
Console.WriteLine("3 - podílové fondy");
sbyte volba = sbyte.Parse(Console.ReadLine());


switch (klient)
{
    case "Y":

        if (volba == 1)
            Console.WriteLine("Telefonní číslo na operátora je: 100 200 500");
        else if(volba == 2)
            Console.WriteLine("Telefonní číslo na operátora je: 100 200 600");
        else if (volba == 3)
            Console.WriteLine("Telefonní číslo na operátora je: 100 200 700");
    break;
    case "N":
        if (volba == 1)
            Console.WriteLine("Telefonní číslo na operátora je: 100 300 500");
        else if (volba == 2)
            Console.WriteLine("Telefonní číslo na operátora je: 100 300 600");
        else if (volba == 3)
            Console.WriteLine("Telefonní číslo na operátora je: 100 300 700");
    break;
    default:
        Console.WriteLine("neznámá volba");
    break;
 }
    Console.ReadKey();

Zkusil jsem: zkoušel jsem několikrát měnit kod.
Zde poslední změna kodu:

            Console.WriteLine("Dobrý den, vítejte na stránkách naší banky.");
            Console.WriteLine("Jste klientem naší banky?");
            Console.WriteLine("Stiskněte klávesu: Y - Ano jsem klientem.");
            Console.WriteLine("Stiskněte klávesu: N - Ne jsem klientem.");
            string klient = Console.ReadLine().ToUpper().Trim();

            if ((klient == "Y") || (klient == "N"))
            {
            Console.WriteLine("Zvolte si službu pro zobrazení telefonního čísla na operátora:");
            Console.WriteLine("1 - hypotéka");
            Console.WriteLine("2 - spořící účty");
            Console.WriteLine("3 - podílové fondy");
            sbyte volba = sbyte.Parse(Console.ReadLine());
            }
            else
                Console.WriteLine("Neznámý znak");

            switch (klient)
            {
                case "Y":

                    if (volba == 1)
                        Console.WriteLine("Telefonní číslo na operátora je: 100 200 500");
                    else if(volba == 2)
                        Console.WriteLine("Telefonní číslo na operátora je: 100 200 600");
                    else if (volba == 3)
                        Console.WriteLine("Telefonní číslo na operátora je: 100 200 700");
                break;
                case "N":
                    if (volba == 1)
                        Console.WriteLine("Telefonní číslo na operátora je: 100 300 500");
                    else if (volba == 2)
                        Console.WriteLine("Telefonní číslo na operátora je: 100 300 600");
                    else if (volba == 3)
                        Console.WriteLine("Telefonní číslo na operátora je: 100 300 700");
                break;
                default:
                    Console.WriteLine("neznámá volba");
                    break;
             }
                Console.ReadKey();

        }
    }
}

Chci docílit: Snažím se naučit psát kod hned ze začátku vzhledově správně. A také by jsem rád dosáhl co nejkratšího zápisu aby jsem případné věci nepsal vícekrát pokud nemusím. A poslední věc chtěl by jsem aby mi aplikace při napsání jiného písmena než které je uvedené aplikace okamžitě vypsala neznámí znak a nebo něco podobného. A nevypisovala produkty.

 
Odpovědět
8.9.2019 1:44
Avatar
Jan Mareš
Člen
Avatar
Jan Mareš:8.9.2019 2:12

Tento kod jsem sem vložil s chybou,jak jsem se v těch kodech vrtal,tak když jsem to vracel do funkční podoby nevšiml jsem si toho zde opravený první kod:

 Console.WriteLine("Dobrý den, vítejte na stránkách naší banky.");
 Console.WriteLine("Jste klientem naší banky?");
 Console.WriteLine("Stiskněte klávesu Y - Ano jsem klientem.");
 Console.WriteLine("Stiskněte klávesu N - Ne jsem klientem.");
 string klient = Console.ReadLine().ToUpper().Trim();

 Console.WriteLine("Zvolte si službu pro zobrazení telefonního čísla na operátora:");
 Console.WriteLine("1 - hypotéka");
 Console.WriteLine("2 - spořící účty");
 Console.WriteLine("3 - podílové fondy");
 sbyte volba = sbyte.Parse(Console.ReadLine());

 if((klient == "Y") || (volba == 1))
     Console.WriteLine("Telefonní číslo na operátora je: 100 200 500");

 else if ((klient == "Y") || (volba == 2))
     Console.WriteLine("Telefonní číslo na operátora je: 100 200 600");

 else if ((klient == "Y") || (volba == 3))
     Console.WriteLine("Telefonní číslo na operátora je: 100 200 700");

else if ((klient == "N") || (volba == 1))
     Console.WriteLine("Telefonní číslo na operátora je: 100 300 500");

 else if ((klient == "N") || (volba == 2))
     Console.WriteLine("Telefonní číslo na operátora je: 100 300 600");

 else if ((klient == "N") || (volba == 3))
     Console.WriteLine("Telefonní číslo na operátora je: 100 300 700");

 else
     Console.WriteLine("Neznámá volba");
     Console.ReadKey();

u druhého kodu se mi povedlo ošetřit vstup zde :

Console.WriteLine("Dobrý den, vítejte na stránkách naší banky.");
           Console.WriteLine("Jste klientem naší banky?");
           Console.WriteLine("Stiskněte klávesu Y - Ano jsem klientem.");
           Console.WriteLine("Stiskněte klávesu N - Ne jsem klientem.");
           string klient = Console.ReadLine().ToUpper().Trim();

           if ((klient == "Y") || (klient == "N"))
           {
           Console.WriteLine("Zvolte si službu pro zobrazení telefonního čísla na operátora:");
           Console.WriteLine("1 - hypotéka");
           Console.WriteLine("2 - spořící účty");
           Console.WriteLine("3 - podílové fondy");
           sbyte volba = sbyte.Parse(Console.ReadLine());


           switch (klient)
           {
               case "Y":
                   if (volba == 1)
                       Console.WriteLine("Telefonní číslo na operátora je: 100 200 500");
                   else if(volba == 2)
                       Console.WriteLine("Telefonní číslo na operátora je: 100 200 600");
                   else if (volba == 3)
                       Console.WriteLine("Telefonní číslo na operátora je: 100 200 700");
               break;

               case "N":
                   if (volba == 1)
                       Console.WriteLine("Telefonní číslo na operátora je: 100 300 500");
                   else if (volba == 2)
                       Console.WriteLine("Telefonní číslo na operátora je: 100 300 600");
                   else if (volba == 3)
                       Console.WriteLine("Telefonní číslo na operátora je: 100 300 700");
               break;

               default:
                   Console.WriteLine("neznámá volba");
               break;
            }
               }
           else
               Console.WriteLine("Neznámý znak");
               Console.ReadKey();

Takže jen prosím o okouknutí kodu a případné připomínky a o radu jak vstup ošetřit i u kodu kde používám pouze funkci if a else (první kod).

 
Nahoru Odpovědět
8.9.2019 2:12
Avatar
zelvicek
Člen
Avatar
Odpovídá na Jan Mareš
zelvicek:8.9.2019 9:12
  1. Cílem cvičení je naučit se if/switch. Vzhledem k tomuto faktu tvůj program dlouhý není.
  2. Jak psát kod hned ze začátku vzhledově správně: prostuduj si návrhové vzory.
  3. Jak kód zkrátit (nevhodné pro výuku if/switch): abstrahovat větve rozhodovacího stromu - např.:
static Dictionary<string, (string Hint,Dictionary<sbyte, (string Hint,Action Action)> Data)> _actions = new Dictionary<string, (string,Dictionary<sbyte,
(string,Action)>)>() {/*naplnit rozhodovací strom*/};
 
Nahoru Odpovědět
8.9.2019 9:12
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.