Daten suche wie



  • 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;
    }
    //---------------------------------------------------------------------------
    

  • Mod

    das ist mehr als eine frage des aussehens.
    - uralt header
    - sinnlose pragmas
    - fehlende strukturierung ('spaghetti')
    der kommentar über objektorientierung ist völlig sinnlos

    abgesehen davon: eine menge code für so wenig (inhalt)



  • @camper: Du hast völlig recht. (wenigstens nicht auch noch void main() :D). Aber nach eigenen Angaben kann er ja zum Großteil nichts dafür.

    @Bartonno:
    Das ist Quatsch:

    if(name==Pers[Liste[n]]->ZeigName())
    

    Du vergleichst strings mit == dass ist Pfui. Da du bloß prüfst, ob die beiden Strings identisch sind, nicht gleich. das machst du mit compare, wenn du Stringklassen benutzt, was du ja tust. Müsste denk ich so aussehen können:

    if(name.compare(Pers[Liste[n]]->ZeigName())==0)
    

    Siehe dazu hier
    http://www.cppreference.com/cppstring/compare.html

    MfG jasch



  • Du vergleichst strings mit == dass ist Pfui.

    Warum das? string hat einen operator== und kann somit auch so verglichen werden. Vorausgesetzt, dass ZeigName() einen string liefert.



  • OK, mein Fehler. Bei char * war das meines Wissens nach so, das man das mit strcmp vergleichen musste, weil man ja so die Pointer verglichen hätte. Hatte da jetzt ein wenig einen Blackout. Aber so wie ich seinen Lehrer einschätze hat ZeigName() als Rückgabewert kein string.

    MfG jasch.


  • Mod

    jasch schrieb:

    Aber so wie ich seinen Lehrer einschätze hat ZeigName() als Rückgabewert kein string.

    was aber keine rolle spielt. ein string kann nicht implizit in ein const char* konvertiert werden - umgekehrt geht das wohl. folglich wird op== auch dann funktionieren, wenn nur ein (const) char* zurückgeliefert wird. op == zu benutzen ist also genau richtig und allemal expressiver als irgendwelche funktionsaufrufe.



  • OK, ich nehme alles zurück und behaupte das Gegenteil. Nur hilft ihm das gerade auch nicht weiter, das einzige was ich jetzt noch probieren würde wäre in void eingabe() das i++; ans ende der Schleife zu packen, apropos, wozu ist die Schleife eigentlich gut, sieht aus als sollte da mal irgendwie abgefragt werden, ob noch ein Datensatz eingegeben werden soll, es wird ja aber nirgends abgefragt, oder bin ich da jetzt völlig verpeilt? 😕

    MfG jasch



  • Hat schon jemand herausgefunden warum sich das Fenster nach suchbestätigung schließt.


Anmelden zum Antworten