Daten suche wie
-
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; } //---------------------------------------------------------------------------
-
das ist mehr als eine frage des aussehens.
- uralt header
- sinnlose pragmas
- fehlende strukturierung ('spaghetti')
der kommentar über objektorientierung ist völlig sinnlosabgesehen 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.htmlMfG 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.
-
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.