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

Logowanie do programu

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
661 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ź 268 wizyt
+1 głos
0 odpowiedzi 117 wizyt
pytanie zadane 24 listopada w Systemy operacyjne, programy przez mati1423 Nowicjusz (130 p.)
0 głosów
0 odpowiedzi 99 wizyt
pytanie zadane 11 września 2023 w Sieci komputerowe, internet przez lkd3n Nowicjusz (120 p.)

93,185 zapytań

142,198 odpowiedzi

322,004 komentarzy

62,514 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2127p. - dia-Chann
  2. 2092p. - Łukasz Piwowar
  3. 2079p. - Łukasz Eckert
  4. 2037p. - Tomasz Bielak
  5. 2006p. - rucin93
  6. 2005p. - Łukasz Siedlecki
  7. 1964p. - CC PL
  8. 1835p. - Adrian Wieprzkowicz
  9. 1785p. - Michal Drewniak
  10. 1744p. - rafalszastok
  11. 1684p. - Mikbac
  12. 1624p. - Anonim 3619784
  13. 1520p. - Marcin Putra
  14. 1480p. - ssynowiec
  15. 1365p. - Dawid128
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...