Brauche dringend eure Hilfe bei der Erstellung eines Kalenders

sheel

I love Asm
Aha.
Dann leg im main nicht Größe 0, sondern 20 an und mach eine weitere int-Variable auf Klassenebene,
um den Füllstand zu speichern. Die am main-Anfang auf 0 setzen.

Beim neuerTermin, sobald der Termin fertig eingelesen und gesettet ist,
den ganzen Termin einfach dem Arrayindex des Füllstands zuweisen.
Also wenn zurzeit 0 Termine da sind ist Index [0] der erste Freie usw.
Einfach die Variable als Index nehmen.
Dann noch die Variable um eins raufzählen.

Was dann noch fehlt, am Anfang von neuerTermin:
Wenn der Füllstand schon 20 ist, ausgebene dass das Array voll ist und abbrechen.
 

Nico K

Grünschnabel
Ok. jetzt stehe ich gerade etwas auf den Schlauch, wie ich Termin Variable machen soll.
ich poste mal alles was ich bisher hab.

Java:
import java.util.Arrays;
import java.util.Scanner;

public class Main {

	TerminArray personen = new TerminArray(10);
	
	protected Scanner keyboardReader;
	
	public neuerTermin() {
	}

	public bearbeiteTermin() {
	}

	public löscheTermin() {
		
	}
	
	public ausgabeTermin() {
	}

	public static void main (String []args){
		Scanner keyboardReader = new Scanner(System.in);
		int menüPunkt = keyboardReader.nextInt();
		while(true){
		System.out.println("Wenn Sie einen neuen Termin anlegen möchten, dann drücken Sie bitte die 1.");
		System.out.println("Wenn Sie einen Termin bearbeiten möchten, dann drücken Sie bitte die 2.");
		System.out.println("Wenn Sie eine Liste aller Termin ansehen möchten, dann drücken Sie bitte die 3.");
		System.out.println("Wenn Sie einen Termin löschen möchten, dann drücken Sie bitte die 4.");
		System.out.println("Wenn Sie das Menü schließen wollen, dann drücken Sie bitte die 5");
		if (menüPunkt == 1){
			neuerTermin();
		}
		if (menüPunkt == 2){
			bearbeiteTermin();
		}
		if (menüPunkt == 3){
			ausgabeTermin();
		}
		if (menüPunkt == 4){
			löscheTermin();
		}
		if (menüPunkt == 5){
			break;
		}
		}
	}
}

Java:
import java.util.Arrays;
import java.util.Scanner;

public class Termin {

	int tag;
	int monat;
	int jahr;
	int stunde;
	int minute;
	String beschreibung;
	String name;
	
	
	
	Termin() {
		this.tag = 0;
		this.monat = 0;
		this.jahr = 0;
		this.stunde = 0;
		this.minute = 0;
		this.beschreibung = "";
		this.name = "";
	}

	public Termin(int t, int m, int j, int s, int mi, String beschreibung, String name) {
		this.tag = t;
		this.monat = m;
		this.jahr = j;
		this.stunde = s;
		this.minute = mi;
		this.beschreibung =beschreibung;
		this.name = name;
	}
	
	public String toString() {
		return "\nTermin |Datum|" + tag + "." + monat+ "." + jahr +  "|Uhrzeit|" + stunde + ":" + minute +
				"|Beschreibung" + beschreibung + "|Name" + name + "|";
	}
}

Java:
import java.util.Arrays;

public class TerminArray {

	int anzahl;
	Termin[] termine;
	
	public TerminArray(int i) {
		anzahl = 0;
		termine = new Termin[i];
	}
	
	public String toString() {
		return "TerminListe |Anzahl" + anzahl + ", termine="
				+ Arrays.toString(termine) + "|";
	}
	
	public void add(Termin per) {
		termine[this.anzahl] = per;
		this.anzahl++;
	}
}
 

sheel

I love Asm
Zur Klasse Termin:
a) Es wäre gut, wenn bei den Variablen private (oder protected) dabeisteht.

b) Die Konstruktoren sind zwar schön, aber min. Get-Methoden werden auch nötig sein.
Und dazu auch gleich Set-Methoden schaden nicht.
Wie schon beschrieben muss man die nicht selbst tippen (langweilig),
sondern kann sie von Eclipse generieren lassen (siehe Seite 1 des Threads hier).

c) toString
Das \n wäre am Schluss sinnvoller.
Ist es wirklich nötig, noch dazuzuschreiben, dass etwas wie 24.12.2012 ein Datum ist?
Bei der Ausgabe wäre sinnvoll, den Arrayindex etc.mit ausgeben (zum Terminlöschen usw.)
Deshalb Vorschlag: Weg mit toString und die Ausgabe dann in der Hauptklasse erledigen.

Zur Klasse TerminArray:
Wozu noch eine Klasse, die wieder add usw. hat, wenns das schon in der Hauptklasse gibt?
Eigentlich kann die ganze Klasse weg.
Es reicht wirklich ein pures Array "Termin[]" in der Hauptklasse.

Zur Hauptklasse:
a) Zu personen:
TerminArray eben durch Termin[] ersetzen.
Warum heißt das personen?
Warum Größe 10? Ich dachte 20.
Bitte auch hier private/protected.
Und die tatsächliche Erstellung würde, wie schon beschrieben, besser ins main passen.

b) zu keyboardReader:
Im main darf man vor keyboardReader nicht mehr Scanner schreiben,
so wird das nämlich eine neue Variable.
Es soll ja die Andere weiter oben gemeint sein.

c) Nochmal: Umlaute sind nicht gut.
lösche, menü...

d) Zu menuePunkt:
Zuerst liest du eine Zahl ein, dann gibst du die Möglichkeiten aus, dann liest du nichts mehr ein?
Vor der Schleife braucht man nur das "int menuePunkt".
Dann in der Schleife erst die Zahl einlesen
(ohne int, also ohne eine zweite Variable menuePunkt zu erzeugen).
 

Nico K

Grünschnabel
Get und set methoden bei allen Konstruktoren? Mit diesen Methoden hab ich mich noch nicht wirklich auseinander gesetzt. Was sollte in diese Methoden rein?
Puh jetzt hast du mich aber durcheinander gebracht.
Bei dem Arry krieg ich jetzt ne Fehlermeldung, dass der return Type fehlt. und ich musste den scanner nun auf static setzten, damit er funktioniert.
Hier mal der geanderte Code der Main class.
Java:
import java.util.Arrays;
import java.util.Scanner;

public class Main {
	
	int anzahl;
	Termin[] termine;
	
	public Termin(int i) {
		anzahl = 0;
		termine = new Termin[i];
	}
	
	protected static Scanner keyboardReader;
	
	public neuerTermin() {
	}

	public bearbeiteTermin() {
	}

	public loescheTermin() {
		
	}
	
	public ausgabeTermin() {
	}

	public static void main (String []args){
		keyboardReader = new Scanner(System.in);
		int menuePunkt;
		while(true){
		System.out.println("Wenn Sie einen neuen Termin anlegen möchten, dann drücken Sie bitte die 1.");
		System.out.println("Wenn Sie einen Termin bearbeiten möchten, dann drücken Sie bitte die 2.");
		System.out.println("Wenn Sie eine Liste aller Termin ansehen möchten, dann drücken Sie bitte die 3.");
		System.out.println("Wenn Sie einen Termin löschen möchten, dann drücken Sie bitte die 4.");
		System.out.println("Wenn Sie das Menü schließen wollen, dann drücken Sie bitte die 5");
		menuePunkt = keyboardReader.nextInt();
		if (menuePunkt == 1){
			neuerTermin();
		}
		if (menuePunkt == 2){
			bearbeiteTermin();
		}
		if (menuePunkt == 3){
			ausgabeTermin();
		}
		if (menuePunkt == 4){
			loescheTermin();
		}
		if (menuePunkt == 5){
			break;
		}
		}
	}
}
 

j2se

Erfahrenes Mitglied
Ist zwar nur Kosmetik, aber Menus baut man nicht in ganzen Sätzen auf, sondern in Kurzform: Zuerst Zahl und dann kurzer Text:

1 Neuer Termin
2 Termin bearbeiten
3 Terminliste drucken
....
5 Terminbearbeitung beenden
 

sheel

I love Asm
Warum ist da jetzt der Konstruktor von Termin mit drin?
Du brauchst ganz ganz wirklich nur die Variablen.
Und Arrayerzeugung bzw. anzahl-auf-0-setzen kommt an den main-Anfang

@static: Stimmt, hätt ich vorher schon sagen sollen.
In der Mainklasse muss alles auf static.
(Oder du legst in der static-main-Methode ein Objekt der Klasse an...aber lassen wir das)

Noch etwas, was ich vorher schon hätte bemängeln sollen:
neuerTermin usw. brauchen auch einen Returnwert. void.


@Get/Set:
Wenn du in Termin Variablen wie tag, monat, jahr usw. hast
und du diese per Konstruktor setzen kannst ists doch gut.
Aber dann weiter?
Was bringen dir diese Variablen im weiteren Programmverlauf?

Es wäre doch hilfreich, wenn man bei einem Termin den Tag etc. wieder abfragen kann.
Java:
public int getTag() {
    return tag;
}
Sowas noch nie gemacht?
...

Weil das für viele Variablen eine langweilige, sinnlose Tipperei ist
und die Methoden zumindest bei deiner Terminklasse nie komplizierter werden
als ein einfaches return kann man Eclipse solche Get-Methoden
für alle Variablen mit ein paar Klicks generieren lassen.
Beschreibung siehe einen meiner letzten Posts.

Analog zu Get gibt es am Besten gleich auch ein Set,
um Variablen auch nach der Terminerzeugung/nach dem Konstruktor noch ändern zu können.
Java:
public void setTag(int tag) {
    this.tag = tag;
}
Auch generierbar.
 

j2se

Erfahrenes Mitglied
Ist dieser Strang überhaupt noch von Interesse?

Was mir bei diesem Kalender fehlt, ist die Plausi des eingegebenen Datums. Es soll doch überprüft werden, ob z.B. der 29 Februar in einem Jahr wirklich vorhanden ist oder nicht. Bei einem GUI hat man zwar etwas mehr Kodieraufwand für das Frame usw. dafür hat der Benutzer nur die Eingabemöglichkeiten, welche die Listboxen etc. bieten.