All pastes #345547 Raw Edit

Something

public java v1 · immutable
·published 2007-02-08 16:43 UTC
rendered paste body
// michaekt g-3 o-1// filen er utf-8import easyIO.*;import java.io.*;import java.util.*;/** * @author Michael Thung (michaekt [at] ifi [dot] uio [dot] no) * * Tar seg av folkeregisteret i Ruritania, og holder rede på slektskapsforhold * mellom landets innbyggere. */class Oblig1 {    // Dette er kontrolleren.        Register r;    Utsyn v;        public static void main(String[] args) {        Oblig1 k = new Oblig1();    }    Oblig1() {        // starter modell og utsyn        r = new Register();        v =  new Utsyn();        programLoop();    }    /**     * Tar seg av selve kjøringen av programmet.     */    private void programLoop()  {            // skriv ut menyen først.        v.skrivMeny();                boolean boolKjorer = true;        while(boolKjorer) {            int intValg = v.hentHeltall("\nValg (0 for meny): ");                        switch(intValg) {                case 0:                    v.skrivMeny();                    break;                case 1:                    registrerPerson();                    break;                case 2:                    visPerson();                    break;                case 3:                    nyForelder();                    break;                case 4:                    registrerEkteskap();                    break;                case 5:                    kjorSkilsmisse();                    break;                case 6:                    v.skrivTekst("Til fil");                    break;                case 7:                    v.skrivTekst("Fra fil");                    break;                case 8:                    v.skrivTekst("Flest egne barn");                    break;                case 9:                    v.skrivTekst("Skriv søsken");                    break;                case 10:                    v.skrivTekst("Fetter/kusine");                    break;                case 11:                    boolKjorer = false;                    break;                default:                    v.skrivTekst("Forventer et tall mellom 0 og 11! Prøv igjen.");            }        }    }    /**     * Registrerer ny person med eventuelle foreldre.     */    private void registrerPerson() {        // registrerer person        v.skrivTekst("\nRegistrer ny person\n" +                     "-------------------");        String strNavn = v.hentTekst("Navn på person: ");        char kjonn = Character.toLowerCase(v.hentTegn("Kjønn (m eller k): "));                if (kjonn != 'm' && kjonn != 'k') {            v.skrivTekst("Forventer enten k for kvinne eller m for mann. Gå tilbake og prøv igjen!");            return;        }        Person p = (kjonn == 'm') ? new Mann(strNavn) : new Kvinne(strNavn);        // registrerer foreldre                String strMorsNavn = v.hentTekst("Navn på mor: ");        String strFarsNavn = v.hentTekst("Navn på far: ");        Kvinne mor;        Mann far;                if (strMorsNavn.equals("?")) { mor = null; } else { mor = new Kvinne(strMorsNavn); }        if (strFarsNavn.equals("?")) { far = null; } else { far = new Mann(strFarsNavn); }        r.nyPerson(strNavn, p, mor, far);        v.skrivTekst("Ny person: " + strNavn + " lagt til i registeret.");    }    /**     * Viser person med tilhørende info.     */    private void visPerson() {        String strNavn = v.hentTekst("Navnet på personen du ønsker å vise: ");        if (!r.personFinnes(strNavn)) {            v.skrivTekst("Denne personen finnes ikke. Gå tilbake og prøv igjen!");            return;        } else {            Person p = r.hentPerson(strNavn);            v.skrivTekst("\nNavn: " + p.toString());            String kjonn = (p instanceof Mann) ? "Mann" : "Kvinne";            v.skrivTekst("Kjønn: " + kjonn);            v.skrivTekst("Status: " + r.giftStatus(p.toString()));            String mor = (r.hentMor(strNavn) == null) ? "Ukjent" : r.hentMor(strNavn).toString();            String far = (r.hentFar(strNavn) == null) ? "Ukjent" : r.hentFar(strNavn).toString();            v.skrivTekst("Navn på mor: " + mor);            v.skrivTekst("Navn på far: " + far);            // sjekker barn og skriver eventuelt navnene på dem            if (p.antallBarn() != 0) {                v.skrivTekst("Antall barn: " + p.antallBarn());                v.skrivTekst("Barnas navn:");                                String[] strBarnasNavn = p.hentAlleBarn();                String strListe = "";                for (int x = 0; x < strBarnasNavn.length; x++) {                    strListe += strBarnasNavn[x] + " ";                }                v.skrivTekst(strListe);            } else {                v.skrivTekst("Har ingen barn.");            }        }    }    /**     * Legger inn ny forelder     */    private void nyForelder() {}    /**     * Registrerer ekteskap mellom to personer.     */    private void registrerEkteskap() {        v.skrivTekst("\nRegistrer ekteskap\n" +                     "------------------");        String strNavnEktemann = v.hentTekst("Navn på ektemann: ");        String strNavnHustru = v.hentTekst("Navn på hustru: ");        // Sjekker at begge er registrerte        if (!r.personFinnes(strNavnEktemann) || !r.personFinnes(strNavnHustru)) {            v.skrivTekst("Ett eller begge navnene du oppga finnes ikke. Gå tilbake og prøv igjen!");            return;        }        Person k = r.hentPerson(strNavnHustru);        Person m = r.hentPerson(strNavnEktemann);        // Sjekker at vi har riktige instanser av kvinne og mann        if (!(k instanceof Kvinne) || !(m instanceof Mann)) {            v.skrivTekst("Navnene du oppga stemmer ikke overens. Gå tilbake og prøv igjen!");            return;        // passer på at ingen allerede er gifte        } else if (m.erGift() || k.erGift()) {            v.skrivTekst("En eller begge av personene er alt gift. Gå tilbake og prøv igjen!");            return;        }        // bryllupsseremoni!        r.bryllup((Mann) m, (Kvinne) k);        v.skrivTekst(m.toString() + " og " + k.toString() + " er nå gift!");    }    private void kjorSkilsmisse() {        v.skrivTekst("\nRegistrer skilsmisse\n" +                     "--------------------");        String strNavnEktemann = v.hentTekst("Navn på ektemann: ");        String strNavnHustru = v.hentTekst("Navn på hustru: ");        // Sjekk at begge er registrerte        if (!r.personFinnes(strNavnEktemann) || !r.personFinnes(strNavnHustru)) {            v.skrivTekst("Ett eller begge navnene du oppga finnes ikke. Gå tilbake og prøv igjen!");            return;        }        Person k = r.hentPerson(strNavnHustru);        Person m = r.hentPerson(strNavnEktemann);        // Sjekker at personene er gift med hverandre (trenger ikke sjekke kjønn, osv)        if (!(m.hentEktefelle().toString()).equals(k.toString())) {            v.skrivTekst("Personene du oppga er ikke gift med hverandre. Gå tilbake og prøv igjen!");            return;        }        // skilsmisse!        r.skilsmisse((Mann) m, (Kvinne) k);        v.skrivTekst(m + " og " + k + " er nå skilt!");    }}/** * Tar seg av å hente og vise informasjon til brukeren. */class Utsyn {    In inn = new In();        /**     * Henter tekst-data fra brukeren     */    public String hentTekst(String strTekst) {        System.out.print(strTekst);                return inn.inLine();    }        /**     * Henter en verdi fra brukeren.     */    public int hentHeltall(String strTekst) {        System.out.print(strTekst);                return inn.inInt();    }    /**     * Henter et tegn fra brukeren.     */    public char hentTegn(String strTekst) {        System.out.print(strTekst);        return inn.inChar();    }        /**      * Skriver tekst til skjerm.      */    public void skrivTekst(String strTekst) {        System.out.println(strTekst);    }        /**     * Skriver menyen til skjerm.     */    public void skrivMeny() {        System.out.print("\n\nPersonregister\n\n" +                         " 1) Registrer ny person\n" +                         " 2) Vis person\n" +                         " 3) Ny far/mor\n" +                         " 4) Registrer ekteskap\n" +                         " 5) Registrer skilsmisse\n" +                         " 6) Til fil\n" +                         " 7) Fra fil\n" +                         " 8) Flest egne barn\n" +                         " 9) Skriv søsken\n" +                         "10) Fetter/kusine\n" +                         "11) Avslutt\n");    }}/** * Datamodellen for registeret. */class Register {    // Her begynner selve modellen.    HashMap <String,Person> personer = new HashMap<String,Person>();    /**     * Registrerer ny person.     */    protected void nyPerson(String n, Person p, Kvinne mor, Mann far) {        // sjekk om mor eller far eksisterer fra før, eventuelt registrerer dem.        if (mor != null) {            if (!personFinnes(mor.toString())) {                personer.put(mor.toString(), mor);            }        }        if (far != null) {            if (!personFinnes(far.toString())) {                personer.put(far.toString(), far);            }        }        // Registrerer foreldrene til personen i objektet, og legger personen inn.        p.nyMor(mor);        p.nyFar(far);        personer.put(n, p);    }    protected boolean personFinnes(String n) {        if (personer.containsKey(n)) {            return true;        } else {            return false;        }    }    protected Person hentPerson(String n) {        return personer.get(n);    }    protected Kvinne hentMor(String n) {        Person p = hentPerson(n);                return p.hentMor();    }    protected Mann hentFar(String n) {        Person p = hentPerson(n);        return p.hentFar();    }    protected String giftStatus(String n) {        Person p = personer.get(n);        if (!p.erGift()) {            return "Ugift";        } else {            return "Gift med " + p.hentEktefelle().toString();        }    }     protected void bryllup(Mann m, Kvinne k) {        m.giftMedPerson(k);        k.giftMedPerson(m);    }    protected void skilsmisse(Mann m, Kvinne k) {        m.fjernEktefelle();        k.fjernEktefelle();    }}/** * Superklasse for person-objektene */abstract class Person {    String strNavn;    Person ektefelle;    Mann far;    Kvinne mor;    int intAntallBarn;    Person(String n) {        this.strNavn = n;        intAntallBarn = 0;    }    /**     * toString-metode for personer som returnerer navnet.     */    public String toString() {        return strNavn;    }    /**     * Fjerner feil mor, og legger inn ny mor.     */    public void nyMor(Kvinne k) {        mor = k;        // legger inn personen som morens barn        mor.nyttBarn(strNavn, this);    }    /**     * Fjerner eventuell feil far, og legger inn ny far.     */    public void nyFar(Mann m) {        far = m;        // legger inn personen som farens barn        far.nyttBarn(strNavn, this);    }    /**     * Henter personens mor     */    public Kvinne hentMor() { return mor; }    /**     * Henter personens far     */    public Mann hentFar() { return far; }    /**     * Inngår ekteskap med en person     */    public void giftMedPerson(Person p) {        ektefelle = p;    }        /**     * Tar ut skilsmisse med en person     */    public void fjernEktefelle() {        ektefelle = null;    }    /**     * Sjekker om personen er gift     */    public boolean erGift() {        if (ektefelle == null) {            return false;        } else {            return true;        }    }    /**     * Returnerer antall barn     */    public int antallBarn() { return intAntallBarn; }    /**     * Returnerer personens ektefelle     */    public Person hentEktefelle() {        return ektefelle;    }    //public void nyttBarn(String n, Person p) {}    abstract String[] hentAlleBarn();    //public void fjernBarn(String n) {}}/** * Subklasse av person for hankjønn. */class Mann extends Person {    HashMap <String,Person> barn = new HashMap<String,Person>();    Mann(String n) {        super(n);    }    /**     * Legger inn nytt barn i modellen for far.     */    public void nyttBarn(String n, Person p) {        barn.put(n, p);        intAntallBarn++;    }    public String[] hentAlleBarn() {        String[] strBarneNavn = new String[barn.size()];        int intAnt = 0;        // går gjennom hashmapen med barn og legger navnene inn i et array.        for (String s: barn.keySet()) {            strBarneNavn[intAnt] = s;            intAnt++;        }        return strBarneNavn;    }    /**     * Fjerner barnet fra personen     */    public void fjernBarn(String n) {        barn.remove(n);        intAntallBarn--;    }}/** * Subklasse av person for hunkjønn. */class Kvinne extends Person {    Person[] barn = new Person[10];    Kvinne(String n) {        super(n);    }    /**     * Legger inn nytt barn i modellen for mor.     */    public void nyttBarn(String n, Person p) {        // legg barnet til på slutten av arrayet.        for (int x = 0; x < barn.length; x++) {            if (barn[x] == null) {                barn[x] = p;                break;            }        }        intAntallBarn++;    }     /**     * Henter alle barnas navn     */    public String[] hentAlleBarn() {        String[] strBarneNavn = new String[intAntallBarn];        int intAnt = 0;        // Går gjennom arrayet med barn og legger navnene inn i et nytt.        for (int x = 0; x < barn.length; x++) {            if (barn[x] != null) {                strBarneNavn[intAnt] = barn[x].toString();                intAnt++;            }        }                return strBarneNavn;    }    /**     * Fjerner barnet fra personen     */    public void fjernBarn(String n) {        for (int x = 0; x < barn.length; x++) {            if ((barn[x].toString()).equals(n)) {                barn[x] = null;            }        }        intAntallBarn--;    }}