Daten suche wie



  • Bartonno schrieb:

    Und wie behebe ich das jetzt habe keine Ahnung bin so teilweise Anfänger.

    Ich würde eher sagen der Code ist nicht von dir 😉
    Sonst könntest du solche Fehler ohne Probleme beheben, wenn du das alles selbst geschrieben HÄTTEST....

    Nicht bööse gemeint 😃



  • Ja stimmt der Code ist größtenteils von meinem Lehrer nur kleinigkeiten wie die sortierfunktion sind von mir.



  • Habe das gemacht was oben mir mal erklärt wurde klappt bestimmt auch wenn nur diese Fehlermeldung nicht da wäre

    [Linker Fehler] Unresolved external 'bearbeiten(int)' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\ADMIN\DESKTOP\ADRESSSTRUKTUR NEU\UNIT1.OBJ

    Hähhh was soll das den nun bitte bedeuten wie ich aus dem Text entnehmen kann
    stimmt irgend etwas mit bearbeiten(int) nicht nur was.
    Ich hoffe ihr kennt eine Antwort in der Zwischenzeit versuche ich selber mein Glück



  • Schau dir mal die Schreibweise von bearbeiten in Deklaration und Definition an. Die sind bei dir unterschiedlich.



  • Hallo,
    wenn der Code zum größten Teil von deinem Lehrer stammt kannst du ihm ja bei Gelegenheit mal verklickern das er einen der unübersichtlichsten Programmierstile hat, die ich seit langem gesehen hab, bevor man sowas verwenden kann muss man ja erstmal astyle drüberlaufenlassen, damit man wenigstens ein bisschen Struktur sieht und mal mehr als 2 Einrückungen hat. Ich hoffe auch, das diese ganzen globalen Zählvariablen nicht von dir stammen, sowas ist gelinde gesagt einfach unschön.

    MfG jasch



  • Juhu 😃 es hat funktioniert danke das du mich auf die unterschiedlichen Schreibweisend aufmerksam gemacht hast. Leider hat es nicht lange Funktioniert.
    Nachdem das Programm endlich mal wieder gestartet ist und ich einen Namen eingegeben habe und diesen nun suchen wollte hängte sich das Programm mit folgender Fehlermeldung auf.

    http://img191.imageshack.us/img191/6348/fehler6ph.th.jpg

    Was jetzt woran könnte das liegen.


  • Mod

    Bartonno schrieb:

    Was jetzt woran könnte das liegen.

    aufruf der funktion über einen 0-pointer?



  • Und das heißt in Anfängersprache jetzt was. 😕



  • Also allgemein gesagt tritt so eine Speicherzugriffsverletzung auf, wenn das Programm versucht auf einen Speicher zuzugreifen, der ihm nicht gehört, meistens passiert sowas wenn ein Zeiger durch Zeigerarithmetik auf einen Speicherbereich ausserhalb eines Feldes zeigt.
    MfG



  • Du könntest z.Bsp. mal in deinen Code schauen wo dein i belegt wird. Gibt es den Index auf den du zugreifen willst überhaupt?
    Du würdest dir das Leben leichter machen, indem du auf deine Arrays verzichtest und statt dessen vector oder list nimmst.



  • Also ich glaube, der Fehler liegt in dieser for-Schleife:

    for(n=1;n<i+1;n++); 
      { 
      if(name==Pers[Liste[n]]->ZeigName()) 
      {
    

    wenn i dabei die Größe des Feldes ist (wie ich vermute) greifst du im letzten Schleifendurchlauf auf Liste[i] zu, die Indizes von arrays gehen aber grundsätzlich von 0 (!!!) - (arraygroesse -1) (!!!) das heißt du schießt über deine Arraygrenzen hinaus.

    versuchs mal so

    for(n=0;n<i;n++); 
      { 
      if(name==Pers[Liste[n]]->ZeigName()) 
      { 
      anzeige(n);
    

    MfG jasch



  • Okay
    das verändernder for schleife hat soviel gebracht das die Fehlermeldung jetzt nicht mehr Auftaucht. Den wenn ich jetzt meine suche bestätigen will verschwindet das Fenster sofort bzw. es stürtzt ab.
    Wie ist das möglich.



  • Schau nochmal hin. i wird nirgendwo belegt. Deswegen steht darin auch nicht die Größe deines Feldes.



  • Was meinst du mit belegt, i wird doch in jeder void verwendet.



  • Das der das Programm beendet liegt wohl daran, das du in der Funktion void anzeige(int i) am Ende nicht (wie bei void anzeige()) menu() aufrufst, somit springt das Programm raus und beendet sich und Braunstein hat recht, beim Drüberschauen ist mir auch keine Stelle aufgefallen wo i einen Startwert bekommt, ich glaube du solltest das mal nachholen, oder hab ich da was übersehen?

    MfG jasch



  • Irgendwo muss mal sowas o.Ä. stehen.

    i = 0;
    

    du deklarierst i bloß als int, aber du musst der Variable auch was zuweisen, bevor du lustig mit ihr rumrechnen kannst.

    MfG jasch


  • Mod

    jasch schrieb:

    Irgendwo muss mal sowas o.Ä. stehen.

    i = 0;
    

    du deklarierst i bloß als int, aber du musst der Variable auch was zuweisen, bevor du lustig mit ihr rumrechnen kannst.

    MfG jasch

    i ist eine statische nicht-lokale variable - und wird folglich beim programmstart zero-initialisiert (dass es nicht unbedingt guter stil ist - ist eine andere frage). das ganze programm ist schließlich in grässlicher verfassung :p



  • Habe menu() eingetragen und i eine Wert zugewiesen. Das Fenster schließt sich jetzt zwar nicht mehr aber anstatt endlich mal Suchergebnisse auszuspucken kehrt es bloß ins Menü zurück.
    Und was heißt hier in grässlicher Verfassung 😉



  • Das heißt das der Quellcode einfach nur ekelhaft aussieht. Kannst du den Code so wie er jetzt ist nochmal posten, dann kann ich mir das doch deutlich besser vorstellen, und wenns geht rück es ein wenig ein. Nicht vergessen keine code-Tags, sondern C++-Tags zu verwenden.

    MfG



  • Null Problemo
    Hier haste den Quellcode

    //Adressprogramm unter Verwendung objektorientierter Programme-------
    //Version 1.2
    //----------------------------------------------------------------------------
    #include <condefs.h>
    #include <fstream.h>
    #include <iomanip.h>
    #include <conio.h>
    #include "person.h"
    #include <string.h>
    #pragma hdrstop
    //---------------------------------------------------------------------------
    USEUNIT("person.cpp");
    //---------------------------------------------------------------------------
    int i=0,n=0,a,k,Liste[500],x,y,name,hV,suchen; //Satzzähler
    int const m=500;
    Person *Pers[m];
    ;
    struct Person PersDaten[100];
    //----------------------------------------------------------------------------
    void menu();
    void eingabe();
    void anzeige();
    void sortieren();
    void dataload();
    void datasearch();
    void anzeige(int n);
    void datasave();
    void bearbeiten(int s);
    //---------------------------------------------------------------------------
    void eingabe()
    {
     char a;
     string text;
     do
    {
     i++;
     clrscr();
     Pers[i]= new Person;
     cout<<"Dateneingabe\n\n";
     cout<<"Adresse von Person "<<i<<endl;
     cout<<"\nNachname      : ";
     cin>>text;
     Pers[i]->SchreibName(text);
     cout<<"Vorname       : ";
     cin>>text;
     Pers[i]->SchreibVorname(text);
     cout<<"Strasse       : ";
     cin>>text;
     Pers[i]->SchreibStr(text);
     cout<<"Hausnummer    : ";
     cin>>text;
     Pers[i]->SchreibNr(text);
     cout<<"Postleitzahl  : ";
     cin>>text;
     Pers[i]->SchreibPlz(text);
     cout<<"Wohnort       : ";
     cin>>text;
     Pers[i]->SchreibOrt(text);
     cout<<"Geburtstag    : ";
     cin>>text;
     Pers[i]->SchreibGebDatum(text);
     cout<<"Telefonnummer : ";
     cin>>text;
     Pers[i]->SchreibTelNr(text);
    }
     while(a=='j');
     menu();
    }
    //---------------------------------------------------------------------------
    void anzeige()
    {
     int m=1,n,j,s;
     char a;
     char text[20];
     string Text;
     while(m<=i)
    {
     clrscr();
     if(m+5>=i)
       j=i+1;
     else
       j=m+5;
      for(n=m;n<j;n++)
      {
      if(Pers[Liste[n]]->ZeigName()!="")
      {
      cout<<resetiosflags(ios::left)<<setw(3)<<Liste[n]<<" ";
      cout<<setiosflags(ios::left);
      cout<<setw(20)<<Pers[Liste[n]]->ZeigName()<<", ";
      cout<<setw(24)<<Pers[Liste[n]]->ZeigVorname()<<"  Geb. am: ";
      cout<<Pers[Liste[n]]->ZeigGebDatum()<<endl;
      Text=Pers[Liste[n]]->ZeigStr()+" "+Pers[Liste[n]]->ZeigNr();
      cout<<"    "<<setw(20)<<Text;
      cout<<"    ";
      cout<<Pers[n]->ZeigPlz()<<" ";
      cout<<setw(20)<<Pers[Liste[n]]->ZeigOrt()<<" Tel.Nr: ";
      cout<<Pers[Liste[n]]->ZeigTelNr()<<endl<<endl;
       }
      }
      cout<<" Weiter mit <+>, Zurück mit <->, Ende mit <x>, Bearbeiten mit <b> ";
      a=getche();
      if(a=='+'&& m+5<=i)
      m=m+5;
      else if (a=='-'&& m-5>0)
      m=m-5;
      else if (a=='b')
      {
      cout<<"\nBitte Nummer des zu Bearbeitenden Datensatzes eingeben: ";
      cin>>s;
      bearbeiten(s);
        }
       else if(a=='x')
       m=i+1;
    
     }
    menu();
    }
    //-------------------------------------------------------------------------------------
    void sortieren()
    {
     string name1,name2;
     for (x=1;x<i+1;x++)
         {
         for (y=1;y<i-x+1;y++)
              {
              name1=Pers[Liste[y]]->ZeigName();
              name2=Pers[Liste[y+1]]->ZeigName();
              if(name1>name2)
                {
                hV=Liste[y];
                Liste[y]=Liste[y+1];
                Liste[y+1]=hV;
                }
              }
         }
         cout<<"Liste sortiert";
         getch();
         for(y=1;y<i+1;y++)
         cout<<Liste[y]<<";";
         getch();
         menu();
    }
    //----------------------------------------------------------------------------
    void dataload()
    {
     int j;
     string text;
     char File[]="C:\\Daten\\Adressen";
     cout<<"Lade Daten von "<<File<<endl;
     ifstream fin;
     fin.open(File,ios::in);
     if(!fin)
    {
     cout<<"Datei konnte nicht geoeffnet werden!"<<endl;
     getch();
     menu();
    }
     fin>>i;
     for(j=1;j<=i;j++)
    {
     Pers[j]=new Person;
     fin>>text;
     Pers[j]->SchreibName(text);
     fin>>text;
     Pers[j]->SchreibVorname(text);
     fin>>text;
     Pers[j]->SchreibStr(text);
     fin>>text;
     Pers[j]->SchreibNr(text);
     fin>>text;
     Pers[j]->SchreibPlz(text);
     fin>>text;
     Pers[j]->SchreibOrt(text);
     fin>>text;
     Pers[j]->SchreibTelNr(text);
     fin>>text;
     Pers[j]->SchreibGebDatum(text);
    }
     fin.close();
     cout<<"Daten lesen ok "<<endl;
     getch();
     menu();
    }
    //---------------------------------------------------------------------------
    void bearbeiten(int s)
    {
    char text[20];
    cout<<"Unveraenderte Daten mit <Enter>bestaetigen\n";
      cout<<"\nNachname     : "<<Pers[s]->ZeigName()<<" neu: ";
      cin.ignore();
      cin.get(text,20);
      if (strlen(text)!=0)
      Pers[s]->SchreibName(text);
    
      cout<<"\nVorname      : "<<Pers[s]->ZeigVorname()<<" neu: ";
      cin.ignore();
      cin.get(text,20);
      if (strlen(text)!=0)
      Pers[s]->SchreibVorname(text);
    
      cout<<"\nStrasse      : "<<Pers[s]->ZeigStr()<<" neu: ";
      cin.ignore();
      cin.get(text,20);
      if (strlen(text)!=0)
      Pers[s]->SchreibStr(text);
    
      cout<<"\nHausnummer   : "<<Pers[s]->ZeigNr()<<" neu: ";
      cin.ignore();
      cin.get(text,20);
      if (strlen(text)!=0)
      Pers[s]->SchreibNr(text);
    
      cout<<"\nPostleizahl  : "<<Pers[s]->ZeigPlz()<<" neu: ";
      cin.ignore();
      cin.get(text,20);
      if (strlen(text)!=0)
      Pers[s]->SchreibPlz(text);
    
      cout<<"\nOrt          : "<<Pers[s]->ZeigOrt()<<" neu: ";
      cin.ignore();
      cin.get(text,20);
      if (strlen(text)!=0)
      Pers[s]->SchreibOrt(text);
    
      cout<<"\nGeburtstag    : "<<Pers[s]->ZeigGebDatum()<<" neu: ";
      cin.ignore();
      cin.get(text,20);
      if (strlen(text)!=0)
      Pers[s]->SchreibGebDatum(text);
    
      cout<<"\nTelefonnummer : "<<Pers[s]->ZeigTelNr()<<" neu: ";
      cin.ignore();
      cin.get(text,20);
      if (strlen(text)!=0)
      Pers[s]->SchreibTelNr(text);
    }
    //----------------------------------------------------------------------------
    void datasearch()
    {
      string name;
      cin>>name;
      for(n=0;n<i;n++);
      {
      if(name==Pers[Liste[n]]->ZeigName())
      {
      anzeige(n);
     // bearbeiten(), weitersuchen, beenden()
      }
      }
      menu();
    }
    //----------------------------------------------------------------------------
    void anzeige(int n)
    {
      cout<<resetiosflags(ios::left)<<setw(3)<<Liste[n]<<" ";
      cout<<setiosflags(ios::left);
      cout<<setw(20)<<Pers[Liste[n]]->ZeigName()<<", ";
      cout<<setw(24)<<Pers[Liste[n]]->ZeigVorname()<<"  Geb. am: ";
      cout<<Pers[Liste[n]]->ZeigGebDatum()<<endl;
      cout<<"    "<<setw(20)<<Pers[Liste[n]]->ZeigStr()+" "+Pers[Liste[n]]->ZeigNr();
      cout<<"    ";
      cout<<Pers[n]->ZeigPlz()<<" ";
      cout<<setw(20)<<Pers[Liste[n]]->ZeigOrt()<<" Tel.Nr: ";
      cout<<Pers[Liste[n]]->ZeigTelNr()<<endl<<endl;
     }
    //----------------------------------------------------------------------------
    void datasave()
    {
    int j;
    string text;
    char File[]="C:\\Daten\\Adressen";
    cout<<File;
    ofstream fout;
    fout.open(File,ios::out);
    if(!fout)
      {
      cout<<"Fehler:\n";
      getch();
      menu();
      }
    fout<<i<<endl;
    for(j=1;j<=i;j++)
        {
        fout<<Pers[j]->ZeigName()<<endl;
        fout<<Pers[j]->ZeigVorname()<<endl;
        fout<<Pers[j]->ZeigGebDatum()<<endl;
        fout<<Pers[j]->ZeigStr()<<endl;
        fout<<Pers[j]->ZeigNr()<<endl;
        fout<<Pers[j]->ZeigPlz()<<endl;
        fout<<Pers[j]->ZeigOrt()<<endl;
        fout<<Pers[j]->ZeigTelNr()<<endl;
        }
    fout.close();
    cout<<"Datensicherung OK:";
    getch();
    menu();
    }
    //-----------------------------------------------------------------------------
    void menu()
    {
    char a;
    clrscr();
    cout<<"\n\t   Adressverwaltung fuer 500 Adressen DOS-basiert  V 1.2\n";
    cout<<"\n\n\t      Copyright by ....\n\n";
    cout<<"\n\n\t\t\t\t Hauptmenue";
    cout<<"\n\t\t\t\t ==========\n\n";
    cout<<"\t\t\t -1- Daten anzeigen und bearbeiten\n";
    cout<<"\t\t\t -2- Neue Daten eingeben\n";
    cout<<"\t\t\t -3- Daten abspeichern\n";
    cout<<"\t\t\t -4- Daten einlesen\n";
    cout<<"\t\t\t -5- Daten sortieren\n";
    cout<<"\t\t\t -6- Daten Suchen\n";
    cout<<"\t\t\t -0- Programm beenden\n";
    cout<<"\n\t\t\t Bitte auswaehlen ";
    cin>>a;
    clrscr();
    switch (a)
        {
        case '0':exit(0);
                 break;
        case '1':anzeige();
                 break;
        case '2':eingabe();
                 break;
        case '3':datasave();
                 break;
        case '4':dataload();
                 break;
        case '5':sortieren();
                 break;
        case '6':datasearch();
                 break;
        default :menu();
                 break;
        }
    }
    //-----------------------------------------------------------------------------
    #pragma argsused
    int main(int argc, char* argv[])
    {
    for(x=1;x<501;x++)
    Liste[x]=x;
    
            menu();
            return 0;
    }
    //---------------------------------------------------------------------------
    

Anmelden zum Antworten