Aufgabe: Anwesenheitslisten
Bisher wurde die Anwesenheitsliste eines Kurses in einem Textdokument abgespeichert (Datei
anwesenheit.txt in Ilias). Da die Teilnehmerzahlen allerdings stetig steigen ist dieses Vorgehen
nichtmehr durchführbar. D.h. die Daten müssen in eine praktische Datenstruktur übertragen werden.
Beachten Sie dabei folgende Hinweise:
1.Verwalten Sie jeden Kursteilnehmer als Person in einer LinkedList in der Klasse DateiVerwalten.
Dazu wurde die Klasse Person bereits implementiert:
2. Schreiben Sie eine Methode listeLesen(). Diese soll über einen FileReader die Zeichenketten
des Textdokuments bis zum Ende Schritt für Schritt als int c einlesen. Prüfen Sie dazu:
i. Zeilenumbrüche: '\n'
ii. Leerzeichen: ' '
iii. relevante Buchstaben:
(c >= 'A' && c <= 'Z')||(c >= 'a' && c <= 'z')||(c=='+')||(c=='-')
Verwenden Sie einen StringBuffer, um die Zeichenketten zu rekonstruieren. Sobald ein
Leerzeichen auftritt ist ein Wort vollständig und kann einem Person-Objekt hinzugefügt werden.
(Nutze hier die bereits implementierte Logik von setAttribut in Person)
Am Ende jeder Zeile wurden alle Informationen zu einer Person gesammelt und das Person-Objekt
kann der Liste hinzugefügt werden um die nächste Person zu erstellen.
3. Schreiben Sie eine Methode listeAusgeben(), welche die LinkedList sinnvoll ausgibt.
Tipps:
s.append((char)c) fügt int-Wert c einem StringBuffer s hinzu.
s.toString() macht aus einem StringBuffer s einen normalen String.
Das hier habe ich bis jetzt geschrieben:
Die (externe .txt-)Liste kann bereits lesen/ausgeben lassen.
Jetzt muss ich ja immer dann, wenn ein Leerzeichen gelesen wird, eine neue Person hinzufügen. Doch damit habe ich jetzt meine Probleme. Eines davon ist, dass ich die Name als String einlese, sie aber als StringBuffer brauche.
Kann mir da jemand helfen?
Bisher wurde die Anwesenheitsliste eines Kurses in einem Textdokument abgespeichert (Datei
anwesenheit.txt in Ilias). Da die Teilnehmerzahlen allerdings stetig steigen ist dieses Vorgehen
nichtmehr durchführbar. D.h. die Daten müssen in eine praktische Datenstruktur übertragen werden.
Beachten Sie dabei folgende Hinweise:
1.Verwalten Sie jeden Kursteilnehmer als Person in einer LinkedList in der Klasse DateiVerwalten.
Dazu wurde die Klasse Person bereits implementiert:
Java:
public class Person {
private String vorname, nachname;
private boolean anwesend;
public String getName(){
if (anwesend) return vorname+" "+nachname+" ist anwesend.";
else return vorname+" "+nachname+" ist nicht anwesend.";
}
public void setAttribut(int zaehler, String name){
if (zaehler == 1) vorname = name;
if (zaehler == 2) nachname = name;
if (zaehler == 3 && name.charAt(0) == '+') anwesend = true;
else anwesend = false;
}
}
des Textdokuments bis zum Ende Schritt für Schritt als int c einlesen. Prüfen Sie dazu:
i. Zeilenumbrüche: '\n'
ii. Leerzeichen: ' '
iii. relevante Buchstaben:
(c >= 'A' && c <= 'Z')||(c >= 'a' && c <= 'z')||(c=='+')||(c=='-')
Verwenden Sie einen StringBuffer, um die Zeichenketten zu rekonstruieren. Sobald ein
Leerzeichen auftritt ist ein Wort vollständig und kann einem Person-Objekt hinzugefügt werden.
(Nutze hier die bereits implementierte Logik von setAttribut in Person)
Am Ende jeder Zeile wurden alle Informationen zu einer Person gesammelt und das Person-Objekt
kann der Liste hinzugefügt werden um die nächste Person zu erstellen.
3. Schreiben Sie eine Methode listeAusgeben(), welche die LinkedList sinnvoll ausgibt.
Tipps:
s.append((char)c) fügt int-Wert c einem StringBuffer s hinzu.
s.toString() macht aus einem StringBuffer s einen normalen String.
Das hier habe ich bis jetzt geschrieben:
Java:
package niepack;
import java.io.FileReader;
import java.io.IOException;
import java.util.LinkedList;
public class Person {
private String vorname, nachname;
private boolean anwesend;
public String getName(){
if(anwesend){
return vorname +" " +nachname+" ist anwesend.";
}else{
return vorname + " " + nachname + " ist nicht anwesend";
}
}
public void setAttribut(int zaehler, String name){
if(zaehler == 3){
vorname = name;
}
if(zaehler == 2){
nachname = name;
}
if(zaehler == 1 && name.charAt(0) == '+'){
anwesend = true;
}
}
public String dateiLesen(){
String s = "";
FileReader reader = null;
try{
reader = new FileReader("anwesenheit.txt");
int c = reader.read();
while(c != -1){
s = s + (char)c;
c = reader.read();
}
reader.close();
}catch(IOException e){
e.printStackTrace();
}
return s;
}
public static void main(String[] args) {
StringBuffer buffer = new StringBuffer();
LinkedList<StringBuffer> liste = new LinkedList<StringBuffer>();
}
}
Die (externe .txt-)Liste kann bereits lesen/ausgeben lassen.
Jetzt muss ich ja immer dann, wenn ein Leerzeichen gelesen wird, eine neue Person hinzufügen. Doch damit habe ich jetzt meine Probleme. Eines davon ist, dass ich die Name als String einlese, sie aber als StringBuffer brauche.
Kann mir da jemand helfen?
Zuletzt bearbeitet: