Personendaten
-
ich hab gehört is bissel schwul in nem array n eintrag wieder zu löschen und wieder hinzuzufügen etc ^^
also wenn scho c++ wieso dann kein container wie
#include <list> list<personen_struct> listederpersonen;?
mfg blan
-
vielen vielen dank für eure hilfe. ich versuche es jetzt mal und wenn es nicht klappt melde ich mich nochmal
-
Hi
ich bins nochmal also ich habe gemacht:#include<iostream>
#include<stdio.h>
#include<conio.h>
#define groesse 100struct personendaten
{
char pn [10];
char vn [20];
char nn [20];
char gt [2];
char gm [2];
char gj [4];
char str[40];
char hnr [5];
char plz[8];
char ort[40];
char lcode[5];
char land[40];
};personendaten person[groesse];
char name[16]="Personennummer:";
char name1[9]="Vorname:";
char name2[10]="Nachname:";
char name3[12]="Geburtstag:";
char name4[14]="Geburtsmonat:";
char name5[13]="Geburtsjahr:";
char name6[9]="Strasse:";
char name7[12]="Hausnummer:";
char name8[5]="Plz:";
char name9[5]="Ort:";
char name10[11]="Land-Code:";
char name11[6]="Land:";
int i,anzahl;int eingabe()
{
printf ("Anzahl der zu erfassenden Personen: ");
scanf("%d", &anzahl);
for (i=0;i<anzahl;i++)
{
printf ("Personennummer : ");
cin >> person[i].pn;
printf ("Vorname : ");
cin >> person[i].vn;
printf ("Nachname : ");
cin >> person[i].nn;
printf ("Gerburtstag : ");
cin >> person[i].gt;
printf ("Geburtsmonat : ");
cin >> person[i].gm;
printf ("Geburtsjahr : ");
cin >> person[i].gj;
printf ("Strasse : ");
cin >> person[i].str;
printf ("Hausnummer : ");
cin >> person[i].hnr;
printf ("PLZ : ");
cin >> person[i].plz;
printf ("Ort : ");
cin >> person[i].ort;
printf ("Land-Code : ");
cin >> person[i].lcode;
printf ("Land : ");
cin >> person[i].land;
}int anzeigen()
{
for (i=0;i<anzahl;++i)
{
cout <<" Personennnummer: "<< person[i].pn<<endl;
cout <<" Vorname: "<< person[i].vn<<endl;
cout <<" Nachname: "<<person[i].nn<<endl;
cout <<" Geburtstag: "<<person[i].bt<<endl;
cout <<" Geburtsmonat: "<<person[i].gm<<endl;
cout <<" Geburtsjahr: "<<person[i].gj<<endl;
cout <<" Strasse: "<<person[i].str<<endl;
cout <<" Hausnummer: "<<person[i].hnr<<endl;
cout <<" PLZ: "<<person[i].plz<<endl;
cout <<" Ort: "<<person[i].ort<<endl;
cout <<" Land-Code: "<<person[i].lcode<<endl;
cout <<" Land: "<<person[i].land<<endl;
getch();
}
}
return 0;
system ("pause");
}ich bekomme aber fehlermeldungen da steht:
In functionint eingabe()':cin' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
expected primary-expression before "int"
expected `;' before "int"und stimmt das mit dem define so??
und oben habe ich printf und cin genommen weil ich ein änliches programm gefunden habe und der der es geschrieben hat hat es so gemacht hat.würde mich auf antworten freuen.
mfg
Jambe66
-
cin gehört zu
[cpp]#include <iostream**.h**>
[/cpp]
-
Hallo
poroblem schrieb:
cin gehört zu
[cpp]#include <iostream**.h**>
[/cpp]Das ist Quatsch.
Du kannst es natürlich auch nutzen, wenn du mit iostream ohne h arbeitest. Das solltest du auch auf jeden Fall tun, weil es der aktuelle Standard vorschreibt. Wenn du aber mit iostream arbeitest musst du den namespace std bentzen. Dazu gibt es zwei Möglichkeit:
am Anfang des Programms:
using namespace std;schreiben oder vor so:
std::cinchrische
-
da ich auch grad etwas c++ über hab ich mal das eingeben/anzeigen gemacht, allerdings nur fuer den namen:
#include <iostream> #include <string> //DEV-C++ 4.9.9.2 using namespace std; struct T_person { int pnr; string nname; }; const int kgroesse = 100; T_person person[kgroesse]; int find_frei(){ // naechsten freien platz finden(name > leer for (int i=0;i<kgroesse;i++) if (person[i].nname=="") return i; return -1; } void anzeige_person() { // alle personen anzeigen system("cls"); cout<<"Anzeige Daten\n\n"; for (int i=0;i<kgroesse;i++) if (person[i].nname>"") { cout<<"pers.nr....:"<<person[i].pnr<<endl; cout<<"Name.......:"<<person[i].nname<<endl<<endl; } system("pause"); } void eingabe_person () { // eine neue person anlegen T_person wperson; // temp var while (true) { cout<<"Name ? (leer=Ende)\n"; getline(cin,wperson.nname); if (wperson.nname=="") break; int frei=find_frei(); if (frei==-1) { // ungueltige index heisst fehler, voll cout<<"tabelle voll !\n"; break; } person[frei].pnr=frei; person[frei].nname=wperson.nname; } return; } int ausgabe_menue() { int wahl=0; while (wahl==0) { system("cls"); cout<<"1 - Anzeigen Daten\n"; cout<<"2 - neuen Partner anlegen\n"; cout<<"3 - Partner aendern\n"; cout<<"4 - Partner loeschen\n"; cout<<"9 - Ende\n"; cin>>wahl; cin.ignore();// enter aus cin buffer loeschen system("cls"); if (wahl==9) break; if (wahl>4) { //fehler wahl=0; cout<<"falsche eingabe\n\n"; } else break; system("pause"); } return wahl; } int main() { while (true) { int wahl=ausgabe_menue(); if (wahl==9) break; switch (wahl) { case 1: anzeige_person(); break; case 2: eingabe_person (); break; case 9: break; } } return 0; }
-
an kermit1
erstmal vielen vielen dank für die mühe. das hat mir sehr geholfen.
ich habe da aber noch ein paar fragen an dich.für was ist die funktion
int find_frei()und was bedeutet das
return -1??
und das frei
person[frei].pnr=frei;??
und das programm erhöht die personalnummer automatisch um 1 ich muss aber die personalnummer selber eingeben können.du hast das programm ja nur für personalnummer und für den namen gemacht.
ich brauche aber noch strasse und solche sachen . wo muss ich die dann da eintragen??und das programm löscht ja immer nur den zuletzt eingegebenen eintrag. kann ich da auch geziel löschen??
vielen vielen dank nochmal für deine hilfe
und hoffentlich macht es dir nix aus das ich soviele fragen stelle ich bin ein anfänger und hab fast null ahnung

-
hi,
also,
die funktion find_frei liefert den index des naechsten freien platzes im array zurueck. ( wenn mal eine loesch funktion da ist, koennen ja luecken im array entstehen )
die -1 heisst, dass es keinen freien platz mehr gibt ( damit man es von einem gültigen wert unterscheiden kann )
die personal nummer hab ich einfach mit dem index belegt, die kann man aber genausogut in der eingabe routine eingeben lassen:
cin>>wperson.pnr; und
person[frei].pnr=wperson.pnr;eine loeschroutine hab ich noch gar nicht eingebaut, etwas sollte ja noch fuer dich übrig bleiben
( da muesste man dann nur den namen der gewuenschten nr ( index oder person. Nr) loeschen, bzw auf leerstring setzen )die anderen felder muss man nur in der structur ergaenzen:
struct T_person {
int pnr; //
achtung int geht nur bis ca. 32000 !
string nname;
string vorname;
string strasse;
...(usw.)
};hoffe das hilft dir etwas...

-
danke du bist meine rettung

muss ich
string vorname;
string strasse;
usw.
nicht noch in void eingabe oder void anzeigen schreiben??
vielleicht könntest du mir ja einen tipp zu der funktion löschen geben
vielen dank nochmal
-
muss ich
string vorname;
string strasse;
usw.
nicht noch in void eingabe oder void anzeigen schreiben??ja natuerlich, genau so wie person[i].name ...
meine loeschfunktion:
void loesch_person () { // eine person loeschen string str;int i; while (true) { system("cls"); cout<<"welche Nr. soll geloescht werden ? (leer=Ende)\n"; getline(cin,str); if (str=="") break; // endlos schleife beenden int suchnr=atoi(str.c_str()); // string in int umwandeln if (suchnr < 1 || suchnr > 320000 ) { cout<< "personal nr ungueltig\n "; system("pause"); continue; // weiter an anfang while schleife } for (i=0;i< kgroesse;i++ ) // nach personal nr suchen if ( person[i].pnr ==suchnr ) { person[i].nname=""; // name loeschen reicht cout<<"Pers nr.: "<<suchnr<<" geloescht\n"; break; // for schleife beenden } if (i>=kgroesse) // wenn i am ende, dann nicht gefunden cout<<"Pers nr.: "<<suchnr<<" nicht gefunden\n"; system("pause"); } return; }aber vom reinen kopieren lernt man nix
, bastel mal selber ein wenig am code, also z.bsp. an einer routine zum ändern...
-
ich weiß am kopieren lerne ich nix aber ich steht zur zeit unter druck in ich verstehe fast nix.

ich danke dir für deine mühe nochmal.
-
void eingabe_person () { // eine neue person anlegen T_person wperson; // temp var while (true) { cout<<"Name ? (leer=Ende)\n"; getline(cin,wperson.nname); cout<<"Geburtsdatum ?\n"; getline(cin,wperson.geb); //int cout<<"Strasse ?\n"; getline(cin,wperson.str); cout<<"Hausnummer ?\n"; getline(cin,wperson.hnr); //int cout<<"PLZ ?\n"; getline(cin,wperson.plz); //int cout<<"Ort ?\n"; getline(cin,wperson.ort); cout<<"Land-Code ?\n"; getline(cin,wperson.lcode); //int cout<<"Land ?\n"; getline(cin,wperson.land); if (wperson.nname=="") break; int frei=find_frei(); if (frei==-1) { // ungueltige index heisst fehler, voll cout<<"tabelle voll !\n"; break; } person[frei].pnr=frei; person[frei].nname=wperson.nname; person[frei].geb=wperson.geb; person[frei].str=wperson.str; person[frei].hnr=wperson.hnr; person[frei].plz=wperson.plz; person[frei].ort=wperson.ort; person[frei].lcode=wperson.lcode; person[frei].land=wperson.land; } return; }bei den ganzen int deklarationen in der while schleife kommt bei mir ein fehler:
no matching function for call to `getline(std::istream&, int&)'ich habe ein paar sachen probiert da zeigt es keinen fehler an aber dann spinnt das programm irgendwie
-
die funktion getline(cin,...) erwartet einen string, da kannst du keine int variable übergeben. mach es so wie oben steht:
getline(cin,str); int suchnr=atoi(str.c_str()); // string in int umwandelndas koennte man auch in eine funktion auslagern
int getInt ( ) { int erg;string str; getline(cin,str); erg=atoi(str.c_str()); return erg; } // und dann aufrufen mit: int i=getInt();liefert allerdings bei leerstring eine 0, dass muesste man noch abfangen...
-
hab grad gesehen:
cout<<"Geburtsdatum ?\n"; getline(cin,wperson.geb); //intdas wird auch nicht gehen, int geht nur bis +32767, nimm lieber auch string als datentyp.
es gibt zwar auch spezielle typen fuer datums felder, aber wenn du mit dem datum nix weiter machen willst, reicht string...
-
kermit1 schrieb:
..., int geht nur bis +32767,...
Das ist heutzutage aber schon sehr selten. Auf was für nem Betriebssystem
arbeitest du denn.
-
Scheint wohl Windows 95 zu sein. 98 hat meines Wissens schon 32 bit.
Aber stimmt, das ist echt selten... fast Rarität.

-
Searence schrieb:
Scheint wohl Windows 95 zu sein. 98 hat meines Wissens schon 32 bit.
Windows95 "hat" auch 32bit.
-
Bashar schrieb:
Windows95 "hat" auch 32bit.
Auch die ersten Verisonen?
Ich bin der Meinung das die ersten Ausgaben noch 16 Bit Versionen waren.
(Korrigiere mich falls ich falsch liege)//EDIT
ich lag falsch, danke für die Richtigstellung, so lerne ich auch dazu.

Für alle die es nachlesen wollen: http://de.wikipedia.org/wiki/Windows_95