• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Logowanie do programu

Object Storage Arubacloud
0 głosów
517 wizyt
pytanie zadane 26 września 2021 w C i C++ przez magda_19 Gaduła (3,080 p.)

Witam,

Piszę program, w którym rejestruję kilka osób do książki adresowej, aby później stworzyć funkcję logowania. Przy rejestracji stwarzam plik tekstowy, które zapisuje użytkowników. Przy rejestracji np. 3 użytkowników i próbie zalogowania, np. drugiego użytkownika, program rozpoznaje login i hasło tylko pierwszej osoby. Kolejne są traktowane tak jakby ich nie było, a w pliku tekstowym istnieją. 

#include <iostream>
#include <vector>
#include <string>
#include <windows.h>
#include <fstream>
#include <sstream>

using namespace std;

struct Uzytkownik
{
    int idUzytkownika = 0;
    string login, haslo;
};

vector <Uzytkownik> uzytkownicy;

int zarejestrujUzytkownika (vector <Uzytkownik> &uzytkownicy, int iloscUzytkownikow)
{
    string login, haslo;
    int idUzytkownika = 0;
    Uzytkownik pomoc;

    if(uzytkownicy.size() == 0)
    {
        idUzytkownika = 1;    //jezeli ksiazka jest pusta pierwszy  osoba ma ID 1
    }
    else
    {
        idUzytkownika = uzytkownicy[uzytkownicy.size() - 1].idUzytkownika + 1;
    }

    cout << "Podaj login: ";
    cin >> login;
    cin.sync();
    cout << "Podaj haslo: ";
    cin >> haslo;
    cout << "Rejsetracja przebiegla pomyslnie" << endl;
    Sleep(1000);

    pomoc.idUzytkownika = idUzytkownika;
    pomoc.login = login;
    pomoc.haslo = haslo;

    uzytkownicy.push_back(pomoc);

    //zapisz do pliku
    fstream plikDoZapisu;
    plikDoZapisu.open("Uzytkownicy.txt", ios::out | ios::app);

    if (plikDoZapisu.good() == true)
        {
            plikDoZapisu << pomoc.idUzytkownika << "|" << pomoc.login << "|" << pomoc.haslo << "|" << endl;
            plikDoZapisu.close();
        }
    else
        {
            cout << "Nie udalo sie otworzyc pliku";
            system("pause");
        }

}

void przejdzDoMenuLogowania()
{
    system("cls");
    cout << "Witaj w Ksiazce Adresowej!" << endl;
    cout << "Wybierz jedna z ponizszych opcji: " << endl;
    cout << "1. Logowanie" << endl;  cout << "2. Rejestracja" << endl; cout << "3. Zakoncz program" << endl;
}

void wyswietlMenuPoZalogowaniu()
{
    system("cls");
    cout << "Wybierz opcje: " << endl;
    cout << "1. Dodaj adresata" << endl;
    cout << "2. Wyszukaj po imieniu" << endl;
    cout << "3  Wyszukaj po nazwisku" << endl;
    cout << "4. Wyswietl wszystkich adresatow" << endl;
    cout << "5. Usun adresata" << endl;
    cout << "6. Edytuj adresata" << endl;
    cout << "7. Zmien haslo" << endl;
    cout << "8. Wyloguj sie" << endl;

}

int zalogujUzytkownika(vector <Uzytkownik> &uzytkownicy, int iloscUzytkownikow)
{
    string login = "", haslo = "";
    cout << "Podaj login: ";
    cin.sync();
    cin >> login;
    cin.sync();
    vector <Uzytkownik>::iterator itr = uzytkownicy.begin();
    for (itr; itr != uzytkownicy.end(); itr++)
        {
            if (itr->login == login)
                {
                    cout << "Podaj haslo: ";
                    cin >> haslo;
                    if (itr->haslo == haslo)
                    {
                        cout << "Zostales zalogowany." << endl;
                        Sleep(1000);
                        return itr->idUzytkownika;
                        //iloscUzytkownikow++;
                    }
                    else
                    {
                        cout << "Podales bledne haslo!! Sprobuj ponownie: ";
                        cin >> haslo;
                    }
                    cout << "Znowu podales zle haslo!! Koniec programu!";
                    exit(0);
                }
                else
                {
                    cout << "Podales zly login. Nie ma takiego uzytkownika!!" << endl;
                    Sleep(1000);
                    exit(0);
                }
        }

        return 0;
}

vector <Uzytkownik> rozdzielDaneUzytkonikaNaPojedynczeLinie(vector <Uzytkownik> &uzytkownicy, string liniaDoOdczytania, char znakPionowejKreski)
{
    Uzytkownik pomoc;
    int nrLinii = 1;
    stringstream ss(liniaDoOdczytania);
    string pojedynczaDana = " ";

    while (getline(ss, pojedynczaDana, znakPionowejKreski))
    {
        switch(nrLinii)
        {
            case 1:
                pomoc.idUzytkownika = atoi(pojedynczaDana.c_str());
                break;
            case 2:
                pomoc.login = pojedynczaDana;
                break;
            case 3:
                pomoc.haslo = pojedynczaDana;
                break;

        }
        nrLinii++;
    }
    uzytkownicy.push_back(pomoc);

    return uzytkownicy;
}

int wczytajPlikUzytkownicy(vector <Uzytkownik> &uzytkownicy)
{
    string liniaTesktu;
    int nrLinii = 1;
    fstream plikDoOdczytu;

    plikDoOdczytu.open("Uzytkownicy.txt", ios::in);
    if(plikDoOdczytu.good() == true)
    {
        while (getline(plikDoOdczytu, liniaTesktu))
        {
            uzytkownicy = rozdzielDaneUzytkonikaNaPojedynczeLinie(uzytkownicy, liniaTesktu, '|');
        }
    }
    plikDoOdczytu.close();
}


void zamknijProgram()
{
    exit(0);
}

int main()
{
    int iloscUzytkownikow = 0;
    int iloscOsob = 0;
    int idZalogowanegoUzytkownika = 0;
    char wybor;

    iloscUzytkownikow = wczytajPlikUzytkownicy(uzytkownicy);

    while(1)
    {
        if(idZalogowanegoUzytkownika == 0)
        {
            przejdzDoMenuLogowania();
            cin >> wybor;
            cin.sync();

            switch(wybor)
            {
                case '1':
                idZalogowanegoUzytkownika = zalogujUzytkownika(uzytkownicy, iloscUzytkownikow);
                if(idZalogowanegoUzytkownika != 0)
                {
                    iloscOsob = wczytajPlikZDanymiAdresatow(adresaci, idZalogowanegoUzytkownika);
                }
                break;

                case '2':
                    iloscUzytkownikow = zarejestrujUzytkownika(uzytkownicy, iloscUzytkownikow);
                    break;

                case '3':
                    zamknijProgram();
                    break;
            }
        }
    }

   return 0;

}

 

 

1 odpowiedź

0 głosów
odpowiedź 26 września 2021 przez kalaart Początkujący (440 p.)
wybrane 26 września 2021 przez magda_19
 
Najlepsza

Cześć,

Jeśli użytkownik, którego wprowadzasz nie zgadza się z pierwszym na liście to wychodzisz z pętli for  if (itr->login == login) na else.
Pętla wykonuje się zawsze tylko raz.  Zawartość instrukcji else  z komunikatem "Podales zly login. Nie ma takiego uzytkownika!!" powinny znaleźć się poza pętlą for (oczywiście odpowiednio zmodyfikowane), gdy sprawdzisz już wszystkich użytkowników.

Pozdrawiam :)

 

komentarz 26 września 2021 przez magda_19 Gaduła (3,080 p.)
Dzięki za podpowiedź, już działa!
komentarz 26 września 2021 przez magda_19 Gaduła (3,080 p.)

Logowanie działa super, ale teraz w innej funkcji kiedy chcę wyświetlić wszystkich adresatów książki, program w ogóle nie wchodzi mi do pętli for, tylko ją omija...

#include <iostream>
#include <vector>
#include <string>
#include <windows.h>
#include <fstream>
#include <sstream>

using namespace std;

struct Adresat
{
    int idAdresata = 0;
    int idUzytkownika  = 0;
    string imie = "", nazwisko = "", nrTel = "", email = "", adres = "";
};

struct Uzytkownik
{
    int idUzytkownika = 0;
    string login, haslo;
};

vector <Adresat> adresaci;
vector <Uzytkownik> uzytkownicy;

int zarejestrujUzytkownika (vector <Uzytkownik> &uzytkownicy, int iloscUzytkownikow)
{
    string login, haslo;
    int idUzytkownika = 0;
    Uzytkownik pomoc;

    if(uzytkownicy.size() == 0)
    {
        idUzytkownika = 1;    //jezeli ksiazka jest pusta pierwszy  osoba ma ID 1
    }
    else
    {
        idUzytkownika = uzytkownicy[uzytkownicy.size() - 1].idUzytkownika + 1;
    }

    cout << "Podaj login: ";
    cin >> login;
    cin.sync();
    cout << "Podaj haslo: ";
    cin >> haslo;
    cout << "Rejsetracja przebiegla pomyslnie" << endl;
    Sleep(1000);

    pomoc.idUzytkownika = idUzytkownika;
    pomoc.login = login;
    pomoc.haslo = haslo;

    uzytkownicy.push_back(pomoc);

    //zapisz do pliku
    fstream plikDoZapisu;
    plikDoZapisu.open("Uzytkownicy.txt", ios::out | ios::app);

    if (plikDoZapisu.good() == true)
        {
            plikDoZapisu << pomoc.idUzytkownika << "|" << pomoc.login << "|" << pomoc.haslo << "|" << endl;
            plikDoZapisu.close();
        }
    else
        {
            cout << "Nie udalo sie otworzyc pliku";
            system("pause");
        }

}

void przejdzDoMenuLogowania()
{
    system("cls");
    cout << "Witaj w Ksiazce Adresowej!" << endl;
    cout << "Wybierz jedna z ponizszych opcji: " << endl;
    cout << "1. Logowanie" << endl;  cout << "2. Rejestracja" << endl; cout << "3. Zakoncz program" << endl;
}

void wyswietlMenuPoZalogowaniu()
{
    system("cls");
    cout << "Wybierz opcje: " << endl;
    cout << "1. Dodaj adresata" << endl;
    cout << "2. Wyszukaj po imieniu" << endl;
    cout << "3  Wyszukaj po nazwisku" << endl;
    cout << "4. Wyswietl wszystkich adresatow" << endl;
    cout << "5. Usun adresata" << endl;
    cout << "6. Edytuj adresata" << endl;
    cout << "7. Zmien haslo" << endl;
    cout << "8. Wyloguj sie" << endl;

}

int zalogujUzytkownika(vector <Uzytkownik> &uzytkownicy, int iloscUzytkownikow)
{
    string login = "", haslo = "";
    cout << "Podaj login: ";
    cin.sync();
    cin >> login;
    cin.sync();
    vector <Uzytkownik>::iterator itr = uzytkownicy.begin();
    for (itr; itr != uzytkownicy.end(); itr++)
        {
            if (itr->login == login)
                {
                    cout << "Podaj haslo: ";
                    cin >> haslo;
                    if (itr->haslo == haslo)
                    {
                        cout << "Zostales zalogowany." << endl;
                        Sleep(1000);
                        return itr->idUzytkownika;
                        //iloscUzytkownikow++;
                    }
                    else
                    {
                        cout << "Podales bledne haslo!! Sprobuj ponownie: ";
                        cin >> haslo;
                    }
                    cout << "Znowu podales zle haslo!! Koniec programu!";
                    exit(0);
                }

        }
        cout << "Podales zly login. Nie ma takiego uzytkownika!!" << endl;
        Sleep(1000);
        exit(0);


        return 0;
}

vector <Uzytkownik> rozdzielDaneUzytkonikaNaPojedynczeLinie(vector <Uzytkownik> &uzytkownicy, string liniaDoOdczytania, char znakPionowejKreski)
{
    Uzytkownik pomoc;
    int nrLinii = 1;
    stringstream ss(liniaDoOdczytania);
    string pojedynczaDana = " ";

    while (getline(ss, pojedynczaDana, znakPionowejKreski))
    {
        switch(nrLinii)
        {
            case 1:
                pomoc.idUzytkownika = atoi(pojedynczaDana.c_str());
                break;
            case 2:
                pomoc.login = pojedynczaDana;
                break;
            case 3:
                pomoc.haslo = pojedynczaDana;
                break;

        }
        nrLinii++;
    }
    uzytkownicy.push_back(pomoc);

    return uzytkownicy;
}

int wczytajPlikUzytkownicy(vector <Uzytkownik> &uzytkownicy)
{
    string liniaTesktu;
    int nrLinii = 1;
    fstream plikDoOdczytu;

    plikDoOdczytu.open("Uzytkownicy.txt", ios::in);
    if(plikDoOdczytu.good() == true)
    {
        while (getline(plikDoOdczytu, liniaTesktu))
        {
            uzytkownicy = rozdzielDaneUzytkonikaNaPojedynczeLinie(uzytkownicy, liniaTesktu, '|');
        }
    }
    plikDoOdczytu.close();
}

vector <Adresat> rozdzielDaneAdresatowNaPojedynczeDane (vector <Adresat> &adresaci, string liniaDoOdczytania, char znakPionowejKreski)
{
    Adresat adresat;
    int nrLinii = 1;
    stringstream ss(liniaDoOdczytania);
    string pojedynczaDana = " ";

    while (getline(ss, pojedynczaDana, znakPionowejKreski))
        {
            switch (nrLinii)
                {
                case 1:
                    adresat.idAdresata = (atoi(pojedynczaDana.c_str()));
                    break;
                case 2:
                    adresat.imie = pojedynczaDana;
                    break;
                case 3:
                    adresat.nazwisko = pojedynczaDana;
                    break;
                case 4:
                    adresat.nrTel = pojedynczaDana;
                    break;
                case 5:
                    adresat.email = pojedynczaDana;
                    break;
                case 6:
                    adresat.adres = pojedynczaDana;
                    break;

                }
            nrLinii++;
        }
    adresaci.push_back(adresat);

    return adresaci;
}

int wczytajPlikZDanymiAdresatow (vector <Adresat> &adresaci, int idZalogowanegoUzytkownika)
{

    int idAdresata = 0;
    vector <string> pojedynczyKontakt;
    string liniaTekstu;
    int nrLinii = 1;
    int iloscOsob = 0;
    fstream plikDoOdczytu;
    string ostatniaOsobaWPliku = " ";

    plikDoOdczytu.open("ksiazkaZAdresami.txt", ios::in);

    if (plikDoOdczytu.good() == true)
        {
            while (getline(plikDoOdczytu, liniaTekstu))
                {
                    adresaci = rozdzielDaneAdresatowNaPojedynczeDane(adresaci, liniaTekstu, '|');
                }

        }
    plikDoOdczytu.close();

}

int pobierzIDOstatniegoAdresata ()
{
    fstream plik;
    int ostatnieID = 0;
    string liniaTekstu;
    int pozycjaWLinii = 1;
    char znakPionowejKreski = '|';

    plik.open("Adresaci.txt", ios::in);
    if (plik.good() == true)
    {
        while(getline(plik, liniaTekstu, znakPionowejKreski))
            {
                switch(pozycjaWLinii)
                    {
                    case 1:
                        if (atoi(liniaTekstu.c_str()) == 0)
                            return ostatnieID;
                        else
                            ostatnieID = atoi(liniaTekstu.c_str());

                        break;
                    }

                if(pozycjaWLinii == 7)
                    {
                        pozycjaWLinii = 0;
                    }
                pozycjaWLinii++;

            }
    }
    plik.close();

    return ostatnieID;
}

int dodajAdresataDoKsiazki (vector <Adresat> &adresaci, int idZalogowanegoUzytkownika, int iloscOsob)
{
    string imie, nazwisko, nrTel, email, adres;
    int idAdresata = 0;
    Adresat pomoc2;

    if(iloscOsob == 0)
    {
        idAdresata = 1;    //jezeli ksiazka jest pusta pierwszy  osoba ma ID 1
    }
    else
    {
        idAdresata = pobierzIDOstatniegoAdresata() + 1;
    }

    cout << "Podaj imie: ";
    cin >> imie;
    cin.sync();
    cout << "Podaj nazwisko: ";
    cin >> nazwisko;
    cin.sync();
    cout << "Podaj nr telefonu: ";
    cin >> nrTel;
    cin.sync();
    cout << "Podaj email: ";
    cin >> email;
    cin.sync();
    cout << "Podaj swoj adres: ";
    getline(cin, adres);

    pomoc2.idAdresata = idAdresata;
    pomoc2.idUzytkownika = idZalogowanegoUzytkownika;
    pomoc2.imie = imie;
    pomoc2.nazwisko = nazwisko;
    pomoc2.nrTel = nrTel;
    pomoc2.email = email;
    pomoc2.adres = adres;

    //dodaj osobe do wektora
    adresaci.push_back(pomoc2);

    //zapisz do pliku
    fstream plikDoZapisuZAdresatami;
    plikDoZapisuZAdresatami.open("Adresaci.txt", ios::out | ios::app);

    if (plikDoZapisuZAdresatami.good() == true)
        {
            plikDoZapisuZAdresatami << pomoc2.idAdresata << "|" << pomoc2.idUzytkownika << "|" << pomoc2.imie << "|" << pomoc2.nazwisko << "|" << pomoc2.nrTel << "|" << pomoc2.email << "|" << pomoc2.adres << "|" << endl;
            plikDoZapisuZAdresatami.close();
            iloscOsob++;
            cout << "Adresat zostal dodany do ksiazki." << endl;
            Sleep(1000);
        }
    else
        {
            cout << "Nie udalo sie otworzyc pliku";
            system("pause");
        }
        return iloscOsob;

}

void wyswietlWszystkichAdresatow (vector <Adresat> &adresaci)
{
    vector <Adresat>::iterator itr = adresaci.begin();

   for (itr; itr != adresaci.end(); itr++)
    {
        cout << "ID: " << itr->idAdresata << endl;
        cout << "Imie: " << itr->imie << endl;
        cout << "Nazwisko: " << itr->nazwisko << endl;
        cout << "Nr tel: " << itr->nrTel << endl;
        cout << "Adres email: " << itr->email << endl;
        cout << "Adres zamieszkania: " << itr->adres << endl;
        Sleep(2000);
    }
}

void zamknijProgram()
{
    exit(0);
}

int main()
{
    int iloscUzytkownikow = 0;
    int iloscOsob = 0;
    int idZalogowanegoUzytkownika = 0;
    char wybor;

    iloscUzytkownikow = wczytajPlikUzytkownicy(uzytkownicy);

    while(1)
    {
        if(idZalogowanegoUzytkownika == 0)
        {
            przejdzDoMenuLogowania();
            cin >> wybor;
            cin.sync();

            switch(wybor)
            {
                case '1':
                idZalogowanegoUzytkownika = zalogujUzytkownika(uzytkownicy, iloscUzytkownikow);
                if(idZalogowanegoUzytkownika != 0)
                {
                    iloscOsob = wczytajPlikZDanymiAdresatow(adresaci, idZalogowanegoUzytkownika);
                }
                break;

                case '2':
                    iloscUzytkownikow = zarejestrujUzytkownika(uzytkownicy, iloscUzytkownikow);
                    break;

                case '3':
                    zamknijProgram();
                    break;
            }
        }
        else
        {
            wyswietlMenuPoZalogowaniu();
            char wyborOpcji;
            cin >> wyborOpcji;
            cin.sync();
            switch (wyborOpcji)
            {
                case '1':
               iloscOsob = dodajAdresataDoKsiazki(adresaci, idZalogowanegoUzytkownika, iloscOsob);
               break;

                case '4':
                wyswietlWszystkichAdresatow(adresaci);
                break;

            }

        }
    }

   return 0;

}

 

komentarz 27 września 2021 przez kalaart Początkujący (440 p.)
Cześć,

Skompilowałem Twój kod i u mnie wyświetla adresatów (oczywiście gdy ich wcześniej dodam) ;) Tam przy wczytywaniu adresatów otwierasz dobry plik?  Zapisujesz do pliku "Adresaci.txt" a czytasz z "ksiazkaZAdresami.txt" ;)
komentarz 28 września 2021 przez magda_19 Gaduła (3,080 p.)
Hej,

Problem istniał w nazwie pliku. Dziękuję.

Podobne pytania

0 głosów
1 odpowiedź 222 wizyt
0 głosów
0 odpowiedzi 72 wizyt
pytanie zadane 11 września 2023 w Sieci komputerowe, internet przez lkd3n Nowicjusz (120 p.)
0 głosów
1 odpowiedź 380 wizyt
pytanie zadane 14 czerwca 2022 w Sieci komputerowe, internet przez Ventus Użytkownik (740 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...