Ich hab hier mal aus purer Langeweile heraus und wegen dem Spaß am programmieren, eine "ähnliche" Implementierung in C++ verfasst. Der Einfachheit halber, habe ich selbst keine Klassen angelegt. Es werden reine STD-C++ Funktionen verwendet und keine System abhängigen Libs.
Mein Versuch:
login.h -> Schnittstelle der eigentliche Logik
Code:
/* login.h */
#ifndef LOGIN_H_INCLUDED
#define LOGIN_H_INCLUDED
#include <iostream>
#include <string>
/* Aufbau der Logindaten */
struct Zugangsdaten
{
std::string id_nr;
std::string passwd;
};
/* Lässt X Anmeldeversuche zu. Sind die Logindaten korrekt, wird TRUE
* zurückgegeben. Sollte innerhalb der X versuchen kein korrekter versuch dabei
* sein, wird FALSE zurückgegeben. Werte kleiner 1 haben keine Auswirkung. Ohne
* Angabe werden automatisch 3 Versuche eingestellt.
*/
bool login(const int versuche_max = 3);
#endif // LOGIN_H_INCLUDED
login.cpp -> Implementierung der eigentlichen Logik
Code:
/* login.cpp */
#include "login.h"
using namespace std;
/* Abfrage der ID-Nummer und das dazugehörige Passwort
* interner Verwendungszweck
*/
Zugangsdaten get_login_data()
{
Zugangsdaten temp; /* temporärer Speicher der Logindaten*/
/* Abfrage der ID-Nummer und das dazugehörige Passwort */
cout << "ENTRY TO PENTAGON" << endl
<< "~~~~~~~~~~~~~~~~~" << endl
<< endl
<< "IDNR: ";
getline(cin, temp.id_nr);
cout << "PASSWORD: ";
getline(cin, temp.passwd);
return temp;
}
/* TRUE wenn Logindaten korrekt, FALSE wenn nicht
* (Logindaten sind in dieser Funktion gespeichert)
* interner Verwendungszweck
*/
bool check_login_data(const Zugangsdaten& login)
{
/* Zugangsdaten für das "Pentagon" ... */
const Zugangsdaten pentagonzugang = {"666", "drin"};
/* TRUE wenn Login korrekt, FALSE wenn nicht */
return ( login.id_nr == pentagonzugang.id_nr
&& login.passwd == pentagonzugang.passwd);
}
/* Siehe login.h */
bool login(const int versuche_max)
{
/* Anzahl der Anmeldeversuche (Werte kleiner 1 machen keinen Sinn) */
Zugangsdaten login_daten; /* Speicher der Logindaten */
int versuche = 0; /* Zähler der Anmeldeversuche */
do
{
/* Abfrage der Logindaten */
login_daten = get_login_data();
/* Prüfen der Logindaten */
if(check_login_data(login_daten))
{
/* Login war korrekt */
cout << endl
<< "!! ACCESS GRANTED !!" << endl
<< endl;
return true;
}
else
{
/* Login war falsch */
versuche += 1;
cout << endl
<< "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl
<< "!! ACCESS DENIED !!" << endl
<< "!! WRONG ID-NUMBER OR PASSWORD !!" << endl;
/* Darf man es noch Mal versuchen? */
if(versuche < versuche_max)
{
/* Ja */
cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl
<<"Pleas try again ..." << endl
<< endl
<< endl;
}
else
{
/* Nein */
cout << "!! SYSTEM ABBORTED !!" << endl
<< "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl
<< endl;
return false;
}
}
}while(versuche < versuche_max);
return false;
}
main.cpp -> Noch eine Beispielhaft Verwendung von login.cpp
Code:
/* main.cpp */
#include "login.h"
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
/* Beispielprogramm */
int main()
{
/* In das Pentagon einloggen */
if(login())
{
/* Hier kommt der Code, der nach einer erfolgreichen Anmeldung
* Ausgefürht werden soll. Hier ein Beispiel ...
*/
bool logout = false;
cout << "Sie wurden als gültiger Nutzer anerkannt ..." << endl
<< "Herzlichen Glückwunsch!" << endl
<< endl
<< "Warte auf ihre eingabe (Hilfe mit \"help\")" << endl
<< endl;
/* so lange bis logout gewünscht wird */
while(!logout)
{
string befehl;
/* Benutzer nach Befehlen Fragen */
cout << "root@pentagon$ ";
getline(cin, befehl);
/* Befehle abarbeiten */
if(befehl == "help")
{
/* Befehl <<help>> */
cout << "Mögliche Befehle:" << endl
<< endl
<< "help\t\tDieser Text" << endl
<< endl
<< "logout\t\tAusloggen und Programm beenden" << endl
<< endl;
}
else if(befehl == "logout")
{
/* Befehl <<logout>> */
cout << "Logout wird durchgeführt ..." << endl
<< endl;
logout = true;
}
else
{
cout << "Unbekannter Befehl: \"" << befehl << '\"' <<endl
<< "Versuchen sie \"help\"" << endl
<< endl;
}
}
}
else
{
/* Hier kommt der Code, der nach einer NICHT erfolgreichen Anmeldung
* Ausgeführt werden soll. Hier ein Beispiel ...
*/
cout << "Sie wurden als Hacker identifiziert ..." << endl
<< "Ihr Standort wird zurückverfolgt!" << endl;
exit(-1);
}
/* Hier kann Code stehen, der Immer ausgeführt wird, egal ob erfolgreich
* Angemeldet sind, oder nicht. (Nur möglich, wenn das Programm in der
* IF-Bedingung nicht beendet wurd. Also bei dem Beispiel nur für
* Angemeldete Nutzer sichtbar ...
*/
cout << "Bitte besuchen sie uns bald wieder ..." << endl;
return 0;
}