Hallo zusammen
Ich habe mich an einem c++ adressbuch versucht. ich hab von einem Kollegen ne aufgabenstellung bekommen um ein studentenadressbuch zu entwerfen.. ich arbeite mit visual studios c++ die aufgabe war:
jetzt habe ich angefangen und das ganze erstmal mit 4 einzuschleusenden sachen versucht...und das ist bei mir raus gekommen
1. hab ich die aufgabe jetzt richtig verstanden und das so gut gelöst?
2. wie kann ich bei der plz auf 5 ziffern beschränken?
3. bei dem datensatz eingeben.. verwende ich cin >> a .... wo in meinem code wird a deklariert?
4. die obersten drei befehler verstehe ich nicht ganz mit dem struct mit dem i und o stream...
ps. man merkt vllt das den code den ich mir zusammen gesucht habe, selbst noch nciht ganz verstehe
Ich habe mich an einem c++ adressbuch versucht. ich hab von einem Kollegen ne aufgabenstellung bekommen um ein studentenadressbuch zu entwerfen.. ich arbeite mit visual studios c++ die aufgabe war:
Die Aufgabe ist, eine Studierendenverwaltung zu implementieren. Als
Entwicklungsumgebung soll Microsoft Visual Studio 2010 Express (für C++ )
verwendet werden. Wir gehen von einer maximalen Anzahl von 2000 Studierenden
aus. Für jeden Studierenden sollen die folgenden Daten soweit es geht erfasst
werden.
Matrikelnummer
Name
Vorname
Adresse mit
o Straße
o Hausnummer
o Postleitzahl und
o Ort/Stadt
Telefon mit
o Mobilnummer
o Festnetznummer
Studiengang (mit Start des Studiums),
Praxispartner
o Firma mit Adresse
Straße
Hausnummer
Postleitzahl und
Ort/Stadt
o Ansprechpartner beim Praxispartner
Mobilnummer
Festnetznummer
Die erhobenen Daten sollen auf Festplatte gespeichert werden. Bei einem Neustart
des Programms sollen die gespeicherten Daten von der Festplatte zunächst geladen
werden, so dass ein zusätzlicher Eintrag anschließend eingegeben werden kann.
Die Ausgabe eines Datensatzes (alle Angaben eines Studierenden) soll auf einer
Bildschirmseite dargestellt werden.
Es soll ebenfalls möglich sein, einen Datensatz zu suchen respektive zu finden
und zwar entweder über a) die Matrikelnummer, b) den Namen c) den Vornamen
oder d) Praxispartner. Gibt es mehrere Suchresultate (Treffer), sollen diese immer
vollständig und dann nacheinander ausgegeben werden. Des Weiteren soll es
möglich sein, einen Datensatz zu ändern und auch zu löschen.
Das ganze Programm soll über eine Menüsteuerung zu bedienen
sein. Es müssen also folgende Menüpunkte realisiert werden:
Daten eingeben
Daten auf Bildschirm ausgeben
Daten von HD lesen
Datensatz suchen
Daten auf HD speichern
Datensatz löschen
Datensatz ändern
Hinweise
Die Daten sollten in einem Abstrakten Datentyp (ADT) erfasst werden. Einen oder
auch mehrere struct wäre hier hilfreich.
Die Studierenden sollten ein einem Feld (Array) vom Typ struct verwalten werden.
Die Funktionen fscanf und fprintf reichen evtl. nicht aus, um die Daten von
der HD zu lesen bzw. auf die HD zu schreiben.
jetzt habe ich angefangen und das ganze erstmal mit 4 einzuschleusenden sachen versucht...und das ist bei mir raus gekommen
C++:
#include <iostream>
#include <algorithm>
#include <string>
#include <fstream>
#include <vector>
using namespace std;
struct Adresse
{
string strasse;
string hausnummer;
string postleitzahl;
string wohnort;
};
ostream& operator<<(ostream& out, Adresse a)
{
out << a.strasse << ' ';
out << a.hausnummer << ' ';
out << a.postleitzahl << ' ';
out << a.wohnort << ' ';
return out;
}
istream& operator>>(istream& in, Adresse& a)
{
in >> a.strasse;
in >> a.hausnummer;
in >> a.postleitzahl;
in >> a.wohnort;
return in;
}
void ausgabe_tabelle(ostream& out, const vector<Adresse>& datenbank)
{
for(vector<Adresse>::const_iterator it=datenbank.begin(); it!=datenbank.end(); ++it)
out << *it << endl;
}
void lade_datenbank(vector<Adresse>& datenbank)
{
ifstream file("db.txt");
if( file.is_open() )
{
for(Adresse a; file>>a; datenbank.push_back(a));
}
}
void speichere_datenbank(const vector<Adresse>& datenbank)
{
ofstream file("db.txt");
if( file.is_open() )
{
ausgabe_tabelle(file, datenbank);
}
}
struct suche_datensatz_praedikat
{
string suche;
suche_datensatz_praedikat(const string& suche) : suche(suche) {}
bool operator()(const Adresse& a) const
{
if( a.hausnummer==suche || a.postleitzahl==suche || a.strasse==suche || a.wohnort==suche )
return true;
return false;
}
};
vector<Adresse>::const_iterator suche_datensatz(const vector<Adresse>& datenbank)
{
cout << endl << "Suchwort: ";
string suchwort;
cin >> suchwort;
return find_if( datenbank.begin(), datenbank.end(), suche_datensatz_praedikat(suchwort) );
}
int main()
{
vector<Adresse> datenbank;
lade_datenbank(datenbank);
char eingabe;
do
{
cout << "Daten auf Bildschirm ausgeben (1)" << '\n';
cout << "Datensatz eingeben (2)" << '\n';
cout << "Datensatz suchen (4)" << '\n';
cout << "Datensatz löschen (6)" << '\n';
cout << "Programm beenden (0)" << '\n';
cout << "Ihre Eingabe: ";
cin >> eingabe;
switch( eingabe )
{
case '1':
{
ausgabe_tabelle(cout,datenbank);
break;
}
case '2':
{
Adresse a;
cin >> a;
datenbank.push_back(a);
break;
}
case '4':
{
vector<Adresse>::const_iterator it = suche_datensatz(datenbank);
if( it!=datenbank.end() )
{
cout << endl << *it;
}
else
{
cout << "Kein Treffer!";
}
break;
}
case '6':
{
vector<Adresse>::const_iterator it = suche_datensatz(datenbank);
datenbank.erase(it);
break;
}
case '0':
{
speichere_datenbank(datenbank);
break;
}
}
}while( eingabe!='0' );
}
1. hab ich die aufgabe jetzt richtig verstanden und das so gut gelöst?
2. wie kann ich bei der plz auf 5 ziffern beschränken?
3. bei dem datensatz eingeben.. verwende ich cin >> a .... wo in meinem code wird a deklariert?
4. die obersten drei befehler verstehe ich nicht ganz mit dem struct mit dem i und o stream...
ps. man merkt vllt das den code den ich mir zusammen gesucht habe, selbst noch nciht ganz verstehe
Zuletzt bearbeitet: