ho programma di esercizio di simulazione di un parchimetro.
quesiti del test:
1) devo far uscire un ticket con targa auto e orario di entrata
2) detterminare quanti posti sono liberi e quanti sono occupati
3) devo far uscire uno scontrino ogni qualvolta una auto esce con prezzo, importo pagato ed evventuale resto con orario di uscita e targa associata.
ho tali quesiti:
1) vorrei che ogni volta clicco sul bottone esceAuto il numero di posti liberi si aggiornasse perchè se ci sn tipo 10 auto parcheggiate su un massimo di 12 e una esce deve uscire come risultato postiliberi: 3 non 1 o 2.
2) perchè alla prima auto che aggiungo fa ticket n°1 poi ne aggiungo altre 2 esempio mi escono 3 volte ticket n°3
3) quello che succede con il quesito 2 mi succede anche con gli scontrini.
vorrei dei consigli seri o magari delle correzioni al codice perchè sono incartato.
codice classe auto, calcoli e parcheggio(è un jframe) :
codice classe main e orologio:
quesiti del test:
1) devo far uscire un ticket con targa auto e orario di entrata
2) detterminare quanti posti sono liberi e quanti sono occupati
3) devo far uscire uno scontrino ogni qualvolta una auto esce con prezzo, importo pagato ed evventuale resto con orario di uscita e targa associata.
ho tali quesiti:
1) vorrei che ogni volta clicco sul bottone esceAuto il numero di posti liberi si aggiornasse perchè se ci sn tipo 10 auto parcheggiate su un massimo di 12 e una esce deve uscire come risultato postiliberi: 3 non 1 o 2.
2) perchè alla prima auto che aggiungo fa ticket n°1 poi ne aggiungo altre 2 esempio mi escono 3 volte ticket n°3
3) quello che succede con il quesito 2 mi succede anche con gli scontrini.
vorrei dei consigli seri o magari delle correzioni al codice perchè sono incartato.
codice classe auto, calcoli e parcheggio(è un jframe) :
Java:
package parcheggio;
public class auto {
String targa;
int oraentrata, minutientrata;
public auto(String targa, int oraentrata, int minutientrata) {
this.targa = targa;
this.oraentrata = oraentrata;
this.minutientrata = minutientrata;
}
public String stampaorarioEntrata() {
return "è entrata alle:" + "\t" + oraentrata + ":" + minutientrata;
}
public String stampaTarga() {
return targa;
}
public String ingressoAuto() {
return "l'auto:"+"\t"+stampaTarga() + "\t" + stampaorarioEntrata() + "\n";
}
}
package parcheggio;
import java.text.DecimalFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.JComboBox;
import javax.swing.JTextArea;
public class calcoli implements Runnable {
int nauto;
static final int MAXAUTO = 200;
auto[] auto;
double credito;
GregorianCalendar gc;
JTextArea display;
DecimalFormat df = new DecimalFormat("#,##0.00");
int postiliberi, postioccupati;
JComboBox selezionaAuto;
public calcoli() {
this.auto = new auto[MAXAUTO];
this.nauto = 0;
this.selezionaAuto = new JComboBox();
}
public calcoli(JTextArea display) {
this.display = display;
}
public int getAuto() {
return nauto;
}
public auto getAuto(int i) {
return auto[i];
}
public String getAperto() {
while (true) {
gc = new GregorianCalendar();
int ore = gc.get(Calendar.HOUR_OF_DAY);
int oraapertura = 8;
int orachiusura = 24;
if (ore >= oraapertura && ore <= orachiusura) {
return "siamo aperti";
} else {
return "siamo chiusi" + "\n" + "l'orario apertura è dalle:" + "\t" + oraapertura + "alle:" + "\t" + orachiusura;
}
}
}
public String acetta10cent(String par) {
if (par.equalsIgnoreCase("0.1")) {
credito += 0.1;
}
return df.format(credito) + "\t" + "€";
}
public String acetta20cent(String par) {
if (par.equalsIgnoreCase("0.2")) {
credito += 0.2;
}
return df.format(credito) + "\t" + "€";
}
public String acetta50cent(String par) {
if (par.equalsIgnoreCase("0.5")) {
credito += 0.5;
}
return df.format(credito) + "\t" + "€";
}
public String acettaUno(String par) {
if (par.equalsIgnoreCase("1.0")) {
credito += 1.0;
}
return df.format(credito) + "\t" + "€";
}
public String acettaDue(String par) {
if (par.equalsIgnoreCase("2.0")) {
credito += 2.0;
}
return df.format(credito) + "\t" + "€";
}
public String acettaCinque(String par) {
if (par.equalsIgnoreCase("5.0")) {
credito += 5.0;
}
return df.format(credito) + "€";
}
public String acettaDieci(String par) {
if (par.equalsIgnoreCase("10.0")) {
credito += 10.0;
}
return df.format(credito) + "\t" + "€";
}
public String acettaVenti(String par) {
if (par.equalsIgnoreCase("20.0")) {
credito += 20.0;
}
return df.format(credito) + "\t" + "€";
}
public double getCredito() {
return credito;
}
public String importoPagato() {
return "l'importo pagato:" + "\t" + df.format(getCredito()) + "\t" + "€";
}
public void entraAuto(String targa, int oraentrata, int minutientrata) {
if (nauto < MAXAUTO) {
auto[nauto++] = new auto(targa, oraentrata, minutientrata);
} else {
System.err.println("posti esauriti!");
}
}
public String contatorePosti() {
String posto="";
if (nauto <= MAXAUTO) {
postioccupati++;
postiliberi=MAXAUTO-postioccupati;
posto ="posti occupati:" + "\t" + postioccupati + "\t"+ "posti liberi:" + "\t" + postiliberi + "\n";
} else {
postiliberi=0;
postioccupati=MAXAUTO;
posto="parcheggio pieno";
}
return posto;
}
public String Ticket() {
String s = "";
for (int i = 0; i < nauto; i++) {
s += "ticket n°" + "\t" + nauto + "\n"+ auto[i].ingressoAuto() + "\n";
}
return s;
}
public String numeroTicket(){
return "ticket n°" + "\t" + nauto;
}
public String Scontrino() {
String s = "";
for (int i = 0; i < nauto; i++) {
s += "scontrino n°" + nauto + "\n" + "\n" +"l'auto:" + "\t"+ auto[i].stampaTarga()+"\n";
}
return s;
}
@Override
public void run() {
display.setText(getAperto());
}
}
package parcheggio;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
public class parcheggio extends javax.swing.JDialog {
Integer oraentrata, minutientrata, orauscita, minutiuscita;
String targa;
DecimalFormat df = new DecimalFormat("#,##0.00");
calcoli c = new calcoli();
public parcheggio(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
this.setLocationRelativeTo(null);
Thread t = new Thread(new orologio(orologio));
t.start();
Thread t2 = new Thread(new calcoli(display));
t2.start();
}
private void entraAutoActionPerformed(java.awt.event.ActionEvent evt) {
Inizializzaentrata();
if (c.getAperto().equals("siamo aperti")) {
c.entraAuto(targa, oraentrata, minutientrata);
selezionaAuto.addItem(c.numeroTicket());
try {
FileWriter w = new FileWriter("ticket.txt");
BufferedWriter b = new BufferedWriter(w);
b.write(c.Ticket());
b.flush();
} catch (IOException ex) {
Logger.getLogger(parcheggio.class.getName()).log(Level.SEVERE, null, ex);
}
txticket.setText(c.Ticket());
lblpostiauto.setText(c.contatorePosti());
} else {
JOptionPane.showMessageDialog(null, "non puoi inserire dati", " Errore", JOptionPane.ERROR_MESSAGE);
txtoraentrata.setText("");
txtminutientrata.setText("");
txttarga.setText("");
txtoraentrata.grabFocus();
txtminutientrata.grabFocus();
txttarga.grabFocus();
lblpostiauto.setText("");
}
}
private void esceAutoActionPerformed(java.awt.event.ActionEvent evt) {
Inizializzauscita();
if (c.getAperto().equals("siamo aperti")) {
selezionaAuto.removeItem(c.numeroTicket());
try {
FileWriter w = new FileWriter("scontrino.txt");
BufferedWriter b = new BufferedWriter(w);
b.write(c.Scontrino());
b.flush();
} catch (IOException ex) {
Logger.getLogger(parcheggio.class.getName()).log(Level.SEVERE, null, ex);
}
txtscontrino.setText(comunicadatiScontrino());
//lblpostiauto.setText(c.contatorePosti());
} else {
JOptionPane.showMessageDialog(null, "non puoi inserire dati", " Errore", JOptionPane.ERROR_MESSAGE);
txtorauscita.setText("");
txtminutiuscita.setText("");
txttarga.setText("");
txtorauscita.grabFocus();
txtminutiuscita.grabFocus();
txttarga.grabFocus();
lblpostiauto.setText("");
}
}
private void acetta10centActionPerformed(java.awt.event.ActionEvent evt) {
if (c.getAperto().equals("siamo aperti")) {
txtcredito.setText(c.acetta10cent("0.1"));
} else {
JOptionPane.showMessageDialog(null, "non puoi inserire dati", " Errore", JOptionPane.ERROR_MESSAGE);
txtcredito.setText("");
}
}
private void acetta20centActionPerformed(java.awt.event.ActionEvent evt) {
if (c.getAperto().equals("siamo aperti")) {
txtcredito.setText(c.acetta20cent("0.2"));
} else {
JOptionPane.showMessageDialog(null, "non puoi inserire dati", " Errore", JOptionPane.ERROR_MESSAGE);
txtcredito.setText("");
}
}
private void acetta50centActionPerformed(java.awt.event.ActionEvent evt) {
if (c.getAperto().equals("siamo aperti")) {
txtcredito.setText(c.acetta50cent("0.5"));
} else {
JOptionPane.showMessageDialog(null, "non puoi inserire dati", " Errore", JOptionPane.ERROR_MESSAGE);
txtcredito.setText("");
}
}
private void acetta1euroActionPerformed(java.awt.event.ActionEvent evt) {
if (c.getAperto().equals("siamo aperti")) {
txtcredito.setText(c.acettaUno("1.0"));
} else {
JOptionPane.showMessageDialog(null, "non puoi inserire dati", " Errore", JOptionPane.ERROR_MESSAGE);
txtcredito.setText("");
}
}
private void acetta2euroActionPerformed(java.awt.event.ActionEvent evt) {
if (c.getAperto().equals("siamo aperti")) {
txtcredito.setText(c.acettaDue("2.0"));
} else {
JOptionPane.showMessageDialog(null, "non puoi inserire dati", " Errore", JOptionPane.ERROR_MESSAGE);
txtcredito.setText("");
}
}
private void acetta5euroActionPerformed(java.awt.event.ActionEvent evt) {
if (c.getAperto().equals("siamo aperti")) {
txtcredito.setText(c.acettaCinque("5.0"));
} else {
JOptionPane.showMessageDialog(null, "non puoi inserire dati", " Errore", JOptionPane.ERROR_MESSAGE);
txtcredito.setText("");
}
}
private void acetta10euroActionPerformed(java.awt.event.ActionEvent evt) {
if (c.getAperto().equals("siamo aperti")) {
txtcredito.setText(c.acettaDieci("10.0"));
} else {
JOptionPane.showMessageDialog(null, "non puoi inserire dati", " Errore", JOptionPane.ERROR_MESSAGE);
txtcredito.setText("");
}
}
private void acetta20euroActionPerformed(java.awt.event.ActionEvent evt) {
if (c.getAperto().equals("siamo aperti")) {
txtcredito.setText(c.acettaVenti("20.0"));
} else {
JOptionPane.showMessageDialog(null, "non puoi inserire dati", " Errore", JOptionPane.ERROR_MESSAGE);
txtcredito.setText("");
}
}
public void Inizializzaentrata() {
if (txtminutientrata.getText().isEmpty() && txtoraentrata.getText().isEmpty() && txttarga.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "inserisci il valore richiesto!", " Errore", JOptionPane.ERROR_MESSAGE);
txtoraentrata.setText("");
txtminutientrata.setText("");
txttarga.setText("");
txtoraentrata.grabFocus();
txtminutientrata.grabFocus();
txttarga.grabFocus();
} else {
try {
oraentrata = new Integer(txtoraentrata.getText());
minutientrata = new Integer(txtminutientrata.getText());
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "inserisci solo valori numerici", " Errore", JOptionPane.ERROR_MESSAGE);
txtoraentrata.setText("");
txtminutientrata.setText("");
txtoraentrata.grabFocus();
txtminutientrata.grabFocus();
}
try {
oraentrata = new Integer(txtoraentrata.getText());
minutientrata = new Integer(txtminutientrata.getText());
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "inserisci solo valori numerici interi!", " Errore", JOptionPane.ERROR_MESSAGE);
txtoraentrata.setText("");
txtoraentrata.grabFocus();
txtminutientrata.setText("");
txtminutientrata.grabFocus();
if (oraentrata < 0) {
JOptionPane.showMessageDialog(null, "inserisci solo valori numerici positivi!", " Errore", JOptionPane.ERROR_MESSAGE);
txtoraentrata.setText("");
txtoraentrata.grabFocus();
}
if (minutientrata < 0) {
JOptionPane.showMessageDialog(null, "inserisci solo valori numerici positivi!", " Errore", JOptionPane.ERROR_MESSAGE);
txtminutientrata.setText("");
txtminutientrata.grabFocus();
}
if (oraentrata > 24) {
JOptionPane.showMessageDialog(null, "inserisci solo minori di 24", " Errore", JOptionPane.ERROR_MESSAGE);
txtoraentrata.setText("");
txtoraentrata.grabFocus();
}
if (minutientrata >= 60) {
JOptionPane.showMessageDialog(null, "inserisci solo minori di 60!", " Errore", JOptionPane.ERROR_MESSAGE);
txtminutientrata.setText("");
txtminutientrata.grabFocus();
}
}
targa = txttarga.getText();
}
}
public void Inizializzauscita() {
if (txtminutiuscita.getText().isEmpty() && txtorauscita.getText().isEmpty() && txttarga.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "inserisci il valore richiesto!", " Errore", JOptionPane.ERROR_MESSAGE);
txttarga.setText("");
txttarga.grabFocus();
txtorauscita.setText("");
txtminutiuscita.setText("");
txtorauscita.grabFocus();
txtminutiuscita.grabFocus();
} else {
try {
orauscita = new Integer(txtorauscita.getText());
minutiuscita = new Integer(txtminutiuscita.getText());
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "inserisci solo valori numerici", " Errore", JOptionPane.ERROR_MESSAGE);
txtorauscita.setText("");
txtminutiuscita.setText("");
txtorauscita.grabFocus();
txtminutiuscita.grabFocus();
}
try {
oraentrata = new Integer(txtoraentrata.getText());
minutientrata = new Integer(txtminutientrata.getText());
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "inserisci solo valori numerici interi!", " Errore", JOptionPane.ERROR_MESSAGE);
txtorauscita.setText("");
txtminutiuscita.setText("");
txtorauscita.grabFocus();
txtminutiuscita.grabFocus();
if (orauscita < 0) {
JOptionPane.showMessageDialog(null, "inserisci solo valori numerici positivi!", " Errore", JOptionPane.ERROR_MESSAGE);
txtorauscita.setText("");
txtorauscita.grabFocus();
}
if (minutiuscita < 0) {
JOptionPane.showMessageDialog(null, "inserisci solo valori numerici positivi!", " Errore", JOptionPane.ERROR_MESSAGE);
txtminutiuscita.setText("");
txtminutiuscita.grabFocus();
}
if (orauscita > 24) {
JOptionPane.showMessageDialog(null, "inserisci solo minori di 24", " Errore", JOptionPane.ERROR_MESSAGE);
txtorauscita.setText("");
txtorauscita.grabFocus();
}
if (minutiuscita >= 60) {
JOptionPane.showMessageDialog(null, "inserisci solo minori di 60!", " Errore", JOptionPane.ERROR_MESSAGE);
txtminutiuscita.setText("");
txtminutiuscita.grabFocus();
}
}
targa = txttarga.getText();
}
}
public double getPrezzo() {
int orepassate = Math.abs(oraentrata - orauscita);
double mezzorepassate = orepassate * 2.0;
double prezzo;
if (orepassate <= 1) {
prezzo = 1.80;
} else if(orepassate==2 || mezzorepassate==3 ){
prezzo= 3.60;
}else if(orepassate==3 || mezzorepassate==5){
prezzo=5.40;
}else if(orepassate==4){
prezzo=7.20;
}else if(orepassate>4 && orepassate<=8 ){
prezzo=7.50;
}else if(orepassate>=10){
prezzo=12.50;
}else{
prezzo=mezzorepassate*0.9;
}
return prezzo;
}
public String comunicaPrezzo() {
return "lei deve pagare:" + "\t" + df.format(getPrezzo()) + "\t" + "€";
}
public String tempoPassato() {
int orepassate, minutipassati;
orepassate = Math.abs(oraentrata - orauscita);
minutipassati = Math.abs(minutientrata - minutiuscita);
return "ore passate:" + "\t" + orepassate + "\t" + "minuti passati:" + minutipassati;
}
public String daiResto() {
double r;
String resto = "";
if (c.getCredito() >= getPrezzo()) {
r = c.getCredito() - getPrezzo();
resto = "il resto è:" + "\t" + df.format(r) + "\t" + "€";
} else {
r = getPrezzo() - c.getCredito();
resto = "le deve ancora:" + "\t" + df.format(r) + "\t" + "€";
}
return resto;
}
public String comunicadatiScontrino() {
return c.Scontrino() + "\n" + "è uscita alle:" + "\t" + orauscita + ":" + "\t" + minutiuscita + "\n" + tempoPassato() + "\n" + comunicaPrezzo() + "\n" + c.importoPagato() + "\n" + daiResto() + "\n";
}
}
codice classe main e orologio:
Codice:
package parcheggio;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.JLabel;
public class orologio implements Runnable {
JLabel orologio;
GregorianCalendar gc;
public orologio(JLabel orologio) {
this.orologio = orologio;
}
@Override
public void run() {
while (true) {
gc = new GregorianCalendar();
int ore = gc.get(Calendar.HOUR_OF_DAY);
int min = gc.get(Calendar.MINUTE);
orologio.setText(ore + ":" + min);
}
}
}
package parcheggio;
import java.awt.Frame;
public class Main {
static Frame f = new Frame();
static parcheggio p = new parcheggio(f, true);
public static void main(String[] args) {
p.setVisible(true);
}
}