# Mitgliedsverwaltung, Vererbung



## Han (17. Mrz 2006)

Hallo....die Übungsangabe zur aktuellen Übung ist wieder mal sehr ungenau....

Vereinskostenstruktur
Ein Verein möchte sich ein klares Bild von der Einnahmen/Ausgaben Struktur seiner Mitglieder
machen. Mitglieder können dabei entweder physische Personen oder wieder Vereine (also
Zweigstellen des Vereins) sein.
Alle Mitglieder (Klasse Member) haben einen Namen und eine eindeutige Mitgliedsnummer. Die
Mitgliedsnummer wird beim Anlegen eines neuen Mitgliedes vom System vergeben.
Es existieren folgende Arten von physischen Personen als Mitgliedern:
- Unterstützende Mitglieder (Klasse SupportingMember): Diese Mitglieder bezahlen einen
Jahresbeitrag von €100,- und verursachen bei Vereinsfesten Ausgaben von durchschnittlich
€15,- im Jahr.

Die Klasse Member soll folgende Schnittstelle besitzen:
- double getIncome(): berechnet die gesamten Einnahmen, die der Verein durch dieses
Mitglied erzielt.
- double getCosts(): berechnet die gesamten Ausgaben, die dieses Mitglied verursacht.
- double getSurplus(): berechnet den finanziellen Überschuss, den das Mitglied dem
Verein bringt.
- String toString(): Gibt eine ordentlich formatierte und strukturierte Mitgliederliste
(Name, Einnahmen, Ausgaben, Überschuss) zurück.

....man soll halt dynamische Bindung realisieren.....

Jetzt hab ich die Klasse Member als abstrakte Klasse realisiert...


```
abstract public class Member {

	private String name;
	private double memberNr;
	private double CountMemberNr;
	
	public Member(String name){
		this.name = name;
		this.memberNr = CountMemberNr++;
	}
	
	public String getName(){
		return name;
	}
	
	abstract public String memberType();
	
//	berechnet die gesamten Einnahmen, die der Verein durch dieses
//	Mitglied erzielt.
	abstract public double getIncome();
	
//	berechnet die gesamten Ausgaben, die dieses Mitglied verursacht.
	abstract public double getCosts();
	
//	berechnet den finanziellen Überschuss, den das Mitglied dem
//	Verein bringt.
	abstract public double getSurplus();
	
//	Gibt eine ordentlich formatierte und strukturierte Mitgliederliste
//	(Name, Einnahmen, Ausgaben, Überschuss) zurück.
	public String toString(){
		
		String list = "Mitgliederliste:\n"+
			"Mitglied vom Typ \n" +
			memberType() + ": " +
			"(" + getName() + ", " + getIncome() + ", " + getCosts() + ", " + getSurplus() + ")";
		
		return list;
	}

}
```

So....und die Klasse SupportingMember folgendermaßen:

```
public class SupportingMember extends Member{


	public SupportingMember(String name){
		super(name);
	}
	
	public String memberType(){
		return "SupportingMember";
	}
	
//	berechnet die gesamten Einnahmen, die der Verein durch dieses
//	Mitglied erzielt.
	public double getIncome(){
	
	}
	
//	berechnet die gesamten Ausgaben, die dieses Mitglied verursacht.
	public double getCosts(){
	
	}
	
//	berechnet den finanziellen Überschuss, den das Mitglied dem
//	Verein bringt.
	public double getSurplus(){
	
	}
	
}
```

Nun frag ich mich was ich alle in die Klasse SupportingMember hineingeben soll:In der Beschreibung steht ja:
//Unterstützende Mitglieder (Klasse SupportingMember): Diese Mitglieder
//	bezahlen einen
//	Jahresbeitrag von €100,- und verursachen bei Vereinsfesten Ausgaben von 
//	durchschnittlich
//	€15,- im Jahr.

....ich meine wie is das gmeint bei den Methoden...is das mehr so gmeint:
boolean payedBeitrag;
public void boolean payBeitrag(int money){
      if(money == 100){
            payedBeitrag = true;
      }
}

...dass ich dann in getIncome() praktisch vorher zuerst getIncome() überprüf und dann erst ausgeben kann wie viel 
das Maitglied an Einnahmen bringt. Und über welchen Zeitrahmen soll sich das Ganze erstrecken? Wahrscheinlich über  einem Zeitrahmen von so einem Jahr.....irgendwo muss man da ja auch das Jahr eingeben können wann derjenige den Beitrag gezahlt hat....damit ein SupportingMember einen Beitrag überhaupt zahlen kann muss man da ja dann auch noch eine Methode mit payBeitrag machen....is das so gmeint oder was glaubt ihr was diese schwammige Angabe vermitteln will....

mfg,
Hannes


----------



## Caffè Latte (17. Mrz 2006)

Hi,

ich vermute, dass mit getIncome() einfach der Wert, also z.B. 100 bei SupportingMember zurückgeliefert werden soll. Ebenso bei den anderen Methoden.

Dass ein Mitglied seinen Beitrag nicht zahlt scheint nicht berücksichtigt zu werden. Ebensowenig, dass er über Maß konsumieren kann.

Allerdings kann ich auch völlig daneben liegen. Bin schon ne Weile raus aus der Ausbildung. 

Caffè Latte


----------



## Han (20. Mrz 2006)

Ja...das hab ich am Anfang auch gedacht aber was soll ich dann bei getSurplus() hinschreiben?..also muss das Ganze fast komplexer sein...nur wie?

mfg,
Hannes


----------



## Han (20. Mrz 2006)

Hallo...ich habs jetzt mal so gmacht....glaubts ihr das des passt?


```
public class SupportingMember extends Member{

//	Unterstützende Mitglieder (Klasse SupportingMember): Diese Mitglieder
//	bezahlen einen
//	Jahresbeitrag von €100,- und verursachen bei Vereinsfesten Ausgaben von 
//	durchschnittlich
//	€15,- im Jahr.

	public SupportingMember(String name){
		super(name);
	}
	
	public String memberType(){
		return "SupportingMember";
	}
	
//	berechnet die gesamten Einnahmen, die der Verein durch dieses
//	Mitglied erzielt.
	public double getIncome(){
		//Jahresbeitrag von 100 €
		return 100;
	}
	
//	berechnet die gesamten Ausgaben, die dieses Mitglied verursacht.
	public double getCosts(){
		//Ausgaben von 15€ im Jahr bei Vereinsfesten
		return 15;
	}
	
//	berechnet den finanziellen Überschuss, den das Mitglied dem
//	Verein bringt.
	public double getSurplus(){
		//mehr Gewinn als Verlust pro Jahr
		return 100-15;
	}
	
}
```


...also eher sehr einfach...

mfg,
Hannes


----------



## Caffè Latte (21. Mrz 2006)

Hi,

nimm Variablen (oder auch Konstanten) für die Werte und in der getSurplus() Methode rechnest du dann damit. Sollte sich was ändern, brauchst du den Quelltext nur an einer Stelle ändern.

Caffè Latte


----------

