# Geldautomat-Programm



## nicooooo (13. Jul 2010)

Hallo ihr,

ich muss bis Donnerstag ein Programm schreiben, dass sich Geldautomat nennt.
Derzeit benutze ich JCreator LE und mein Hauptproblem besteht darin, dass ich das Programm nichtmal einrichten kann!
Ich bekomme das mit dem "CLASS" einrichten nicht hin -.-
In der Schule mussten wir soetwas nie machen, sondern konnten immer gleich Anfangen mit Programmieren, daher habe ich davon absolut keine Ahnung.
Kann mir bitte jemand helfen??

Untersützung beim Programmieren des Programmes bräuchte ich dann auch noch.

Wie gesagt, es muss ein Bankautomat sein.
Zuerst muss man einen PIN eingeben. ist dieser falsch, hat man noch weiter 2x die möglichkeit ihn neu einzugeben.
ist er richtig hat man die wahl zwischen einzahlung, auszahlung und überweisung.
dabei darf die auszahlung und überweisung das kontoguthaben nicht überschreiten =>konto kann man nicht überziehen!

zuletzt muss dann wieder eine ausgabe des "neuen" bankguthabens erscheinen.

Wäre echt sau nett wenn mir jemand helfen kann. ich brauche es dringend bis Mittwoch 14.07 abends!

Liebe Grüße!!


----------



## DrPCox (13. Jul 2010)

tja..ich würde sagen du hast ein problem. du wirst hier ohne geld schwer jemanden finden, der dir das programm fertig macht und wenn es schon daran scheitert Klassen zu erstellen (allein schon die Aussage: "wir haben einfach immer angefangen zu programmieren) ist echt nicht mehr viel möglich.
Also ich würde sagen du guckst mal hier: Jobbörse - java-forum.org 
oder guckst mal hier rein:


----------



## Haave (13. Jul 2010)

Code schreiben kannst du doch auch ohne diesen JCreator; nimm einfach irgendeinen langweiligen Editor. Ein bisschen Eigeninitiative (d.h. eigenen Code posten) musst du schon, sonst hilft hier keiner, und die Aufgabe ist wirklich nicht schwer.
Was JCreator angeht: Ist dir die offizielle Hilfe denn keine Hilfe?

Überhaupt versteh ich nicht so richtig, wie das passieren kann… programmiert ihr nur in der Schule und bekommt keine Hausaufgaben? Sonst hättest du dir doch schon längst so eine IDE installieren müssen… :bahnhof:


----------



## Wortraum (13. Jul 2010)

Wie wäre es, wenn Du die Entwicklungsumgebung benutztest, die ihr auch in der Schule verwendet? Aber ob nun mit oder ohne Entwicklungsumgebung: mehr, als lediglich das Sun‐JDK zu installieren, mußt Du eigentlich nicht tun.


----------



## nrg (13. Jul 2010)

shellbasierend ist das allerdings echt kein großer akt. man müsste noch abklären, woher die "Stammdaten" (pin, kontostand) gezogen werden (datenbank, statisch, properties, verschlüsselung erfolderlich?). Im leichtesten Fall ist das eine Sache von 10 Minuten und würde dich vielleicht 20 Euro kosten. Kann allerdings auch sehr viel größer werden (gui, Stammdaten von DB + verschlüsselung, etc)


----------



## Haave (13. Jul 2010)

Wenn das Programm, wie von nrg vermutet, shellbasiert und ohne weitere Kinkerlitzchen wie Datenbanken und Verschlüsselungstechniken gemacht werden soll (wovon ich bei einer Schulaufgabe jetzt einfach mal ausgehe), dann ist das doch wirklich nicht so schwierig.
Für 20 Euro wär ich sogar dabei


----------



## nrg (13. Jul 2010)

aber du könntest dir auch einfach selbst ein paar gedanken machen. hast es dir allerdings mit dem schlechten start schon deutlich schwerer gemacht . so schnell wird dir jetzt keiner eine "komplettlösung" posten aber helfen tun wir natürlich gern. Wenn wir von dir etwas engagement sehen, ist sich denke auch keiner zu schade 10 minuten seiner Zeit zu opfern um dir einen gefallen zu machen .


----------



## nicooooo (13. Jul 2010)

vielen dank schonmal an euch, dass jemand antwortet. 
also ich habe es mittlerweile hinbekommen so eine "class" zu erstellen.
hab somit mit der programmierung beginnen können.

bezüglich den daten wie pin und kontostand gibt es keine datenbank von welcher die angaben bezogen werden.

ich hab lediglich am anfang die variablen deklariert.
z.b. short PIN-Nummer=1234;
      double Kontostand=20000;

ich bin nun so weit gekommen dass man den PIN code eingeben kann und wollte nun eine while-bedingung machen sodass man den PIN bei falscheingabe noch erneut 2x eingeben kann.

ich komme allerdings nicht wirklich weiter.
was meint ihr? kann ich das mit einer while bedingung machen oder doch eher if- bedingung.
nach der korrekten pin eingabe muss dann ein menü kommen mit der auswahl geld auszahlen, überweisen, einzahlen.

natürlich zeige ich eigenitiative und wäre euch sehr dankbar wenn ihr mir helfen könnt.

als kleine rechtfertigung muss ich sagen, dass wir informatik in der schule nur 2-stündig haben, es nie hausaufgaben gibt und wie bisher nur die einfachsten der einfachen programmen geschrieben haben, für mich ist daher das programmieren eines geldautomaten doch ziemlich anspruchsvoll


----------



## Haave (13. Jul 2010)

Ich würde das mit einer do-while-Schleife machen, damit auf jeden Fall einmal eingelesen wird. Das könnte z.B. so aussehen:


```
java.util.Scanner sc = new java.util.Scanner(System.in);
int fail = 0;
int eingabe = 0;
do {
	eingabe = sc.nextInt();
	if(eingabe != pin) {
		System.out.println("Falsche Zahlenkombination!");
		fail++;
	}
	if(fail == 3) {
		System.out.println("Zu oft falsche Kombination eingegeben - Abbruch!");
		System.exit(0);
	}
} while(eingabe != pin);
```


----------



## nicooooo (13. Jul 2010)

@Haave:

sollte ich es gar nicht mit unterstützung von hier hinbekommen, wärst du dann bereit für 20EUR es für mich zu programmieren?

Ich habe einfach nur schiss, dass ich es bis donnerstag morgen nicht hinbekomme und brauche daher auch einen plan B


----------



## nicooooo (13. Jul 2010)

nochmal @haave:

das mit dem java.util.Scanner was du mir gepostet hast, haben wir in der schule noch nicht gemacht.???:L
d.h. wenn ich mit sowas ankomme, ist es gleich klar dass ich nichts davon alleine gemacht habe 

das programm muss so simple wie möglich programmiert sein, mit dein einfachsten mitteln eben.

wie gesagt while schleifen und if-bedingungen, das haben wir schon gemacht und kann verwendet werden.

sry, dass das alles so kompliziert ist mit mir:autsch:


----------



## nrg (13. Jul 2010)

du musst entweder scanner oder bufferedreader (instanziiert mit einem InputStreamReader nehmen). Kann mir aber vorstellen, dass ihr Klassen aus der Schule bereitgestellt bekommen habt (ist oft so - find ich persönlich aber scheisse )


----------



## Haave (13. Jul 2010)

nicooooo hat gesagt.:


> das mit dem java.util.Scanner was du mir gepostet hast, haben wir in der schule noch nicht gemacht.???:L


Naja, aber was habt ihr denn dann in der Schule gemacht? Was ich bei dir so raushöre, ist folgendes: Ihr habt in Informatik nur die absoluten Basics gemacht, was viel zu wenig war, um mit diesem Wissen die jetzige Aufgabe lösen zu können (ich unterstelle mal, dass du im Unterricht gut aufgepasst hast und es jetzt nicht an mangelndem Wissen liegt). Wenn das so sein sollte, hast du ja im Prinzip keine andere Wahl, als Mittel zu benutzen, die im Unterricht nicht eingeführt wurden.




nicooooo hat gesagt.:


> d.h. wenn ich mit sowas ankomme, ist es gleich klar dass ich nichts davon alleine gemacht habe
> 
> das programm muss so simple wie möglich programmiert sein, mit dein einfachsten mitteln eben.


Wie simpel? Die Klasse Scanner ist eigentlich eine recht simple Klasse und der Umgang mit ihr erfordert nicht besonders viel Können (ist zumindest meine Ansicht, da Scanner auch bei mir die erste Klasse war, die ich aktiv verwendete). Wenn jetzt natürlich alles Wissen über Klassen und Objekte fehlt, dann weiß ich auch nicht. Irgendwie musst du ja etwas einlesen. Das könntest du zwar im Programmaufruf über die Argumente machen, aber dann müsste der Programmaufruf ein komplett anderer sein (PIN-Eingabe und alle anderen Wünsche des Nutzers müssten dann in den Argumenten erfolgen, das wäre nicht besonders benutzerfreundlich).



EDIT: Die gerade von nrg vorgeschlagene Klasse BufferedReader wäre prinzipiell eine Alternative zu Scanner, würde aber (gerade weil es hier um Zahlen geht) viel mehr Arbeit machen. BufferedReader liest mit readLine() eine Zeile ein, das ist dann aber ein String und du müsstest das ganze dann erst mit Integer.parseInt() wieder zu einem int machen. Er hat auch noch die Methode read(), die liest aber wiederum nur ein einzelnes Zeichen. Die Methode nextInt() von Scanner ist da IMHO wirklich sehr komfortabel.
EDIT²: Und ja, für 20 Euro würde ich es dir programmieren, aber dann müsste ich noch genauer wissen, wie einige Dinge im Programm aussehen sollen, vor allem die von dir angesprochene Menüauswahl mit Auszahlung, Einzahlung und Überweisung: Wie weit soll das (besonders der Punkt Überweisung) ausprogrammiert sein?


----------



## nrg (14. Jul 2010)

hier ein Beispiel mit BufferedReader:

```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Geldautomat {
	
	static int pin = 1234;
	static double kontostand = 20000;
	
	public static void main( String[] args ) throws IOException {
		
		BufferedReader bisr = new BufferedReader( new InputStreamReader( System.in ) );
		boolean correctPin = false;
		int i = 3;
		
		while ( i > 0 && !correctPin ) {
			System.out.print( "Bitte geben Sie Ihren Pin ein> " );
			if ( ! (correctPin = checkPin( bisr.readLine() ) ) )
				System.out.println( "Sie haben einen falschen Pin eingeben. Bitte wiederholen Sie die Eingabe. " + --i + " verbleibende Versuche." );
			else
				System.out.println( "Pin korrekt!" );
		}
		
		if ( !correctPin ) {
			System.out.println( "Sie haben den Pin zu oft falsch eingegeben. Der Vorgang wird abgebrochen!" );
		} else {
			System.out.println( "...." );
			// ...
		}
		
	}
	
	public static boolean checkPin( String eingabe ) {
		return ( eingabe.matches( "[0-9]{4}" ) && pin == Integer.parseInt( eingabe ) ) ? true : false;
	}
}
```

dient aber ehrlich gesagt in erster Linie dafür, dir zu zeigen, wie sinnvoll es ist, wenn wir für dich coden...


----------



## eRaaaa (14. Jul 2010)

Wozu der ternäre Operator in checkPin ? :autsch:


----------



## nicooooo (14. Jul 2010)

ja das mit dem BufferedReader kenne ich aus dem Unterricht. 
Ebenso wie auch ReadLine() usw....

so wie es NRG gepostet hat kann ich was mit anfangen, also das programm nachvollziehen!

@haave: ja wir haben in der schule nur die absoluten basics gemacht, ich war im unterricht immer dabei und hab da auch 13pkt. mündl. nur war ich bei der klassenarbeit krank und mein lehrer hat mir nun angeboten eben ein solches programm zu schreiben. (als kleine background geschichte  )

meinst du denn es ist dir möglich das programm von a bis z für mich bis morgen nachmittag/abend zu schreiben? umso früher desto besser natürlich 

hier nochmal die komplette aufgabenstellung:

Voraussetzungen:
-PIN-Nummer: 1234
-Kontoguthaben 50.000EUR (kann auch nen anderer betrag sein!)
-Konto kann nicht überzogen werden.

Ablauf:
-PIN eingabe: pin kann 3 mal eingegeben werden. sollte er bei 3. eingabe wieder falsch sein =>programmende.
ist der PIN richtig, soll man auswahlmöglichkeiten haben zwischen geld einzahlen, auszahlen und überweisen.

wählt man jetzt z.b. geld einzahlen muss man anschließend einen betrag eingeben können den man einbezahlen möchte.
wählt man auszahlen, darf der auszuzahlende betrag nicht höher sein als das kontoguthaben =>konto nicht überziehbar!
wählt man geld überweisen muss man den betrag eingeben und lediglich noch eine kontonummer evtl noch blz wenn nicht zu aufwendig, mehr nicht!

anschließend soll wieder eine ausgabe kommen mit dem neuen kontostand.

hier habe ich mal das programm wie weit ich bisher gekommen bin. dann erkennt ihr auch mal das niveau auf dem meine klasse und ich sich befinden^^:

import java.io.*;
public class Geldautomat 

( 
 public static void main(String argv())throws IOException
 (
   String str;
   short PIN=1234;
   short FalscheingabenPIN=0;
   double Kontostand=50000;

System.out.println("Herzlich Willkommen bei Ihrer Hausbank");
    BufferedReader eingabe=new BufferedReader (new InputStreamReader (System.in));
    System.out.print("Bitte geben Sie ihren persönlichen PIN ein: ");
    str= eingabe.readLine();
    PIN= Short.parseShort(str);

while (PIN!=1234)
    (System.out.print("Bitte geben sie den PIN erneut ein!");


und weiter bin ich noch nicht gekommen. 
P.s. eine Klammern müssen geschweift sein, ich hoffe ihr kommt trotzdem damit zurecht!


----------



## nrg (14. Jul 2010)

sei doch nicht immer so kleinlich...  kann man sich auch sparen und direkt den boolean zurückgeben aber das war jetzt auch nicht wirklich als Lösungsvorschlag gedacht. der to soll das ja selbst machen


----------



## Gast2 (14. Jul 2010)

nicooooo hat gesagt.:


> ja das mit dem BufferedReader kenne ich aus dem Unterricht.
> Ebenso wie auch ReadLine() usw....
> 
> so wie es NRG gepostet hat kann ich was mit anfangen, also das programm nachvollziehen!



Nunja - das mit dem Scanner ist allerdings deutlich eleganter und nicht grade "rocket science". Wenn du schon was in Hausarbeit abgeben kannst würde ich als Lehrer mich nicht wundern wenn da etwas ein bisschen über das Bekannte hinaus bei rum kommt. Wofür gibt es OpenBook, Google und Foren?



nicooooo hat gesagt.:


> @haave: ja wir haben in der schule nur die absoluten basics gemacht, ich war im unterricht immer dabei und hab da auch 13pkt. mündl. nur war ich bei der klassenarbeit krank und mein lehrer hat mir nun angeboten eben ein solches programm zu schreiben. (als kleine background geschichte  )
> 
> meinst du denn es ist dir möglich das programm von a bis z für mich bis morgen nachmittag/abend zu schreiben? umso früher desto besser natürlich



ich hoffe dein Lehrer kann Googlen....




nicooooo hat gesagt.:


> import java.io.*;
> public class Geldautomat
> 
> (
> ...



Hmm - 13 Punkte? Schwer vorstellbar... 

Ich würde an deiner Stelle als erstes mal den [c]static[/c] Ansatz überdenken, den Scanner mir ansehn und mit den schon hier geposteten Code Fragmenten rumspielen. 
Was wäre denn z.b. mit 


```
Geldautomat g = new Geldautomat(1234, 20000);

public Geldautomat(short pin, double kontostand){
//..
}
```


----------



## akimoon (14. Jul 2010)

Hattet ihr denn bereits Objekte (OO-Prinzip) im Unterricht nicooooo?
Und wie sieht es mit Methoden aus? Habt ihr bisher immer den ganzen Code einfach in die main Methode reingeschrieben? 
Also zum Beispiel:


```
public class Geldautomat {

    public static void main(String[] args) {
        System.out.println("Test");
        ...weiterer Code...
        ........
    }
}
```

Ansonsten schreib mich einfach mal per PN an, dann können wir heute mittag mal gucken wenn du willst. Hab heute mittag eh nix vor ;(


----------



## nicooooo (14. Jul 2010)

Sooooooooo...das Problem ist gelöst.:toll: vielen dank für eure tips :applaus:und den größten dank an "Haave"!!:toll:


----------

