Kiosk


Av Alireza Niai Nouri och Tarek Kasim


Denna uppgift beskriver en kioskklass Drugstore med den maximal betjäningstiden Time, en kö Ko av kunder och en tid tills kiosken stänger, Close_Time. Kön har beskrivits i en klass Kioskko som har ärvt sina egenskaper av en generell listklass List. Personerna i kön beskrivs i klassen Person, där de har ett namn, ett ärende, och den tid ärendet kommer att ta. Även en testklass Kiosktest har gjorts.

Klasserna finns nedan:
Person
List
Kioskko
Drugstore
Kiosktest

Person
Klassen Person har funktioner som returnerar den aktulla personens namn, ärende och ärendetid. En funktion print() har skapats som skriver ut dessa.

List
Till den givna, generella klassen List tillades en funktion List addLast(Person) som lägger till en person sist i den aktulla listan. Koden för funktionen syns nedan



   public List addLast(Person el) {    //lägger till en person sist i kön
      if (isEmpty()) {
         List l=new List();
         List x=new List(el,l);
         return x;
      }
      return new List(first(),rest().addLast(el));
   }

Kioskko
En underklass till List, Kioskko, skapades för att representera kioskkön. Tack vare arv har vi de flesta funktioner som finns i List redan i Kioskko, dock med vissa modifikationer. En funktion Kioskko convert(List) som gjorde om en List-objekt till en Kioskko-objekt var nödvändig då de många funktioner i överklassen List returnerar en lista. En annan nödvändig funktion är Kioskko moveLast(Person) som flyttar den första personen sist i kön. Funktionen nyPerson lägger till en ny person sist i kön. (Egentligen samma funktion som addLast(), men här med konvertering List till Kioskko.) Värt att tillägga är att konstuktorerna använder super() för att anropa överklassens konstruktor.

Drugstore
Drugstore har förutom en funktion som returnerar den maximala betjäningstiden även en funktion boolean Close_time() som returnerar om det är stängningsdags eller inte. För expediering av kunderna har två funktioner skrivits. Expediera() anropar så länge kiosken är öppet funktionen ExpedieraKund(). ExpedieraKund(), i sin tur, kollar först om kiosken är stängd och sedan expedierar den kund som är först i kön. Om kundens ärendetid är mindre än den maximala betjäningstiden tas kunden bort från kön, samtidigt som Close_time minskar med kundens ärende tid. Om kundens ärendetid däremot är större än kioskens maximala betjänningstid ställs kunden sist i kön och Close_time minskas med den maximala betjäningstiden. Det bör tilläggas att kunden betjänas även om kundens ärendetid är större än den tid kiosken har öppet, dock ej en längre tid än kioskens maximala betjäningstid.

Kiosktest
Kiosktest testar Drugstore, genom att som synes nedan skapa en kö, och ange kioskens Time och Close_time. Först expedieras den första kunden A, sedan ställer sig D sist i kön, och sedan expedieras kön till stängningssdags.



import Drugstore;
import Kioskko;
import Person;

public class Kiosktest{
   public static void main(String[] args) {
      Person a=new Person(5,"A","Godis");
      Person b=new Person(3,"B","Aftonbladet");
      Person c=new Person(8,"C","Tips");
      Person d=new Person(2,"D","Tändstickor");
      Kioskko k0=new Kioskko();
      Kioskko ko=Kioskko.convert(k0.concat(c).concat(b).concat(a));
      Drugstore kiosk=new Drugstore(3,10,ko);
      kiosk.ExpedieraKund();    //expediera en kund
      kiosk.nyKund(d);          //D ställer sig sist i kön
      kiosk.Expediera();       //expediera hela kön
   }
}


Tillbaks till huvudsidan

email: Alireza.Niai_nouri.2077@student.uu.se