add pdf
@@ -1,254 +0,0 @@
|
||||
# 06 - Personen Verwaltung – Linked List
|
||||
___
|
||||
|
||||

|
||||
|
||||
___
|
||||
|
||||
## 1. Übersicht
|
||||
In diesem Praktikum schreiben Sie eine einfache Personenverwaltung. Dabei werden Sie etliche Elemente von C anwenden:
|
||||
* Header Files selber schreiben, inklusive Include Guard
|
||||
* Typen definieren
|
||||
* Funktionen mit `by value` und `by reference` Parametern deklarieren und definieren
|
||||
* einfache Variablen, Pointer Variablen, struct Variablen und Array Variablen benutzen
|
||||
* Strukturen im Speicher dynamisch allozieren und freigeben
|
||||
* I/O und String Funktionen aus der Standard Library anwenden
|
||||
* Anwender Eingaben verarbeiten
|
||||
* Fehlerbehandlung
|
||||
|
||||
___
|
||||
|
||||
## 2. Lernziele
|
||||
|
||||
In diesem Praktikum wenden Sie viele der bisher gelernten C Elemente an.
|
||||
* Sie können anhand dieser Beschreibung ein vollständiges C Programm schreiben.
|
||||
* Sie können Unit Tests schreiben welche die wesentlichen Funktionen des Programms individuell testen.
|
||||
*
|
||||
Die Bewertung dieses Praktikums ist am Ende angegeben.
|
||||
|
||||
Erweitern Sie die vorgegebenen Code Gerüste, welche im `git` Repository `snp-lab-code` verfügbar sind.
|
||||
|
||||
|
||||
___
|
||||
|
||||
## 3. Personenverwaltung
|
||||
___
|
||||
|
||||
|
||||
### 3.1 Programmfunktion
|
||||
Das Programm soll in einer Schleife dem Benutzer jeweils folgende Auswahl bieten, wovon eine Aktion mit Eingabe des entsprechenden Buchstabens ausgelöst wird:
|
||||
|
||||
**I**(nsert), **R**(emove), **S**(how), **C**(lear), **E**(nd):
|
||||
* **Insert**: der Benutzer wird aufgefordert, eine Person einzugeben
|
||||
* **Remove**: der Benutzer wird aufgefordert, die Daten einer zu löschenden Person einzu-geben
|
||||
* **Show**: eine komplette Liste aller gespeicherten Personen wird in alphabetischer Rei-henfolge ausgegeben
|
||||
* **Clear**: alle Personen werden gelöscht
|
||||
* **End**: das Programm wird beendet
|
||||
|
||||
___
|
||||
|
||||
### 3.2 Designvorgaben
|
||||
|
||||
**Verkettete Liste**
|
||||
Da zur Kompilierzeit nicht bekannt ist, ob 10 oder 10'000 Personen eingegeben werden, wäre es keine gute Idee, im Programm einen statischen Array mit z.B. 10'000 Personen-Einträgen zu allozieren. Dies wäre ineffizient und umständlich beim sortierten Einfügen von Personen. In solchen Situationen arbeitet man deshalb mit dynamischen Datenstrukturen, die zur Laufzeit beliebig (solange Speicher vorhanden ist) wachsen und wieder schrumpfen können. Eine sehr populäre dynamische Datenstruktur ist die **verkettete Liste** und genau die werden wir in diesem Praktikum verwenden.
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
Abbildung 1: Zyklisch verkettete Liste
|
||||
|
||||
|
||||
Eine verkettete Liste bedeutet, dass ein Knoten der verketten Liste einen Datensatz einer Person speichert und zusätzlich einen Pointer auf den nächsten Knoten in der Liste aufweist (siehe Abbildung 1). In dieser Pointer Variablen (`next` in der `node_t` Struktur unten) steht also einfach die Adresse des nächsten Knotens.
|
||||
|
||||
Die leere Liste besteht aus einem einzelnen Element, welches keine spezifische Person abspeichert und welches auf sich selbst zeigt (Abbildung 1 a). Dieses Element ist der Einstiegspunkt der Liste (auch Anker oder Wurzel genannt) und ist das einzige Element, das Sie im Programm direkt kennen und einer Variablen zuweisen. Dieses Element können Sie statisch allozieren (z.B. `node_t anchor`;, siehe Details weiter unten), denn es existiert während der gesamten Ausführungszeit. Alle anderen Elemente erreichen Sie ausgehend vom Anker, indem Sie einmal, den Pointern folgend, im Kreis herum gehen. Abbildung 1 b zeigt die Liste nach dem Einfügen der Person `Max Mueller, 40` Jahre. Nach dem Einfügen von zwei weiteren Personen sieht die Datenstruktur aus wie in Abbildung 1 c. Das Entfernen der Person `Arno Bosshard` führt zu Abbildung 1 d.
|
||||
|
||||
Eine Person kann **zugefügt** werden, indem dynamisch ein neuer Knoten erzeugt wird und dieser in die verkettete Liste eingefügt wird. Beim Einfügen müssen die Adressen der Knoten so den Pointern zugewiesen werden, dass die Kette intakt bleibt.
|
||||
|
||||
Ein Knoten wird **entfernt**, indem der entsprechende Knoten aus der Verkettung herausgelöst wird (`next` des Vorgängerknotens soll neu auf `next` des herauszulösenden Knotens zeigen) und dann der Speicher des entsprechenden Knotens freigegeben wird.
|
||||
|
||||
**Personen und Knoten Records**
|
||||
|
||||
Die für je eine Person zu speichernden Daten sollen in folgendem C `struct` zusammengefasst sein.
|
||||
|
||||
```C
|
||||
#define NAME_LEN 20
|
||||
|
||||
typedef struct {
|
||||
char name[NAME_LEN];
|
||||
char first_name[NAME_LEN];
|
||||
unsigned int age;
|
||||
} person_t;
|
||||
```
|
||||
|
||||
Jeder Knoten der verketteten Liste soll aus folgendem C `struct` bestehen.
|
||||
|
||||
```C
|
||||
typedef struct node {
|
||||
person_t content; // in diesem Knoten gespeicherte Person
|
||||
struct node *next; // Pointer auf den nächsten Knoten in der Liste
|
||||
} node_t;
|
||||
```
|
||||
|
||||
**Vorschlag: zyklisch verkettete Liste**
|
||||
|
||||
Erkennen des Endes der Liste: bei der zyklisch verketteten Liste zeigt das letzte Element wie-der auf den Anker, die Liste bildet also einen Kreis. Dies ist in Abbildung 1 so abgebildet.
|
||||
|
||||
Alternativ könnte man das Ende erkennbar machen, indem die Kette anstelle von zyklisch, mit einem NULL Pointer endet.
|
||||
|
||||
Die Wahl ist ihnen überlassen ob sie die eine oder andere Art der End-Erkennung implementieren. In der Beschreibung wird angenommen, dass es sich um eine zyklisch verkettete Liste handelt.
|
||||
|
||||
**Sortiertes Einfügen**
|
||||
|
||||
Die Personen Records sollen sortiert in die Liste eingefügt werden. Dies bedeutet, dass vom Anker her gesucht werden soll, bis der erste Knoten gefunden wurde dessen Nachfolgeknoten entweder „grösser“ ist als der einzufügende Knoten, oder wo das Ende der Liste erreicht ist. Die Ordnung (grösser, gleich, kleiner) soll so definiert sein:
|
||||
|
||||
```C
|
||||
// if (p1 > p2) { ... }
|
||||
if (person_compare(&p1, &p2) > 0) { ... }
|
||||
/**
|
||||
* @brief Compares two persons in this sequence: 1st=name, 2nd=first_name, 3rd=age
|
||||
* @param a [IN] const reference to 1st person in the comparison
|
||||
* @param b [IN] const reference to 2nd person in the comparison
|
||||
* @return =0 if all record fields are the same
|
||||
* >0 if all previous fields are the same, but for this field, a is greater
|
||||
* <0 if all previous fields are the same, but for this field, b is greater
|
||||
* @remark strncmp() is used for producing the result of string field comparisons
|
||||
* @remark a->age – b->age is used for producing the result of age comparison
|
||||
*/
|
||||
int person_compare(const person_t *a, const person_t *b);
|
||||
```
|
||||
|
||||
**Eingabe**
|
||||
|
||||
**Fehlerhafte Wahl der Operation** in der Hauptschleife soll gemeldet werden, ansonsten aber ignoriert werden.
|
||||
|
||||
**Fehlerhafte Eingabe der Personenangaben** sollen gemeldet werden und die gesamte Operation (z.B. Insert) verworfen werden.
|
||||
|
||||
Zu prüfende Fehler bei Personeneingaben:
|
||||
* für die Namen
|
||||
* zu lange Namen
|
||||
* für das Alter
|
||||
* keine Zahl
|
||||
* Duplikat
|
||||
* derselbe Record soll nicht doppelt in der Liste vorkommen
|
||||
|
||||
Weitergehende Prüfungen sind nicht erwartet.
|
||||
|
||||
**Zu beachten:** bei fehlerhafter Eingabe darf kein „Memory Leak“ entstehen, d.h. potentiell auf dem Heap allozierter Speicher muss im Fehlerfall freigegeben werden.
|
||||
|
||||
|
||||
___
|
||||
|
||||
### 3.3 Bestehender Programmrahmen
|
||||
|
||||
Der Programmrahmen besteht aus den unten aufgelisteten Files. Es sollen weitere Module in `src` hinzugefügt werden und die bestehenden Files ergänzt werden gemäss den Aufgaben.
|
||||
|
||||
| | |
|
||||
| :-- | :-- |
|
||||
| Makefile | -> **zu ergänzen** mit neuen Modulen |
|
||||
| tests/tests.c | -> **zu ergänzen** gemäss Aufgaben (implementieren von Unit Tests) |
|
||||
| src/main.c | -> **zu ergänzen** gemäss Aufgaben (Hauptprogramm) |
|
||||
|
||||
___
|
||||
|
||||
## 4. Aufgabe 1: Modularisierung – API und Implementation main.c
|
||||
Kreieren Sie folgende Files in `src` und implementieren Sie `main.c` basierend auf dem unten von Ihnen gegebenen API.
|
||||
|
||||
|
||||
**File person.h**
|
||||
|
||||
|
||||
Typ Definitionen:
|
||||
```C
|
||||
person_t... // siehe Beschreibung oben
|
||||
```
|
||||
|
||||
Funktionsdeklarationen:
|
||||
```C
|
||||
// siehe Beschreibung oben
|
||||
int person_compare(const person_t *a, const person_t *b);
|
||||
```
|
||||
|
||||
* gegebenenfalls weitere Funktionen für die Bearbeitung von Personen
|
||||
|
||||
|
||||
|
||||
|
||||
**File list.h**
|
||||
|
||||
Typ Definitionen:
|
||||
```C
|
||||
person_t... // siehe Beschreibung oben
|
||||
```
|
||||
|
||||
Funktionsdeklarationen:
|
||||
* Funktionen für `insert`, `remove`, `clear` Operationen auf der Liste
|
||||
|
||||
___
|
||||
|
||||
Das Hauptprogramm soll die Eingabeschleife implementieren und die obigen Funktionen (wo angebracht) aufrufen.
|
||||
|
||||
___
|
||||
|
||||
## 5. Aufgabe 2: Implementierung von person.c und list.c
|
||||
|
||||
Fügen Sie die beiden Implementationsfiles `person.c` und `list.c` zu `src`. Fügen Sie die beiden Module im `Makefile` zu der vorgegebenen Variablen `MODULES` hinzu, so dass sie beim `make` Aufruf auch berücksichtigt werden.
|
||||
|
||||
___
|
||||
|
||||
### 5.1 Teilaufgabe: Implementierung von person.c
|
||||
Implementieren Sie die Funktionen aus `person.h`.
|
||||
|
||||
Falls nötig, stellen Sie weitere statische Hilfsfunktionen in `person.c` zur Verfügung.
|
||||
|
||||
___
|
||||
|
||||
### 5.2 Teilaufgabe: Implementierung von list.c
|
||||
|
||||
Implementieren Sie die Funktionen aus `list.h`.
|
||||
|
||||
Falls nötig, stellen Sie weitere statische Hilfsfunktionen in `list.c` zur Verfügung.
|
||||
|
||||
___
|
||||
|
||||
## 6. Aufgabe 3: Unit Tests
|
||||
|
||||
Schreiben Sie Unit Tests für mindestens die folgenden Funktionen
|
||||
|
||||
* `person.h:`
|
||||
* `person_compare`
|
||||
* `list.h:`
|
||||
* `list_insert`
|
||||
* `list_remove`
|
||||
* `list_clear`
|
||||
|
||||
Es existieren in `tests/tests.c` schon vier Test Rahmen für diese Test Cases.
|
||||
|
||||
In diese Test Cases sollen die entsprechenden Funktionen unter verschiedenen Bedingungen isoliert aufgerufen werden und deren Verhalten überprüft werden.
|
||||
|
||||
Verwenden Sie für die Überprüfung die CUnit `CU_ASSERT_...` Makros.
|
||||
|
||||
Siehe dazu auch `man CUnit`.
|
||||
|
||||
Wenn die obigen Teilaufgaben erfolgreich umgesetzt sind, laufen die Tests ohne Fehler durch.
|
||||
|
||||
|
||||
___
|
||||
|
||||
## 7. Bewertung
|
||||
|
||||
| Aufgabe | Kriterium | Punkte |
|
||||
| :-- | :-- | :-- |
|
||||
| | Sie können das funktionierende Programm inklusive funktionierende Tests demonstrieren und erklären. | |
|
||||
| 1 | API von list.h und person.h plus die Implementation von main.c | 2 |
|
||||
| 2 | Teilaufgabe: person.c | 2 |
|
||||
| 2 | Teilaufgabe: list.c | 2 |
|
||||
| 3 | Unit Tests | 2 |
|
||||
|
||||
___
|
||||
Version: 11.01.2022
|
||||
|
Before Width: | Height: | Size: 829 B |
@@ -1,42 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN'
|
||||
'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'>
|
||||
<svg fill-opacity="1" xmlns:xlink="http://www.w3.org/1999/xlink" color-rendering="auto" color-interpolation="auto" text-rendering="auto" stroke="black" stroke-linecap="square" width="210" stroke-miterlimit="10" shape-rendering="auto" stroke-opacity="1" fill="black" stroke-dasharray="none" font-weight="normal" stroke-width="1" viewBox="90 400 210 160" height="160" xmlns="http://www.w3.org/2000/svg" font-family="'Dialog'" font-style="normal" stroke-linejoin="miter" font-size="12px" stroke-dashoffset="0" image-rendering="auto"
|
||||
><!--Generated by the Batik Graphics2D SVG Generator--><defs id="genericDefs"
|
||||
/><g
|
||||
><defs id="defs1"
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath1"
|
||||
><path d="M0 0 L2147483647 0 L2147483647 2147483647 L0 2147483647 L0 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath2"
|
||||
><path d="M0 0 L0 30 L40 30 L40 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath3"
|
||||
><path d="M0 0 L0 60 L100 60 L100 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath4"
|
||||
><path d="M0 0 L0 80 L170 80 L170 0 Z"
|
||||
/></clipPath
|
||||
></defs
|
||||
><g font-family="sans-serif" font-size="14px" transform="translate(180,510)"
|
||||
><text x="5" xml:space="preserve" y="17.9688" clip-path="url(#clipPath2)" stroke="none"
|
||||
>a)</text
|
||||
></g
|
||||
><g fill="rgb(68,68,68)" fill-opacity="0.4902" transform="translate(140,450)" stroke-opacity="0.4902" stroke="rgb(68,68,68)"
|
||||
><rect x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath3)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(140,450)"
|
||||
><rect fill="none" x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath3)"
|
||||
/></g
|
||||
><g transform="translate(110,420)"
|
||||
><path fill="none" d="M29.5 60.5 L10.5 60.5" clip-path="url(#clipPath4)"
|
||||
/><path fill="none" d="M10.5 60.5 L10.5 10.5" clip-path="url(#clipPath4)"
|
||||
/><path fill="none" d="M10.5 10.5 L150.5 10.5" clip-path="url(#clipPath4)"
|
||||
/><path fill="none" d="M150.5 10.5 L150.5 60.5" clip-path="url(#clipPath4)"
|
||||
/><path fill="none" d="M150.5 60.5 L130.5 60.5" clip-path="url(#clipPath4)"
|
||||
/><path d="M18.7417 54 L30 60.5 L18.7417 67 Z" clip-path="url(#clipPath4)" stroke="none"
|
||||
/><path fill="none" d="M18.7417 54 L30 60.5 L18.7417 67 Z" clip-path="url(#clipPath4)"
|
||||
/></g
|
||||
></g
|
||||
></svg
|
||||
>
|
||||
|
Before Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
@@ -1,59 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN'
|
||||
'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'>
|
||||
<svg fill-opacity="1" xmlns:xlink="http://www.w3.org/1999/xlink" color-rendering="auto" color-interpolation="auto" text-rendering="auto" stroke="black" stroke-linecap="square" width="210" stroke-miterlimit="10" shape-rendering="auto" stroke-opacity="1" fill="black" stroke-dasharray="none" font-weight="normal" stroke-width="1" viewBox="320 420 210 220" height="220" xmlns="http://www.w3.org/2000/svg" font-family="'Dialog'" font-style="normal" stroke-linejoin="miter" font-size="12px" stroke-dashoffset="0" image-rendering="auto"
|
||||
><!--Generated by the Batik Graphics2D SVG Generator--><defs id="genericDefs"
|
||||
/><g
|
||||
><defs id="defs1"
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath1"
|
||||
><path d="M0 0 L2147483647 0 L2147483647 2147483647 L0 2147483647 L0 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath2"
|
||||
><path d="M0 0 L0 30 L40 30 L40 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath3"
|
||||
><path d="M0 0 L0 60 L100 60 L100 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath4"
|
||||
><path d="M0 0 L0 120 L50 120 L50 0 Z"
|
||||
/></clipPath
|
||||
></defs
|
||||
><g font-family="sans-serif" font-size="14px" transform="translate(410,590)"
|
||||
><text x="5" xml:space="preserve" y="17.9688" clip-path="url(#clipPath2)" stroke="none"
|
||||
>b)</text
|
||||
></g
|
||||
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(370,440)" stroke-opacity="0" stroke="rgb(255,255,255)"
|
||||
><rect x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath3)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(370,440)"
|
||||
><rect fill="none" x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath3)"
|
||||
/><text x="5" font-size="14px" y="19.0156" clip-path="url(#clipPath3)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Mueller</text
|
||||
><text x="5" font-size="14px" y="34.9844" clip-path="url(#clipPath3)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Max</text
|
||||
><text x="5" font-size="14px" y="50.9531" clip-path="url(#clipPath3)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>40</text
|
||||
></g
|
||||
><g fill="rgb(68,68,68)" fill-opacity="0.4902" transform="translate(370,530)" stroke-opacity="0.4902" stroke="rgb(68,68,68)"
|
||||
><rect x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath3)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(370,530)"
|
||||
><rect fill="none" x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath3)"
|
||||
/></g
|
||||
><g transform="translate(340,460)"
|
||||
><path fill="none" d="M29.5 100.5 L10.5 100.5" clip-path="url(#clipPath4)"
|
||||
/><path fill="none" d="M10.5 100.5 L10.5 10.5" clip-path="url(#clipPath4)"
|
||||
/><path fill="none" d="M10.5 10.5 L30.5 10.5" clip-path="url(#clipPath4)"
|
||||
/><path d="M18.7417 94 L30 100.5 L18.7417 107 Z" clip-path="url(#clipPath4)" stroke="none"
|
||||
/><path fill="none" d="M18.7417 94 L30 100.5 L18.7417 107 Z" clip-path="url(#clipPath4)"
|
||||
/></g
|
||||
><g transform="translate(460,460)"
|
||||
><path fill="none" d="M11.5 10.5 L30.5 10.5" clip-path="url(#clipPath4)"
|
||||
/><path fill="none" d="M30.5 10.5 L30.5 100.5" clip-path="url(#clipPath4)"
|
||||
/><path fill="none" d="M30.5 100.5 L10.5 100.5" clip-path="url(#clipPath4)"
|
||||
/><path d="M22.2583 17 L11 10.5 L22.2583 4 Z" clip-path="url(#clipPath4)" stroke="none"
|
||||
/><path fill="none" d="M22.2583 17 L11 10.5 L22.2583 4 Z" clip-path="url(#clipPath4)"
|
||||
/></g
|
||||
></g
|
||||
></svg
|
||||
>
|
||||
|
Before Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 4.1 KiB |
@@ -1,89 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN'
|
||||
'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'>
|
||||
<svg fill-opacity="1" xmlns:xlink="http://www.w3.org/1999/xlink" color-rendering="auto" color-interpolation="auto" text-rendering="auto" stroke="black" stroke-linecap="square" width="380" stroke-miterlimit="10" shape-rendering="auto" stroke-opacity="1" fill="black" stroke-dasharray="none" font-weight="normal" stroke-width="1" viewBox="70 580 380 270" height="270" xmlns="http://www.w3.org/2000/svg" font-family="'Dialog'" font-style="normal" stroke-linejoin="miter" font-size="12px" stroke-dashoffset="0" image-rendering="auto"
|
||||
><!--Generated by the Batik Graphics2D SVG Generator--><defs id="genericDefs"
|
||||
/><g
|
||||
><defs id="defs1"
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath1"
|
||||
><path d="M0 0 L2147483647 0 L2147483647 2147483647 L0 2147483647 L0 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath2"
|
||||
><path d="M0 0 L0 60 L100 60 L100 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath3"
|
||||
><path d="M0 0 L0 30 L40 30 L40 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath4"
|
||||
><path d="M0 0 L0 70 L100 70 L100 0 Z"
|
||||
/></clipPath
|
||||
></defs
|
||||
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(330,670)" stroke-opacity="0" stroke="rgb(255,255,255)"
|
||||
><rect x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath2)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(330,670)"
|
||||
><rect fill="none" x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath2)"
|
||||
/><text x="5" font-size="14px" y="19.0156" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Bosshard </text
|
||||
><text x="5" font-size="14px" y="34.9844" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Arno</text
|
||||
><text x="5" font-size="14px" y="50.9531" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>62</text
|
||||
></g
|
||||
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(210,600)" stroke-opacity="0" stroke="rgb(255,255,255)"
|
||||
><rect x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath2)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(210,600)"
|
||||
><rect fill="none" x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath2)"
|
||||
/><text x="5" font-size="14px" y="19.0156" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Mueller</text
|
||||
><text x="5" font-size="14px" y="34.9844" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Max</text
|
||||
><text x="5" font-size="14px" y="50.9531" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>40</text
|
||||
></g
|
||||
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(90,670)" stroke-opacity="0" stroke="rgb(255,255,255)"
|
||||
><rect x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath2)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(90,670)"
|
||||
><rect fill="none" x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath2)"
|
||||
/><text x="5" font-size="14px" y="19.0156" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Schmid </text
|
||||
><text x="5" font-size="14px" y="34.9844" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Anna </text
|
||||
><text x="5" font-size="14px" y="50.9531" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>32</text
|
||||
></g
|
||||
><g font-family="sans-serif" font-size="14px" transform="translate(250,800)"
|
||||
><text x="5" xml:space="preserve" y="17.9688" clip-path="url(#clipPath3)" stroke="none"
|
||||
>c)</text
|
||||
></g
|
||||
><g fill="rgb(68,68,68)" fill-opacity="0.4902" transform="translate(210,740)" stroke-opacity="0.4902" stroke="rgb(68,68,68)"
|
||||
><rect x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath2)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(210,740)"
|
||||
><rect fill="none" x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath2)"
|
||||
/></g
|
||||
><g transform="translate(130,720)"
|
||||
><path fill="none" d="M79.6318 50.0039 L10.5 10.5" clip-path="url(#clipPath4)"
|
||||
/><path d="M73.5158 39.0227 L80.0659 50.2519 L67.066 50.3098 Z" clip-path="url(#clipPath4)" stroke="none"
|
||||
/><path fill="none" d="M73.5158 39.0227 L80.0659 50.2519 L67.066 50.3098 Z" clip-path="url(#clipPath4)"
|
||||
/></g
|
||||
><g transform="translate(130,620)"
|
||||
><path fill="none" d="M11.3682 50.0039 L80.5 10.5" clip-path="url(#clipPath4)"
|
||||
/><path d="M23.934 50.3098 L10.9341 50.2519 L17.4842 39.0227 Z" clip-path="url(#clipPath4)" stroke="none"
|
||||
/><path fill="none" d="M23.934 50.3098 L10.9341 50.2519 L17.4842 39.0227 Z" clip-path="url(#clipPath4)"
|
||||
/></g
|
||||
><g transform="translate(300,620)"
|
||||
><path fill="none" d="M11.3682 10.9961 L80.5 50.5" clip-path="url(#clipPath4)"
|
||||
/><path d="M17.4842 21.9773 L10.9341 10.7481 L23.934 10.6902 Z" clip-path="url(#clipPath4)" stroke="none"
|
||||
/><path fill="none" d="M17.4842 21.9773 L10.9341 10.7481 L23.934 10.6902 Z" clip-path="url(#clipPath4)"
|
||||
/></g
|
||||
><g transform="translate(300,720)"
|
||||
><path fill="none" d="M79.6318 10.9961 L10.5 50.5" clip-path="url(#clipPath4)"
|
||||
/><path d="M67.066 10.6902 L80.0659 10.7481 L73.5158 21.9773 Z" clip-path="url(#clipPath4)" stroke="none"
|
||||
/><path fill="none" d="M67.066 10.6902 L80.0659 10.7481 L73.5158 21.9773 Z" clip-path="url(#clipPath4)"
|
||||
/></g
|
||||
></g
|
||||
></svg
|
||||
>
|
||||
|
Before Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 3.3 KiB |
@@ -1,78 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN'
|
||||
'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'>
|
||||
<svg fill-opacity="1" xmlns:xlink="http://www.w3.org/1999/xlink" color-rendering="auto" color-interpolation="auto" text-rendering="auto" stroke="black" stroke-linecap="square" width="380" stroke-miterlimit="10" shape-rendering="auto" stroke-opacity="1" fill="black" stroke-dasharray="none" font-weight="normal" stroke-width="1" viewBox="300 830 380 210" height="210" xmlns="http://www.w3.org/2000/svg" font-family="'Dialog'" font-style="normal" stroke-linejoin="miter" font-size="12px" stroke-dashoffset="0" image-rendering="auto"
|
||||
><!--Generated by the Batik Graphics2D SVG Generator--><defs id="genericDefs"
|
||||
/><g
|
||||
><defs id="defs1"
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath1"
|
||||
><path d="M0 0 L2147483647 0 L2147483647 2147483647 L0 2147483647 L0 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath2"
|
||||
><path d="M0 0 L0 60 L100 60 L100 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath3"
|
||||
><path d="M0 0 L0 30 L40 30 L40 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath4"
|
||||
><path d="M0 0 L0 30 L170 30 L170 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath5"
|
||||
><path d="M0 0 L0 80 L110 80 L110 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath6"
|
||||
><path d="M0 0 L0 80 L100 80 L100 0 Z"
|
||||
/></clipPath
|
||||
></defs
|
||||
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(560,850)" stroke-opacity="0" stroke="rgb(255,255,255)"
|
||||
><rect x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath2)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(560,850)"
|
||||
><rect fill="none" x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath2)"
|
||||
/><text x="5" font-size="14px" y="19.0156" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Mueller</text
|
||||
><text x="5" font-size="14px" y="34.9844" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Max</text
|
||||
><text x="5" font-size="14px" y="50.9531" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>40</text
|
||||
></g
|
||||
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(320,850)" stroke-opacity="0" stroke="rgb(255,255,255)"
|
||||
><rect x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath2)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(320,850)"
|
||||
><rect fill="none" x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath2)"
|
||||
/><text x="5" font-size="14px" y="19.0156" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Schmid </text
|
||||
><text x="5" font-size="14px" y="34.9844" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Anna </text
|
||||
><text x="5" font-size="14px" y="50.9531" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>32</text
|
||||
></g
|
||||
><g font-family="sans-serif" font-size="14px" transform="translate(480,990)"
|
||||
><text x="5" xml:space="preserve" y="17.9688" clip-path="url(#clipPath3)" stroke="none"
|
||||
>d)</text
|
||||
></g
|
||||
><g fill="rgb(68,68,68)" fill-opacity="0.4902" transform="translate(440,930)" stroke-opacity="0.4902" stroke="rgb(68,68,68)"
|
||||
><rect x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath2)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(440,930)"
|
||||
><rect fill="none" x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath2)"
|
||||
/></g
|
||||
><g transform="translate(410,870)"
|
||||
><path fill="none" d="M11.5 10.5 L150.5 10.5" clip-path="url(#clipPath4)"
|
||||
/><path d="M22.2583 17 L11 10.5 L22.2583 4 Z" clip-path="url(#clipPath4)" stroke="none"
|
||||
/><path fill="none" d="M22.2583 17 L11 10.5 L22.2583 4 Z" clip-path="url(#clipPath4)"
|
||||
/></g
|
||||
><g transform="translate(350,900)"
|
||||
><path fill="none" d="M89.652 59.97 L10.5 10.5" clip-path="url(#clipPath5)"
|
||||
/><path d="M83.9739 48.7561 L90.076 60.235 L77.084 59.7801 Z" clip-path="url(#clipPath5)" stroke="none"
|
||||
/><path fill="none" d="M83.9739 48.7561 L90.076 60.235 L77.084 59.7801 Z" clip-path="url(#clipPath5)"
|
||||
/></g
|
||||
><g transform="translate(530,900)"
|
||||
><path fill="none" d="M79.6863 11.0812 L10.5 60.5" clip-path="url(#clipPath6)"
|
||||
/><path d="M67.1538 12.0451 L80.0931 10.7906 L74.7099 22.6237 Z" clip-path="url(#clipPath6)" stroke="none"
|
||||
/><path fill="none" d="M67.1538 12.0451 L80.0931 10.7906 L74.7099 22.6237 Z" clip-path="url(#clipPath6)"
|
||||
/></g
|
||||
></g
|
||||
></svg
|
||||
>
|
||||
|
Before Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 2.9 KiB |
@@ -1,68 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN'
|
||||
'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'>
|
||||
<svg fill-opacity="1" xmlns:xlink="http://www.w3.org/1999/xlink" color-rendering="auto" color-interpolation="auto" text-rendering="auto" stroke="black" stroke-linecap="square" width="300" stroke-miterlimit="10" shape-rendering="auto" stroke-opacity="1" fill="black" stroke-dasharray="none" font-weight="normal" stroke-width="1" viewBox="110 80 300 200" height="200" xmlns="http://www.w3.org/2000/svg" font-family="'Dialog'" font-style="normal" stroke-linejoin="miter" font-size="12px" stroke-dashoffset="0" image-rendering="auto"
|
||||
><!--Generated by the Batik Graphics2D SVG Generator--><defs id="genericDefs"
|
||||
/><g
|
||||
><defs id="defs1"
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath1"
|
||||
><path d="M0 0 L2147483647 0 L2147483647 2147483647 L0 2147483647 L0 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath2"
|
||||
><path d="M0 0 L0 60 L100 60 L100 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath3"
|
||||
><path d="M0 0 L0 70 L60 70 L60 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath4"
|
||||
><path d="M0 0 L0 30 L90 30 L90 0 Z"
|
||||
/></clipPath
|
||||
></defs
|
||||
><g fill="rgb(68,68,68)" fill-opacity="0.4902" transform="translate(210,200)" stroke-opacity="0.4902" stroke="rgb(68,68,68)"
|
||||
><rect x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath2)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(210,200)"
|
||||
><rect fill="none" x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath2)"
|
||||
/></g
|
||||
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(290,100)" stroke-opacity="0" stroke="rgb(255,255,255)"
|
||||
><rect x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath2)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(290,100)"
|
||||
><rect fill="none" x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath2)"
|
||||
/><text x="5" font-size="14px" y="19.0156" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Mueller</text
|
||||
><text x="5" font-size="14px" y="34.9844" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Max</text
|
||||
><text x="5" font-size="14px" y="50.9531" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>40</text
|
||||
></g
|
||||
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(130,100)" stroke-opacity="0" stroke="rgb(255,255,255)"
|
||||
><rect x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath2)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(130,100)"
|
||||
><rect fill="none" x="0.5" width="98.5" height="58.5" y="0.5" clip-path="url(#clipPath2)"
|
||||
/><text x="5" font-size="14px" y="19.0156" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Schmid </text
|
||||
><text x="5" font-size="14px" y="34.9844" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Anna </text
|
||||
><text x="5" font-size="14px" y="50.9531" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>32</text
|
||||
></g
|
||||
><g transform="translate(300,150)"
|
||||
><path fill="none" d="M39.9 11.3 L10.5 50.5" clip-path="url(#clipPath3)"
|
||||
/><path d="M28.245 16.0067 L40.2 10.9 L38.645 23.8067 Z" clip-path="url(#clipPath3)" stroke="none"
|
||||
/><path fill="none" d="M28.245 16.0067 L40.2 10.9 L38.645 23.8067 Z" clip-path="url(#clipPath3)"
|
||||
/></g
|
||||
><g transform="translate(170,150)"
|
||||
><path fill="none" d="M39.9 49.7 L10.5 10.5" clip-path="url(#clipPath3)"
|
||||
/><path d="M38.645 37.1933 L40.2 50.1 L28.245 44.9933 Z" clip-path="url(#clipPath3)" stroke="none"
|
||||
/><path fill="none" d="M38.645 37.1933 L40.2 50.1 L28.245 44.9933 Z" clip-path="url(#clipPath3)"
|
||||
/></g
|
||||
><g transform="translate(220,120)"
|
||||
><path fill="none" d="M11.5 10.5 L70.5 10.5" clip-path="url(#clipPath4)"
|
||||
/><path d="M22.2583 17 L11 10.5 L22.2583 4 Z" clip-path="url(#clipPath4)" stroke="none"
|
||||
/><path fill="none" d="M22.2583 17 L11 10.5 L22.2583 4 Z" clip-path="url(#clipPath4)"
|
||||
/></g
|
||||
></g
|
||||
></svg
|
||||
>
|
||||
|
Before Width: | Height: | Size: 4.3 KiB |
@@ -1,386 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<diagram program="umlet" version="14.3.0">
|
||||
<zoom_level>10</zoom_level>
|
||||
<element>
|
||||
<id>UMLObject</id>
|
||||
<coordinates>
|
||||
<x>120</x>
|
||||
<y>80</y>
|
||||
<w>100</w>
|
||||
<h>60</h>
|
||||
</coordinates>
|
||||
<panel_attributes>Schmid
|
||||
Anna
|
||||
32
|
||||
halign=left</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>Relation</id>
|
||||
<coordinates>
|
||||
<x>210</x>
|
||||
<y>100</y>
|
||||
<w>90</w>
|
||||
<h>30</h>
|
||||
</coordinates>
|
||||
<panel_attributes>lt=<<<-</panel_attributes>
|
||||
<additional_attributes>10.0;10.0;70.0;10.0</additional_attributes>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLObject</id>
|
||||
<coordinates>
|
||||
<x>280</x>
|
||||
<y>80</y>
|
||||
<w>100</w>
|
||||
<h>60</h>
|
||||
</coordinates>
|
||||
<panel_attributes>Mueller
|
||||
Max
|
||||
40
|
||||
halign=left</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLObject</id>
|
||||
<coordinates>
|
||||
<x>200</x>
|
||||
<y>180</y>
|
||||
<w>100</w>
|
||||
<h>60</h>
|
||||
</coordinates>
|
||||
<panel_attributes>
|
||||
halign=left
|
||||
bg=#444444</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>Relation</id>
|
||||
<coordinates>
|
||||
<x>160</x>
|
||||
<y>130</y>
|
||||
<w>60</w>
|
||||
<h>70</h>
|
||||
</coordinates>
|
||||
<panel_attributes>lt=<<<-</panel_attributes>
|
||||
<additional_attributes>40.0;50.0;10.0;10.0</additional_attributes>
|
||||
</element>
|
||||
<element>
|
||||
<id>Relation</id>
|
||||
<coordinates>
|
||||
<x>290</x>
|
||||
<y>130</y>
|
||||
<w>60</w>
|
||||
<h>70</h>
|
||||
</coordinates>
|
||||
<panel_attributes>lt=<<<-</panel_attributes>
|
||||
<additional_attributes>40.0;10.0;10.0;50.0</additional_attributes>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLObject</id>
|
||||
<coordinates>
|
||||
<x>320</x>
|
||||
<y>320</y>
|
||||
<w>100</w>
|
||||
<h>60</h>
|
||||
</coordinates>
|
||||
<panel_attributes>Bosshard
|
||||
Arno
|
||||
62
|
||||
halign=left</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLObject</id>
|
||||
<coordinates>
|
||||
<x>140</x>
|
||||
<y>450</y>
|
||||
<w>100</w>
|
||||
<h>60</h>
|
||||
</coordinates>
|
||||
<panel_attributes>
|
||||
halign=left
|
||||
bg=#444444</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>Relation</id>
|
||||
<coordinates>
|
||||
<x>110</x>
|
||||
<y>420</y>
|
||||
<w>170</w>
|
||||
<h>80</h>
|
||||
</coordinates>
|
||||
<panel_attributes>lt=<<<-</panel_attributes>
|
||||
<additional_attributes>30.0;60.0;10.0;60.0;10.0;10.0;150.0;10.0;150.0;60.0;130.0;60.0</additional_attributes>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLObject</id>
|
||||
<coordinates>
|
||||
<x>370</x>
|
||||
<y>530</y>
|
||||
<w>100</w>
|
||||
<h>60</h>
|
||||
</coordinates>
|
||||
<panel_attributes>
|
||||
halign=left
|
||||
bg=#444444</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLObject</id>
|
||||
<coordinates>
|
||||
<x>370</x>
|
||||
<y>440</y>
|
||||
<w>100</w>
|
||||
<h>60</h>
|
||||
</coordinates>
|
||||
<panel_attributes>Mueller
|
||||
Max
|
||||
40
|
||||
halign=left</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>Relation</id>
|
||||
<coordinates>
|
||||
<x>460</x>
|
||||
<y>460</y>
|
||||
<w>50</w>
|
||||
<h>120</h>
|
||||
</coordinates>
|
||||
<panel_attributes>lt=<<<-</panel_attributes>
|
||||
<additional_attributes>10.0;10.0;30.0;10.0;30.0;100.0;10.0;100.0</additional_attributes>
|
||||
</element>
|
||||
<element>
|
||||
<id>Relation</id>
|
||||
<coordinates>
|
||||
<x>340</x>
|
||||
<y>460</y>
|
||||
<w>50</w>
|
||||
<h>120</h>
|
||||
</coordinates>
|
||||
<panel_attributes>lt=<<<-</panel_attributes>
|
||||
<additional_attributes>30.0;100.0;10.0;100.0;10.0;10.0;30.0;10.0</additional_attributes>
|
||||
</element>
|
||||
<element>
|
||||
<id>Text</id>
|
||||
<coordinates>
|
||||
<x>180</x>
|
||||
<y>510</y>
|
||||
<w>40</w>
|
||||
<h>30</h>
|
||||
</coordinates>
|
||||
<panel_attributes>a)
|
||||
style=wordwrap</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>Text</id>
|
||||
<coordinates>
|
||||
<x>410</x>
|
||||
<y>590</y>
|
||||
<w>40</w>
|
||||
<h>30</h>
|
||||
</coordinates>
|
||||
<panel_attributes>b)
|
||||
style=wordwrap</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLObject</id>
|
||||
<coordinates>
|
||||
<x>210</x>
|
||||
<y>740</y>
|
||||
<w>100</w>
|
||||
<h>60</h>
|
||||
</coordinates>
|
||||
<panel_attributes>
|
||||
halign=left
|
||||
bg=#444444</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>Text</id>
|
||||
<coordinates>
|
||||
<x>250</x>
|
||||
<y>800</y>
|
||||
<w>40</w>
|
||||
<h>30</h>
|
||||
</coordinates>
|
||||
<panel_attributes>c)
|
||||
style=wordwrap</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLObject</id>
|
||||
<coordinates>
|
||||
<x>90</x>
|
||||
<y>670</y>
|
||||
<w>100</w>
|
||||
<h>60</h>
|
||||
</coordinates>
|
||||
<panel_attributes>Schmid
|
||||
Anna
|
||||
32
|
||||
halign=left</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLObject</id>
|
||||
<coordinates>
|
||||
<x>210</x>
|
||||
<y>600</y>
|
||||
<w>100</w>
|
||||
<h>60</h>
|
||||
</coordinates>
|
||||
<panel_attributes>Mueller
|
||||
Max
|
||||
40
|
||||
halign=left</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLObject</id>
|
||||
<coordinates>
|
||||
<x>330</x>
|
||||
<y>670</y>
|
||||
<w>100</w>
|
||||
<h>60</h>
|
||||
</coordinates>
|
||||
<panel_attributes>Bosshard
|
||||
Arno
|
||||
62
|
||||
halign=left</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>Relation</id>
|
||||
<coordinates>
|
||||
<x>300</x>
|
||||
<y>720</y>
|
||||
<w>100</w>
|
||||
<h>70</h>
|
||||
</coordinates>
|
||||
<panel_attributes>lt=<<<-</panel_attributes>
|
||||
<additional_attributes>80.0;10.0;10.0;50.0</additional_attributes>
|
||||
</element>
|
||||
<element>
|
||||
<id>Relation</id>
|
||||
<coordinates>
|
||||
<x>300</x>
|
||||
<y>620</y>
|
||||
<w>100</w>
|
||||
<h>70</h>
|
||||
</coordinates>
|
||||
<panel_attributes>lt=<<<-</panel_attributes>
|
||||
<additional_attributes>10.0;10.0;80.0;50.0</additional_attributes>
|
||||
</element>
|
||||
<element>
|
||||
<id>Relation</id>
|
||||
<coordinates>
|
||||
<x>130</x>
|
||||
<y>620</y>
|
||||
<w>100</w>
|
||||
<h>70</h>
|
||||
</coordinates>
|
||||
<panel_attributes>lt=<<<-</panel_attributes>
|
||||
<additional_attributes>10.0;50.0;80.0;10.0</additional_attributes>
|
||||
</element>
|
||||
<element>
|
||||
<id>Relation</id>
|
||||
<coordinates>
|
||||
<x>130</x>
|
||||
<y>720</y>
|
||||
<w>100</w>
|
||||
<h>70</h>
|
||||
</coordinates>
|
||||
<panel_attributes>lt=<<<-</panel_attributes>
|
||||
<additional_attributes>80.0;50.0;10.0;10.0</additional_attributes>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLObject</id>
|
||||
<coordinates>
|
||||
<x>440</x>
|
||||
<y>930</y>
|
||||
<w>100</w>
|
||||
<h>60</h>
|
||||
</coordinates>
|
||||
<panel_attributes>
|
||||
halign=left
|
||||
bg=#444444</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>Text</id>
|
||||
<coordinates>
|
||||
<x>480</x>
|
||||
<y>990</y>
|
||||
<w>40</w>
|
||||
<h>30</h>
|
||||
</coordinates>
|
||||
<panel_attributes>d)
|
||||
style=wordwrap</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLObject</id>
|
||||
<coordinates>
|
||||
<x>320</x>
|
||||
<y>850</y>
|
||||
<w>100</w>
|
||||
<h>60</h>
|
||||
</coordinates>
|
||||
<panel_attributes>Schmid
|
||||
Anna
|
||||
32
|
||||
halign=left</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLObject</id>
|
||||
<coordinates>
|
||||
<x>560</x>
|
||||
<y>850</y>
|
||||
<w>100</w>
|
||||
<h>60</h>
|
||||
</coordinates>
|
||||
<panel_attributes>Mueller
|
||||
Max
|
||||
40
|
||||
halign=left</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>Relation</id>
|
||||
<coordinates>
|
||||
<x>530</x>
|
||||
<y>900</y>
|
||||
<w>100</w>
|
||||
<h>80</h>
|
||||
</coordinates>
|
||||
<panel_attributes>lt=<<<-</panel_attributes>
|
||||
<additional_attributes>80.0;10.0;10.0;60.0</additional_attributes>
|
||||
</element>
|
||||
<element>
|
||||
<id>Relation</id>
|
||||
<coordinates>
|
||||
<x>350</x>
|
||||
<y>900</y>
|
||||
<w>110</w>
|
||||
<h>80</h>
|
||||
</coordinates>
|
||||
<panel_attributes>lt=<<<-</panel_attributes>
|
||||
<additional_attributes>90.0;60.0;10.0;10.0</additional_attributes>
|
||||
</element>
|
||||
<element>
|
||||
<id>Relation</id>
|
||||
<coordinates>
|
||||
<x>410</x>
|
||||
<y>870</y>
|
||||
<w>170</w>
|
||||
<h>30</h>
|
||||
</coordinates>
|
||||
<panel_attributes>lt=<<<-</panel_attributes>
|
||||
<additional_attributes>10.0;10.0;150.0;10.0</additional_attributes>
|
||||
</element>
|
||||
</diagram>
|
||||
@@ -1,13 +0,0 @@
|
||||
SNP_SHARED_MAKEFILE := $(if $(SNP_SHARED_MAKEFILE),$(SNP_SHARED_MAKEFILE),"~/snp/shared.mk")
|
||||
|
||||
TARGET := bin/personen-verwaltung
|
||||
# BEGIN-STUDENTS-TO-ADD-CODE
|
||||
MODULES :=
|
||||
# END-STUDENTS-TO-ADD-CODE
|
||||
SOURCES := src/main.c $(MODULES)
|
||||
TSTSOURCES := tests/tests.c $(MODULES)
|
||||
|
||||
|
||||
include $(SNP_SHARED_MAKEFILE)
|
||||
|
||||
# CFLAGS += -Werror
|
||||
@@ -1,8 +0,0 @@
|
||||
/**
|
||||
* @mainpage SNP - P07 Linked List
|
||||
*
|
||||
* @section Purpose
|
||||
*
|
||||
* This is a lab on usage of arrays.
|
||||
*
|
||||
*/
|
||||
@@ -1,29 +0,0 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* -- _____ ______ _____ -
|
||||
* -- |_ _| | ____|/ ____| -
|
||||
* -- | | _ __ | |__ | (___ Institute of Embedded Systems -
|
||||
* -- | | | '_ \| __| \___ \ Zuercher Hochschule Winterthur -
|
||||
* -- _| |_| | | | |____ ____) | (University of Applied Sciences) -
|
||||
* -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland -
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
/**
|
||||
* @file
|
||||
* @brief Lab implementation
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/**
|
||||
* @brief Main entry point.
|
||||
* @param[in] argc The size of the argv array.
|
||||
* @param[in] argv The command line arguments...
|
||||
* @returns Returns EXIT_SUCCESS (=0) on success, EXIT_FAILURE (=1) there is an expression syntax error.
|
||||
*/
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
// BEGIN-STUDENTS-TO-ADD-CODE
|
||||
|
||||
// END-STUDENTS-TO-ADD-CODE
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
@@ -1,119 +0,0 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* -- _____ ______ _____ -
|
||||
* -- |_ _| | ____|/ ____| -
|
||||
* -- | | _ __ | |__ | (___ Institute of Embedded Systems -
|
||||
* -- | | | '_ \| __| \___ \ Zuercher Hochschule Winterthur -
|
||||
* -- _| |_| | | | |____ ____) | (University of Applied Sciences) -
|
||||
* -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland -
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
/**
|
||||
* @file
|
||||
* @brief Test suite for the given package.
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/wait.h>
|
||||
#include <time.h>
|
||||
#include <assert.h>
|
||||
#include <CUnit/Basic.h>
|
||||
#include "test_utils.h"
|
||||
|
||||
#ifndef TARGET // must be given by the make file --> see test target
|
||||
#error missing TARGET define
|
||||
#endif
|
||||
|
||||
/// @brief alias for EXIT_SUCCESS
|
||||
#define OK EXIT_SUCCESS
|
||||
/// @brief alias for EXIT_FAILURE
|
||||
#define FAIL EXIT_FAILURE
|
||||
|
||||
/// @brief The name of the STDOUT text file.
|
||||
#define OUTFILE "stdout.txt"
|
||||
/// @brief The name of the STDERR text file.
|
||||
#define ERRFILE "stderr.txt"
|
||||
|
||||
#define TRACE_INDENT "\n " ///< allow for better stdout formatting in case of error
|
||||
|
||||
// setup & cleanup
|
||||
static int setup(void)
|
||||
{
|
||||
remove_file_if_exists(OUTFILE);
|
||||
remove_file_if_exists(ERRFILE);
|
||||
return 0; // success
|
||||
}
|
||||
|
||||
static int teardown(void)
|
||||
{
|
||||
// Do nothing.
|
||||
// Especially: do not remove result files - they are removed in int setup(void) *before* running a test.
|
||||
return 0; // success
|
||||
}
|
||||
|
||||
// tests
|
||||
static void test_person_compare(void)
|
||||
{
|
||||
// BEGIN-STUDENTS-TO-ADD-CODE
|
||||
// arrange
|
||||
|
||||
// act
|
||||
CU_FAIL("missing test");
|
||||
|
||||
// assert
|
||||
|
||||
// END-STUDENTS-TO-ADD-CODE
|
||||
}
|
||||
|
||||
static void test_list_insert(void)
|
||||
{
|
||||
// BEGIN-STUDENTS-TO-ADD-CODE
|
||||
// arrange
|
||||
|
||||
// act
|
||||
CU_FAIL("missing test");
|
||||
|
||||
// assert
|
||||
|
||||
// END-STUDENTS-TO-ADD-CODE
|
||||
}
|
||||
|
||||
static void test_list_remove(void)
|
||||
{
|
||||
// BEGIN-STUDENTS-TO-ADD-CODE
|
||||
// arrange
|
||||
|
||||
// act
|
||||
CU_FAIL("missing test");
|
||||
|
||||
// assert
|
||||
|
||||
// END-STUDENTS-TO-ADD-CODE
|
||||
}
|
||||
|
||||
static void test_list_clear(void)
|
||||
{
|
||||
// BEGIN-STUDENTS-TO-ADD-CODE
|
||||
// arrange
|
||||
|
||||
// act
|
||||
CU_FAIL("missing test");
|
||||
|
||||
// assert
|
||||
|
||||
// END-STUDENTS-TO-ADD-CODE
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Registers and runs the tests.
|
||||
* @returns success (0) or one of the CU_ErrorCode (>0)
|
||||
*/
|
||||
int main(void)
|
||||
{
|
||||
// setup, run, teardown
|
||||
TestMainBasic("lab test", setup, teardown
|
||||
, test_person_compare
|
||||
, test_list_insert
|
||||
, test_list_remove
|
||||
, test_list_clear
|
||||
);
|
||||
}
|
||||