Witam, mam do napisania program zawierający strukturę do tworzenia obiektów pacjentów oraz funkcje do rejestracji i zalgowania się pacjenta. W funkcji main() mamy miec do wyboru, zalogować się, zarejestrować lub wyjść z programu. Po zalgowaniu funkcja zaloguj() powinna wyświetlić nasze informacje oraz otworzyć nowe menu z innymi funkcjami pacjenta. Mój problem polega na tym, że przy próbie zalogowania program cały czas zwraca "Nie instnieje uzytkownik o podanych danych".
Oto mój kod:
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
struct Data {
int dzien;
int miesiac;
int rok;
Data(int d, int m, int r) : dzien{d}, miesiac{m}, rok{r}
{
if (miesiac == 2) {
if (dzien > 28) {
dzien = dzien - 28;
miesiac++;
} else if (dzien < 1) {
dzien = 31 + dzien;
miesiac--;
}
} else if (miesiac == 8 || miesiac == 1) {
if (dzien > 31) {
dzien = dzien - 31;
miesiac++;
} else if (dzien < 1) {
dzien = 31 + dzien;
miesiac--;
}
} else if (miesiac == 3) {
if (dzien > 31) {
dzien = dzien - 31;
miesiac++;
} else if (dzien < 1) {
dzien = 28 + dzien;
miesiac--;
}
} else if (miesiac == 5 || miesiac == 7 || miesiac == 10
|| miesiac == 12) {
if (dzien > 31) {
dzien = dzien - 31;
miesiac++;
} else if (dzien < 1) {
dzien = 30 + dzien;
miesiac--;
}
} else if (miesiac == 4 || miesiac == 6 || miesiac == 9
|| miesiac == 11) {
if (dzien > 30) {
dzien = dzien - 30;
miesiac++;
} else if (dzien < 1) {
dzien = 31 + dzien;
miesiac--;
}
}
if (miesiac > 12) {
miesiac = miesiac - 12;
rok++;
} else if (miesiac < 1) {
miesiac = 12 + miesiac;
rok--;
}
}
};
struct Pacjent {
std::string login;
std::string haslo;
std::string nazwisko;
std::vector<Data> daty;
};
void rejestruj(std::vector<Pacjent>& p,
const std::string& naz,
const std::string& log,
const std::string& has)
{
bool t;
for (size_t i = 0; i < p.size(); i++) {
if (p[i].login == log) {
std::cout << "Istnieje juz pacjent o takim loginie" << std::endl;
t = false;
break;
}
}
if (t) {
auto d = std::vector<Data>{};
d.push_back({0,0,0});
p.push_back({naz, log, has, d});
}
}
void zaloguj(std::vector<Pacjent>& p,
const std::string& log,
const std::string& has)
{
int a, x, y, z;
bool t;
size_t i;
std::vector<Data> daty2;
for (i = 0; i < p.size(); i++) {
if ((log == p[i].login) && (has == p[i].haslo)) {
t = true;
break;
} else {
t = false;
}
}
if (t) {
std::cout << "Login: " << p[i].login << std::endl
<< "Nazwisko: " << p[i].nazwisko << std::endl
<< "Data ostatniego szczepienia: " << p[i].daty.back().dzien
<< "." << p[i].daty.back().miesiac << "."
<< p[i].daty.back().rok << std::endl;
while (a != 5) {
std::cout << "Co chcesz zrobic?\n 1 - pokaz daty moich szczepien, "
"2 - sprawdz czy moge sie zaszczepic"
", 3 - zaszczep, 4 - sprawdz waznosc certyfikatu, 5 - "
"wyloguj," // 0 - wyjdz"
<< std::endl;
std::cin >> a;
switch (a) {
case 1:
wypisz(p[i].daty);
break;
case 2:
std::cout << "Podaj dzisiejsza date: " << std::endl;
std::cout << "Dzien: ";
std::cin >> x;
std::cout << std::endl;
std::cout << "Miesiac: ";
std::cin >> y;
std::cout << std::endl;
std::cout << "Rok: ";
std::cin >> z;
std::cout << std::endl;
daty2.push_back({x, y, z});
czyMoge(p[i].daty, daty2);
daty2.clear();
break;
case 3:
std::cout << "Podaj dzisiejsza date: " << std::endl;
std::cout << "Dzien: ";
std::cin >> x;
std::cout << std::endl;
std::cout << "Miesiac: ";
std::cin >> y;
std::cout << std::endl;
std::cout << "Rok: ";
std::cin >> z;
std::cout << std::endl;
daty2.push_back({x, y, z});
if (czyMoge(p[i].daty, daty2)) {
zaszczep(p[i].daty, daty2);
} else {
std::cout << "Nie mozesz sie jeszcze zaszczepic"
<< std::endl;
}
daty2.clear();
break;
case 4:
std::cout << "Podaj dzisiejsza date: " << std::endl;
std::cout << "Dzien: ";
std::cin >> x;
std::cout << std::endl;
std::cout << "Miesiac: ";
std::cin >> y;
std::cout << std::endl;
std::cout << "Rok: ";
std::cin >> z;
std::cout << std::endl;
daty2.push_back({x, y, z});
czyWaznyCertyfikat(p[i].daty, daty2);
daty2.clear();
break;
}
}
} else {
std::cout << "Nie instnieje uzytkownik o podanych danych" << std::endl;
}
}
int main()
{
int a;
std::string lg, hs, naz;
std::vector<Pacjent> p;
while (a != 0) {
std::cout << "Co chcesz zrobic?\n 1 - zaloguj, 2 - zarejestruj, 0 - "
"wyjdz z programu"
<< std::endl;
std::cin >> a;
switch (a) {
case 1:
std::cout << "Podaj login: ";
std::cin >> lg;
std::cout << std::endl;
std::cout << "Podaj haslo: ";
std::cin >> hs;
std::cout << std::endl;
zaloguj(p, lg, hs);
std::cout << std::endl;
break;
case 2:
std::cout << "Podaj nazwisko: ";
std::cin >> naz;
std::cout << std::endl;
std::cout << "Podaj login: ";
std::cin >> lg;
std::cout << std::endl;
std::cout << "Podaj haslo: ";
std::cin >> hs;
std::cout << std::endl;
rejestruj(p, naz, lg, hs);
std::cout << std::endl;
break;
}
}
return 0;
}
Oczywiście funkcje użyte wewnątrz funkcji zaloguj mam także zdeklarowane, nie chciałem ich przeklejać, bo wydaje mi się, że problem stałby się nieczytelny. Jeśli ktoś jest w stanie pomóć to byłbym za to bardzo wdzięczny.