Eine der möglichen Auflösungen dieser Codestruktur in mehr prozedurale Weise (würde nicht wagen, dies "objektorientiert" zu nennen). Sie können ähnliche Methoden verwenden, um den Menüverarbeitungscode in separate Funktionen für jede Option usw. aufzuteilen.
Wenn es sich um eine Mehrbenutzer-App handelt, können Sie anstelle von einfachen echten/falschen Vollanmeldeinformationen speichern Benutzer authentifiziert, wie eine Struktur zu haben, die name, code
enthält (Passwort kann wahrscheinlich nach der Authentifizierung weggeworfen werden, um es nicht lange im Speicher zu halten, wenn Sie es später nicht brauchen).
// returns true if user wants to exit
// sets authenticated to true when the Drew user is detected
bool AuthenticateUser(bool & authenticated) {
cout << "Enter your username >" << flush;
...
if (name == "Drew" && ...) {
authenticated = true;
cout << "Access granted. Welcome, " << name << "." << endl;
cout << "Welcome to Database of Drew" << endl;
return false;
}
cout << "Access denied..." << " Try again? (Y/N) >" << flush;
...
return (ask == "N" || ask == "n"); // N = wants to exit
}
// returns true if user wants to exit
bool ProceedWithMenu() {
cout << "1.\tAdd new record." << endl;
cout << "2.\tDelete record." << endl;
...
if (1 == value) {
...
}
if (5 == value) {
cout << "Application quitting... " << endl;
}
return (5 == value);
}
void mainLoop {
bool authenticated = false;
bool exitApp = false;
do {
if (!authenticated) {
exitApp = AuthenticateUser(authenticated);
} else {
exitApp = ProceedWithMenu();
}
// repeat authentication/menu until user decides to quit app
} while (!exitApp);
}
Dieses Beispiel ist noch recht grob und vereinfachend, gerade Energie von do {} while
, return
, und ähnlich zu illustrieren versuchen. Oft können auch continue
und break
eine große Hilfe sein, um den Ablauf der Codeausführung ohne goto
und Labels zu steuern.
die Verwendung von goto ist eine schlechte Angewohnheit versuchen, es durch eine while-Schleife ersetzen –
Der gezeigte Code in der Frage erfüllt nicht die Anforderungen eines [MCVE], wie in der [Hilfe] erläutert. Alle Fragen auf stackoverflow.com müssen alle relevanten Informationen in der Frage selbst enthalten. Links zu externen Websites, die jederzeit nicht mehr funktionieren können, sind nicht akzeptabel. –
"X ist A oder B" in Englisch ist "X = A oder X = B" wenn in Logik übersetzt. Sie haben "X = A, oder B ist irgendwie wahr". – molbdnilo