Wie kann man in einer .txt-Datei ein Passwort speichern und dann mit später mit cin vergleichen?



  • Hallo,
    Ich bin C++-Anfänger
    Ich habe ein Programm geschrieben wo mann sich anmelden muss und sich danach Einloggen kann.Wenn mann sich anmeldet legt das Programm eine datei an, die so heißt,wie dein name ist , den mann beim Anmelden angegeben hatt.Soweit so gut, wenn mann sich angelemdet hatt kann mann sich auch einloggen indem mann seine Id uns sein Passwor eingibt.Doch wenn mann das Programm schließt und danach wieder öffnet und seine Id und sein Passwort eingibt, kann er die eingaben von dir nicht mit dem Password und der id vergleichen.
    hier einmal der Code zum anmelden :

    cout <<"Bitte geben sie ihren Vornamen ein:   " ;
        cin>>konto1.Vorname;
    
        cout <<"Bitte geben sie ihren Namen ein:      " ;
        cin>>konto1.Name ;
    
        cout<<"Bitte geben sie ihre id an:            ";
        cin>>konto1.ID       
                              ;
        cout <<"Bitte geben sie ihr Password an:      " ;
        cin>>konto1.Pws ; 
    
        maxrand=1236127823 ;
        srand( (unsigned)time( NULL ) );
        konto1.Kontonummer = rand() % maxrand +1345358; 
    
        cout<<"Ihnen wurde die Kontonummer : " <<konto1.Kontonummer<<" zugeteilt" << endl ;
    
        ofstream dat_aus;
        dateiname=konto1.ID+" "+konto1.Pws+" "+konto1.Name+" "+konto1.Vorname+".dat" ;
        dat_aus.open(dateiname.c_str(), ios_base::out);
        dat_aus <<"Vorname : " ;
        dat_aus <<konto1.Vorname<< endl ;
    
        dat_aus <<"Nachname : "   ;
        dat_aus << konto1.Name<<   endl ;
    
        dat_aus <<"Password: "  ;
        dat_aus << konto1.Pws<<    endl ;
    
        dat_aus <<"Kontonummer : " ;
        dat_aus <<konto1.Kontonummer << endl ;
    
        dat_aus.close();
    

    und hier der Cod zum anmelden .

    void Einloggen ()
    {
    
        ifstream dat_ein;
       dateiname=konto1.Name+" "+konto1.Vorname+konto1.kontostand+".ksd";
       cout<< "Bitte geben sie ihre id ein: "<< endl ;
              cin>>ID;
       cout <<"Bitte geben sie ihr Password ein : " << endl ;
       cin>>Pws;
      if (ID==konto1.ID)
      Eingeloggt ();
    
       dat_ein.open(dateiname.c_str(), ios_base::in);
       dat_ein.close();
    
    while (!dat_ein.eof())
      {
         cout <<"Die datei könnte nicht geoeffnet werden."<< endl ;
      }
      Eingeloggt () ;
    
    }
    

    Ich denke mir mal das der Code zum Anmelden und/oder zum Einloggen zu 99% Falsch ist, aber ich bin halt erst Anfänger und mache das mal gerade seit 2 Wochen.
    Ich denke mir ich muss das Passwort und die Id in die Datei schreiben die wie dein name heißt, und dann das Passwort und die Id aus der Datei Rausladen, aber ich habe leider keine Ahnung wie das gehen soll.
    Das Programm kann eigentlich noch mehr aber das sind ingesammt fast 300 Zeilen das Wollte ich euch nicht antuen^^ 😃

    Danke schon einmal

    Muck Muck.



  • void Einloggen ()
    {
    
        ifstream dat_ein;
       dateiname=konto1.Name+" "+konto1.Vorname+konto1.kontostand+".ksd";
       cout<< "Bitte geben sie ihre id ein: "<< endl ;
              cin>>ID;
       cout <<"Bitte geben sie ihr Password ein : " << endl ;
       cin>>Pws;
      if (ID==konto1.ID)
      Eingeloggt ();
    
       dat_ein.open(dateiname.c_str(), ios_base::in);
       dat_ein.close();
    
    while (!dat_ein.eof())
      {
         cout <<"Die datei könnte nicht geoeffnet werden."<< endl ;
      }
      Eingeloggt () ;
    
    }
    

    ... was macht du da? Geh das mal nochmal Schritt/Schritt durch. Du öffnest die Datei und schließt die direkt wieder, ohne sie zu nutzen.

    Zeig mal bitte als was kontrol definiert ist!



  • Wie schon gesagt ich habe keine Ahnung wie ich das machen soll.

    unter

    namespace std;
    

    ist bei mir

    struct konto1
    {
    string  Name, Vorname, Pws, ID ;
    unsigned int Kontonummer;
    string kontostand;
    }; konto1 konto1;
    string dateiname,ID,Pws;
    

    danach habe ich dann void Einloggen etc.

    Das Schritt für Schritt durchzugehen bring mir nicht viel weil ich ja keine Ahnung habe wie ich das Password und /oder die Id aus der datei laden soll.
    Is das Sinnvoll den namen der Datei so zu bennenen wie die Id und das Password ist oder ist es besser wenn es darin steht?
    Soory wenn ich nen bischen dumme Fragen stelle aber ich kenne mich halt noch nicht so gut aus.

    Danke schonmal für die schnelle Antwort^^

    Muck Muck



  • Hmm okay:

    struct account
    {
        std::string name;
        std::string prename;
        std::string password;
        unsigned int number;
        long balance;
        account()
            : number(0), balance(0)
        {}
    };
    

    so legen wir erstmal die Struktur an (die einer Klasse gleicht. Nur das von vornerein alles public und nicht private ist)

    Dann legen wir uns mal eine Klasse Bank an, die unsere Kontos verwaltet. 😉

    class bank
    {
        std::vector<account> m_accounts;
    
    public:
        void register_account(std::string const& name, std::string const& prename, std::string const& password);
        void delete_account(account const& account);
    };
    

    Also kann man bei der Bank ein Konto anlegen und wieder löschen.

    Jetzt mal noch die Ausgabe realisieren ... dafür müssen wir bei dem Konto den Operator << überladen, um ein Konto anzeigen zu können und dann um alle Konten der Bank anzeigen zu können.

    struct account
    {
        std::string name;
        std::string prename;
        std::string password;
        unsigned int number;
        long balance;
        account()
            : number(0), balance(0)
        {}
        friend std::ostream& operator<<(std::ostream& out, account const& data)
        { return (out << ".Konto: " << number << << "\n+ Inhaber: " << name << ", " << prename << "\n" << "+ Kontostand: " << balance); }
    };
    
    class bank
    {
        std::vector<account> m_accounts;
        unsigned int m_code;
    
    public:
        void register_account(std::string const& name, std::string const& prename, std::string const& password);
        void delete_account(account const& account);
    
    public:
        friend std::ostream& operator << (std::ostream& out, bank const& data)
        { 
            out << "- Bank (BLZ): " << m_code << "\n";
            for (std::size_t i(0); i < m_accounts.size(); ++i)
                out << m_accounts[i] << "\n";
            return out << std::endl;
        }
    };
    

    ... Deine Aufgabe ist es, register_account und delete_account zu schreiben. register_account soll den namen und das password bekommen und eine Zufallszahl für die Kontonummer nutzen. Der Kontostand ist 0€. delete_account soll einfach gucken ob dieser Account bei der Bank registriert ist, und wenn ja diesen löschen.

    int main()
    {
        bank inst;
        inst.register_account("Mustermann", "Hans", "testpw");
        std::cout << inst << std::endl;
    

    😉


Anmelden zum Antworten