In .txt Datei finden und löschen
-
Guten Abend,
Ich muss in einem "Passwort-Programm" für einen Admin folgende Möglichkeiten bieten.
1. Neuen Benutzer Anlegen
2. Neuen Admin anlegen
3. Einen Benutzer löschenDas Anlegen eines neuen Benutzers und Admin funktioniert bereits. Die Benutzer werden in der Datei "User.txt" gespeichert. Der Name des Benutzers steht alleine in einer Zeile und in der Zeile darunter sein Passwort. Nun soll ich also über Konsolen-Abfrage nach einem Benutzer in der "User.txt" suchen und die Zeile mit dem Namen und die Zeile darunter mit seinem Passwort löschen lassen. Dabei sollten keine Leerzeilen entstehen sondern das darunter stehende nach oben rücken.
Leider fehlt mir dafür bis jetzt jeder Ansatz.
Vielleicht hat in diesem Forum jemand einen guten Lösungsansatz für mich?!Hier mal mein bisheriges Werk. Ich hoffe ihr bekommt bei dem Anblick nicht gleich einen Herzkasper, bin noch nicht so Tief in der Programmierebene drin. Daher bitte nicht zu viel Flamen, für Verbesserungsvorschläge bin ich aber immer offen.
Gruß,
edge
#include <iostream.h> #include <conio.h> #include <fstream.h> //#include <vcl.h> char cAuswahl = 'a', cAuswahladmin = 'a', cAuswahluser = 'a'; string stName1, stName2; void willkommen(); bool login1(); bool login2(); void admin(); void user(); void adminverwaltung(); void userverwaltung(); void main (void) { willkommen(); clrscr(); admin(); user(); adminverwaltung(); cout << endl << "Programmende - ENTER-Taste tippen!"; cin.get(); // Tastaturpuffer leeren // Alternative zum Leeren des Tastaturpuffers // cin.ignore(100,'\n'); // Tastaturpuffer bis zur nächsten ENTER-Taste leeren cin.get(); //Warten auf ENTER-Taste } //--------------------------------------------------------------------------- void willkommen() { cout << "Herzlich Willkommen!" << endl; cout << "Wie wollen sie sich anmelden?" << endl; cout << "1. Als Admin anmelden" <<endl; cout << "2. Als Benutzer anmelden" << endl; cout << "Auswahl: "; cin >> cAuswahl; } void admin() // Admin menu { if ((cAuswahl == '1')) { if (login1()==true) { clrscr(); cout << endl << "Schoen das du da bist " << stName1 << endl; cout << "Was moechtest du machen?" << endl; cout << "1. Neuen Benutzer anlegen" <<endl; cout << "2. Neuen Admin anlegen" << endl; cout << "3. Einen Benutzer loeschen" << endl; cout << "4. Passwort eines Benutzers aendern" << endl; cout << "5. Eigenes Passwort aendern" << endl; cout << "Auswahl: "; cin >> cAuswahladmin; } else { clrscr(); cout << "Admin nicht in Datenbank vorhanden oder Passwort falsch!"; } } } bool login1() // Login Admin { string stAdmin, stAdminpw; char csText[80], csText2[80]; ifstream ifsAdmin; cout << "Herzlich Willkommen im Login Bereich!" << endl; cout << "Bitte geben sie ihren Benutzername und Passwort ein!" << endl << endl; cout << "Benutzername: "; cin >> stAdmin; stName1 = stAdmin; cout << "Passwort: "; cin >> stAdminpw; ifsAdmin.open("Admin.txt"); while (ifsAdmin.eof() !=true) { ifsAdmin.getline(csText,80); if (stAdmin == csText) { ifsAdmin.getline(csText2,80); if (stAdminpw == csText2) { return true; } else { return false; } } ifsAdmin.close(); } } void user() { if ((cAuswahl == '2')) { if (login2()==true) { cout << endl << "Schoen das du da bist " << stName2 << endl; cout << "Was moechtest du machen?" << endl; cout << "1. Neues Passwort anlegen" <<endl; cout << "Auswahl: "; cin >> cAuswahladmin; } else { clrscr(); cout << "User nicht in Datenbank vorhanden oder Passwort falsch!"; } } } bool login2() // Login User { string stUser, stUserpw; char csText[80], csText2[80]; ifstream ifsUser; cout << "Herzlich Willkommen im Login Bereich!" << endl; cout << "Bitte geben sie ihren Benutzername und Passwort ein!" << endl << endl; cout << "Benutzername: "; cin >> stUser; stName2 = stUser; cout << "Passwort: "; cin >> stUserpw; ifsUser.open("User.txt"); while (ifsUser.eof() !=true) { ifsUser.getline(csText,80); if (stUser == csText) { ifsUser.getline(csText2,80); if (stUserpw == csText2) { return true; } else { return false; } } ifsUser.close(); } } void adminverwaltung() { ofstream ofsUser; ofstream ofsAdmin; string stNewuser, stNewuserpw, stNewadmin, stNewadminpw; if ((cAuswahladmin == '1')) // Neuen Benutzer anlegen { ofsUser.open("User.txt", ios::app); cout << "Neuer Benutzer: "; cin >> stNewuser; ofsUser << endl << stNewuser << endl; cout << endl << "Passwort: "; cin >> stNewuserpw; ofsUser << stNewuserpw; ofsUser.close(); } if ((cAuswahladmin == '2')) // Neuen Admin anlegen { ofsAdmin.open("Admin.txt", ios::app); cout << "Neuer Admin: "; cin >> stNewadmin; ofsAdmin << endl << stNewadmin << endl; cout << endl << "Passwort: "; cin >> stNewadminpw; ofsAdmin << stNewadminpw; ofsAdmin.close(); } /*if ((cAuswahladmin == '3')) // Einen Benutzer loeschen { cout << "Name des zu loeschenden Benutzers eingeben!"; cin >> }*/ }
-
Naja es kommt drauf an wie deine txt aussieht.
Wenn sie so aussiehtHans
Peter
Ulf
HerbertKönnte man alle Namen in einen Vector einlesen, nach dem bestimmten Namen suchen und aus dem Vector löschen und dann den Vector in die Datei schreiben.
Du könntest auch direkt in die Datei reinschreiben bzw. löschen und ersetzen. Ich denke mal das mit dem Vector wäre auch noch ein wenig zu schwer für dich. Such doch mal in Google nach "C++ Fstream suchen und ersetzen".
-
Du könntest auch direkt in die Datei reinschreiben bzw. löschen und ersetzen
Nein,schlechte Idee.
Ich denke mal das mit dem Vector wäre auch noch ein wenig zu schwer für dich
Je eher er lernt damit umzugehen, umso besser wird er damit klar.
Also meiner Meinung nacht sollte man immer erst versuchen den Inhalt einer Datei nicht in der Datei zu manipulieren sondern es "im Programm" zu versuchen.
Also lies die Datei ein, bearbeitete die Daten in deinem Programm und schreib sie zurück.
<iostream.h> ist KEIN C++ da lautet es nur <iostream>
<fstream.h> ist KEIN C++ da lautet es nur <fstream>Hilfe für std::vector.