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

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 ;)