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 mieć 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", a gdy chce się zarejestrować nowego pacjenta, zwraca " Istnieje juz pacjent o takim loginie". Tak jakby instrukcje warunkowe w funkcjach rejestruj() i zaloguj() cały czas zwracały false. Nie mam pojecia co może być nie tak z tymi warunkami.
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 wypisz(std::vector<Data> d)
{
for (size_t i = 0; i < d.size(); i++) {
std::cout << d[i].dzien << "." << d[i].miesiac << "." << d[i].rok
<< std::endl;
}
}
bool czyMoge(std::vector<Data> d, std::vector<Data> d2)
{
if (d.size() > 0) {
if (((d.back().rok == d2.back().rok)
&& (d.back().miesiac + 6 == d2.back().miesiac)
&& (d.back().dzien < d2.back().dzien))
|| ((d.back().rok == d2.back().rok)
&& (d.back().miesiac + 6 < d2.back().miesiac))
|| ((d.back().rok + 1 == d2.back().rok) && (d.back().miesiac == 7)
&& (d2.back().miesiac == 1)
&& (d.back().dzien < d2.back().dzien))
|| ((d.back().rok + 1 == d2.back().rok) && (d.back().miesiac == 8)
&& (d2.back().miesiac == 2)
&& (d.back().dzien < d2.back().dzien))
|| ((d.back().rok + 1 == d2.back().rok) && (d.back().miesiac == 9)
&& (d2.back().miesiac == 3)
&& (d.back().dzien < d2.back().dzien))
|| ((d.back().rok + 1 == d2.back().rok) && (d.back().miesiac == 10)
&& (d2.back().miesiac == 4)
&& (d.back().dzien < d2.back().dzien))
|| ((d.back().rok + 1 == d2.back().rok) && (d.back().miesiac == 11)
&& (d2.back().miesiac == 5)
&& (d.back().dzien < d2.back().dzien))
|| ((d.back().rok + 1 == d2.back().rok) && (d.back().miesiac == 12)
&& (d2.back().miesiac == 6)
&& (d.back().dzien < d2.back().dzien))
|| ((d.back().rok + 1 == d2.back().rok) && (d.back().miesiac == 7)
&& (d2.back().miesiac > 1))
|| ((d.back().rok + 1 == d2.back().rok) && (d.back().miesiac == 8)
&& (d2.back().miesiac > 2))
|| ((d.back().rok + 1 == d2.back().rok) && (d.back().miesiac == 9)
&& (d2.back().miesiac > 3))
|| ((d.back().rok + 1 == d2.back().rok) && (d.back().miesiac == 10)
&& (d2.back().miesiac > 4))
|| ((d.back().rok + 1 == d2.back().rok) && (d.back().miesiac == 11)
&& (d2.back().miesiac > 5))
|| ((d.back().rok + 1 == d2.back().rok) && (d.back().miesiac == 12)
&& (d2.back().miesiac > 6))
|| (d.back().rok < d2.back().rok)) {
return true;
std::cout << "Mozesz sie juz zaszczepic" << std::endl;
} else {
return false;
std::cout << "Nie mozesz sie jeszcze zaszczepic" << std::endl;
}
} else if (d.size() == 0) {
if (((d.back().rok == d2.back().rok)
&& (d.back().miesiac + 1 == d2.back().miesiac)
&& (d.back().dzien < d2.back().dzien))
|| ((d.back().rok == d2.back().rok)
&& (d.back().miesiac + 1 < d2.back().miesiac))
|| ((d.back().rok + 1 == d2.back().rok) && (d.back().miesiac == 12)
&& (d2.back().miesiac = 1)
&& (d.back().dzien < d2.back().dzien))
|| ((d.back().rok + 1 == d2.back().rok) && (d.back().miesiac == 12)
&& (d2.back().miesiac > 1))
|| (d.back().rok < d2.back().rok)) {
return true;
std::cout << "Mozesz sie juz zaszczepic" << std::endl;
} else {
return false;
std::cout << "Nie mozesz sie jeszcze zaszczepic" << std::endl;
}
} else {
return true;
std::cout << "Mozesz sie juz zaszczepic" << std::endl;
}
}
void zaszczep(std::vector<Data> d, std::vector<Data> d2)
{
d.push_back({d2.back().dzien, d2.back().miesiac, d2.back().rok});
}
void czyWaznyCertyfikat(std::vector<Data> d, std::vector<Data> d2)
{
if (d.size() > 0) {
if (((d.back().rok + 1 == d2.back().rok)
&& (d.back().miesiac == d2.back().miesiac)
&& (d.back().dzien >= d2.back().dzien))
|| ((d.back().rok + 1 == d2.back().rok)
&& (d.back().miesiac > d2.back().miesiac))
|| (d.back().rok == d2.back().rok)) {
std::cout << "Twoj certyfikat jest wciaz wazny" << std::endl;
} else {
std::cout << "Twoj certyfikat nie jest juz wazny" << std::endl;
}
}
}
void rejestruj(std::vector<Pacjent> p&,
const std::string& log,
const std::string& has,
const std::string& naz,
std::vector<Data>& d)
{
bool t;
for (size_t i = 0; i < p.size(); i++) {
if (log == p[i].login) {
t = false;
break;
}
}
if (t) {
d.push_back({1,1,1});
p.push_back({log, has, naz, d});
} else {
std::cout << "Istnieje juz pacjent o takim loginie" << std::endl;
}
}
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"
<< 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;
}
}
auto main() -> int
{
int a;
std::string lg, hs, naz;
std::vector<Pacjent> p;
std::vector<Data> d;
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, lg, hs, naz, d);
std::cout << std::endl;
break;
}
}
return 0;
}
Wiem, że kod może być trochę nieczytelny... W skrócie ma być to aplikacja szczepionkowa. Funkcja wypisz() ma wypisywać daty szczepień zalogowanego pacjenta, czyMoge() sprawdza, czy pacjent może się już zaszczepić w zależności od liczby już przyjętych dawek ( 0 dawek - zawsze, 1 - po upływie miesiąca od ostatniej, 2 - po upływie 6 miesięcy od ostatniej), zaszczep() sprawdza, czy pacjent może się zaszczepić i dopisuje datę do listy, czyWaznyCertyfikat() sprawdza waznosc certyifikatu (musi mieć min 2 dawki, ostatnia maks 12 miesiecy wcześniej).
Jeśli ktoś jest w stanie pomóc rozwiązać ten problem to byłbym za to bardzo wdzięczny.