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;
}