/* * Barnehageprogram, skrevet av Ragnhild Kobro Runde vaaren 2004. * Modifikasjon av eksamen IN105 vaaren 1996. * * Programmet skal administrere en barnehage med to typer avdelinger: * - Smaabarnsavdeling, med plass til 9 barn under tre aar * - Avdeling for store barn, med plass til 18 barn over tre aar * * Generelt gjelder: * * Et barn kan vaere tatt opp til maksimalt en avdeling. For hver * avdeling vedlikeholdes en venteliste. Et barn kan bare staa paa en * venteliste. Derimot kan et barn baade vaere tatt opp i en * smaabarnsavdeling, og staa paa venteliste til en avdeling for stoerre * barn. * * Opptak fra ventelisten skjer "ved loddtrekning", men med * soeskenprioriet ved opptak til smaabarnsavdelingene. Til avdelingene * for stoerre barn har barn som allerede har plass i en * smbarnsavdeling prioritet. * */ import easyIO.*; import java.util.*; class Barnehage { HashMap alleBarn = new HashMap(); HashMap alleAvd = new HashMap(); In inn = new In(); Out ut = new Out(); public static void main(String[] args) { new Barnehage().ordreloekke(); } void ordreloekke() { int valg = 1; while (valg != 0) { ut.outln("\nMeny: "); ut.outln("0 - avslutt"); ut.outln("1 - ledige plasser"); ut.outln("2 - opptak"); ut.outln("3 - ny avdeling"); ut.outln("4 - registrer barn"); ut.outln("5 - registrer soesken"); ut.outln("6 - soeknad"); ut.outln("7 - skriv barn"); ut.outln("8 - skriv avdeling"); ut.outln("9 - slutter"); ut.out(" velg funksjon: "); valg = inn.inInt(); System.out.println(""); switch (valg) { case 0: break; case 1: ledigePlasser(); break; case 2: opptak(); break; case 3: nyAvdeling(); break; case 4: registrerBarn(); break; case 5: registrerSoesken(); break; case 6: soeknad(); break; case 7: skrivBarn(); break; case 8: skrivAvdeling(); break; case 9: slutter(); break; default: ut.outln("Ukjent funksjon"); } } } /* Skriver ut antall ledige smaabarnsplasser og antall ledige * plasser for store barn totalt i barnehagen. */ void ledigePlasser() { int antallSmaa = 0; int antallStore = 0; for (Avdeling a: alleAvd.values()) { if (a instanceof SmaabarnAvd) { antallSmaa += a.antallLedige(); } else { antallStore += a.antallLedige(); } } System.out.println("Barnehagen har ledig " + antallSmaa + " smaabarnsplasser og " + antallStore + " plasser for store barn"); } /* Foretar opptak av barn fra ventelistene til alle avdelingene i * barnehagen. */ void opptak() { Iterator it = alleAvd.values().iterator(); while (it.hasNext()) { Avdeling a = (Avdeling) it.next(); a.opptak(); } } void nyAvdeling() { String navn; Avdeling a; System.out.print("Navn paa ny avdeling: "); navn = inn.inText(); if (alleAvd.containsKey(navn)) { System.out.println("Registrert allerede"); return; } System.out.print("Smaabarnsavdeling (j/n)? "); if (inn.inChar() == 'j') { a = new SmaabarnAvd(navn); } else { a = new StorebarnAvd(navn); } alleAvd.put(navn, a); } void registrerBarn() { Barn b; String navn; System.out.print("Barnets navn: "); navn = inn.inText(); if (alleBarn.containsKey(navn)) { System.out.println(navn + " er allerede registrert"); return; } b = new Barn(navn); b.les(inn); alleBarn.put(navn, b); } void registrerSoesken() { Barn b1, b2; String navn1, navn2; System.out.print("Det ene barnets navn: "); navn1 = inn.inText(); b1 = (Barn) alleBarn.get(navn1); if (b1 == null) { System.out.println(navn1 + " er ikke registrert"); return; } System.out.print("Navn paa et soesken av " + navn1 + " : "); navn2 = inn.inText(); b2 = (Barn) alleBarn.get(navn2); if (b1 == null) { System.out.println(navn2 + " er ikke registrert"); return; } // Soesken-relasjonen er symmetrisk, maa registrere begge veier. b1.nyttSoesken(b2); b2.nyttSoesken(b1); } /* Setter et barn paa venteliste til en avdeling */ void soeknad() { String anavn, bnavn; Avdeling a; Barn b; System.out.print("Avdelingens navn: "); anavn = inn.inText(); System.out.print("Barnets navn: "); bnavn = inn.inText(); a = (Avdeling) alleAvd.get(anavn); b = (Barn) alleBarn.get(bnavn); if (a == null || b == null) { System.out.println("Finner ikke barn/avdeling"); return; } a.soeknad(b); } void skrivBarn() { Barn b; String navn; System.out.print("Barnets navn: "); navn = inn.inText(); b = (Barn) alleBarn.get(navn); if (b == null) { System.out.println(navn + " er ikke registrert"); return; } b.vis(); } void skrivAvdeling() { Avdeling a; String navn; System.out.print("Avdelingens navn: "); navn = inn.inText(); a = (Avdeling) alleAvd.get(navn); if (a == null) { System.out.println(navn + " er ikke registrert"); return; } a.vis(); } void slutter() { Barn b; String navn; System.out.print("Barnets navn: "); navn = inn.inText(); b = (Barn) alleBarn.get(navn); if (b == null){ System.out.println(navn + " er ikke registrert"); return; } b.slutter(); } }