Terminkalender

keineplan

Mitglied
Hey Leute,
ich soll da was programmieren hab aber keine Ahnung wie das gehen soll. Kann mir jemand helfen?

Termine haben haben einen Zeitpunkt, eine Beschreibung und nden an einem Ort statt.
Man unterscheidet Termine, die
 einmalig,
 wiederholt alle n Tage (endlos) sowie
 wiederholt alle n Tage innerhalb einer festen Zeitspanne
statt nden. Ziel dieser Aufgabe ist es, diese Hierarchie und die entsprechenden Gemeinsamkeiten
durch Vererbung moglichst gut umzusetzen.
Zur Vereinfachung gehen wir davon aus, dass alle Zeitangaben (also auch Beginn und Ende
von Zeitspannen) in Tagen nach Beginn Ihres Studiums (1. April) erfolgen. Der int-Wert 6
reprasentiert also den 7. April.
Programmieren Sie eine Klasse Termin sowie die davon abgeleitete Klassenhierarchie zur
Darstellung einmaliger, sich endlos wiederholender sowie sich nur innerhalb einer vorgegebenen
Zeitspanne wiederholender Termine.

Ausserdem soll die Klasse Termin eine Methode int diff(int tag) zur Verfugung stellen,
die bestimmt, in wievielen Tagen relativ zum Zeitpunkt tag der entsprechende Termin zum
nachsten Mal statt ndet. Im Falle vergangener, einmaliger Termine wird entsprechend eine
negative Zahl zuruckgegeben. Fur sich wiederholende Termine betrachten Sie die folgenden
Beispiele:
 Ein sich endlos wiederholender Termin, der seit dem 25. Tag jede Woche wiederholt
statt ndet, liefert fur t.diff(27) die Zahl 5 zuruck.
 Ein Termin, der sich in der Zeit vom 2. bis zum 32. Tag alle 3 Tage wiederholt
(2; 5; : : : ; 26; 29; 32), liefert fur t.diff(27) die Zahl 2 zuruck.
 Fur denselben Termin, der also vom 2. bis zum 32. Tag alle 3 Tage statt ndet, liefert
t.diff(33) entsprechend die Zahl -1 zuruck.
Implementieren Sie anschliessend die Klasse Terminkalender, mit deren Hilfe
 Termine eingetragen (void fuegeTerminHinzu(Termin t)),
 Termine eines Tages abgefragt (Termin[] termineAm(int tag)) und
 der relativ zu einem Tag tag zukunftig als nachstes statt ndende Termin bestimmt
(Termin naechsterTermin(int tag))
werden konnen. Hinweis: Zur Verwaltung der Liste der Termine konnen Sie die bekannten
Listenimplementierungen einfach anpassen.
Schreiben Sie eine Klasse TerminkalenderTest, in deren main-Methode Sie Ihre Klassen
und die erwarteten Ruckgabewerte testen.
 
Zuletzt bearbeitet von einem Moderator:
M

Marcinek

Gast
Du solltest anfang eine Klasse Termin zu bauen und davon abgeleitet die drei Arten.-
 
M

Marcinek

Gast
Du hast mehrere Optionen.

1. Du schreibst mir eine PM und teilst mir mit, wieviel du bereit bist für die Aufgabe zu bezahlen, damit ich die die komplette Lösung schicke.

2. Du versuchst es selber und eignest dir dabei viel wissen an. Und Fragst hier nur die unlösbaren Fragen.

3. Du fragst dich um jedes Detail hier im Forum- Dies könnte aber Monate dauern, bis du dass dann fertig hast ;D
 
M

Marcinek

Gast
Das höngt davon ab, wie du Termin modelliert hast.

Im Prinzip ist das Beispiel in der Aufgabenstellung ja ok

Ein sich endlos wiederholender Termin, der seit dem 25. Tag jede Woche wiederholt
statt ndet, liefert fur t.diff(27) die Zahl 5 zuruck.

Man startet am 25. Tag jede Woche (= 7 Tage) einen Termin. Ergo findet der nächste


Dann soll man hier wohl 27-25 ausgeben also in 5 Tagen haste das nächste Ereignis.

Aufpasssen muss man dann, wenn man ab dem 2. Tag jede Woche hat, dann diff(27) = 7 und nicht 25.

Gruß
 
Zuletzt bearbeitet von einem Moderator:

keineplan

Mitglied
Ok das versteh ich, aber ich weiß dann immer noch nicht was ich dann schreiben muss.
Und muss die Klasse Termin abstract und damit int diff dort nur ohne Code ist?
 

mjdv

Bekanntes Mitglied
Streng dich dochmal ein wenig an, programieren lernen ist eben kein Ponyhof, ich hab die aufgabe auch geschafft :p
 

keineplan

Mitglied
Also dein Satz hättest dir wirklich sparen können. Dieses Forum ist glaub da um Leuten weiterzuhelfen, die ein Problem haben und sich lustig zu machen
 
M

Marcinek

Gast
Warum sollte jemand im Forum für dich das aufholen, was du die letzten Monate verschlafen hast?

Du hast meine PM erhalten. Und du kennst deine Alternativen ;) - Ohne uns hier etwas mehr zu Zeigen WO dein Problem ist, können wir nicht helfen.

Lies dir doch einfach die ersten paar Kapitel des Buches "Java ist auch eine Insel" durch.

Wenn du dann konkrete Fragen hast, kannst du sie stellen.

Doch beachte, dass Fragen, die man mit 2 Sekunden googeln beantworten kann, nicht unbedingt in das Forum gehören.
 
J

JohannisderKaeufer

Gast
 einmalig,
 wiederholt alle n Tage (endlos) sowie
 wiederholt alle n Tage innerhalb einer festen Zeitspanne

einmalig kann man als spezialfall sehen von wiederholt alle n Tage innerhalb einer festen Zeitspanne.
Start und End-Datum sind gleich und man nimmt z.B. eine tägliche Wiederholung.
 

ARadauer

Top Contributor
Also dein Satz hättest dir wirklich sparen können. Dieses Forum ist glaub da um Leuten weiterzuhelfen, die ein Problem haben und sich lustig zu machen
Generell helfen wir gerne bei Probelmen und konkreten Fragen, machen aber keine ganzen Hausaufgaben.

Deine Frage sieht so aus: Ich kann das nicht: Aufgabenstellung

Was sollen wir jetzt machen? Dir von Grund auf erklären, was Schritt für Schritt zu tun ist? Ich denke du wirst selber einsehen, dass das keiner machen wird.
Also 2 Möglichkeiten:
1. du bietest Geld
2. Poste mal was du hast und wir helfen gerne weiter oder stelle konkrete Fragen

Man unterscheidet Termine, die
 einmalig,
 wiederholt alle n Tage (endlos) sowie
 wiederholt alle n Tage innerhalb einer festen Zeitspanne
statt nden. Ziel dieser Aufgabe ist es, diese Hierarchie und die entsprechenden Gemeinsamkeiten
durch Vererbung moglichst gut umzusetzen
Tipp:
Also Termin hat warscheinlich den Zeitpunkt und Beschreibung usw...
WiederholenderTermin erbt von Termin und hat zusätzlich die n Tage
EndlicherTermin erbt von WiederholenderTermin und hat ein end Datum
 

Andi_CH

Top Contributor
Was verwendest du für eine Zeichencodierung? Ich sehe ganz viel Dinge wie 
(Quadrate mit 000F bzw 007F drin) und beim kopieren des Textes gingen wohl ganze Worteile verloren...

--

Aber zurück zum Thema - ich sehe da nur eine Klasse mit Attributen
(Vererbung ist in diesem Fall höchstens übungshalber gut, aber in der Praxis schlecht - da liegt ein Terminobjekt rum und ich will den Termin von "einmalig" auf "Widerholend" ändern - hm - doof - es handelt sich um eine "Einmalig"-Objekt, ich müsste als erst ein neues Objekt kreieren, Daten umkopieren ... kurz gesagt: nicht wirklich elegant)


Einiges wurde schon von anderen so ähnlich gesagt, aber ich fasse mal zusammen:


Klasse Termin

- Ein Attribut "Art" (ein Enum)
- - einmalig (vielleicht unnötig, siehe unten)
- - endlos wiederholt
- - wiederholt mit Ende

- Ein Anfangsdatum (Das Datum an dem der Termin das erste oder einzige mal stattfindet)
- Ein Enddatum (Das Datum nach dem der Termin nicht mehr gültig ist)
- Ein Wiederholungsintervall (int) - nach wie vielen Tagen wird das Event wiederholt (Es kann sein, dass sich "einmalig" oben erledigt - Widerholungsintervall == 0 sagt dasselbe aus. Manchmal helfen redundante Informationen allerdings einen eleganteren Programmierstil zu pflegen)

Offentsichtlich geht es aber darum zu beweisen, dass man Vererbung einsetzen kann - also los, dann mach es halt so, aber nur für diese Übung
 

parabool

Bekanntes Mitglied
:)


diff = intervall - ((tag-start) mod intervall)

in java dann:

Java:
int tag = 27,start = 2,intervall = 7;	
System.out.println("diff = "+(intervall-((tag-start)%intervall)));
 
Zuletzt bearbeitet:

will

Neues Mitglied
hallo miteinander,

mich wuerde interessieren wie ich step by step den code aufbauen sollte. Das Buch "Java ist auch eine Insel" finde ich fuer Erklaerungen ganz gut, allerdings hilft es nicht eine Programm wie in der Aufgabenstellung verlangt aufzubauen.

Was mich also interessiert und wo ich nicht weiterkomme - trotz Buch ist - wie baue ich sowas auf

Vielleicht kann ja da jemand Stichpunktartig helfen - wuerde mich sehr freuen, da ich mich mit dem coden schwertue.

Also vorab schonmal Danke :toll:

Und fuer alle die sagen wollen - wo liegt genau dein Problem ?

Als aller erstes: Wie gestalte ich eine Sinnvolle Klasse Termin ?
packe ich fuer jeden umstand eine variable rein ?
 

will

Neues Mitglied
hi,

geht ja super schnell hier :)

das mit den tagen berechnen hab ich schon gesehen - dachte erst an modulo 7 aber intervalle koennen ja auch mehr als 7 tagen sein...soweit schon klar.

Also komme schon am Anfang ins stolpern....

Als aller erstes brauche ich eine Klasse Termin:

die muss folgendes koennen :

Konstruktor mit Terminen:

  • einmalig,
  • wiederholt alle n Tage (endlos) sowie
  • wiederholt alle n Tage innerhalb einer festen Zeitspanne


davon abgeleitete Klassenhierarchie zur
Darstellung einmaliger, sich endlos wiederholender sowie sich nur innerhalb einer vorgegebenen
Zeitspanne wiederholender Termine

und die erwaehnte diff-Methode

daraus ergibt sich fuer mich folgende Klasse:

Java:
package terminkalender;



public class Termin{

	public String text; // details for appointment
	public int tag ; // day of month
	public int repeat; // repeating every .... days
	public boolean endless; // if it repeat endlessly
	public int repTill; // repeat till specific day
	public String place ; // where is the appointment taking place
	public int actdate; // actual day for diff method
	
	public Termin(String text,int tag,int repeat, int repTill, boolean endless, String place){
	
	this.text = text;
	this.tag = tag;
	this.place = place;
	this.repeat = repeat;
	this.endless = endless;
	this.repTill = repTill;
	}

	public int diff(actdate){
		
		if( repeat != 0 && tag < actdate){
			if( tag > actdate){
				return repeat-(tag-actdate)%repeat;
			}
			else{
				System.out.println("Fehler");
			}
		else{
			System.out.println("Kein Termin vorhanden");

			}
		}
		
		
	}
	
}


Habe bei Eclipse einige rote Kreuzchen noch drin aber warum verstehe ich noch nicht so ganz....:rtfm:

Ist das ein richtiger Ansatz ?
Versteh das mit der Klassenhierachie nicht s ganz...kann ich Termine mit weniger Variablen gestallten und generisch aufbauen und speziellere Typen mit zusaetzlichen Variablen ausstatten ?
 
J

JohannisderKaeufer

Gast
Die roten Kreuzchen in Eclipse kommen daher, da in deiner Methode diff ein Ergebnis zurückliefern mußt.

Durch das if-else, kannst du zu einem else Teil kommen bei dem es kein return-Statement gibt, sondern nur eine Ausgabe auf der Konsole. Das reicht aber nicht.

Termine haben haben einen Zeitpunkt, eine Beschreibung und finden an einem Ort statt.

D.h. das nur das in die Klasse Termin hineinkommt. Ausserdem bekommt die klasse die methode int diff(int tag)

Java:
package terminkalender;
 
public abstract class Termin{
 
    public String text; // details for appointment
    public String place ; // where is the appointment taking place
    
    public Termin(String text, String place){
        this.text = text;
        this.place = place;
    }

    public abstract String getZeitpunkt();
 
    public abstract int diff(int tag);
        
    
}

Mehr braucht die Klasse Termin nicht. Um nun einen einmaligen Termin zu erhalten kann man wie gefordert Vererbung nutzen. Hierbei ergänzt man die abstracten Methoden.

Java:
public class EinmaligerTermin extends Termin{
private int date;
public EinmaligerTermin(String text, String place, int date){
  super(text,place);
  this.date = date;
}
public String getZeitpunkt(){
  return "" + date;
}

public int diff(int tag){
  return date- tag;
}

}

Entsprechend kann man nun von Termin für die Klassen für sich WiederholendeTermine ableiten. Du brauchst also nicht alles in einer Klasse Termin abhandeln.
 

gogocho

Mitglied
Ich habe aenliche Aufgabe eigentlich. z.B. fuer einen Termin, der innerhalb einer fester Zeitspanne stattfindet, koennte die klasse etwas so aussehen?
Java:
public class TerminZeitspanne extends Termin {
    private int day;
    private int start;
    private int end;
    private int intervall;
    public TerminZeitspanne(String Beschreibung, String Ort, int day, int start, int end, int intervall){
        super(Beschreibung, Ort);
        this.day=day;
        this.start=start;
        this.end=end;
        this.intervall=intervall;
    }
    public String getZeitpunkt(){
        return ""+day;
    }
    public int diff (int tag){
        if (tag<start||tag>end)
            return -1;
        
        else 
            return (intervall-((tag-day)%intervall));
    }
}
 
Zuletzt bearbeitet:

Neue Themen


Oben