Programmering H2014 — Uke 45

Oppgaven går ut på å løse Eksamen Høst 2009.
I oppgaven er det endel pseudokode og noen metoder som man ikke blir bedt om å programmere.
Dere skal imidlertid erstatte pseudokoden med java-instruksjoner, programmere alle klasser og metoder, samt føye til alt som måtte være nødvendig for å få et kjørbart program.

I klassen KundeParkering vil du trenge å legge til metodene:

  public int antallTimer(Date sluttTid)
  {
    < Metoden skal returnere antall påbegynte timer fra starttidspunktet for
      parkeringen  til sluttidspunktet angitt av parameteren sluttTid. >
  }

  public int avgift(Date sluttTid )
  {
    < Metoden skal returnere det parkeringen koster i hele antall kroner. >
  }

I oppgaven brukes det koder som er laget av en kodegenerator. For å få testet programmet trenger dere å vite hvilket koder som er generert. Det er derfor nødvendig å føye til en klasse KodeGeneratorVindu, som kan vise alle genererte koder. I ukeoppgavene for uke 44 ble det gitt en tilsvarende oppgave. Med enkle justeringer kan deler av denne løsningen brukes:

- I stedet for 6-sifrede koder, genererer dere 4-sifrede koder, f.o.m 1000 t.o.m.9999.
- Alt som er knyttet til "ny kode" kan droppes, og metoden visBrukteKoder kan erstattes med metoden visAlleKoder.

Brukergrensesnittet kan så forenkles til:

I eksamensoppgaven er det to vindusklasser, InnkjøringsVindu og UtkjøringsVindu.
For at fargen ("lyset") i disse vinduene skal skifte fra grønt til rødt igjen etter en inn- eller utkjøring er det nødvendig å føye til litt ekstra kode.

Følgende kode må føyes til i InnkjøringsVindu:

public void femSekunder()
{
   Timer klokke = new Timer( 5000, new Lyslytter());
   klokke.setRepeats(false);
   klokke.start();
}

private class Lyslytter implements ActionListener
{
  public void actionPerformed(ActionEvent e)
  {
    SwingUtilities.invokeLater(
      new Tekstoppdaterer( adgangsFelt, Color.RED, 50, "STOPP") );
    nrFelt.setText("");
  }
}

I tillegg må metoden femSekunder() kalles opp fra actionPerformed-metoden i lytteklassen som lytter på innkjøringsknappen.

Nesten tilsvarende kode må føyes til i UtkjøringsVindu:

public void femSekunder()
{
  Timer klokke = new Timer( 5000, new Lyslytter());
  klokke.setRepeats(false);
  klokke.start();
}

private class Lyslytter implements ActionListener
{
  public void actionPerformed(ActionEvent e)
  {
    SwingUtilities.invokeLater(
      new Tekstoppdaterer( utgangsFelt, Color.RED, 50, "STOPP") );
    display.setText("");
    nrFelt.setText("");
  }
}

Metoden femSekunder() må så kalles opp fra actionPerformed-metoden i lytteklassen som lytter på utkjøringsknappen.

Til slutt må dere føyde følgende klasse til programmet:

import javax.swing.*;
import java.awt.*;

public class Tekstoppdaterer implements Runnable
{
  private JTextField felt;
  private Color farge;
  private int størrelse;
  private String tekst;

  public Tekstoppdaterer( JTextField f, Color c, int str, String t)
  {
    felt = f;
    farge = c;
    størrelse = str;
    tekst = t;
  }

  public void run()
  {
    felt.setFont(new Font("Times", Font.BOLD, størrelse));
    felt.setBackground( farge );
    felt.setHorizontalAlignment(SwingConstants.CENTER);
    felt.setText(tekst);
  }
}
LYKKE TIL!

Løsningsforslag

Java-filer

KodeGenerator.java
KodeGeneratorVindu.java
Parkering.java
BeboerParkering.java
KundeParkering.java
ParkeringsHus.java
InnkjøringsVindu.java
UtkjøringsVindu.java
ParkeringsSystem.java