Návrh SW Návrh SW
Spouštíme individuální výuku programování! Zaváděcí slevy 799 Kč 599 Kč/60 minut se zkušeným lektorem! Výuka osobně Praha a okolí nebo po Skype celá ČR. O termíny a slevu si pište na [email protected].
Extra 10 % bodů navíc a tričko zdarma při zadání kódu "TRIKO10"

Diskuze: Vylepšení kódu

C# .NET .NET (C# a Visual Basic) Vylepšení kódu American English version English version

Aktivity (3)
Avatar
Jakub Všetečka:18.10.2018 23:00

Ahoj,
cca. před měsícem jsem začal programovat a toto je zatím můj nejsložitější program. Prosím o radu jestli by šel tento program napsat nějak lépe.

static void Main(string[] args)
        {
            //inicializace trid
            UzivatelskyVstup uzivatelskyVstup = new UzivatelskyVstup();
            LoginPorovnani loginPorovnani = new LoginPorovnani();

            bool zmenaHesla = false;
            bool neplatnePrihlaseni = false;
            int kontrolaLoginu = 0;

            start:

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Registrace\n===============");
            //Vstup registrace
            string jmeno = uzivatelskyVstup.vstup("Zadejte uživatelské jméno: ");
            string heslo = uzivatelskyVstup.vstup("Zadejte heslo: ");

            System.Console.Clear();

            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("Login\n===================");
            //Vstup login
            string jmenoLogin = uzivatelskyVstup.vstup("Zadejte užívatelské jméno: ");
            string hesloLogin = uzivatelskyVstup.vstup("Zadejte heslo: ");

            //Overeni
            bool login = loginPorovnani.Login(jmeno, heslo, jmenoLogin, hesloLogin); //Overeni zda se udaje shoduji

            goodLogin:
            if (login)
            {
                zmenaHesla = loginPorovnani.GoodLogin(jmeno, heslo, jmenoLogin, hesloLogin); //Spravne zadane heslo
                neplatnePrihlaseni = false;
            }
            else
                neplatnePrihlaseni = loginPorovnani.BadLogin(jmeno, heslo, jmenoLogin, hesloLogin);

            System.Console.Clear();

            if (neplatnePrihlaseni)
                goto start; //skok pri prekroceni pokusu

            /*!zmenaHesla - kontroluje zda uzivatel nezadal udaje napoprve spravne jinak by se u spravne zadanych udaju
             zobrazil switch pro zmenu hesla 2krat*/
            /*kontrolaLoginu - kontroluje zda se podminka jiz jednou neprovedla*/
            else if ((!neplatnePrihlaseni) && (kontrolaLoginu < 1) && (!zmenaHesla))
            {
                kontrolaLoginu++;
                login = true;
                goto goodLogin; //skok na zmenu hesla
            }

            //Zmena hesla
            if (zmenaHesla)
            {
                Console.Write("Zadejte nové heslo: ");
                heslo = Console.ReadLine();
                Console.WriteLine("Heslo bylo úspěšně změněno");
            }
            Console.ForegroundColor = ConsoleColor.DarkYellow;
            Console.WriteLine("\n\nPro ukončení stiskněte cokoliv");

            Console.ReadKey();
        }
class LoginPorovnani
    {
        private bool login = false;
        private bool zmenaHesla = false;
        private bool neplatnePrihlaseni = false;
        private int maxPokusy = 3;
        private int aktualniPokus = 1;

        //Porovnani udaju
        public bool Login(string jmeno, string heslo, string jmenoLogin, string hesloLogin)
        {
            if ((jmeno == jmenoLogin) && (heslo == hesloLogin))
            {
                login = true;
            }
            else
                login = false;

            return login;
        }

        //Pro pripad ze je login uspesny
        public bool GoodLogin(string jmeno, string heslo, string jmenoLogin, string hesloLogin)
        {
            Console.ForegroundColor = ConsoleColor.DarkMagenta;
            Console.WriteLine("\nsPřihlášení proběhlo úspěšně");

            Console.WriteLine("Přejete si změnit heslo a/n");
            bool platnaVolba = false;
            while (!platnaVolba) //kontola vstupu uzivatele
            {
                switch (Console.ReadLine().ToLower())
                {
                    case "a":
                        zmenaHesla = true;
                        platnaVolba = true;
                        break;
                    case "n":
                        zmenaHesla = false;
                        platnaVolba = true;
                        break;
                    default:
                        Console.WriteLine("Neplatná volba");
                        break;
                }
            }
            return zmenaHesla;
        }

        //Pro pripad ze je login neuspesny
        public bool BadLogin(string jmeno, string heslo, string jmenoLogin, string hesloLogin)
        {
            //cyklus pro pocitani pokusu
            do
            {
                Console.ForegroundColor = ConsoleColor.Blue;
                Console.WriteLine("Zbývající pokusy {0}\n", maxPokusy - aktualniPokus);
                Console.WriteLine("Zadejte znovu\n");
                Console.Write("Zadejte jméno: ");
                jmenoLogin = Console.ReadLine();
                Console.Write("Zadejte heslo: ");
                hesloLogin = Console.ReadLine();

                //podminka pro overeni znouv zadanych udaju
                if ((jmeno == jmenoLogin) && (heslo == hesloLogin))
                {
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.WriteLine("Příhlášení proběhlo úspěšně");
                    neplatnePrihlaseni = false;
                    aktualniPokus = maxPokusy; //pokud jsou udaje spravne hodnota aktualniho pokusu skoci na max
                    Console.ReadKey();
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.WriteLine("Přihlášení proběhlo neúspěšně");
                    neplatnePrihlaseni = true;
                    aktualniPokus++;
                    Console.ReadKey();
                }
            } while (aktualniPokus < maxPokusy); /*pokud hodnota aktualniho pokusu presahne hodnotu maximalniho cyklus znovu neprobehne*/
            return neplatnePrihlaseni;
        }
    }
class UzivatelskyVstup
    {
        public string vstup(string vyzva)
        {
            Console.Write(vyzva);
            return Console.ReadLine();
        }
    }

Za každou radu díky

 
Odpovědět 18.10.2018 23:00
Avatar
Filip
Redaktor
Avatar
Filip:18.10.2018 23:10

Můžeš zahashovat hesla a vytvořit GUI. :)

 
Nahoru Odpovědět 18.10.2018 23:10
Avatar
Shade
Člen
Avatar
Shade:18.10.2018 23:44

Vyhni se goto, na světě bude líp. Předělej to třeba na while cyklus.
Celé to udělej více objektově. Představ si, že v Main by měla být jen vizuální interakce s uživatelem.

Nahoru Odpovědět  +2 18.10.2018 23:44
Talk is cheap. Show me the code.
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.