Mobiltelefonapplikationer med J2ME: Lösningar till tentamen 2007-01-13

Observera att detta är förslag på lösningar. Det kan finnas andra lösningar som också är korrekta, och det kan hända att en del av lösningarna är mer omfattande än vad som krävs för full poäng på uppgiften. En del av lösningarna är kanske inte fullständiga, utan hänvisar bara till var man kan läsa svaret.

Uppgift 1 (5 p)

Se kursmaterialet

Uppgift 2 (5 p)

Se kursmaterialet

Uppgift 3 (5 p)

Se kursmaterialet

Uppgift 4 (25 p)

Här är en lösning som inte sparar lösenorden.
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.*;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.InvalidRecordIDException;
import javax.microedition.rms.RecordEnumeration;

class Uppgift {
    String system;
    String användarnamn;
    String lösenord;

    public Uppgift(String system, String användarnamn, String lösenord) {
	this.system = system;
	this.användarnamn = användarnamn;
	this.lösenord = lösenord;
    }

    public boolean equals(Object o) {
        if (!(o instanceof Uppgift))
            return false;
	Uppgift rhs = (Uppgift)o;
	return this.system.equals(rhs.system);
    }
} // Uppgift

public class Losenord extends MIDlet implements CommandListener {
    private Display displayen;
    private List listan;
    private Form formuläret;

    private TextField system;
    private TextField användarnamn;
    private TextField lösenord;

    private Command avsluta;
    private Command nytt;
    private Command välj;
    private Command spara;
    private Command tillbaka;

    private Vector vektorn;

    public Losenord() {
        listan = new List("Lösenord", Choice.EXCLUSIVE);
        formuläret = new Form("Redigeringsformulär");

        system = new TextField("System", "", 30, 0);
        användarnamn = new TextField("Användarnamn", "", 30, 0);
        lösenord = new TextField("Lösenord", "", 30, 0);

        avsluta = new Command("Avsluta", Command.EXIT, 0);
        nytt = new Command("Nytt", Command.SCREEN, 0);
        välj = new Command("Välj", Command.SCREEN, 0);
        spara = new Command("Spara", Command.SCREEN, 0);
        tillbaka = new Command("Tillbaka", Command.SCREEN, 0);

        formuläret.append(system);
        formuläret.append(användarnamn);
        formuläret.append(lösenord);

        formuläret.addCommand(avsluta);
        formuläret.addCommand(spara);
        formuläret.addCommand(tillbaka);

        formuläret.setCommandListener(this);

        listan.addCommand(avsluta);
        listan.addCommand(nytt);
        listan.addCommand(välj);

        listan.setCommandListener(this);

	vektorn = new Vector();
    }

    public void startApp() {
        displayen = Display.getDisplay(this);
        displayen.setCurrent(listan);
    }

    public void destroyApp(boolean unconditional) { }

    public void pauseApp() { }

    public void commandAction(Command kommandot, Displayable displayable) {
        if (kommandot == avsluta) {
            destroyApp(false);
            notifyDestroyed();
        }
        else if (kommandot == nytt) {
	    system.setString("");
	    användarnamn.setString("");
	    lösenord.setString("");
	    displayen.setCurrent(formuläret);
        }
        else if (kommandot == välj) {
	    int i = listan.getSelectedIndex();
	    if (i != -1) {
		Uppgift u = (Uppgift)vektorn.elementAt(i);
		system.setString(u.system);
		användarnamn.setString(u.användarnamn);
		lösenord.setString(u.lösenord);
	    }
	    else {
		system.setString("");
		användarnamn.setString("");
		lösenord.setString("");
	    }
	    displayen.setCurrent(formuläret);
        }
        else if (kommandot == spara) {
	    String s = system.getString();
	    String n = användarnamn.getString();
	    String l = lösenord.getString();
	    int i = index_i_vektorn(s);
	    if (s.equals("")) {
		// Inget systemnamn
	    }
	    else if (i == -1) {
		// Lägg till ett nytt system
		Uppgift u = new Uppgift(s, n, l);
		vektorn.addElement(u);
		listan.append(s, null);
	    }
	    else {
		// Ändra data om ett gammalt system
		Uppgift u = (Uppgift)vektorn.elementAt(i);
		u.användarnamn = n;
		u.lösenord = l;
	    }
	    displayen.setCurrent(listan);
        }
        else if (kommandot == tillbaka) {
	    displayen.setCurrent(listan);
        }
    } // commandAction

    private int index_i_vektorn(String system) {
	for (int i=0; i < vektorn.size(); i++) {
	    Uppgift u = (Uppgift)vektorn.elementAt(i);
	    if (u.system.equals(system))
		return i;
	}
	return -1;
    }
} // class Lösenord


Thomas Padron-McCarthy (Thomas.Padron-McCarthy@tech.oru.se) 10 januari 2007