Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

Javakurs/Übungsaufgaben/Studentendatenbank/Musterloesung: Unterschied zwischen den Versionen

(Musterlösung)
 
K (kategorisiert, ein wenig gegendert)
 
Zeile 1: Zeile 1:
'''Hinweis:''' Die Musterlösung kann von eurer Lösung abweichen, da es immer mehrere Varianten gibt ein Problem zu lösen. Im Zweifelsfall Fragt einen Tutor.
+
'''Hinweis:''' Die Musterlösung kann von eurer Lösung abweichen, da es immer mehrere Varianten gibt ein Problem zu lösen. Im Zweifelsfall bittet einen Tutor um Hilfe.
  
 
== Lösung: Student.java ==
 
== Lösung: Student.java ==
Zeile 44: Zeile 44:
  
 
/**
 
/**
* Gibt alle Studenten auf der Konsole aus.
+
* Gibt alle Studierenden auf der Konsole aus.
 
*/
 
*/
 
public void printMe() {
 
public void printMe() {
Zeile 56: Zeile 56:
  
 
/**
 
/**
* Wenn noch Platz in der Datenbank ist, wird ein neuer Student erzeugt und
+
* Wenn noch Platz in der Datenbank ist, wird ein(e) neue(r) Studierende(r) erzeugt und
 
* in die Datenbank eingefügt. Wenn die DB voll ist, wird eine Fehlermeldung
 
* in die Datenbank eingefügt. Wenn die DB voll ist, wird eine Fehlermeldung
 
* ausgegeben.
 
* ausgegeben.
Zeile 75: Zeile 75:
 
System.out.println("Studentendatenbank voll!");
 
System.out.println("Studentendatenbank voll!");
 
} else {
 
} else {
// Ansonsten genau an dieser Stelle einen neuen Studenten einfügen.
+
// Ansonsten genau an dieser Stelle eine neue Studierende einfügen.
 
students[firstFreeIndex] = new Student(name, matnr, studiengang,
 
students[firstFreeIndex] = new Student(name, matnr, studiengang,
 
age);
 
age);
Zeile 95: Zeile 95:
 
}
 
}
 
}
 
}
System.out.println("Student nicht gefunden!");
+
System.out.println("Student oder Studentin nicht gefunden!");
 
}
 
}
  
 
/**
 
/**
* Gibt die Anzahl der Studenten in der Datenbank aus.
+
* Gibt die Anzahl der Studierenden in der Datenbank aus.
 
*/
 
*/
 
public int numberOfStudents() {
 
public int numberOfStudents() {
Zeile 112: Zeile 112:
  
 
/**
 
/**
* Berechnet das durchschnittliche Alter aller Studenten.
+
* Berechnet das durchschnittliche Alter aller Studierenden.
 
*/
 
*/
 
public double averageAge() {
 
public double averageAge() {
Zeile 129: Zeile 129:
 
  </nowiki>
 
  </nowiki>
  
== Lösung: StudentendatenbankTest.java ==
+
== Lösung: StudierendendatenbankTest.java ==
 
  <nowiki>
 
  <nowiki>
 
import java.util.Random;
 
import java.util.Random;
Zeile 136: Zeile 136:
 
  * @author Jonas
 
  * @author Jonas
 
  */
 
  */
public class StudentendatenbankTest {
+
public class StudierendendatenbankTest {
  
 
public static void main(String[] args) {
 
public static void main(String[] args) {
Zeile 170: Zeile 170:
 
 
 
//Aufgabe 5
 
//Aufgabe 5
System.out.println("Studentendatenbank erzeugen...");
+
System.out.println("Studierendendatenbank erzeugen...");
 
StudentDatabase db = new StudentDatabase(3);
 
StudentDatabase db = new StudentDatabase(3);
 
db.addStudent("Hannes", 123456, "Wi-Inf", 27);
 
db.addStudent("Hannes", 123456, "Wi-Inf", 27);
Zeile 185: Zeile 185:
 
 
 
//Aufgabe 7
 
//Aufgabe 7
System.out.println("Anzahl der Studenten in der Datenbank: " + db.numberOfStudents());
+
System.out.println("Anzahl der Studierenden in der Datenbank: " + db.numberOfStudents());
 
db.addStudent("Hannes", 123456, "Wi-Inf", 27);
 
db.addStudent("Hannes", 123456, "Wi-Inf", 27);
System.out.println("Anzahl der Studenten in der Datenbank, nachdem Hannes wieder hinzugefügt wurde: " + db.numberOfStudents());
+
System.out.println("Anzahl der Studierenden in der Datenbank, nachdem Hannes wieder hinzugefügt wurde: " + db.numberOfStudents());
 
 
 
//Aufgabe 8
 
//Aufgabe 8
Zeile 198: Zeile 198:
 
== Kommentare ==
 
== Kommentare ==
 
Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest, ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf "bearbeiten" und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)
 
Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest, ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf "bearbeiten" und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)
 
  
 
<!--
 
<!--
Zeile 204: Zeile 203:
 
Du musst übrigens außerhalb dieses auskommentieren Bereichs schreiben ;)
 
Du musst übrigens außerhalb dieses auskommentieren Bereichs schreiben ;)
 
-->
 
-->
 +
 +
[[Kategorie: Javakurs]]

Aktuelle Version vom 24. Februar 2013, 14:14 Uhr

Hinweis: Die Musterlösung kann von eurer Lösung abweichen, da es immer mehrere Varianten gibt ein Problem zu lösen. Im Zweifelsfall bittet einen Tutor um Hilfe.

Lösung: Student.java

/**
 * @author Jonas
 */
public class Student {
	
	String name;
	int matnr;
	String studiengang;
	int age;
	
	public Student() {
	}

	public Student(String name, int matnr, String studiengang, int age) {
		this.name = name;
		this.matnr = matnr;
		this.studiengang = studiengang;
		this.age = age;
	}

	public void printMe() {
		System.out.println("Student: " + name + "\n  | Matrikelnummer: " + matnr + "\n  | Studiengang: " + studiengang+ "\n  | Alter: " + age);
	}
	
}

Lösung: StudentDatabase.java

/**
 * @author Jonas
 */
public class StudentDatabase {

	private Student[] students;

	public StudentDatabase(int size) {
		students = new Student[size];
	}

	/**
	 * Gibt alle Studierenden auf der Konsole aus.
	 */
	public void printMe() {
		for (Student s : students) {
			// Felder im Array, die keinen Eintrag haben, werden ignoriert.
			if (s != null) {
				s.printMe();
			}
		}
	}

	/**
	 * Wenn noch Platz in der Datenbank ist, wird ein(e) neue(r) Studierende(r) erzeugt und
	 * in die Datenbank eingefügt. Wenn die DB voll ist, wird eine Fehlermeldung
	 * ausgegeben.
	 */
	public void addStudent(String name, int matnr, String studiengang, int age) {
		int firstFreeIndex = -1;
		// Im Array wird das erste freie Feld gesucht.
		for (int i = 0; i < students.length; i++) {
			if (students[i] == null) {
				// Gefunden!
				firstFreeIndex = i;
				break;
			}
		}
		// Wenn firstFreeIndex immer noch -1 ist, wurde kein freies Feld
		// gefunden -> Datenbank ist voll!
		if (firstFreeIndex == -1) {
			System.out.println("Studentendatenbank voll!");
		} else {
			// Ansonsten genau an dieser Stelle eine neue Studierende einfügen.
			students[firstFreeIndex] = new Student(name, matnr, studiengang,
					age);
		}
	}

	/**
	 * Der Student mit der übergebenen Matrikelnummer wird aus der Datenbank
	 * gelöscht. Wenn die Matrikelnummer nicht gefunden wird, wird eine
	 * Fehlermeldung ausgegeben.
	 */
	public void deleteStudent(int matnr) {
		for (int i = 0; i < students.length; i++) {
			// Auch hier die Überprüfung auf null, damit keine
			// NullPointerExceptions geworfen werden.
			if (students[i] != null && students[i].matnr == matnr) {
				students[i] = null;
				return;
			}
		}
		System.out.println("Student oder Studentin nicht gefunden!");
	}

	/**
	 * Gibt die Anzahl der Studierenden in der Datenbank aus.
	 */
	public int numberOfStudents() {
		int result = 0;
		for (Student s : students) {
			if (s != null) {
				result++;
			}
		}
		return result;
	}

	/**
	 * Berechnet das durchschnittliche Alter aller Studierenden.
	 */
	public double averageAge() {
		int totalAge = 0;
		for (Student s : students) {
			if (s != null) {
				totalAge += s.age;
			}
		}
		// Die Konversion nach double ist erforderlich, da sonst eine Division
		// auf ganzen Zahlen durchgeführt wird und Nachkommastellen verloren
		// gehen.
		return (double) totalAge / (double) numberOfStudents();
	}
}
 

Lösung: StudierendendatenbankTest.java

import java.util.Random;

/**
 * @author Jonas
 */
public class StudierendendatenbankTest {

	public static void main(String[] args) {
		//Aufgabe 1
		System.out.println("Erzeuge einen neuen Studenten...");
		Student max = new Student();
		max.name = "Max Musterstudent";
		max.matnr = 424242;
		max.studiengang = "Wi-Inf";
		
		System.out.println("Name: " + max.name + ", Matrikelnummer: " + max.matnr + ", Studiengang: " + max.studiengang);
		
		//Aufgabe 2
		System.out.println("Erzeuge noch einen neuen Studenten...");
		Student paul = new Student("Paul", 213123, "Informatik", 23);
		System.out.println("Name: " + paul.name + ", Matrikelnummer: " + paul.matnr + ", Studiengang: " + paul.studiengang);
		
		//Aufgabe 3
		System.out.println("Ausgabe mithilfe von printMe()...");
		paul.printMe();
		
		//Aufgabe 4
		Student[] studenten = new Student[100];
		Random random = new Random();
		//Schritt 1: Erzeugen...
		for (int i = 0; i < 100; i++) {
			studenten[i] = new Student("Name", random.nextInt(899999) + 100000, "Informatik", 26);
		}
		//Schritt 2: Ausgeben... (Dies kann natürlich auch in der ersten for-Schleife erledigt werden.)
		for (Student s : studenten) {
			s.printMe();
		}
		
		//Aufgabe 5
		System.out.println("Studierendendatenbank erzeugen...");
		StudentDatabase db = new StudentDatabase(3);
		db.addStudent("Hannes", 123456, "Wi-Inf", 27);
		db.addStudent("Marry", 634252, "Informatik", 28);
		db.addStudent("Oliver", 234123, "Elektrotechnik", 22);
		db.printMe();
		//Fehler!
		db.addStudent("Name", 123123, "Informatik", 64);
		
		//Aufgabe 6
		System.out.println("Hannes entfernen...");
		db.deleteStudent(123456);
		db.printMe();
		
		//Aufgabe 7
		System.out.println("Anzahl der Studierenden in der Datenbank: " + db.numberOfStudents());
		db.addStudent("Hannes", 123456, "Wi-Inf", 27);
		System.out.println("Anzahl der Studierenden in der Datenbank, nachdem Hannes wieder hinzugefügt wurde: " + db.numberOfStudents());
		
		//Aufgabe 8
		System.out.println("Durchschnittsalter: " + db.averageAge());
	}
	
}
 

Kommentare

Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest, ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf "bearbeiten" und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)