Add module for structs.
This commit is contained in:
1 parent
45336b083c
commit
a385f4d623
2 files changed
+118
No files matched your search
@@ -0,0 +1,91 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#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 compareNames(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;
|
||||
}
|
||||
|
||||
// Sortiert die Namen im Archiv aufsteigend.
|
||||
void sortPersons()
|
||||
{
|
||||
qsort(persons, numberOfPersons, sizeof(persons[0]), comparePersons);
|
||||
}
|
||||
|
||||
// Gibt die Namen zeilenweise aus.
|
||||
void printPersons()
|
||||
{
|
||||
for(int i = 0; i < numberOfPersons; i++)
|
||||
{
|
||||
printf("%s: %u\n", persons[i].name), persons[i].age;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
#ifndef NAMEARCHIVE_H
|
||||
#define NAMEARCHIVE_H
|
||||
|
||||
// Maximale Namenslänge
|
||||
#define MAX_NAME_LEN 10
|
||||
|
||||
// Maximale Anzahl an Namen
|
||||
#define MAX_PERSONS 100
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char name[MAX_NAME_LEN];
|
||||
unsigned int age;
|
||||
} Person;
|
||||
|
||||
// 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);
|
||||
|
||||
int removeName(const Person person);
|
||||
|
||||
void sortPersons();
|
||||
// Gibt die Namen zeilenweise aus.
|
||||
void printPersons();
|
||||
|
||||
|
||||
#endif
|
||||
Reference in new issue
Block a user