AVDELING FOR INGENIØRUTDANNING

EKSAMENSOPPGAVE

Emne:
PROGRAMMERING
Emnekode:
LO 127 A
Faglig veileder:
Eva H.Vihovde
Kjetil Grønning
Grupper:
1AA, 1AB, 1AC, 1IA
Dato:
20.02.2009
Eksamenstid:
09.00 - 14.00
Eksamensoppgaven består av:   Antall sider (inkl. forsiden): 6   Antall oppgaver: 4 Antall vedlegg: Ingen 
Tillatte hjelpemidler: Ingen   
Kandidaten må selv kontrollere at oppgavesettet er fullstendig. Ved eventuelle uklarheter i oppgaveteksten skal du redegjøre for de forutsetninger du legger til grunn for løsningen.

Les gjennom hele oppgavesettet før du begynner å besvare deloppgavene.

Utarbeidet av (faglærer): Kontrollert av (en av disse): Studieleders/
Fagkoordinators underskrift:
Annen lærerSensorStudieleder/
Fagkoordinator
  
 
   





ARBEIDSKRAV I PROGRAMMERING

Studentene i Programmering er kjent med at faget har arbeidskrav som må bestås for å gå opp til eksamen. I denne oppgaven skal du lage et program som registrerer innleveringer og godkjenninger av obligatoriske oppgaver, også kalt "obliger". Oppgavene løses i grupper på 3 personer. (Av hensyn til oppgavens størrelse har vi valgt å se bort fra de individuelle delprøvene, og valgt fast gruppestørrelse på 3.)

Programmet består av klassene Gruppemedlem, Oblig, Student, ObligRegister, ArbeidskravGUI og ArbeidskravDriver. Der det ikke er spesifikt angitt hva datatypen skal være, må du selv velge en passende datatype.



OPPGAVE 1

a) Klassen Gruppemedlem skal ha to datafelt for henholdsvis navn og klasse. Videre skal den ha

Definer klassen Gruppemedlem.



Klassen Oblig representerer en enkelt obligatorisk oppgave. Denne klassen kan du få bruk for i de etterfølgende oppgavene:

public class Oblig
{
  private Gruppemedlem[] gruppe;
  private int obligNr;
  boolean godkjent;

  public Oblig( Gruppemedlem[] g, int n, boolean b )
  {
    gruppe = g;
    obligNr = n;
    godkjent = b;
  }
  
  public Gruppemedlem[] getDeltakere()
  {
    return gruppe;
  }

  public int getObligNr()
  { 
    return obligNr;
  }

  public boolean getGodkjent()
  { 
    return godkjent;
  }
}  // end of class Oblig



OPPGAVE 2

Nedenfor ser du en skisse av klassen Student:

public class Student
{
  private String navn, klasse;
  private Oblig[] levert;

  public Student( String n, String k, int antObliger )
  {
    <  Initialiserer datafeltene.  >
  }
  
  < get-metoder for navn og klasse >
  
  private int erRegistrert( int nr )    
  {
     < Undersøker om studenten allerede har registrert en oblig med
       nummer lik den innkomne parameteren nr. Hvis så er tilfelle skal 
       indeksen returneres. I motsatt fall returneres -1.  >
  }
  
  public void innlevering( Oblig oppg )
  {
    < Hvis det tidligere er levert en oppgave med samme nummer som 
      den innkomne parameteren oppg har, og som IKKE har vært 
      godkjent tidligere, skal den nye oppgaven erstatte den gamle. 
      Hvis obligen oppg ikke har vært levert tidligere skal den plasseres
      på første ledige plass. >
  }
  
  public int ikkeGodkjent()
  { 
    < Returnerer antall oppgaver som enten ikke er godkjent eller ikke er 
      levert inn. ( Antall oppgaver som må være godkjent tilsvarer lengden 
      på arrayen. ) >
  
  public String toString()
  {
    < Returnerer studentens navn og klasse, samt opplysninger om hvilke 
      oppgaver som er godkjent, om vedkommende kan gå opp til eksamen, og 
      eventuelt hvor mange oppgaver som mangler for å kunne gå opp til eksamen.  >
  }
}  // end of class Student

Klassens konstruktør og get-metodene for navn og klasse trenger du ikke programmere, men du må merke deg dem, da du vil få bruk for dem i senere oppgaver.

a) Programmer metoden private int erRegistrert( int nr ) { ... }.

b) Programmer metoden public void innlevering( Oblig oppg ) { ... }.

c) Programmer metoden public int ikkeGodkjent() { ... }.

d) Programmer metoden toString() { ... }.



OPPGAVE 3

public class ObligRegister
{
  private Student[] studenter;
  private int antallObliger;

   public ObligRegister(int antStud, int antOblig)
  {
    <  Foretar nødvendig initialisering av datafeltene. >
  } 
     
   public void nyStudent( Student s )
  {
    < Setter objektet ny, som metoden mottar som parameter, inn i arrayen 
      studenter. Du kan forutsette at det er plass i arrayen.  >   
  }

  private int posisjon( String navn )
  { 
    <  Returnerer array-indeksen for student med navn lik parameterverdien, 
       i tilfelle en slik finnes. Returnerer -1 ellers.  >
  }

  public void registrer( Oblig oppg )
  {
    <  Registrerer oppgaven oppg på ALLE studentene i gruppen som har levert oppgaven. 
       Dersom noen av disse ikke på forhånd finnes i arrayen studenter, må de tilføyes
       i arrayen som nye studenter.  >  
  }

  public String godkjent( String navn )
  {
    <  Returnerer opplysninger om studenten med navn lik parameterverdien, 
       dvs. navn og klasse, samt opplysninger om hvilke oppgaver som er godkjent, 
       og om vedkommende kan gå opp til eksamen, eventuelt hvor mange oppgaver som 
       mangler for å kunne gjøre det.  >  
  }

  public String[] statusListe(String klasse)
  {
    <  Returner en ny array som, for hver student i klasse, inneholder opplysninger 
       om navn og klasse, samt opplysninger om hvilke oppgaver som er godkjent, og om 
       vedkommende kan gå opp til eksamen, eventuelt hvor mange oppgaver som mangler 
       for å kunne gjøre det.  >
  }
}  // end of class ObligRegister

a) Programmer metoden public void nyStudent( Student s ) { ... }.

b) Programmer metoden private int posisjon( String navn) { ... }

c) Programmer metoden public void registrer( Oppgave oppg ) { ... }

d) Programmer metoden public String godkjent( String navn) { ... }

e) Programmer metoden public String[] statusListe(String klasse) { ... }



OPPGAVE 4

Nedefor ser du et bilde av programmets brukergrensesnitt, etterfulgt av klassen ArbeidskravGUI.

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

public class ArbeidskravGUI extends JFrame 
{
  private JTextField person, obligNr, kl;
  private JTextField[] navn, klasse;
  private JButton reg, sjekk, liste;
  private JTextArea output;
  private ObligRegister kartotek;
  private JCheckBox godkjent;
  private Lytter lytter;

  public ArbeidskravGUI(String fag, int antStudenter, int antObliger)
  {
    super( fag + " - Arbeidskrav" );
    kartotek = new ObligRegister(antStudenter, antObliger);
    lytter = new Lytter();
    
    for ( int i = 0; i < navn.length; i++ )
    {
      navn[ i ] = new JTextField( 20 );
      klasse[ i ] = new JTextField( 5 );
      :
      :
    }
    
    <  Resten av koden for å lage brukergrensesnittet.  >
  
  }
  
  private Gruppemedlem[] lesGruppe()   // hjelpemetode
  {
    <  Metoden skal opprette og returnere en array, av typen Gruppemedlem, 
       som inneholder objekter tilsvarende de personene som deltar i gruppearbeidet.
       Legg merke til at tekstfeltene det skal leses fra er lagt inn i arrayene 
       navn og klasse.  >
  }
  
  public void registrer()
  {
    <  Registrerer en innlevering av en oblig utfra  data i skjermbildets øvre halvdel.
       Hvorvidt oppgaven er godkjent eller ikke kan avleses ved hjelp av setningen:
       boolean b = godkjent.isSelected();  >     
  }
  
  public void sjekkGodkjenning()
  {
    <  Leser inn navn (fra tekstfeltet person) og skriver i tekstområdet output opplysninger
       om hvilke oppgaver som er godkjent, og om vedkommende kan gå opp til eksamen, 
       eventuelt hvor mange oppgaver som mangler for å kunne gjøre det.  >    
  }

  public void skrivListe()
  { 
    <  Skriver i tekstområdet output en liste over alle registrerte opplysninger om 
       studenter i en bestemt klasse (fra tekstfeltet kl).  >
  }

  private class Lytter ...
  { 
    < Kaller opp riktig metode utfra hendelser i brukergransesnittet. >
  }
}  // end of class ArbeidskravGUI

a) Programmer metoden private Gruppemedlem[] lesGruppe(){ ... }

b) Programmer metoden public void registrer() { ... }

c) Programmer metoden public void sjekkGodkjenning() { ... }

d) Programmer metoden public void skrivListe() { ... }

e) Programmer den private lytteklassen Lytter.

f) Programmer klassen ArbeidskravGUI som inneholder programmets main-metode.



SLUTT