import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.TextBox;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.rms.RecordComparator;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreNotFoundException;
public class SortFieldsMIDlet extends MIDlet implements CommandListener {
private Command exitCommand = new Command("Exit", Command.EXIT, 1);
private Display display;
private String[] names = { "A", "B", "C", "D" };
private int[] chineseScore = { 74, 98, 89, 76 };
private int[] englishScore = { 67, 89, 89, 78 };
private int[] mathScore = { 80, 76, 80, 78 };
public SortFieldsMIDlet() {
display = Display.getDisplay(this);
}
public void startApp() {
TextBox aTextBox = new TextBox("Main", null, 256, TextField.ANY);
RecordStore rs = null;
boolean existingOrNot = false;
existingOrNot = existing("aRS3");
if (existingOrNot) {
try {
rs = RecordStore.openRecordStore("aRS3", false);
} catch (Exception e) {
}
} else {
try {
rs = RecordStore.openRecordStore("aRS3", true);
} catch (Exception e) {
}
}
Student aStudent = null;
try {
for (int i = 0; i < names.length; i++) {
aStudent = new Student();
aStudent.write(names[i], chineseScore[i], englishScore[i], mathScore[i]);
byte[] data = aStudent.changeToByteArray();
int recordID = aStudent.getRecordID();
if (recordID != -1) {
rs.setRecord(recordID, data, 0, data.length);
} else {
recordID = rs.addRecord(data, 0, data.length);
aStudent.setRecordID(recordID);
}
aStudent = null;
}
String result = "";
aStudent = new Student();
byte[] data;
int number = 0;
RecordComparator rc = new sortByAverage();
RecordEnumeration re = rs.enumerateRecords(null, rc, false);
while (re.hasNextElement()) {
int recordID = re.nextRecordId();
data = rs.getRecord(recordID);
aStudent.changeFromByteArray(data);
result += recordID + "\n" + "Name:" + aStudent.getName() + "\n" + ":"
+ aStudent.getChineseScore() + "\n" + ":" + aStudent.getEnglishScore() + "\n" + ":"
+ aStudent.getMathScore() + "\n";
number++;
}
result += "" + number + "\n";
aTextBox.setString(result);
aTextBox.setString(result);
aTextBox.addCommand(exitCommand);
aTextBox.setCommandListener(this);
display.setCurrent(aTextBox);
} catch (Exception e) {
}
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
public boolean existing(String recordStoreName) {
boolean existingOrNot = false;
RecordStore rs = null;
if (recordStoreName.length() > 32)
return false;
try {
rs = RecordStore.openRecordStore(recordStoreName, false);
} catch (RecordStoreNotFoundException e) {
existingOrNot = false;
} catch (Exception e) {
} finally {
try {
rs.closeRecordStore();
} catch (Exception e) {
}
}
return existingOrNot;
}
public void commandAction(Command c, Displayable s) {
destroyApp(false);
notifyDestroyed();
}
}
class Student {
private int ID = -1;
private String name;
private int chineseScore;
private int englishScore;
private int mathScore;
public void write(String name, int chineseScore, int englishScore, int mathScore) {
this.name = name;
this.chineseScore = chineseScore;
this.englishScore = englishScore;
this.mathScore = mathScore;
}
public void setRecordID(int ID) {
this.ID = ID;
}
public int getRecordID() {
return ID;
}
public byte[] changeToByteArray() {
byte[] data = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeUTF(name);
dos.writeInt(chineseScore);
dos.writeInt(englishScore);
dos.writeInt(mathScore);
data = baos.toByteArray();
baos.close();
dos.close();
} catch (Exception e) {
}
return data;
}
public void changeFromByteArray(byte[] data) {
try {
ByteArrayInputStream bais = new ByteArrayInputStream(data);
DataInputStream dis = new DataInputStream(bais);
name = dis.readUTF();
chineseScore = dis.readInt();
englishScore = dis.readInt();
mathScore = dis.readInt();
bais.close();
dis.close();
} catch (Exception e) {
}
}
public String getName() {
return name;
}
public int getChineseScore() {
return chineseScore;
}
public int getEnglishScore() {
return englishScore;
}
public int getMathScore() {
return mathScore;
}
}
class sortByAverage implements RecordComparator {
public int compare(byte[] rec1, byte[] rec2) {
DataInputStream student1 = new DataInputStream(new ByteArrayInputStream(rec1));
DataInputStream student2 = new DataInputStream(new ByteArrayInputStream(rec2));
int average1 = 0;
int average2 = 0;
try {
average1 = (student1.readInt() + student1.readInt() + student1.readInt()) / 3;
average2 = (student2.readInt() + student2.readInt() + student2.readInt()) / 3;
} catch (Exception e) {
}
if (average1 == average2)
return RecordComparator.EQUIVALENT;
else if (average1 < average2)
return RecordComparator.FOLLOWS;
else
return RecordComparator.PRECEDES;
}
}