EINFAH mall Vorebi schauen und HELFEN !!!



  • Hallo,

    das hat nix mit C++ zu tun. Du hast noch einen Denkfehler.
    Deine Schleife hast du jetzt angepasst, d.h. du gehst die Datensätze durch. In der selben Funktion fummelst du schon in der Datei rum. Warum ?
    Es reicht zunächst die Daten im Speicher zu ändern und am Ende des Programs bzw. am Ende der Ändernfunktion (wenn alles was geändert werden sollte im speicher geändert ist) die alte Datei mit den neuen Daten zuüberschreiben. Das ist alles.



  • Ich hab den Fehler endekt

    und zwar

    void aendern() 
    { 
    
            char x; 
            int suche,i=0; 
            do 
           { 
            clrscr(); 
            Datei=fopen("C:\\Datei.txt","r+"); 
            fread(&STRUKT[i],sizeof(STRUKT[i]),1,Datei); 
            while(!feof(Datei))//<<<<<DARAN LAGS!!!!!!! 
            { 
    
            cout<<"Bitte gesuchte Kundennummer eingeben: "; 
            cin>>suche; 
    
             for(int s=0;s<100;s++) 
                 {         
    
                    if(suche == STRUKT[i].knr) 
                    {         
                            cout<<"Leasingvertragsnummer:\t\t"<<STRUKT[i].lvnr<<"\n"; 
                            cout<<"Leasingobjektnummer:\t\t"<<STRUKT[i].lonr<<"\n"; 
                            cout<<"Leasingobjektbezeichnung:\t"<<STRUKT[i].lob<<"\n"; 
                            cout<<"Kundennummer:\t\t\t"<<STRUKT[i].knr<<"\n"; 
                            cout<<"Kundennamen:\t\t\t"<<STRUKT[i].kn<<"\n"; 
                            cout<<"Strasse:\t\t\t"<<STRUKT[i].str<<"\n"; 
                            cout<<"PLZ:\t\t\t\t"<<STRUKT[i].plz<<"\n"; 
                            cout<<"Ort:\t\t\t\t"<<STRUKT[i].ort<<"\n"; 
                            cout<<"Leasingbeginn(Tag):\t\t"<<STRUKT[i].lbtag<<"\n"; 
                            cout<<"Leasingbeginn(Monat):\t\t"<<STRUKT[i].lbmonat<<"\n"; 
                            cout<<"Leasingbeginn(Jahr):\t\t"<<STRUKT[i].lbjahr<<"\n"; 
                            cout<<"Leassingende(Tag):\t\t"<<STRUKT[i].letag<<"\n"; 
                            cout<<"Leassingende(Monat):\t\t"<<STRUKT[i].lemonat<<"\n"; 
                            cout<<"Leassingende(Jahr):\t\t"<<STRUKT[i].lejahr<<"\n"; 
                            cout<<"Rechnungsbetrag:\t\t"<<STRUKT[i].rb<<"\n\n"; 
                            cout<<"Alter Rechnungsbetrag: "<<STRUKT[i].rb<<"\n"; 
                            cout<<"Neuer Rechnungsbetrag: "; 
                            cin>>STRUKT[i].rb; 
    
                    fseek(Datei,sizeof(STRUKT[i])*-1,SEEK_CUR); 
                    fwrite(&STRUKT[i],sizeof(STRUKT[i]),1,Datei);
                    fclose(Datei);
                    fread(&STRUKT[i],sizeof(STRUKT[i]),1,Datei);     
    
                    } 
    
           i++;    
           fread(&STRUKT[i],sizeof(STRUKT[i]),1,Datei);
               } 
    
            }     
    
    }   
            while(!feof(Datei)); 
    
            cout<<"\nWeiter mit beliebiger Taste..."; 
            getch(); 
            clrscr(); 
            return; 
    }
    

    so er findet alle einträge und gibt die alle aus! Dan kann ich alle einträge Verändern "HURA EIN WUNDER"
    Ich hab denn COde etwas Umgeschrieben, Naja Guck es dir an und sag was besse zu machen wäre oder sag mir bescheid wenn du ein BUG endeckt hasst, ok ?

    Hier ist das Kommlete Prog.

    http://home.arcor.de/onkel_viktor/Sollte hinhauen.cpp



  • Hallo,

    Warum fummelst du denn immer noch in der Datei rum ?
    Das kann man natürlich machen, aber bei 100 Datensätzen kannst du das doch locker im Speicher machen und erst zum Schluss zurück schreiben.
    Also wenn ich deine obige version nur etwas änder erhält man.

    void aendern() 
    { 
    
        char x; 
        int suche,i=0;
        FILE *Datei;
        Datei=fopen("C:\\Datei.txt","rb");
        //einlesen aller Datensätze in das Array
        while(!feof(Datei)){
           fread(&STRUKT[i],sizeof(STRUKT[i]),1,Datei);
           i++;
        }
        fclose(Datei);
        //eingelesen
    
        //ändern schleife 
        do{ 
            clrscr(); 
            cout<<"Bitte gesuchte Kundennummer eingeben: "; 
            cin>>suche; 
    
             for(int i=0;i<100;i++){  //hier stand vorher s=0 usw. s wurde nie definiert       
    
                if(suche == STRUKT[i].knr) 
                 {         
                            cout<<"Leasingvertragsnummer:\t\t"<<STRUKT[i].lvnr<<"\n"; 
                            cout<<"Leasingobjektnummer:\t\t"<<STRUKT[i].lonr<<"\n"; 
                            cout<<"Leasingobjektbezeichnung:\t"<<STRUKT[i].lob<<"\n"; 
                            cout<<"Kundennummer:\t\t\t"<<STRUKT[i].knr<<"\n"; 
                            cout<<"Kundennamen:\t\t\t"<<STRUKT[i].kn<<"\n"; 
                            cout<<"Strasse:\t\t\t"<<STRUKT[i].str<<"\n"; 
                            cout<<"PLZ:\t\t\t\t"<<STRUKT[i].plz<<"\n"; 
                            cout<<"Ort:\t\t\t\t"<<STRUKT[i].ort<<"\n"; 
                            cout<<"Leasingbeginn(Tag):\t\t"<<STRUKT[i].lbtag<<"\n"; 
                            cout<<"Leasingbeginn(Monat):\t\t"<<STRUKT[i].lbmonat<<"\n"; 
                            cout<<"Leasingbeginn(Jahr):\t\t"<<STRUKT[i].lbjahr<<"\n"; 
                            cout<<"Leassingende(Tag):\t\t"<<STRUKT[i].letag<<"\n"; 
                            cout<<"Leassingende(Monat):\t\t"<<STRUKT[i].lemonat<<"\n"; 
                            cout<<"Leassingende(Jahr):\t\t"<<STRUKT[i].lejahr<<"\n"; 
                            cout<<"Rechnungsbetrag:\t\t"<<STRUKT[i].rb<<"\n\n"; 
                            cout<<"Alter Rechnungsbetrag: "<<STRUKT[i].rb<<"\n"; 
                            cout<<"Neuer Rechnungsbetrag: "; 
                            cin>>STRUKT[i].rb;
                            break; //wir haben ja einen Eintrag gefunden
                 }//end if 
    
              }//end for
    
            //hier landest du nach nem break    
            cout<<"Noch einen Datensatz aendern ?:";
            cin>>x;   
          }while(x!='n');     
    
            //es sollen keine Sätze mehr geändert werden
            //jetzt schreiben wir die geänderten Daten zurück
    
            //Datei im Schreibmodus öffnen (Daten werden gelöscht)
            Datei=fopen("C:\\Datei.txt","wb");
    
            for(int i=0;i<100;i++)
               fwrite(&STRUCT[i],sizeof(Program),1,Datei);
            fclose(Datei);
            //Daten sind zurück geschrieben
            //Funktion verlassen
            return; 
    }
    

    Verstehst du was ich sagen will ? In deinem Code waren noch ein paar Sachen nicht so ganz toll.



  • Hallo ich hab die Änder funktion von dir Getestet und mir ist aufgefahlen

    Nach demm Verändern des wertes, kommt Menu und wenn ich auf Ausgabe Kliche gibt er mir 100 Mall 0 Aus!

    So ich versuche jetzt denn Fehler zu finden

    Aja ich hab das Prog um 2.00 Nachts noch Geschrieben daswegen Hab ich Vergessen das man in der Datei nicht Rumfummeln soll 😉

    Danke Nochmalls !

    Aja bevor ich ganz vergesse was mir aufgefahlen ist

    void aendern() 
    { //<-Hier Öffnest du die Void auf
    
        char x; 
        int suche,i=0; 
        FILE *Datei; 
        Datei=fopen("C:\\Datei.txt","rb"); 
        //einlesen aller Datensätze in das Array 
        while(!feof(Datei)){ 
           fread(&STRUKT[i],sizeof(STRUKT[i]),1,Datei); 
           i++; 
        } //<----------Und Zwar das hier (Und Hier schleisst du die ) Muss das sein :confused: 
        fclose(Datei);
    


  • Hallo,

    Welche Ausgabe meinst du ? Ich hab doch garkeine Ausgabe geschrieben.
    Bei der Ändern funktion wird nur der Datensatz ausgegeben bei dem die knr mit der eingegebenen übereinstimmt.

    Zu deinem andren Problem. Das ist ok weil ich nicht die Funktion schliesse:

    void aendern() 
    { //<-Hier Öffnest du die Void auf
    
        char x; 
        int suche,i=0; 
        FILE *Datei; 
        Datei=fopen("C:\\Datei.txt","rb"); 
        //einlesen aller Datensätze in das Array 
        while(!feof(Datei)){ //<----------------- Hier mach ich eine Klammer für while auf ;)
           fread(&STRUKT[i],sizeof(STRUKT[i]),1,Datei); 
           i++; 
        } //<----------Und Zwar das hier (Und Hier schleisst du die ) Muss das sein  
        fclose(Datei);
    


  • Ne ich meinte die Änderfunktion - Wenn ich ein Wert verändere so und dann weiter ins menu Gehe dann Klicke ichs aufs Ausgabe dann gibt er mir 100 mall 0 Aus!Er verändert den wert Garrnicht.

    Es Liegt an der Änder funktion denk ich mall das er 100 Datensätze mit 0 Belegt

    Was noch seltsammer ist ist das wenn er 100 Mall 0 Ausgegeben hat und ich wieder ins Verändern menue Gehe und dann Nach nummer 2 Suche findet er die
    und gibt denn wert aus denn ich Belegt habe so ich veränder den wert z.B auf 222 so dann (Ich will nicht weiter suchen ) gehe ins Menu und dann aufs Ausgabe und er Gibbt mir nochmall 100 Nullen aus!?!? so

    ich geh nochmall ins Ändermenu und gebe Den datensatz mit KNr 2 und er findet ihn und gibt mir aus das der Betrag mit 222 Belegt ist.

    Warum Zeigt er mir dann bei Ausgabe 100 Mall 0 und bei Veränderfinktion findet er den Entsprechenden Datensatz ? 😮 😮



  • Hallo,

    Um herauszufinden warum das so ist müsste ich mal deine Ausgabe und Menufunktion sehen. Und was meinst du eigentlich die ganze Zeit mit: Er belegt die Datensätze mit 0 ???



  • Hallo,

    Hier ist der Link zu Kompletten Prog mit deine Änderfunktion

    http://home.arcor.de/onkel_viktor/Sieht besser aus.cpp

    So Kopier das, Compeliere, gib 3 Daten sätze ein z.B Alles mit 1 dann mit 2 dann mit 3.

    Und versuchs es dann zu Verändern nach demm du das veränadert hast gehe aufs Ausgeben und dann siehste was ich meinnte

    MfG Viktor



  • Ok moment.

    Vielleicht ist es einfacher wenn du mir mal deine E-mail addresse gibst. Dann blähen wir dat Forum nicht unnötig auf.



  • Ok.

    Hier Meine Mail Onkel_Viktor@lycos.co.uk

    Hier ist meine ICQ (Ich denke geht schneller) 261204225

    P.s Fängt deine ICQ so an 143.....?!?!



  • Dabei zu beachten das Zwischen Onkel und Viktor ein Strich ist "So einer _ "

    Wollte bloss auf nummer sicher gehen



  • Hallo,

    die mail ist raus.... Ich hab den code kommentiert.



  • HALLO

    Ähm noch ne Frage

    was hat das hier zu Bedueten oder wofür das da ist ?

    #pragma argsused



  • Kannst du getrost rauslöschen. Hab ich vergessen. Das ist ein pragma für meinen Compiler.



  • Hab schon angst gekriegt LOL
    Danke !!!

    P.s

    Sorry aber ich hab noch nicht gaanz kapier wie du die Sache Löschst, hab den Gaanzen Code Durchgegangen und mir ist nicht klar wo er hin Spring nach der

    if(antwort=='j')
         STRUKT[i].deleted=true; //deleted flag setzen
         else
         STRUKT[i].deleted=false;
    

    Kannste mir da Bittö Erklären 😕



  • Also, wenn man 'j' eingibt setzt er die eigenschaft delete der aktuellen STRUKT auf true. Das bedeutet das er als gelöscht markiert wurde. In der Save funktion schreibe ich NUR die Datensätze in die Datei deren deleted eigenschaft FALSE ist. Auf diese Weise realisiere ich das Löschen. Die Ausgabe wurd so angepasst dass sie ebenfalls nur Datensätze anzeigt die das deleted auf false haben.



  • Aso stimmt ja

    Aber die Datensätze die Quassi Gelöscht sind Bleiben ind der test.txt Trodzden da werden aber nicht ausgegeben !

    Nicht schlecht die idee



  • Hallo,

    nich ganz. Sie sind in der txt auch nicht vorhanden. Weil ich sie nicht mehr reinschreibe wenn sie das delete flag gesetzt haben. Du kannst dir die Datei ja mal nach dem Löschen eines Satzes angucke und davor.



  • Stimmt die Datei Verkleiert sich LOL

    Damit hab ich keine wetere Fragen zu Disen Thema mehr !

    Falls was ist melde ich mich wieder !

    Danke für Deine HILFE Prolog und mann sieht sich !


Anmelden zum Antworten