PhoneBookTest 2) Telephonbücher, die eine doppelt verkettete Liste von Telephonbucheinträgen verwalten => PhoneBook 3) Telephonbucheinträge, die einen Eintrag mit Name und Telephonnummer verwalten => PhoneBookEntry"> PhoneBookTest 2) Telephonbücher, die eine doppelt verkettete Liste von Telephonbucheinträgen verwalten => PhoneBook 3) Telephonbucheinträge, die einen Eintrag mit Name und Telephonnummer verwalten => PhoneBookEntry">

Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger

Ähnliche Präsentationen


Präsentation zum Thema: "Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger"—  Präsentation transkript:

1 Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger se1ue_ws@tk.uni-linz.ac.at http://www.tk.uni-linz.ac.at/teaching/ http://www.tk.uni-linz.ac.at/blackboard/ UE07 Doppelt verkettete Listen

2 Abteilung für Telekooperation Folie-2 Softwareentwicklung I UE Schwinger Verkettete Listen PhoneBook - Anforderungen Gesucht wird ein Java-Programm, dass eine entsprechende Datenstruktur für die Verwaltung von Telephoneinträgen zur Verfügung stellt. Es soll dabei möglich sein: Telephonbucheinträge hinzuzufügen / entfernen Einen Telephonbucheintrag zu suchen Die Liste aller verwalteter Einträge eines Telephonbuchs in sortierter Reihenfolge auszugeben Verschiedene Telephonbücher zu verwalten (z.b. ein privates Telephonbuch und ein Geschäftstelephonbuch) Hinweise: Verwalten Sie die Einträge durch eine doppelt verkettete Liste Speichern Sie pro Eintrag einfach Name und Telephonnummer als String

3 Abteilung für Telekooperation Folie-3 Softwareentwicklung I UE Schwinger Verkettete Listen PhoneBook - Anforderungen zerlegen Was wird benötigt: 1) "Hauptprogramm", dass die Verwendung des Telephonbuches steuert => PhoneBookTest 2) Telephonbücher, die eine doppelt verkettete Liste von Telephonbucheinträgen verwalten => PhoneBook 3) Telephonbucheinträge, die einen Eintrag mit Name und Telephonnummer verwalten => PhoneBookEntry

4 Abteilung für Telekooperation Folie-4 Softwareentwicklung I UE Schwinger 1) Steuert die Verwendung des Telephonbuches: Soll verschiedene Telephonbücher anlegen können: PhoneBook bizzPhoneBook = new PhoneBook("Business Phone Book"); PhoneBook privatePhoneBook = new PhoneBook("Private Phone Book"); Soll einen Eintrag hinzufügen können: if ( !(bizzPhoneBook.add("Hugo Boss", "+43(0)1/9990999")) ) IO.writeLn("could not be inserted"); Soll einen Eintrag ändern können: if (! ( bizzPhoneBook.update("Kevin Klein", "+43(0)1/9990999"))) IO.writeLn("could not be updated"); Soll einen Eintrag löschen können: if (! ( bizzPhoneBook.delete("Giorgio Armani"))) IO.writeLn("could not be deleted"); Verkettete Listen PhoneBook - Anforderungen verfeinern 1/2

5 Abteilung für Telekooperation Folie-5 Softwareentwicklung I UE Schwinger cont. Soll nach einem Eintrag gesucht werden können: PhoneBookEntry theEntry = bizzPhoneBook.search("Hugo Boss"); if (theEntry == null) { IO.writeLn("could not be found"); } else { IO.writeLn("found: " + theEntry) } Soll alle Einträge ausgeben können: bizzPhoneBook.print(); Verkettete Listen PhoneBook - Anforderungen verfeinern 2/2

6 Abteilung für Telekooperation Folie-6 Softwareentwicklung I UE Schwinger Verwaltet Telephonbucheinträge als doppelt verkettete Liste Folgende Methoden sind erforderlich: boolean add(String name, String phone) boolean update(String name, String phone) boolean delete(String name) PhoneBookEntry search(String name) void print() Verkettete Listen PhoneBook - Anforderungen detailieren

7 Abteilung für Telekooperation Folie-7 Softwareentwicklung I UE Schwinger boolean add(String name, String phone) 1) neues Telephonbucheintrag erstellen 2) Name und Telephonnummer in Telephonbucheintrag speichern 3) Telephonbucheintrag hinzufügen boolean update(String name, String phone) 1) Telephonbucheintrag suchen 2) wenn gefunden Telephonnummer ändern boolean delete(String name) 1) Telephonbucheintrag suchen 2) wenn gefunden Telephonbucheintrag löschen PhoneBookEntry search(String x) 1) durchwandere die verkettete Liste vom Anfang bis zum Ende bis passender Telephonbucheintrag gefunden wurde 2) wenn gefunden gib gefundenen Telephonbucheintrag zurück void print() 1) durchwandere die verkettete Liste vom Anfang bis zum Ende und gibt dabei jeden Telephonbucheintrag aus Verkettete Listen PhoneBook - Anforderungen verfeinern 1/2

8 Abteilung für Telekooperation Folie-8 Softwareentwicklung I UE Schwinger Verwaltet einen Telephonbucheintrag ein Telephonbucheintrag beinhaltet: Die "Daten"/Objekte (Name und Telephonnummer) Die Verkettung zum nächsten Telephonbucheintrag und zum vorangegangegen Telephonbucheintrag folgende Methoden sind erforderlich: void print() boolean lessThan() boolean equalsName() Verkettete Listen PhoneBookEntry - Anforderungen verfeinern 1/1

9 Abteilung für Telekooperation Folie-9 Softwareentwicklung I UE Schwinger class PhoneBook { // Attribute eines Telephonbuchs // Methoden eines Telephonbuchs PhoneBook(String aName) {// Konstruktur 1) Initialisierung des Telephonbuchs } boolean add(String aName, String aPhoneNumber) { 1) neues Telephonbucheintrag erstellen 2) Name und Telephonnummer in Telephonbucheintrag speichern 3) Telephonbucheintrag hinzufügen => durch eigene Methode add(PhoneBookEntry ) } boolean add(PhoneBookEntry newEntry) { } boolean update(String aName, String aPhoneNumber) { 1) Telephonbucheintrag suchen => durch eigene Methode find(String) 2) Wenn gefunden Telephonnummer ändern } ……. Verkettete Listen PhoneBook - Klassengerüst 1/2

10 Abteilung für Telekooperation Folie-10 Softwareentwicklung I UE Schwinger class PhoneBook { ……. boolean delete(String aName) { 1) Telephonbucheintrag suchen => durch eigene Methode find(String) 2) Wenn gefunden Telephonbucheintrag löschen => durch eigene Methode delete(PhoneBookEntry) } boolean delete(PhoneBookEntry anEntry) { } boolean search(Sring aName) { 1) Durchwandere die verkettete Liste vom Anfang bis zum Ende bis passender Telephonbucheintrag gefunden wurde 2) Wenn gefunden gib gefundenen Telephonbucheintrag zurück } void print() { 1) Durchwandere die verkettete Liste vom Anfang bis zum Ende und gibt dabei jeden Telephonbucheintrag aus } } // end class PhoneBook Verkettete Listen PhoneBook - Klassengerüst 2/2

11 Abteilung für Telekooperation Folie-11 Softwareentwicklung I UE Schwinger class PhoneBookEntry { // Attribute 1) Die "Daten"/Objekte (Name und Telephonnummer) 2) Die Verkettung zum nächsten Telephonbucheintrag und 3) die Verkettung zum vorangegangegen Telephonbucheintrag // Methoden PhoneBookEntry(String name, String phoneNumber) {// Konstruktur } void print() { } boolean lessThan(PhoneBookEntry anEntry) { 1) gib zurueck, ob der Name kleiner ist } boolean equalsName(PhoneBookEntry anEntry) { 1) gib zurueck, ob der Name kleiner ist } } // end class PhoneBookEntry Verkettete Listen PhoneBookEntry - Klassengerüst 1/1

12 Abteilung für Telekooperation Folie-12 Softwareentwicklung I UE Schwinger class PhoneBook { // Attribute eines Telephonbuchs String name; // Name des Telephonbuchs PhoneBookEntry head; // Zeiger auf den Beginn der doppelt // verketteten Liste PhoneBookEntry tail; // Zeiger auf das Ende der doppelt // verketteten Liste ……. Verkettete Listen PhoneBook - Details Attribute

13 Abteilung für Telekooperation Folie-13 Softwareentwicklung I UE Schwinger class PhoneBook { … PhoneBook(String aName) {// Konstruktur this(); name = aName; } PhoneBook() { head = null; // eigentlich nicht mehr notwendig tail = null; // da defaultmaessig auf null } …. Verkettete Listen PhoneBook - Details Methode

14 Abteilung für Telekooperation Folie-14 Softwareentwicklung I UE Schwinger class PhoneBook { … boolean add(String aName, String aPhoneNumber) { // 1) neues Telephonbucheintrag erstellen // 2) Name und Telephonnummer in //Telephonbucheintrag speichern PhoneBookEntry anEntry = new PhoneBookEntry(aName, aPhone); // 3) Telephonbucheintrag hinzufügen return add(anEntry); // => durch eigene Methode // add(PhoneBookEntry) } …. Verkettete Listen PhoneBook - Details Methode

15 Abteilung für Telekooperation Folie-15 Softwareentwicklung I UE Schwinger class PhoneBook { … boolean add(PhoneBookEntry newEntry) { // 1) wenn Telephonbuch leer einfügen // 1.1) head und tail auf Telephonbucheintrag setzten // 1.2) previous und next des Telephonbucheintrags auf null setzen // 2) wenn Telephonbucheintrag kleiner als head // 2.1) head auf Telephonbucheintrag setzten // 2.1) previous auf null und next auf alten head setzen // 3) wenn Telephonbucheintrag größer als tail // 3.1) tail auf Telephonbucheintrag setzten // 3.2) next auf null und previous auf alten tail setzen // 4) sonst // 4.1) suche position // 4.2) fuege Telephonbucheintrag ein // 4.2.1) setzte next des Vorgaengers auf Telephonbucheintrag // 4.2.2) setzte previous des Telephonbucheintrags auf Vorgaenger // 4.2.3) setzte next des Telephonbucheintrags auf Nachfolger // 4.2.4) setzte previous des Nachfolgers auf Telephonbucheintrag } …. Verkettete Listen PhoneBook - Details Methode

16 Abteilung für Telekooperation Folie-16 Softwareentwicklung I UE Schwinger class PhoneBook { … boolean add(PhoneBookEntry newEntry) { if (head == null) {// 1) wenn Telephonbuch leer einfügen head = tail = newEntry; newEntry.next = null; newEntry.previous = null; return true; } else if (newEntry.lessThan(head)) { // 2) wenn Telephonbucheintrag kleiner als head // einfuegen bevor ersten Element head.previous = newEntry; newEntry.next = head; head = newEntry; return true; … Verkettete Listen PhoneBook - Details Methode

17 Abteilung für Telekooperation Folie-17 Softwareentwicklung I UE Schwinger class PhoneBook { … boolean add(PhoneBookEntry newEntry) { … } else if (newEntry.greaterThan(tail)) { // 3) wenn Telephonbucheintrag groesser als tail // insert after last tail.next = newEntry; newEntry.previous = tail; tail = newEntry; return true; } else { // 4) sonst PhoneBookEntry anEntry = findPrevious(newEntry.name); if (anEntry.equalsName(newEntry)) return false; newEntry.previous = anEntry; newEntry.next = anEntry.next; anEntry.next.previous = newEntry; anEntry.next = newEntry; return true; } …. Verkettete Listen PhoneBook - Details Methode

18 Abteilung für Telekooperation Folie-18 Softwareentwicklung I UE Schwinger class PhoneBook { … PhoneBookEntry findPrevious(String aName) { PhoneBookEntry anEntry; for (anEntry = head; anEntry != null && anEntry.lessThan(aName); anEntry = anEntry.next); if (anEntry == null) { return null; } else { return anEntry.previous; } PhoneBookEntry search(String aName) { PhoneBookEntry anEntry = findPrevious(aName); if (anEntry == null || anEntry.next == null) { return null;// noting found } else if ((anEntry.next.name.equals(aName)) { return anEntry;// are equal thus the one } else { return null;// not equal thus null } …. Verkettete Listen PhoneBook - Details Methode

19 Abteilung für Telekooperation Folie-19 Softwareentwicklung I UE Schwinger class PhoneBook { … boolean delete(String aName) { PhoneBookEntry anEntry = find(aName); if (anEntry == null) { IO.writeLn("ERROR: name not found!"); return false; } else { return delete(anEntry); } } boolean delete(PhoneBookEntry anEntry) { PhoneBookEntry entry = find(anEntry.name); if (anEntry == null) { return false; } else if (anEntry == head && anEntry == tail) {// only one entry left head = tail = null; return true; } else if (anEntry == head) { head = anEntry.next; anEntry.next.previous = null; return true; } else if (anEntry == tail) { anEntry.previous.next = null; tail = anEntry.previous; return true; } else { anEntry.previous.next = anEntry.next; return true; } } …. Verkettete Listen PhoneBook - Details Methode

20 Abteilung für Telekooperation Folie-20 Softwareentwicklung I UE Schwinger class PhoneBook { … boolean update(String aName, String aPhoneNumber) { PhoneBookEntry anEntry = find(aName); if (anEntry != null) { anEntry.phoneNumber = aPhoneNumber; // konnte man auch in PhoneBookEntry machen lassen return true; } else { return false; } } void print() { IO.writeLn("The Phone Book: " + name); if (head == null) { IO.write("\n is emtpy!"); } else { PhoneBookEntry anEntry = head; for (int i = 1;anEntry != null; i++) { IO.write("\n " + i + ") "); anEntry.print(); anEntry = anEntry.next; } } IO.write("\n"); } …. Verkettete Listen PhoneBook - Details Methode

21 Abteilung für Telekooperation Folie-21 Softwareentwicklung I UE Schwinger class PhoneBookEntry { String name; String phoneNumber; PhoneBookEntry next = null; PhoneBookEntry previous = null; PhoneBookEntry(String name, String phoneNumber) { this.name = name; this.phoneNumber = phoneNumber; } public String toString() { return ( "" + name + ", " + phoneNumber); } void print() { IO.writeLn("" + this); } …. } Verkettete Listen PhoneBookEntry - Details

22 Abteilung für Telekooperation Folie-22 Softwareentwicklung I UE Schwinger class PhoneBookEntry { … boolean lessThan(PhoneBookEntry anEntry) { return (this.lessThan(anEntry.name)); } boolean lessThan(String aName) { int i; int lengthOfShorterString = Math.min(this.name.length()-1, aName.length()-1); for (i = 0; i <= lengthOfShorterString && this.name.charAt(i) == aName.charAt(i); i++); if (i > lengthOfShorterString) return (this.name.length()-1 < aName.length()-1); // came to an end else return this.name.charAt(i) < aName.charAt(i); // some char did not match } boolean greaterThan(PhoneBookEntry anEntry) { return (!equalsName(anEntry) && ! lessThan(anEntry)); } boolean equalsName(PhoneBookEntry anEntry) { return (this.name.equals(anEntry.name)); } boolean equalsName(StringBuffer aName) { return (this.name.equals(aName)); } Verkettete Listen PhoneBookEntry - Details


Herunterladen ppt "Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger"

Ähnliche Präsentationen


Google-Anzeigen