All pastes #350602 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-02-11 16:04 UTC
rendered paste body
/*

Øving 3: Tabeller av referanser og tabell-lister

Else Lervik
Innleveringsfrist: 24.01.07


Du skal her løse et problem ved først å bruke tabeller, deretter tabell-liste.

Tips:
Se kapittel 7.12 og 9.2.
Dere kan se bort fra sorteringen i disse eksemplene. Sortering av objekter er pensum, men dere skal ikke bruke det i denne øvingen.

Oppgave 1

Lag en klasse Student. Den skal ha to objektvariabler:

    private String navn;
    private int antOppg;

antOppg holder orden på hvor mange av de oppgavene studenten har levert inn, som er godkjent.

Klassen skal tilby følgende operasjoner:

    public String finnNavn()
    public int finnAntOppg()
    public void økAntOppg(int økning)
    public String toString()

Lag et enkelt testprogram for klassen.

Lag en klasse OppgaveOversikt som holder orden på hvor mange oppgaver hver enkelt student har fått godkjent. Forholdet mellom et objekt av denne klassen og studentobjektene er en en-til-mange-assosiasjon. Klassen skal ha to objektvariabler:

    private Student[] studenter = new Student[5];   // assosiasjon, ikke aggregat
    private int antStud = 0;

Du skal blant annet lage metoder for følgende operasjoner:

    * Registrer en ny student. Metoden skal ta studentnavn som argument. Dersom en student med dette navnet allerede er registrert, skal metoden returnere false. Dersom student med dette navnet ikke er registrert, skal metoden opprette et studentobjekt og legge det inn i tabellen på indeks [antStud]. antStud skal så økes med 1. Dersom tabellen er full, skal du lage en ny tabell som er større. Følgende kodebit viser hvordan du øker tabellen med 5 elementer:

        Student[] nyTab = new Student[studenter.length + 5];
        for (int i = 0; i < antStud; i++) nyTab[i] = studenter[i];
        studenter = nyTab;

    * Finn antall studenter registrert. Dette skal være lik antStud.
    * Finn antall oppgaver som en bestemt student har løst. Metoden skal returnere -1 dersom student med dette navnet ikke eksisterer.
    * Øk antall oppgaver for en bestemt student.

I tillegg skal du lage toString()-metode.

Her er alle metodehodene:

    public boolean regNyStudent(String navn)
    public int finnAntStud()
    public int finnAntOppgaver(String navn)
    public boolean økAntOppg(String navn, int økning)
    private Student finnStudent(String navn)  // hjelpemetode
    public String toString()

Lag en enkelt testklient som prøver ut metodene.

Klassen skal videre fungere med dette klientprogrammet. Du vil finne at du trenger et par metoder ekstra. De har følgende hoder:

    public Student finnStudent(int indeks)
    public String[] finnAlleNavn() // navnene til alle studentene

Hvert løkkegjennomløp viser fram en liste med navn på alle registrerte studenter. I tillegg til de registrerte studentene inneholder listen valgmulighetene "Ny student" og "Avslutt".  Første gangen er ingen studenter registrert, da er "Ny student" og "Avslutt" de eneste valgmulighetene. Se til venstre på figuren. Til høyre på figuren ser du nedtrekkslisten etter at to studenter er registrert.

Brukeren velger fra listen. Dersom han velger et navn, spør programmet hvor mange oppgaver som skal registreres på denne studenten. Dersom han velger "Ny student", spør programmet om navnet på denne studenten.

Oppgave 2

(Dersom du har fått til oppgave 1, så er dette en liten oppgave.)

Gjør om løsningen til oppgave 1, slik at ArrayList<Student> brukes i stedet for en tabell av objekter i klassen OppgaveOversikt.

Du skal kunne bruke det samme klientprogrammet.

Lykke til!

*/

/*
 * Klientprogram som lar brukeren registrere studenter og oppgaver.
 */
import static javax.swing.JOptionPane.*;
import java.util.ArrayList;

class Oving32 {

  public static void main(String[] args) {

	OppgaveOversikt objOPG = new OppgaveOversikt();

	System.out.println(objOPG.regNyStudent("Ola") ); //tester sjiten
	System.out.println(objOPG.regNyStudent("Tom") );
	System.out.println(objOPG.finnAntStud() );
	System.out.println(objOPG.toString() );
	System.out.println(objOPG.økAntOppgaver("Tom",2) );
	System.out.println(objOPG.finnAntOppgAvStud("Tom") );
	System.out.println(objOPG.økAntOppgaver("Ola",1) );
	System.out.println(objOPG.finnAntOppgAvStud("Ola") );
	System.out.println(objOPG.toString() );


    final String nyStudent = "Ny student";

    final String avslutt = "Avslutt";

    OppgaveOversikt oversikt = new OppgaveOversikt();

    String[] muligeValg = { nyStudent, avslutt };

    String valg = (String) showInputDialog(null, "Velg fra listen", "Godkjente oppgaver", DEFAULT_OPTION, null, muligeValg, muligeValg[0]);

    while (valg != null && !valg.equals(avslutt)) {

      if (valg.equals(nyStudent)) {

        String navnNyStud = showInputDialog("Oppgi navn ");

        navnNyStud = navnNyStud.trim();

        if (oversikt.regNyStudent(navnNyStud)) {

          showMessageDialog(null, navnNyStud + " er registrert.");

          String[] alleNavn = oversikt.finnAlleNavn();

          String[] nyMuligeValg = new String[alleNavn.length + 2];

          for (int i = 0; i < alleNavn.length; i++) nyMuligeValg[i] = alleNavn[i];

          nyMuligeValg[alleNavn.length] = nyStudent;

          nyMuligeValg[alleNavn.length + 1] = avslutt;

          muligeValg = nyMuligeValg;

          }

          else if (navnNyStud.compareTo("") == 0) { showMessageDialog(null, "Ugyldig navn."); }

          else showMessageDialog(null, navnNyStud + " er allerede registrert.");

        } else { // studentnavn er valgt

          boolean funnet = false;
          int indeks = 0;
          while (indeks < muligeValg.length - 2 && !funnet) {
           if (valg.equals(muligeValg[indeks])) funnet = true;
           else indeks++;
          }
          Student stud = oversikt.finnStudent(indeks);
          String studNavn = valg; // ny variabel for å gjøre koden lettere å lese

          String antOppgLest = "";
          int antOppg = 0;
          do {

           	antOppgLest = showInputDialog(studNavn + " har hittil godkjent " + stud.finnAntOppg() + " oppgaver.\nHvor mange nye skal registreres? (max 100)");
   			int antOppgX = Integer.parseInt(antOppgLest);
            try {
              antOppg = Integer.parseInt(antOppgLest);
            } catch (Exception e) {
              showMessageDialog(null, "Kan ikke tolke det du skrev som tall. Prøv igjen. ");
            }

            if ( antOppgX <= 0 ) { showMessageDialog(null, " Du må skrive inn et tall større enn 0."); antOppg = 0; }
            else if ( antOppgX > 100 ) { showMessageDialog(null, " Du må skrive inn et tall mindre enn 100."); antOppg = 0; }

          } while (antOppg == 0);

          stud.økAntOppg(antOppg);
          showMessageDialog(null,
           "Totalt antall oppgaver registrert på " + studNavn + " er " + stud.finnAntOppg());
        }
        valg = (String) showInputDialog(null, "Velg fra listen", "Godkjente oppgaver",
               DEFAULT_OPTION, null, muligeValg, muligeValg[0]);
		}
	}
}

class Student {

	private String navn;
	private int antOppg; //Godkjente

	//Konstruktør
	public Student (String navn){
		this.navn = navn;
	}

	//Finn-metoder
	public String finnNavn(){
		return navn;
	}

	public int finnAntOppg(){
		return antOppg;
	}
	//Sett-metode
	public int økAntOppg(int økning){
		antOppg += økning;
		return antOppg;
	}
	public String toString(){
		return "Studenten " + navn + " har levert og fAtt godkjent " + antOppg + " oppgaver.";
	}

}//END CLASS STUDENT

class OppgaveOversikt {

	private ArrayList<Student> studenter = new ArrayList<Student>();
	//private int studenter.size() = 0;

	//Konstruktør..
	public OppgaveOversikt ( ) { }

	public boolean regNyStudent(String name) {
		//check for identical name case-insensitive
		int check = 0;
		boolean test = false;
		if (name.compareTo("") == 0) return false;
		for ( int i = 0; i < studenter.size(); i++) {
			if (studenter.get(i).finnNavn().equalsIgnoreCase(name) ) {
				check = 1;
				test = false;
			}

		}

		if ( check !=1 ) {
			Student objNewStud = new Student(name);
			studenter.add(objNewStud);
			test = true;
		}
		return test;
	}

	//Finn antall studenter
	public int finnAntStud(){
		return studenter.size();
	}

	//Finn antall oppgaver på en Student
	public int finnAntOppgAvStud(String name){
		int k = -1;
		for (int i = 0; i < studenter.size(); i++) {
			if ( studenter.get(i).finnNavn().equalsIgnoreCase(name) ) {
				k = studenter.get(i).finnAntOppg();
			}
		}//FOR
		return k;
	}//FINNANTOPPGAVSTUD

	public Student finnStudent (int indeks) {
			return studenter.get(indeks);
	}

	public String[] finnAlleNavn () {
		String[] nyTab = new String[studenter.size()];
		for(int i = 0; i < studenter.size(); i++) {
			nyTab[i]=studenter.get(i).finnNavn();
		}
		return nyTab;
	}

	//Øk oppgaver på en student
	public boolean økAntOppgaver(String name, int økning) {
		int k = 0;
		for (int i = 0; i < studenter.size(); i++ ) {
			if ( studenter.get(i).finnNavn().equalsIgnoreCase(name) ) {
				studenter.get(i).økAntOppg(økning);
				k += 1;
			}//IF
		}//FOR
		if (k < 1) return false;
		else return true;
	}//

	public String toString(){
		//For fin utskrift
		String finish = "";
		String temp = "";
		int tall = 0;
		for (int i = 0; i < studenter.size() ; i++ ) {
			if ( studenter.get(i) != null ) {
				temp = studenter.get(i).toString();
			}
			finish += "\n" + temp;
		}//END FOR

		return "Antall studenter: " + studenter.size() + "\nStudentliste: \n" + finish;

	}//EnD TOSTRING

}//END CLASS OPPGAVEOVERSIKT