Übungsblatt 4. Java Vorkurs (WS 2015)

Ähnliche Dokumente
Erste Java-Programme (Scopes und Rekursion)

Rückgabewerte von Methoden

Java Übung. Übung 3. Werner Gaulke. 2. Mai Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung.

Programmiertechnik Klassenvariablen & Instantiierung

Übungsblatt 1. Java Vorkurs (WS 2017)

Städtisches Gymnasium Olpe Java Ht Informatik - Q1 Die Klasse List im Abitur Methoden und Beispielcode Hier alle wichtigen Methoden. Ein Beispielcode

Javakurs für Anfänger

hue12 January 24, 2017

Übungsblatt 2. Java Vorkurs (WS 2017)

Einführung in die Programmierung

Javakurs für Anfänger

Umsetzung einer Klassenkarte in einer Programmiersprache

Einführung in die Programmierung für NF MI. Übung 04

Objektorientierung. Programmierstarthilfe WS 2010/11 Fakultät für Ingenieurwissenschaften und Informatik

Klausur Grundlagen der Programmierung

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Objektorientiertes Programmieren (Java)

Programmieren in Java -Eingangstest-

Beispielprüfung CuP WS 2015/2016

Grundlagen der Informatik

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2017/18. Vorbereitende Aufgaben

Aufgabe11. Methode test1. import java.util.hashmap; import java.util.arraylist; public class Aufgabe11 {

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Java Übung. Übung Mai Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung. Werner Gaulke.

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung

Probeklausur Informatik 2 Sommersemester 2013

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2016/17. Vorbereitende Aufgaben

Probeklausur: Programmierung WS04/05

Institut für Programmierung und Reaktive Systeme 5. Dezember Programmieren I. 5. Übungsblatt

Prüfung Softwareentwicklung II (IB)

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

Javakurs für Anfänger

Repetitorium Informatik (Java)

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

Ein erstes "Hello world!" Programm

Folienpaket 7 Themenschwerpunkte: Methoden in OOP /2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Institut für Informatik und Angewandte Kognitionswissenschaften

Einführung in die Programmierung 1

1 Klassen und Objekte

Übungsblatt 2. Java Vorkurs (WS 2015)

Javakurs für Anfänger

Computeranwendung und Programmierung (CuP)

Javakurs für Anfänger

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Durch die Teil-von-Beziehung soll ausgedrückt werden, dass ein Objekt A als (physikalischer) Teil eines Objekts B angesehen wird. Insbesondere kann ei

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor

Dieses Dokument enthält alle Teilaufgaben zur Java-Pflichtaufgabe für das Sommersemester Aufgabe 1 (Vier Gewinnt 1. Teil)

Javakurs für Anfänger

Programmierung für Mathematik (HS13)

Erste Java-Programme (Arrays und Schleifen)

Ziele sind das Arbeiten mit Funktionen (Modularisierung, Parameterübergabe), sowie - Reihentyp (Array)

Objektorientierung. Marc Satkowski 20. November C# Kurs

7. Objektorientierung. Informatik II für Verkehrsingenieure

Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit

ADT: Verkettete Listen

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Propädeutikum Programmierung in der Bioinformatik

Hochschule Darmstadt Informatik-Praktikum WS 2017/2018 WIng Bachelor 6. Aufgabenblatt Zeiger, verkettete Liste, Dateieingabe und -ausgabe

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

Geoinformatik und Vermessung Prüfung 502 : Informatik (JAVA)

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 16. Juli Klausur

2 Programmieren in Java I noch ohne Nachbearbeitung

Prüfung Softwareentwicklung I (IB)

Anweisungen zur Ablaufsteuerung

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

5.4 Arrays. Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu!

Aufgabenblatt 1: - Präsenzübung für die Übungen Do Mi Ausgabe Mi

Algorithmen und Datenstrukturen 07

Fragen zur OOP in Java

Geoinformatik und Vermessung Prüfung 502 : Informatik (JAVA)

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

Programmierung für Mathematik HS11

Grundlagen der Informatik / Algorithmen und Datenstrukturen. Aufgabe 139

Nachholklausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java WS1415

Transkript:

Übungsblatt 4 Java Vorkurs (WS 2015) Aufgabe 1 Übungsblock In dieser Aufgabe soll ein kleines Programm zur verwaltung von Studenten erstellt werden. Gehe davon aus, dass nicht mehr 100 Studenten durch das Programm zu verwalten sind. In dem Programm soll es zwei Klassen geben: Student und StudentManager, wobei nur in StudentManager die main-methode sein soll. Ein Student zeichnet sich durch die Eigenschften name, vorname, matrikelnummer, studiengang und isttutor aus. Wähle für alle Eigenschften einen passenden Typ und beachte die Datenkapselung. Nur die Eigenschaften studiengang und isttutor sollen geändert werden können. Implementieren sie dafür entsprechende Schnittstellen. Die anderen Eigenschaften sollen jeweils nur beim Anlegen des Studendten angegeben werden können. In der Klasse StudentManager (statische Klasse) sollen die Studenten in einem Array gespeichert werden. Beachte, dass du vermutlich ein weiteres Attribut benötigst, um die Anzahl der vorhandenen Studenten zu speichern. Außerdem soll die Klasse die Möglichkeit bieten, Studenten über die Konsole anlegen, bearbeiten und löschen zu können, sowie alle Studenten aufzulisten. Überlegen sie sich dazu eine sinnvolle Menüstruktur für die Konsole, sowie eine Möglichkeit die Eingabe (Auswahl aus dem Menü) zu verarbeiten. Sobald ein Auftrag (z.b. Student erstellen) erfolgreich abgeschlossen wurde, soll wieder das Hauptmenü gezeigt werden. Schütze dein Programm mittels Abfragen vor möglichen Falscheingaben. Das Erstellen von zusätzlichen Methoden könnte hier sehr sinnvoll sein, um das Programm zu strukturieren. In dem Programm werden zwei Klassen benutzt, die wir nach und nch erweitern werden: (a) Erstelle eine Klasse StudentManager, welche die main-methode enthält. Erstelle nun eine zweite Klasse im selben Paket und nenne sie Student. Diese Klasse soll ein privates Attribut vom Typ String mit dem Namen Name haben. Implementiere in der Klasse Student zunächst zwei Methoden: den Konstruktor und eine get-methode. Dem Konstruktor soll als Parameter der Name des neuen Studenten übergeben werden. Beachte, dass der Konstruktor keinen Rückgabewert hat. Die Konstruktor-Methode sieht dann etwa so aus: 1 p u b l i c Student ( S t r i n g pname) { 2 t h i s. name = pname ; 3 } Die get-methode soll den Namen getname() haben und keine Parameter besitzen. Die Methode soll public sein und den Rückgabetyp String besitzen. Gebe in der Methode lediglich das Attribut name mit dem return-befahl zurück. Diese Methode sieht dann so aus: 1 p u b l i c S t r i n g getname ( ) { 2 r e t u r n t h i s. name ; 3 } Anmerkung: Das this. vor dem Attribut sagt lediglich aus, dass hier das Attribut der eigenen Klasse gemeint ist. Dies soll Verwirrung zwischen Klassen-Attributen und Variablen vermeiden. Gehe nun zurück in die Klasse StudentManager. Lege dort ein privates Attribut namens student an. Dieses Attribut soll vom Typ Student sein und muss als static deklariert werden, da wir von der StudentManager-Klasse kein Objekt anlegen werden. Lege nun in der main-methode

Java Vorkurs (WS 2015) Übungsblatt 4 Seite 2 von 5 einen neuen Studenten an, indem du den new-operator verwendest. Du musst hier dann auch das Parameter für den Konstruktor angeben, dh. den Namen, den dein Student haben soll. Mache danach eine Konsolenausgabe und gebe den Namen des Studenten aus, indem du dir den Namen mit der getname-methode holst. Tipp: Du kannst den Methodenaufruf auch direrkt in den Klammern der Konsolenausgabe machen. Dies erspart dir ein unötiges Zwischenspeichern. Deine StudentManager-Klasse sollte dann ungefähr so aussehen: 1 p u b l i c c l a s s StudentManager { 2 p r i v a t e s t a t i c Student student ; 3 4 p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { 5 student = new Student ( Hans Mü l l e r ) ; 6 System. out. p r i n t l n ( student. getname ( ) ) ; 7 } 8 Teste nun das bisherige Programm. Es sollte auf der Konsole nur der Name des Studenten ausgegeben werden. (b) Da wir mehr als nur einen Studenten verwalten wollen, müssen wir eine Möglichkeit finden, mehrere Studenten zu speichern. Hierfür bietet sich ein Array an. Ändere also das Attribut student in der Klasse StudentManager auf ein Array vom Typ Student mit der maximalne Größe 100. Erstelle zudem ein privates, statisches Attribut countofelements vom Typ int. Dieses Attribut soll speichern, wieviele Studenten momentan im Array gespeichert werden. Erstelle in der Klasse StudentManager eine private, statische Methode void addstudent(string pname). Nun soll in dieser Methode ein neuer Student erzeugt, zum Array hinzugefügt und der Zähler erhöht werden. Lösche dann die Zeile zum Erstellen des Studneten aus der main-methode und rufe stattdessen die addstudent-methode auf. Auch solltest du nun die Konsolenausgabe in eine For-Schleife packen, die genau so oft wie countofelements durchläuft. Erzeuge vor der For-Schleife insgesammt drei Stdenten mit unterschiedlichen Namen. Nach dieser Teilaufgabe sollte die StudentManager-Klasse sollte dann so aussehen: 1 p u b l i c c l a s s StudentManager { 2 p r i v a t e s t a t i c Student [ ] student = new Student [ 1 0 0 ] ; 3 p r i v a t e s t a t i c i n t countofelements = 0 ; 4 5 p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { 6 addstudent ( Hans Mü l l e r ) ; 7 addstudent ( Daniela Maurer ) ; 8 addstudent ( Max Mustermann ) ; 9 f o r ( i n t i =0; i <countofelements ; i ++){ 10 System. out. p r i n t l n ( student [ i ]. getname ( ) ) ; 11 } 12 } 13 14 p r i v a t e s t a t i c void addstudent ( S t r i n g pname) { 15 student [ countofelements ] = new Student (pname) ; 16 countofelements++; 17 } 18 } (c) Wir wollen nun die Klasse Student um weitere Eigenschaften und Methoden erweitern. Außer dem Namen des Studenten wollen wir nun auch die Matrikelnummer (int matrikelnummer), den Studiengang (String studiengang) und die Eigenschaft isttutor vom Typ boolean speichern. Füge diese Eigenschaften als private Attribute ein. Die Matrikelnummer soll auch dem Konstruktor übergeben werden. Die anderen beiden Attribute sollen mittles einer set-methode verändert werden können. Füge für alle Attribute eine get-methode ein, die jeweils nur das Attribut zurück geben. Beachte, dass du auch in der Klasse StdentManager ein paar Zeilen ändern musst, nachdem du die Parameter des Konstruktors geändert hast. Wenn du dies alles gemacht hast, sollte die Student-Klasse so aussehen: 1 p u b l i c c l a s s Student { 2 p r i v a t e S t r i n g name ;

Java Vorkurs (WS 2015) Übungsblatt 4 Seite 3 von 5 3 p r i v a t e i n t matrikelnummer ; 4 p r i v a t e S t r i n g studiengang ; 5 p r i v a t e boolean i s t T u t o r ; 6 7 p u b l i c Student ( S t r i n g pname, i n t pmatrikelnummer ) { 8 t h i s. name = pname ; 9 t h i s. matrikelnummer = pmatrikelnummer ; 10 } 11 12 p u b l i c S t r i n g getname ( ) { 13 r e t u r n t h i s. name ; 14 } 15 16 p u b l i c i n t getmatrikelnummer ( ) { 17 r e t u r n t h i s. matrikelnummer ; 18 } 19 20 p u b l i c void s e t S t u d i e n g a n g ( S t r i n g pstudiengang ) { 21 t h i s. studiengang = pstudiengang ; 22 } 23 24 p u b l i c S t r i n g getstudiengang ( ) { 25 r e t u r n t h i s. studiengang ; 26 } 27 28 p u b l i c void s e t I s t T u t o r ( boolean pisttutor ) { 29 t h i s. i s t T u t o r=pisttutor ; 30 } 31 32 p u b l i c boolean g e t I s t T u t o r ( ) { 33 r e t u r n t h i s. i s t T u t o r ; 34 } 35 } (d) In dieser Teilaufgabe wollen wir nun ein kleines Menü für die Steuerung des StudentManager auf der Konsole ausgeben. Erstelle daher eine Methode private static void outputmainmenu(), die mittels mehrerer System.out.println()-Befehlen ein Hauptmenü mit Überschrift und folgenden Auswahlmöglichkeiten ausgibt: 1: Student hinzufügen 2: Student bearbeiten 3: Student löschen 4: Alle Studenten anzeigen (e) Erstelle drei weitere Methoden um Eingaben vom Benutzer abzufragen. Wir machen für jeden Typen, den wir benötigen (String, int und boolean), eine eigene Methode mit entspechendem Rückgabewert. Benenne die Methoden nach dem Schema private static String readstring(). Erstelle in jeder Methode einen Scanner, der den Eingabestrom System.in entgegen nimmt. Den Scanner musst du ganz oben in deiner Quellcode-Datei mit der Zeile 1 import java. u t i l. Scanner ; importieren, damit du ihn verwenden kannst. Die Methoden sollen jeweis die eingegebene Zeile zurückgeben. Die Methoden sehen dann alle etwa so aus: 1 p r i v a t e s t a t i c i n t r e a d I n t ( ) { 2 Scanner scanner = new Scanner ( System. i n ) ; 3 r e t u r n scanner. n e x t I n t ( ) ; 4 } (f) Wir wollen nun das Menü zusammenbauen und die Optionen 1: Student anlegen sowie 4: Alle Studenten ausgeben implementieren. Erstelle eine Methode textttprivate static void addstudentdialog(), die den Benutzer Schritt für Schritt durch den Anlege-Vorgang begleitet und von ihm die nötigen Eingaben abfragt und schließlich die addstudent(string pname, int pmatrikelnummer)-methode aufruft. Rufe für die Abfragen deine selbst geschriebenen readstring()- und readint()-methoden. Die Methode, die alle Studenten ausgibt soll private static void outputallstudents() heißen. Sie besteht im Wesentlichen aus der For-Schleife, die wir bereits in der main-methode implementiert haben. Nun soll die Methode jedoch zusätzlich eine Überschrift anzeigen und für jeden Studenten nicht nur den Name anzeigen, sondern auch Matrikelnummer und den Studiengang.

Java Vorkurs (WS 2015) Übungsblatt 4 Seite 4 von 5 Du musst hierfür den Ausgabe-Text in den Klammern der System.out.println()-Methode zusammensetzten. Am Ende dieser Teilaufgabe siehst du, eine beispielhafte Implementierung dafür. Mache nun die Main-Methode zunächst ganz leer. In sie komment jetzt das Hauptprogramm. Erstelle dafür in der Main-Methode eine Endlos-Schleife, damit nach jedem abgearbeiteten Auftrag wieder das Hauptmenü angezeigt wird und der Benutzer einen neuen Auftrag auswählen kann. Füge in die Endlos-Schleife eine Do-While-Schleife ein, die dem Benitzer so lange das Hauptmenü anzeigt, bis er eine gültige Zahl (von eins bis vier, entsprchend der nummerierten Optionen) eingegen hat. Danach soll die Eingabe mittels einer Switch-Case-Verzeigung ausgewertet werden. In den jeweiligen Fällen werden lediglich die Dialog-Methoden aufgerufen (z.b. textttaddstudentdialog(). Die anderen Dialog-Methoden schreiben wir gleich). Unter Option 4. wird die outputallstudents()-methode aufgerufen. Wenn du dein Programm startest solltest du nun bereits Studenten anlegen und alle ausgeben können. So könnte die Main-Methode dann aussehen: (Hier werden zu Beginn noch drei Studenten angelegt, damit man sofort auch Studenten bearbeiten und löschen kann.) 1 p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { 2 addstudent ( Hans Mü l l e r, 2967804) ; 3 addstudent ( Daniela Maurer, 2945980) ; 4 addstudent ( Max Mustermann, 2972359) ; 5 w h i l e ( t r u e ) { 6 i n t s e l e c t e d O p t i o n = 1; 7 do { 8 outputmainmenu ( ) ; 9 s e l e c t e d O p t i o n = r e a d I n t ( ) ; 10 } w h i l e ( s e l e c t e d O p t i o n <= 1 && s e l e c t e d O p t i o n >= 4) ; 11 12 switch ( s e l e c t e d O p t i o n ) { 13 c a s e 1 : 14 addstudentdialog ( ) ; 15 break ; 16 c a s e 2 : 17 e d i t S t u d e n t D i a l o g ( ) ; 18 break ; 19 c a s e 3 : 20 d e l e t e S t u d e n t D i a l o g ( ) ; 21 break ; 22 c a s e 4 : 23 outputallstudents ( ) ; 24 break ; 25 } 26 } 27 28 } Die Methode zur Ausgabe aller Student sieht dann in etwa so aus: 1 p r i v a t e s t a t i c void o u tputallstudents ( ) { 2 System. out. p r i n t l n ( ) ; 3 System. out. p r i n t l n ( === Üb e r s i c h t ü ber a l l e Studenten === ) ; 4 f o r ( i n t i = 0 ; i < countofelements ; i ++) { 5 System. out. p r i n t l n ( student [ i ]. getname ( ) + ( Matrnr. : 6 + student [ i ]. getmatrikelnummer ( ) +, Studiengang : 7 + student [ i ]. getstudiengang ( ) + ) ) ; 8 } (g) Nun fehlen noch die Methoden zum Bearbeiten und Löschen. Kümmern wir uns erst um die Methode zum Bearbeiten. Erstelle eine neue Methode private static void editstudentdialog(). Sie soll zunächst die gewählte Option anzeigen (also dass man jetzt im Bearbeiten-Modus ist), dann nach dem Index des zu bearbeitenden Studenten fragen (es muss kontrolliert werden, ob dieser Student überhaupt existiert), dann sollen alle aktuellen Eigenschaften des Studenten ausgegeben und schließlich alle Eigenschaften mit Hilfe der read()-methoden neu eingelesen und gespeichert werden. (h) Als nächstes wollen wir einen Studenten auch noch Löschen können. Erstelle dazu eine neue Methode private static boolean deletestudent(int pindex), der der Index des zu löschenden

Java Vorkurs (WS 2015) Übungsblatt 4 Seite 5 von 5 Studenten übergeben wird. Hier muss dann geprüft werden, ob es den Studenten mit dem angegebenen Index überhaupt gibt. Nun wollen wir im Prinzip dem Studenten an der entsperchenen Stelle sagen, dass er nicht existiert. Dies können wir machen, indem wir ihm dem Wert null zuweisen. Der Wert null heißt so viel wie Hier ist nichts, ähnlich wie void bei Methoden. Wenn wir jedoch einfach mitten aus unserem Array Studenten löschen und den Zähler dekrementieren würden, würde ein Lochëntstehen und wir könnten auf den etzen Studenten nicht mehr zugreifen, weil wir ja immer prüfen ob Index < countofelements ist. Wir müssen also das entstandene Loch irgendwie füllen. Damit wir nich alle nachfolgenen Studenten um ein Feld verschieben müssen werden wir der Einfachheit halber nur den letzten (dh. den mit dem höchsten Index) Studenten in die Lücke verschieben und dann diesen letzten löschen. Wenn der Student erfolgreich gelöscht wurde soll true zurück gegeben werden, anderen Falles false. Bitte beachte unbedingt, dass sich der Index und der Wert des Attributs countofelements immer um 1 unterscheiden, da die Index-Zählung bei 0 beginnt. Die deletestudent(int pindex)-methode könnte dann so aussehen: 1 p r i v a t e s t a t i c boolean d e l e t e S t u d e n t ( i n t pindex ) { 2 i f ( pindex < countofelements && pindex >= 0) { 3 student [ pindex ] = student [ countofelements 1]; 4 student [ countofelements 1] = n u l l ; 5 countofelements ; 6 r e t u r n t r u e ; 7 } e l s e { 8 r e t u r n f a l s e ; 10 } (i) Wir brauchen nun noch einen Dialog, der den Benutzer durch den Vorgang leitet und dann schließlich die deletestudent()-methode aufruft. Für diesen Dialog erstellen wir die Methode deletestudentdialog(). Auch hier soll am Anfang erst mal angezeigt werden, welche Option gewählt wurde. Dann soll der Index des zu löschenden Studenten erfragt werden. Nachdem sich der Benuter dann den Lösch-Vorgang bestätigt hat (hier muss die Methode readboolean() eingesetzt werden), wird die deletestudent(int pindex)-methode aufgerufen. Nun sind alle Funktionen implementiert und das Programm fertig. Teste alle Fuktionen gut durch und behebe vielleicht auftretende Fehler. Sichere dein Programm ab, indem du immer prüfst, ob eine Eingabe gültigen Wert hat oder nicht.