Personendaten
-
Hi
ich bin ein anfänger im programieren und brauche dringend hilfe
ich muss ein programm schreiben das ein feld von 100 personen bearbeiten kann.
Die Personendaten bestehen aus:
Personennummer,Name,Geburtsdatum und adresse.
der benutzer muss die daten eingeben,ausgeben und löschen können.
der übersichtlichkeit halber muss man die aufgaben in sinnvolle funktionen verteilen und in der aufgabe steht noch was von Konstantvereinbarung über makro(keine ahnung was makro bedeutet).brauche dringend hilfe würde mich auf antworten freuen.
mfg
Jamba66
-
Was hast du schon? Hausaufgaben machen wir nicht.
-
Für die einzelnen Datensätze würde ich eine struct nehmen, für die gesamte Liste einen STL-Container:
struct person { int id; string name; tm geb_dat;//benötigt <ctime> string adresse; } vector<person> personenliste;Dann kannst du problemlos Elemente einfügen, löschen und bearbeiten.
Wenn du allerdings in C arbeitest (wärst du hier im falschen Board), benötigst du statt des vector<> ein simples Array ("struct person personenliste[GROESSE];") und statt der string-Elemente hinreichend große char-Arrays - und mußt die Verwaltung der Elemente selber erledigen.
PS: Ein Makro ist eine #define Deklaration am Anfang des Programms, mit der du eine bestimmte Sequenz mit einem Namen versehen kannst, z.B.:
#define GROESSE 100(das macht es leichter, die Array-Größe und Schleifengrenzen stabil zu halten, wenn du irgendwann mal ein größeres Feld brauchst)
-
Hallo
CStoll (off) schrieb:
PS: Ein Makro ist eine #define Deklaration am Anfang des Programms, mit der du eine bestimmte Sequenz mit einem Namen versehen kannst, z.B.:
#define GROESSE 100(das macht es leichter, die Array-Größe und Schleifengrenzen stabil zu halten, wenn du irgendwann mal ein größeres Feld brauchst)
Sollte man dafür in C++ nicht
const int GROESSE = 100benutzen?
-
chrische5 schrieb:
Sollte man dafür in C++ nicht
const int GROESSE = 100benutzen?
Ja, sollte man - aber das ist dann kein Makro mehr
(aber ich vermute sowieso, daß die Frage eigentlich eine Etage höher landen sollte ;))
-
Hallo
CStoll (off) schrieb:
chrische5 schrieb:
Sollte man dafür in C++ nicht
const int GROESSE = 100benutzen?
Ja, sollte man - aber das ist dann kein Makro mehr
(aber ich vermute sowieso, daß die Frage eigentlich eine Etage höher landen sollte ;))Bei dem Wort Makro wird man C++-Forum immer sofort hellhörig.
chrische
-
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 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]