Baza danych użytkowników i logowanie

0

Cześć, mam za zadanie zrobić prosty program z menu gdzie można dodawać nowego użytkownika ( login, hasło), wyświetlić liste dodanych uzytkowników i zalogować się. Mój problem polega na tym, że nie wiem jak zapisać funkcje logowania tak aby były zgodne z vectorami. WELP

#include <iostream>
#include <windows.h>
#include <vector>


using namespace std;
class userr
{
	public:
		string login;
		string haslo;
		userr( string xlogin, string xhaslo);
};
int main() {
	
	vector < userr > user;
	
	int wybormenu;
	cout << " WITAJ W BAZIE DANYCH 'LOG' " << endl;
	cout << " -------------------------- " << endl;
	cout << " 1. DODAJ UZYTKOWNIKA " << endl;
	cout << " 2. ZALOGUJ " << endl;
	cout << " 3. WYSWIETL UZYTKOWNIKOW " << endl;
	cout << " 4. WYJDZ " << endl;
	cout << " TWOJ WYBOR: "<< endl;
	cin >> wybormenu;
	
	switch(wybormenu)
	{
		case 1 :
			{
				cout << " DODAWANIE NOWEGO UZYTKOWNIKA " << endl;
				Sleep(2000);
				cout << " PODAJ NAZWE UZYTKOWNIKA " << endl;
				string newuser;
				cin >> newuser;
				cout << " PODAJ HASLO " << endl;
				string newpass;
				cin >> newpass;
				user.push_back(userr(newuser, newpass));
				Sleep(1000);
				cout << " POMYSLNIE DODANO UZYTKOWNIKA "; 
			}
		break;
		case 2 :
			{
				string haslo, login;
				cout << " LOGOWANIE DO SYSTEMU 'LOG' " << endl;
				cout << " PODAJ LOGIN " << endl;
				cin >> login;
				cout << " PODAJ HASLO " << endl;
				cin >> haslo;
				 if ( login == xlogin ) && ( haslo == xhaslo )
				 {
				 	cout << " ACCESS GRANTED ";
				 }
				    else 
					{
						cout << " ACCESS DENIED ";
					} 
				
			}
	    break;
		case 3 :
	    	{
	    		cout << " LISTA UZYTKOWNIKOW: " << endl;
	    		for (int i=0; i<user.size(); i++)
	    		{
	    			cout << endl;
	    			cout << "login: " << user [i].login << endl;
				}
			}
        break;
		case 4 : 
			
				exit(EXIT_SUCCESS);
			
	
	}
	
	
	
	
	
	
	
	return 0;
}
0

Mój problem polega na tym, że nie wiem jak zapisać funkcje logowania tak aby były zgodne z vectorami.

Co to znaczy? Rozwiń myśl i daj przykłady oczekiwań.

Pchanie całej logiki w main() jest zwykle złym pomysłem.
Dodatkowo zapchane są casey.
Podziel kod na małe funkcje odpowiedzialne za jedną czynność.
Staraj się pisać nazwy w języku angielskim.

0

chodzi mi o to, żeby po dodaniu użytkowników po powrocie do menu można się było zalogować loginem i hasłem podanymi wcześniej przy 'rejestracji'. Przede wszystkim chodzi mi o funkcje 'if' w case 2. Jak ją poprawnie skonstruować, żeby była kompatybilna z vectorem(hasło,login). Nie za bardzo jeszcze rozumiem jak działa vector ale wymagane jest aby w programie można było dodać wielu użytkowników i żeby później ich pełna lista się wyświetlała.

0

Ale wiesz jak odwołać się do pola login i haslo w obiekcie klasy userr?
Dokładnie tak samo musisz odwołać się do elementu tablicy std::vector. Jak do zwykłej tablicy obiektów.
Całe sprawdzanie trzeba dać w pętli, żeby móc przejrzeć userów z tablicy i porównać z danymi podanymi przy logowaniu.

BTW. Do trzymania loginów lepsze będzie jakaś mapa std::map lub std::unordered_map.

0
syx32 napisał(a):

Przede wszystkim chodzi mi o funkcje 'if' w case 2.

if to nie jest funkcja.

chodzi mi o to, żeby po dodaniu użytkowników po powrocie do menu można się było zalogować loginem i hasłem podanymi wcześniej przy 'rejestracji'.

Musisz sprawdzić, czy Twój wektor zawiera użytkownika o zadanym loginie i haśle. Ta instrukcja tego nie robi:

if ( login == xlogin ) && ( haslo == xhaslo )

Kod sprawdzający, czy w wektorze znajduje się dany użytkownik, powinieneś wydzielić do osobnej funkcji. Zresztą, z każdym case-m powinieneś to zrobić, bo funkcja main jest nieco przydługa.

A tak na marginesie – ten kod nie jest zapętlony, więc po wybraniu danej opcji i jej wykonaniu, program zakończy działanie. Wsadź cały ten kod np. w nieskończoną pętlę while.

1 użytkowników online, w tym zalogowanych: 0, gości: 1