#include #include #include #include "namesarchive.h" static Person persons[MAX_PERSONS]; static unsigned int numberOfPersons = 0; static int findPersonIdx(Person person); static void removePersonByIdx(unsigned int idx); static int comparePersons(const void *arg1, const void *arg2); // Fügt einen Namen hinzu. Im Fehlerfall (Archiv ist voll) soll 0, ansonsten 1 zurückgegeben werden. // Ist der angegebene Name länger als die zulässige Namenslänge, wird der Name abgeschnitten hinzugefügt. Rückgabe ist dann 1. int addPerson(const Person person) { if(numberOfPersons < MAX_PERSONS) { persons[numberOfPersons] = person; numberOfPersons++; return 1; } else return 0; } // Entfernt den angegebenen Namen. Gibt bei Erfolg 1 zurück, ansonsten 0 (Name konnte nicht gefunden werden). int removePerson(const Person person) { int personIdx = findPersonIdx(person); if(personIdx >= 0) { removePersonByIdx(personIdx); return 1; } else return 0; } int findPersonIdx(const Person person) { for(int i = 0; i < numberOfPersons; i++) { if(strcmp(persons[i].name, person.name) == 0 && persons[i].age == person.age) { return i; } } return -1; } void removePersonByIdx(unsigned int idx) { for(unsigned i = idx+1; i < numberOfPersons; i++) { persons[i] = persons[i+1]; } numberOfPersons--; } int comparePersons(const void *arg1, const void *arg2) { const Person person1 = *((const Person *)arg1); const Person person2 = *((const Person *)arg2); int nameResult = strcmp(person1.name, person2.name); if(nameResult == 0) { return (int)person1.age - (int)person2.age; } else return nameResult; } void sortPersons() { qsort(persons, numberOfPersons, sizeof(persons[0]), comparePersons); } void printPersons() { for(int i = 0; i < numberOfPersons; i++) { printf("%s: %u\n", persons[i].name, persons[i].age); } }