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

question-closed Program z rejestracją i logowaniem

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
673 wizyt
pytanie zadane 5 stycznia 2022 w C i C++ przez MKolaj15 Bywalec (2,270 p.)
zamknięte 6 stycznia 2022 przez MKolaj15

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.

1 odpowiedź

+1 głos
odpowiedź 5 stycznia 2022 przez TOM_CPP Pasjonat (22,640 p.)

W definicji struktury Pacjent pole nazwisko jest trzecie w kolejności.

struct Pacjent {
    std::string login;
    std::string haslo;
    std::string nazwisko;
    std::vector<Data> daty;
};

stąd też dodanie elementu do wektora w stylu:

p.push_back({naz, log, has, d});

powoduje że nazwisko jest przypisywane do loginu, login do hasła a hasło do nazwiska.

komentarz 5 stycznia 2022 przez MKolaj15 Bywalec (2,270 p.)
Rzeczywiście, głupi błąd, lecz po zmianie problem wciąż występuje :/

Podobne pytania

0 głosów
0 odpowiedzi 323 wizyt
0 głosów
1 odpowiedź 197 wizyt
pytanie zadane 9 listopada 2019 w C i C++ przez Karpik Użytkownik (680 p.)
0 głosów
1 odpowiedź 784 wizyt
pytanie zadane 27 stycznia 2022 w Java przez JanK Nowicjusz (120 p.)

93,182 zapytań

142,196 odpowiedzi

322,002 komentarzy

62,513 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. 1785p. - Michal Drewniak
  9. 1744p. - rafalszastok
  10. 1724p. - Adrian Wieprzkowicz
  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!

...