Main
No notes
Syntax:
C++
#include <iostream> using namespace std; #include <string.h> #include <fstream> #include <stdlib.h> struct personen { char name[40]; char id[20]; }; struct personen person[800]; void verarbeitePerson(ifstream& dat); void druckePerson(int ordnungsnr1); void verarbeiteBeziehung(ifstream& dat); void druckeBeziehung (int ordnungsnr1, int ordnungsnr2); int liesPerson(); int liesBeziehung(); enum zustand {inOrdnungsnr1, inOrdnungsnr2, imNamen, inID, inURL, anzahl}; int main() { int ordnungsnr1; cout << "Geben Sie eine Ordnungsnummer ein: "; cin >> ordnungsnr1; liesPerson(); liesBeziehung(); } int liesPerson() { ifstream dateip; int ordnungsnr1; dateip.open("personen.txt"); if(!dateip) { cout << "Die Datei konnte nicht gefunden werden." << endl; return 1; } verarbeitePerson(dateip); druckePerson(ordnungsnr1); dateip.close(); } void verarbeitePerson(ifstream& dat) { char puffer[100], zeichen; int zaehler; enum zustand zustand; zustand=inOrdnungsnr1; zaehler=0; int ordnungsnr1=0; for (;;) { dat.get(zeichen); if (dat.eof()) break; switch(zeichen) { case '(': puffer[zaehler]='\0'; strcpy(person[ordnungsnr1].name,puffer); zustand=inID; zaehler=0; break; case ')': puffer[zaehler]='\0'; strcpy(person[ordnungsnr1].id,puffer); zustand=inURL; zaehler=0; break; case '"': cout << endl; puffer[zaehler]='\0'; if (zustand==inOrdnungsnr1) { puffer[zaehler]='\0'; zaehler=0; ordnungsnr1++; zustand=imNamen; } else if (zustand==inURL) { break; } break; case ' ': if (zustand==inOrdnungsnr1) break; else { puffer[zaehler]='\0'; zaehler=0; ordnungsnr1++; zustand=inOrdnungsnr1; break; } case '\n': cout << endl; zustand=inOrdnungsnr1; zaehler=0; break; default: puffer[zaehler]=zeichen; zaehler++; break; } } } void druckePerson(int ordnungsnr1) { cout << ordnungsnr1 << ":" << person[ordnungsnr1].name << "hat die Identifikation: " << person[ordnungsnr1].id << endl; } int liesBeziehung() { ifstream dateip; int ordnungsnr1, ordnungsnr2; dateip.open("beziehungen.txt"); if(!dateip) { cout << "Die Datei konnte nicht gefunden werden." << endl; return 1; } verarbeiteBeziehung(dateip); druckeBeziehung(ordnungsnr1, ordnungsnr2); dateip.close(); } void verarbeiteBeziehung(ifstream& dat) { char puffer[100], zeichen; int zaehler, ordnungsnr1, ordnungsnr2; enum zustand zustand; zustand=inOrdnungsnr1; zaehler=0; for (;;) { dat.get(zeichen); if (dat.eof()) break; switch(zeichen) { case ' ': if (zustand==inOrdnungsnr1){ zustand=inOrdnungsnr2; break; } else if (zustand==inOrdnungsnr2){ puffer[zaehler]='\0'; ordnungsnr1=atoi(puffer); zaehler=0; zustand=anzahl; break; } else if (zustand==anzahl){ puffer[zaehler]='\0'; ordnungsnr2=atoi(puffer); zaehler=0; zustand=inOrdnungsnr1; break; } case '\n': cout << endl; break; default: puffer[zaehler]=zeichen; zaehler++; break; } } } void druckeBeziehung(int ordnungsnr1, int ordnungsnr2) { cout << ordnungsnr1 << ":" << person[ordnungsnr1].name << "hat" << anzahl << "Patenkinder von " << person[ordnungsnr2].name << endl; }