Personendaten
-
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]
-
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...
