Hilfe bei Bankautomaten Projekt



  • Hallo,

    Da es mein erster Post ist Stelle ich mich kurz vor.
    Ich heisse Florian bin 18 Jahre alt und besuche zurzeit ein Berufskolleg für Informationstechnik.

    Mein Abschlussprojekt wird ein Bankautomat sein, er sollte in etwa so funktionieren wie ein echter (von der Bentzeroberfläche).

    Ich werde denke ich noch ein paar features wie "Überweissung and andere Benutzer" dazubauen.

    So ich habe mir jetzt gedacht um das Verwalten der "Benutzer" einfacher zu machen für jeden Nutzer eine .txt datei zu erstellen, diesw wird nach der Kontonr. benannt.

    z.B in meinem Test

    0000.txt

    dort würde dann folgendes drinstehen:

    Passwort
    Anrede
    Vorname
    Nachnahme
    Kontostand

    Somit würde ich mir das Verwalten von Benutzern sehr einfach gestalten.
    **
    Ich würde von euch nur gerne wissen wie man nach eingabe der Kontonr. nach so einer .txt dateii sucht
    z.b Kontonr 0000 --> es wird nach 0000.txt gesucht --> geöffnet und jede Zeile in einer Variable gespeichert.**

    Wenn ich jede Zeile in einer Variable habe bekomme ich alles alleine hin.

    Habe nur dort Probleme weil wir sowas in der Schule noch nicht behandelt haben, und in google finde ich auch nichts richtiges, entweder veralatet oder ich besitze die includes nicht, wobei wir bei der nächsten Frage wären.

    Wo finde ich alle(oder die nützlichsten) #includes??

    Zum Schluss hänge ich noch mein Quelltext an den ich mir mal eben so ausgedacht habe, muss noch paar Sachen verändern war aber nur ne schreibarbeit von 10min.

    Ich bedanke mich schonmal für jede nützliche Info

    #include <iostream>
    #include <iomanip>
    
    using namespace std;
    
    int main()
    
    {
    
    int i, pw, f=0, auswahl, konto=10000, minus;
    
    cout<<"Wilkommen bei ihrem Kreditinstitut"<<endl;
    
    do{
    
    f=f+1;
    cout<<"Kontonr. eingeben (4-stellig!): ";
    cin>>i;
    
    if ( i == 0000)
    {
    	cout<<"Kontonummer korrekt!"<<endl;
    cout<<"Passwort eingeben (4-stellig!): ";
    cin>>pw;
    
    		if ( pw == 1337)
    
    		{
    		cout<<"Passwort korrekt!"<<endl;
    		cout<<endl;
    		cout<<endl;
    		cout<<"Um den Kontostand abzufragen druecken Sie bitte die 1!"<<endl;
    		cout<<"Um Geld abzuheben druecken Sie bitte die 2!"<<endl;
    
    		cin>>auswahl;
    
    switch(auswahl)
    {
    case 1: cout << "Kontostand betraegt: "<< konto << endl;
              break;
    
    case 2: 
    	cout<<"Wieviel wollen sie abheben? (Betrag darf " << konto<<" nicht Ueberschreiten!):"<<endl; 
    	cin>>minus;
    	cout <<"Neuer kontostand: "<< konto-minus << endl;
              break;
    
     default: cout << "Es wurde eine falsche Zahl eingegeben." << endl;
    }
    
    		}
    
    		else
    		{
    		cout<<"Passwort falsch!"<<endl;
    		}
    
    }
    
    else
    {
    cout<<"Nr falsch!"<<endl;
    }
    
    cout<<endl;
    cout<<endl;
    cout<<endl;
    
    cout<<"____________________Ende der Schleife___________"<<endl;
    cout<<endl;
    cout<<endl;
    cout<<endl;
    
    }while (f < 20);
    
    fflush(stdin);
    getchar();
    return 0;
    
    }
    

    Vielen Dank schonmal im Vorraus für jede nützliche Info



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Du willst wissen, wie man mit Dateien umgeht?
    Dann hilft dir dieser Artikel hier weiter:
    http://www.c-plusplus.net/forum/viewtopic-var-p-is-1095570.html
    Besonders interessant für dich sind die ersten 4 Kapitel.



  • Wenn du zu einer Funktion wissen willst, welche header/libs nötig sind, dann musst du in der entsprechenden Doku nachsehen. Das leistet wohl jede Funktionsreferenz. Ich persönlich arbeite mit dem Visual Studio und nehme auch die MS-Hilfe (lokal bzw. msdn.com). Oder schau mal hierein: http://www.cppreference.com/wiki/

    Aber bist du schon sicher, dass das Projekt so in Ordnung ist? Soweit ich mich erinnere, sollte ein Abschlussprojekt auch einen Nutzen für den Betrieb darstellen (so dass man z.B. auch den zu erwartenden Umsatz/Gewinn schätzen oder sogar genau beziffern kann). Nur so als Anmerkung; ist ja sicher ziemlich blöd, wenn das Projekt abgewiesen wird und man sich schnell irgendwas Neues überlegen muss.



  • danke mad martin werde ich nachher gleich mal durchlesen

    _matze schrieb:

    Aber bist du schon sicher, dass das Projekt so in Ordnung ist? Soweit ich mich erinnere, sollte ein Abschlussprojekt auch einen Nutzen für den Betrieb darstellen (so dass man z.B. auch den zu erwartenden Umsatz/Gewinn schätzen oder sogar genau beziffern kann). Nur so als Anmerkung; ist ja sicher ziemlich blöd, wenn das Projekt abgewiesen wird und man sich schnell irgendwas Neues überlegen muss.

    Das ist ein Berufskolleg, ich hab also kein Betrieb.
    Rein Schulisch ist neu gibt es erst seit ca. 3 Jahren.
    Das Projekt wurde genehmigt.

    Ich bin auch weiterhin für Vorschläge offen...



  • Habe mir das jetzt mal durchgelesen, und ja von sowas hatten wir nichts in der Schule.
    Immerhin ist es nur ein Fach von vielen.

    Wir haben halt nicht behandelt wie man andere Daten die nicht im Programm eingegeben oder deklariert werden verwendet.

    Könnte mir jmd vllt. einen kleinen Quelltext senden das ich mich mal in den Quelltext einarbeiten kann weil ich verstehe wirklich nicht viel von dem was mad martin mir geschickt hat.

    Mir würde auch nur reichen wie man z.B die textdatei öffnet und dann z.B die erste Zeile in einer Variable speichert.

    Mfg

    Florian



  • Da ich mich gestern ebenfalls mit dem öffnen, lesen und beschreiben von Dateien auseinandergesetzt habe, hier ein Lektüre-Tipp:

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-252481.html

    Grundsätzlich öffnest du eine Datei mit file.open("xxx.xxx").

    Du könntest also zum Beispiel etwas schreiben wie

    if (Kntnr == '0000')
    {
    file.open(0000.txt)
    }
    


  • @Florian:
    Ganz simples einlesen:

    std::string buffer;
    std::ifstream myFile;
    myFile.open("00000.txt", std::ios::in); // Textdatei öffnen
    
    while (std::getline(myFile, buffer)) { // die aktuelle Zeile in den String "buffer" einlesen und den Zeiger auf die nächste Zeile setzen
      ..
      ..
      // hier kannst du deine Operationen mit der aktuellen Zeile (in "buffer") durchführen, z.B. einen Wert auslesen (mit Stringoperationen) und in einer Variable speichern
    }
    myFile.close(); // und danach Datei schließen
    


  • Dabei wäre es wichtig, die Kontonummer nicht als Zahl zu behandeln, sondern als String.



  • ok danke... habe ich das Jetzt richtig verstanden

    Ich habe mich mal hingesetzt und so könnte ich dann jede einzelne Zeile in der Textdatei auf dem Bildschirm ausgeben oder?

    Somit müsste ich doch:
    - die File öffnen können die eingegeben wurde
    -Jede Zeile wird einer VAriable zugeordnet
    -und in der nachfolgenden geschweiften klammer {} kann ich etwas mit der variable machen

    Habe ich das so richtig verstanden??

    Danke shconmal an euch 2

    cout<<"Kontonr. eingeben (4-stellig!): ";
    cin>>nr; [i]// eingabe der kntnr[/i]
    
    std::string pw, anr, vor, nach, kntos; [i]//deklarieren der strings?? is das so richtig[/i]
    std::ifstream myFile;
    myFile.open([b]nr[/b]".txt", std::ios::in); [i]// Textdatei öffnen die man für nr eingibt, z.b nr=0000 geht das so?[/i]
    
    while (std::getline(myFile, [b]pw[/b])) { // die aktuelle Zeile in den String [b]"pw"[/b] einlesen und den Zeiger auf die nächste Zeile setzen
    
    //Somit weisse ich dem ersten wert doch die Variable pw zu oder? und gebe sie als Test einfach mal aus, hab ich das so richtig verstanden?
    
    	cout<<"Ihr passwort: "<<pw<<endl;
    
    }
    
    while (std::getline(myFile, anr))
    {
    
    	cout<<"Anrede: "<<anr<<endl;
    }
    
    while (std::getline(myFile, vor))
    {
    
    	cout<<"Ihr Vorname: "<<vor<<endl;
    }
    
    while (std::getline(myFile, nach))
    {
    	cout<<"Ihr Nachname: "<<nach<<endl;
    
    }
    
    while (std::getline(myFile, kntos))
    {
    	cout<<"Ihr kontostand: "<<kntos<<endl;
    
    }
    myFile.close(); // und danach Datei schließen
    


  • wabbul schrieb:

    if (Kntnr == '0000')
    {
    file.open(0000.txt)
    }
    

    Anführungszeichen könnten ihren Beitrag zur erfolgreichen Übersetzung leisten. Muss aber nicht, wenn du nicht willst... 😉

    Die einfach Anführungszeichen oben sind auch falsch. Ein Zeichenliteral ist nur ein Zeichen breit, alles darüber hinaus ist ein String und bedarf der doppelten Anführungszeichen...



  • Florian G., überleg dir nochmal, was eine while-Schleife macht (eine if-Anweisung wäre in deinem Fall wohl sinnvoller).



  • _matze schrieb:

    Anführungszeichen könnten ihren Beitrag zur erfolgreichen Übersetzung leisten. Muss aber nicht, wenn du nicht willst... 😉 [...]

    Asche auf mein Haupt. Danke für die Berichtigung.

    Übrigens, um mal eine eigene Frage einzubringen wenn es erlaubt ist:

    // Lese nun aus der Datei. Es wird getline verwendet um komfortabel eine ganze Zeile zu lesen. Zuerst muss aber der Dateipointer wieder auf den Anfang gesetzt werden:
      file.seekg(0);
    

    Was genau tut bitte die Funktion seekg(0)?

    Ist diese dafür zuständig dass immer nur eine Zeile gelesen wird und nicht der gesamte Inhalt?



  • Man entschuldige den doppel-Beitrag, ich werde mich gleich registrieren.

    Gearde ahbe ich die Funktion seekg() getestet, die allem Anschein den Cursor auf die Stelle im Paramter verschiebt.

    Welche Funktion ist also für einen Zeilensprung geeignet?



  • Hallo, ich habe jezz mal deine Lösung probiert, und mit einem einfachen

    cout<<buffer;
    

    versehen, jedoch kommen 6 Fehlermeldungen, ich glaube das mir includes fehlen oder sonstiges, kann mal jmd bitte drübersehen, hier ein screenshot.

    http://img11.imageshack.us/img11/5254/unbenannthv.jpg



  • Es sollte noch folgendes eingebunden werden:

    #include <fstream>  // für std::ifstream
    #include <string>   // für std::string und std::getline
    

    Und noch eine kleine Anmerkung: Entweder verwendest du

    using namespace std;
    

    und entfernst dann die ganzen std:: oder aber (was ich persönlich besser finde) du schmeißt das

    using namespace std;
    

    weg und verwendest dann konsequent std:: . Also, zum Beispiel auch hier:

    cout<<buffer; // <-- vor cout dann das std:: schreiben
    

    Es liegt ganz an dir 🙂



  • So Danke,

    Ich habe deine Erklärungen befolgt.

    Jedoch scheint es nicht ganz zu funktionieren, dort wo die .exe gespeichert wird habe ich eine 0000.txt erstellt.

    Dort steht in der ersten Zeile TEST.

    Jedoch wird dies nicht ausgegeben es erscheint nur ein leeres Dos Fenster.

    Was mache ich den Falsch?

    Danke für die schnellen Hilfen bis jetzt haben wir sehr geholfen!

    #include <iostream>
    #include <iomanip>
    #include <fstream>  // für std::ifstream
    #include <string>   // für std::string und std::getline
    
    using namespace std;
    
    int main()
    
    {
    
    string buffer;
    ifstream myFile;
    myFile.open("00000.txt");//, std::ios::in); // Textdatei öffnen
    
    while (getline(myFile, buffer)) { // die aktuelle Zeile in den String "buffer" einlesen und den Zeiger auf die nächste Zeile setzen
    
    	cout<<buffer;
      // hier kannst du deine Operationen mit der aktuellen Zeile (in "buffer") durchführen, z.B. einen Wert auslesen (mit Stringoperationen) und in einer Variable speichern
    }
    myFile.close(); // und danach Datei schließen 
    
    fflush(stdin);
    getchar();
    return 0;
    
    }
    


  • Florian G. schrieb:

    dort wo die .exe gespeichert wird habe ich eine 0000.txt erstellt.

    Florian G. schrieb:

    myFile.open("00000.txt");
    

    Fällt dir was auf? 😉

    Wenn du nicht weißt, was bei einem Programm schief läuft, dann nutze den Debugger! Setze dir Breakpoints, gehe schrittweise durch das Programm, überprüfe Variableninhalte. Außerdem solltest du bei vielen Funktionen immer die Rückgabe checken. Du weißt z.B. gar nicht, ob die Datei wirklich geöffnet werden konnte.



  • JA mir fällt auf das ich ein kleines Dumemrchen bin =)))
    Vielen dank für die Hilfe den Rest werde ich hinbekommen.

    TY 🙂 👍 👍 👍 👍 😃



  • Zur Sicherheit nochmal eine kurze Anmerkung (falls nicht sowieso schon klar): bei ifstream::open immer checken, ob die Datei wirklich geöffnet werden konnte (ansonsten halt ne Fehlermeldung oder so).


Anmelden zum Antworten