User - Interface über die Console

Status
Nicht offen für weitere Antworten.

Das Vi

Mitglied
Moin
Ich habe mal ne Frage: Ich soll ein Programm schreiben, welches 3-,4-,oder x-stellige nummern verwaltet (dh. für kunden reserviert, wieder freigibt usw.) mein bisheriger quelltext sieht so aus:
Java:
import javax.swing.JOptionPane;


public class ReservationSystem {
    static int stellen = 2;
    String[] nummern = new String[(new Double(Math.pow(10, stellen))).intValue()];
    boolean[] reserviert = new boolean[nummern.length];
    String[] kunden = new String[nummern.length];
    String kunde;
    int anzahl;
    int frei = 0;
    int start = 0;
    
    public ReservationSystem(String kunde, int anzahl)
    {
        this.kunde = kunde;
        this.anzahl = anzahl;
    }
    
    
    void dump() 
    {
        reserve();
        for (int i = 0; i < nummern.length; i++)
            if (reserviert[i] == true)
                System.out.println(nummern[i] + " reserviert von "
                        + kunden[i]);
            else
                System.out.println(nummern[i] + " " + reserviert[i]);
    }
    
    
    void run() {
        for (int i = 0; i < nummern.length; i++)
        {
            nummern[i] = String.format("%0" + stellen + "d", i);            
        }
    }
    
    void reserve() {
        if ( anzahl > (nummern.length/10))
        {
            JOptionPane.showMessageDialog(null, "So viele Nummern stehen nicht zur Verfügung.");
        }
        else
        {
        while ( frei < anzahl )
        { 
        if ( anzahl < 10 )
        {
            for ( int i = 0; i < nummern.length; i++)
            {
                if ( reserviert[i] == true )
                {
                    frei = 0;
                    start = i + 1;
                }
                else
                {
                    frei++;
                }
                
            }
        }
        else
            if ( anzahl >= 10 )
            {
                for ( int i = 0; i < nummern.length; i += 10 )
                {
                    if ( reserviert[i] == true )
                    {
                        frei = 0;
                        i++;
                        start = i + 11;
                    }
                    else
                    {
                        frei++;
                    }
                }
            }
        }

        {
            if ( anzahl < 10 )
            {
                for ( int i = start; i < anzahl; i++)
                {
                    reserviert[i] = true;
                    kunden[i] = kunde;
                }
            }
            else
            {
                for ( int i = start; i < anzahl*10; i += 10 )
                {
                    reserviert[i] = true;
                    kunden[i] = kunde;
                }
            }
                
        }
    }
    }
    
    public static void main(String[] args) {
        do
        {
        String kunde = JOptionPane.showInputDialog("Bitte Namen eingeben");
        int anzahl = Integer.parseInt(JOptionPane.showInputDialog("Wieviele Nummern möchten Sie reservieren?"));
        ReservationSystem r = new ReservationSystem(kunde, anzahl);
        r.dump();
        }
        while (JOptionPane.showConfirmDialog(null, 
                                            "Wollen Sie noch weitere Reservierungen tätigen?",
                                            "Weitere Reservierungen?",
                                             JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION);
    }

}

gibt es eine möglichkeit, dass ich bei programmstart die console (oder sonstwas eingabeaufforderungsmäßiges) aufrufe und man dann in der console einfach nur "run", "reserve" oder "dump" eingeben muss und dann die dazugehörigen Methoden starten? danke!
 
Zuletzt bearbeitet von einem Moderator:
wie und von wo startest du das Programm, was bedeutet es 'die [eine?] console aufzurufen'?

direkt beim Programmstart kann man einem Java-Programm Parameter übergeben,
die landen dann im ominösen 'String[] args' der main-Methode

später kann man aus System.in Eingaben von der Konsole einlesen, korrekt,
wenn du aber schon JOptionPane zur User-Interaktion benutzt, dann doch lieber darüber alles steuern?
 
Das Programm läuft einfach als Java Application und startet bei der main-methode (ist doch auch normal oder nicht?) Und das mit den JOptionPane Dingern ist nur ne Übergangslösung, weil das eigentlich eher suboptimal für meine Zwecke ist...
Also was ich mir vorstelle wäre:

Programm startet und ruft die Eingabeaufforderung auf und startet automatisch erstmal die run methode, damit die nummern überhaupt im array sind.

ich gebe in der eingabeaufforderung reserve ein und es kommen zwei fenster, eins wo ich den namen eingebe und eins, wo ich die gewünschte anzahl der nummern eingebe, die ich reservieren will.

oder ich gebe dump ein und er spuckt mir in die console aus, welche nummern reserviert sind usw.

ist das denn überhaupt realisierbar?
 
Ok allein schon das Wort parser schreckt mich ab ^^ Ich beschäftige mich seit ungefähr 4 Tagen mit Java...Dann mach ich es halt doch vollständig über JOptionPane...

Mal noch ne Frage:
Kann ich das irgendwie so einrichten, dass er bevor die Main-Methode die do-while-Schleife abarbeitet die run-methode _1_ mal ausführt? oder es irgendwie anders einrichten, dass die Arrays bei Programmstart erstmal befüllt werden und man dann reserven kann? weil sonst befüllt er die vor jedem mal reservieren neu und das ist ja scheiße dann^^
 
Ok allein schon das Wort parser schreckt mich ab ^^ Ich beschäftige mich seit ungefähr 4 Tagen mit Java...Dann mach ich es halt doch vollständig über JOptionPane...

Naja, von der Commandozeile einen Wert einlesen und dann vergleichen

Java:
if ("dump".equals(eingelesenerString)) {
  dump();
}
else if ("reserve".equals(eingelesenerString)) {
  reserve();
}
// ...

Ein Parser muss also nichts komplexes sein 😉 .

Mal noch ne Frage:
Kann ich das irgendwie so einrichten, dass er bevor die Main-Methode die do-while-Schleife abarbeitet die run-methode _1_ mal ausführt? oder es irgendwie anders einrichten, dass die Arrays bei Programmstart erstmal befüllt werden und man dann reserven kann? weil sonst befüllt er die vor jedem mal reservieren neu und das ist ja scheiße dann^^

Einfach die Methode aufrufen!?
 
Guck dir mal den Code in der Main-methode an...das hab ich schon ausprobiert, aber damit ich die run-methode aufrufen kann, muss die in der do while schleife drin sein, sonst meckert er rum...und die ReservationSystem r muss ich anlegen nachdem die Variablen kunde und anzahl deklariert wurden und das wiederum geschieht innerhalb der do-while-schleife ...

EDIT sagt:
ich hätte mir den parser schwerer vorgestellt^^ wenn man jetzt noch bei programmstart ne console starten könnte, damit man auch strings eingeben kann, die dann eingelesen werden, wäre das extrem genial
 
EDIT sagt:
ich hätte mir den parser schwerer vorgestellt^^ wenn man jetzt noch bei programmstart ne console starten könnte, damit man auch strings eingeben kann, die dann eingelesen werden, wäre das extrem genial

Die Konsole ist doch schon da!? Wozu noch eine?

Guck dir mal den Code in der Main-methode an...das hab ich schon ausprobiert, aber damit ich die run-methode aufrufen kann, muss die in der do while schleife drin sein, sonst meckert er rum...und die ReservationSystem r muss ich anlegen nachdem die Variablen kunde und anzahl deklariert wurden und das wiederum geschieht innerhalb der do-while-schleife ...

Dann lager die Abfrage halt vor der do-while-schleife aus!?
 
Die Konsole ist doch schon da!? Wozu noch eine?
Nja aber wenn das Programm gestartet ist, kann man da doch nichts eingeben, sondern nur ausprinten lassen oder seh ich das falsch?

Dann lager die Abfrage halt vor der do-while-schleife aus!?
wie genau meinst du das?
etwa so?:

Java:
    public static void main(String[] args) {    
        run(); // !
        do
        {
        String kunde = JOptionPane.showInputDialog("Bitte Namen eingeben");
        int anzahl = Integer.parseInt(JOptionPane.showInputDialog("Wieviele Nummern möchten Sie reservieren?"));
        ReservationSystem r = new ReservationSystem(kunde, anzahl);
        r.dump();
        }
        while (JOptionPane.showConfirmDialog(null, 
                                            "Wollen Sie noch weitere Reservierungen tätigen?",
                                            "Weitere Reservierungen?",
                                             JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION);
    }
 
Zuletzt bearbeitet von einem Moderator:
Nja aber wenn das Programm gestartet ist, kann man da doch nichts eingeben, sondern nur ausprinten lassen oder seh ich das falsch?

ja. Bsp.:

Java:
BufferedReader buffy = new BufferedReader(new InputStreamReader(System.in));
String eingeleseneZeile = buffy.readLine();

wie genau meinst du das?
etwa so?:

Code:
    public static void main(String[] args) {    
        [B]run();[/B]
        do
        {
        String kunde = JOptionPane.showInputDialog("Bitte Namen eingeben");
        int anzahl = Integer.parseInt(JOptionPane.showInputDialog("Wieviele Nummern möchten Sie reservieren?"));
        ReservationSystem r = new ReservationSystem(kunde, anzahl);
        r.dump();
        }
        while (JOptionPane.showConfirmDialog(null, 
                                            "Wollen Sie noch weitere Reservierungen tätigen?",
                                            "Weitere Reservierungen?",
                                             JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION);
    }

nein

Aber jetzt wo ich mir das Programm so ansehe, warum willst du "run" überhaupt außerhalb der Schleife aufrufen? Und warum erstellst du jedesmal ein neues ReservationSystem? Sicher, dass da nicht ein kleiner Denkfehler vorliegt?
 
Ja mir ist grad aufgefallen, dass ich für run eigl keine eigene methode brauche ^^ habs jetzt direkt in die main-methode geschrieben...

Und warum erstellst du jedesmal ein neues ReservationSystem?

da gibt es zwei gründe für :
1. damit ich die methode dump überhaupt aufrufen kann und das programm etwas macht

2. weil mir das ein mitarbeiter so gesagt hat ^^
 
Naja gut, lassen wir das mal so im Raum stehen. Jeder hat mal angefangen. Und da zählt Funktionalität nunmal mehr als Schönheit 😉 .
 
Dankeschön ^^

ähm das mit dem buffered reader funktioniert nicht so ganz...

ich hab jetzt
import java.io.InputStreamReader;
import java.io.BufferedReader;
gemacht und er sagt mir bei
Code:
    String eingeleseneZeile = buffy.readLine();
buffy.readLine(); <--"unhandled exception type IOexception
 
EDIT SAGT: Ich mach einen neuen Fred zu dem auf, das Problem hat nämlich nichts mehr mit dem ursprünglichen Thema zu tun.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben