Black Friday Black Friday
Black Friday výprodej! Až 80 % extra bodů zdarma! Více informací zde

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. října 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. října 23:00
Avatar
Filip
Redaktor
Avatar
Filip:18. října 23:10

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

 
Nahoru Odpovědět 18. října 23:10
Avatar
Shade
Člen
Avatar
Shade:18. října 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. října 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.