Personendaten



  • also ich habe bis jetzt gemacht:
    #include<iostream>

    struct personendaten
    {
    char pn [10]; //personennummer
    char vn [20]; //vorname
    char nn [20]; //nachname
    int geb_t [2]; //geburtstag
    int geb_m [2]; //geburtsmonat
    int geb_j [4]; //geburtsjahr
    char str[20]; //straße
    int hnr [5]; //hausnummer
    char plz [6]; //postleitzahl
    char std [10]; //stadt
    char LC [5]; //Land-Code
    char la [40]; //Land

    };

    personendaten person[100];
    char name[16]="Personennummer:";
    char name1[9]="Vorname:";
    char name2[10]="Nachname:";
    int name3[12]="geburtstag:";
    int name4[14]="geburtsmonat:";
    int name5[13]="geburtsjahr:";
    char name6[9]="Strasse:";
    char name7[12]="Hausnummer:";
    char name8[5]="plz:";
    char name9[7]="Stadt:";
    char name10[11]="Land-Code:";
    char name11[6]="Land:"

    das sind die deklarationen die ich gemacht habe.
    brauche ich für die eingaben jetzt nur noch printf und scanf und dann das ganze wieder ausgeben??
    könntest du bitte das mit dem löschen und so nochmal genauer erklären bitte.
    was meinst du mit eine etage höher?? das ist doch c++ 🙂

    danke für die zahlreichen antworten 🙂



  • Nur weil du iostream inkludierst ist das noch lange kein C++ (vor allem, wenn du dann dennoch mit (scan|print)f, C-Strings etc. arbeitest!



  • Hallo

    printf und scanf gehört AFAIK zu C. In C++ würde man so etwas mit cout und cin machen. Außerdem kannst du bei C++ std::string benutzen.

    chrische



  • Jambe66 schrieb:

    int geb_t [2]; //geburtstag

    Also das ist semantischer Käse - oder hat eine der Personen bei dir 2 Geburtstage (bzw. 4 verschiedene Geburtsjahre)?

    char name[16]="Personennummer:";
    char name1[9]="Vorname:";
    char name2[10]="Nachname:";
    int name3[12]="geburtstag:";
    int name4[14]="geburtsmonat:";
    int name5[13]="geburtsjahr:";
    char name6[9]="Strasse:";
    char name7[12]="Hausnummer:";
    char name8[5]="plz:";
    char name9[7]="Stadt:";
    char name10[11]="Land-Code:";
    char name11[6]="Land:"

    Diese Texte sind eventuell als Tabellen-Überschrift zu gebrauchen, aber eigentlich überflüssig 😉

    Als nächstes solltest du dir eine Funktion erstellen, die einen Index (0..99) bekommt und das Array-Element an dieser Stelle einliest (jede Member-Variable einzeln aus cin) bzw. ausgibt (jeden Member über cout).

    das sind die deklarationen die ich gemacht habe.
    brauche ich für die eingaben jetzt nur noch printf und scanf und dann das ganze wieder ausgeben??
    könntest du bitte das mit dem löschen und so nochmal genauer erklären bitte.
    was meinst du mit eine etage höher?? das ist doch c++ 🙂

    danke für die zahlreichen antworten :)[/quote]



  • CStoll (off) schrieb:

    [...]
    PS: Ein Makro ist eine #define Deklaration am Anfang des Programms [...]

    Nicht zwangsläufig am Anfang des Programmes. 😉

    Gruß Caipi



  • Hallo

    Caipi schrieb:

    CStoll (off) schrieb:

    [...]
    PS: Ein Makro ist eine #define Deklaration am Anfang des Programms [...]

    Nicht zwangsläufig am Anfang des Programmes. 😉

    Gruß Caipi

    In der Regel schreibt man es aber schon an den Anfang, oder? Ich finde, dass macht es einfach übersichtlicher.

    chrische



  • chrische5 schrieb:

    Hallo

    Caipi schrieb:

    CStoll (off) schrieb:

    [...]
    PS: Ein Makro ist eine #define Deklaration am Anfang des Programms [...]

    Nicht zwangsläufig am Anfang des Programmes. 😉

    Gruß Caipi

    In der Regel schreibt man es aber schon an den Anfang, oder? Ich finde, dass macht es einfach übersichtlicher.

    Jup. Das ist korrekt. (Man beachte auch den ";)"-Smiley* im entsprechenden Posting.

    *Steht für Korintenkack.

    Gruß Caipi



  • Hallo

    JaJa hatte ich schon gelesen. Ich wollte nur mal mit meinem Wissen auf den Putz hauen. 😉

    chrische



  • Caipi schrieb:

    CStoll (off) schrieb:

    [...]
    PS: Ein Makro ist eine #define Deklaration am Anfang des Programms [...]

    Nicht zwangsläufig am Anfang des Programmes. 😉

    Gruß Caipi

    OK, dann eben "im Quelltext des Programms" - zufrieden?

    Aber normalerweise kommt so ein Makro recht weit oben hin - außer es wird nur lokal benötigt, dann kann es irgendwo auftauchen.



  • zu CStoll:

    Als nächstes solltest du dir eine Funktion erstellen, die einen Index (0..99) bekommt und das Array-Element an dieser Stelle einliest (jede Member-Variable einzeln aus cin) bzw. ausgibt (jeden Member über cout).

    meinst du sowas??
    anzahl_Personen [0,1,2,3,4,5,6.....,98,99);
    wenn ich da 100 personen speichern will muss ich dann 100 mal cin und cout schreiben???

    und zu dem
    int geb_j [4]; //geburtsjahr
    da reservier ich doch 4 speicherplätz für das geburtsjahr oder??
    z.B. 1982 das sind doch 4 ziffern.

    und könntest du bitte das mit dem einfügen, löschen und bearbeiten etwas genauer erklären wie gesagt ich bin ein anfänger 🙂

    danke schonmal



  • Ich meinte etwas in der Form:

    void Eingabe(int index)
    {
      //füllt den Datensatz personen[index]
    }
    

    Dann kannst du in einer for()-Schleife von 0 bis 99 gehen und jeweils Eingabe(i) aufrufen.

    int geb_j [4]; //geburtsjahr
    da reservier ich doch 4 speicherplätz für das geburtsjahr oder??
    z.B. 1982 das sind doch 4 ziffern.

    Eine int-Zahl hat Platz für Werte bis ca. 32000, da reicht ein einzelner Wert für jedes vorstellbare Geburtsdatum - du reservierst dir ein Array für 4 int-Werte und das ist etwas Overkill 😉

    @Funktionsweisen: Irgendwo hier (oder war's im C-Board?) schwirren noch Fragmente eines anderen Programms rum, das sich mit so einer Listen-Verarbeitung beschäftigt hat.

    PS: In C++ solltest du eher strings (da brauchst du dir keine Gedanken um die Länge) und STL-Container (die kümmern sich selber um Einfügen, Löschen,...) nehmen als das per Hand zu schreiben.



  • 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 100

    struct 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 function int 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::cin
    

    chrische



  • 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


Anmelden zum Antworten