基于RMS的通讯录管理程序

 import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.util.Enumeration;
import java.util.Hashtable;

import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Choice;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.List;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordStore;

public class Exec extends MIDlet {
        Display display;
        MainForm mainForm;

        public Exec() {
                mainForm = new MainForm("通讯录", this);
                display = Display.getDisplay(this);
        }

        public void startApp() {
                display.setCurrent(mainForm);
        }

        public void pauseApp() {
                display.setCurrent(null);
        }

        public void destroyApp(boolean unconditional) {
        }

        public Display getDisplay() {
                return display;
        }

        public void exitApp() {
                destroyApp(true);
                notifyDestroyed();
        }
}

class MainForm extends Form implements CommandListener {
        Command cmd1 = new Command("退出", Command.BACK, 1);
        Command cmd2 = new Command("显示", Command.OK, 1);
        Exec parent;
        RecordList recordList;

        public MainForm(String title, Exec parent) {
                super(title);
                this.parent = parent;
                recordList = new RecordList("主界面", parent);
                addCommand(cmd1);
                addCommand(cmd2);
                setCommandListener(this);
        }

        public void commandAction(Command c, Displayable arg1) {
                if (c == cmd1) {
                        parent.exitApp();
                } else if (c == cmd2) {
                        parent.getDisplay().setCurrent(recordList);
                }
        }
}

class RecordList extends List implements CommandListener {
        Command cmdAppend = new Command("追加于后", Command.OK, 1);
        Command cmdInsert = new Command("插入于前", Command.OK, 1);
        Command cmdSelect = new Command("查看", Command.BACK, 1);
        Exec parent;
        NewTextBox newTextBox;
        BrowseTextBox browseTextBox;
        InfoAlert infoAlert = new InfoAlert();
        MemoryDataManager dm = MemoryDataManager.getDataManager();

        public RecordList(String title, Exec parent) {
                super(title, Choice.IMPLICIT);
                this.parent = parent;
                newTextBox = new NewTextBox("信息", 100, parent, this);
                browseTextBox = new BrowseTextBox("内容", 100, parent, this);
                addCommand(cmdAppend);
                addCommand(cmdInsert);
                addCommand(cmdSelect);
                setCommandListener(this);
                fillRecords();
        }

        public void fillRecords() {
                Hashtable records = dm.getRecords();
                Enumeration enu = records.keys();
                while (enu.hasMoreElements()) {
                        String key = (String) enu.nextElement();
                        this.insert(0, key, null);
                }
        }

        public void commandAction(Command c, Displayable arg1) {
                if (c == cmdAppend || c == cmdInsert) {
                        newTextBox.clearAll();
                        if (c == cmdAppend)
                                newTextBox.setFlag("after");
                        else
                                newTextBox.setFlag("before");
                        parent.getDisplay().setCurrent(newTextBox);
                } else if (c == cmdSelect) {
                        if (this.size() > 0) {
                                parent.getDisplay().setCurrent(browseTextBox);
                                browseTextBox.getRecord();
                        } else
                                parent.getDisplay().setCurrent(infoAlert);
                }
        }

        public MemoryDataManager getDm() {
                return dm;
        }
}

class NewTextBox extends Form implements CommandListener {
        Command cmdOK = new Command("确认", Command.OK, 1);
        Exec parent;
        RecordList list;
        String flag;
        TextField tfName = new TextField("姓名:", "", 8, TextField.ANY);
        TextField tfEmail = new TextField("Email", "", 20, TextField.EMAILADDR);
        TextField tfPhone = new TextField("电话:", "", 20, TextField.PHONENUMBER);

        public NewTextBox(String title, int size, Exec parent, RecordList list) {
                super(title);
                this.parent = parent;
                this.list = list;

                append(tfName);
                append(tfEmail);
                append(tfPhone);

                addCommand(cmdOK);
                setCommandListener(this);
        }

        public void commandAction(Command c, Displayable arg1) {
                MemoryDataManager dm = list.getDm();
                Person person = new Person(tfName.getString(), tfEmail.getString(),
                                tfPhone.getString());
                int recordID = dm.addRecord(person);
                int index = list.getSelectedIndex();
                String result = String.valueOf(recordID);
                if (index < 0) {
                        list.append(result, null);
                } else {
                        if (flag.equals("after"))
                                list.insert(index + 1, result, null);
                        else {
                                list.insert(index, result, null);
                        }
                }
                parent.getDisplay().setCurrent(list);
        }

        public void setFlag(String flag) {
                this.flag = flag;
        }

        public void clearAll() {
                for (int i = 0; i < this.size(); i++) {
                        TextField tf = (TextField) this.get(i);
                        tf.setString("");
                }
        }
}

class BrowseTextBox extends Form implements CommandListener {
        Command cmdOK = new Command("确认", Command.OK, 1);
        Command cmdDelete = new Command("删除", Command.BACK, 1);
        Exec parent;
        RecordList list;
        TextField tfID = new TextField("ID号:", "", 8, TextField.ANY);
        TextField tfName = new TextField("姓名:", "", 8, TextField.ANY);
        TextField tfEmail = new TextField("Email", "", 20, TextField.EMAILADDR);
        TextField tfPhone = new TextField("电话:", "", 20, TextField.PHONENUMBER);

        public BrowseTextBox(String title, int size, Exec parent, RecordList list) {
                super(title);
                this.parent = parent;
                this.list = list;

                append(tfID);
                append(tfName);
                append(tfEmail);
                append(tfPhone);

                addCommand(cmdOK);
                addCommand(cmdDelete);
                setCommandListener(this);
        }

        public void getRecord() {
                String key = list.getString(list.getSelectedIndex());
                MemoryDataManager dm = list.getDm();
                Hashtable records = dm.getRecords();
                Person person = (Person) records.get(key);
                tfID.setString(String.valueOf((person.getID())));
                tfName.setString(person.getName());
                tfEmail.setString(person.getEmail());
                tfPhone.setString(person.getPhone());
        }

        public void deleteRecord() {
                String key = list.getString(list.getSelectedIndex());
                MemoryDataManager dm = list.getDm();
                dm.deleteRecord(key);
        }

        public void commandAction(Command c, Displayable arg1) {
                if (c == cmdOK) {
                        parent.getDisplay().setCurrent(list);
                } else if (c == cmdDelete) {
                        int index = list.getSelectedIndex();
                        deleteRecord();
                        list.delete(index);
                        parent.getDisplay().setCurrent(list);
                }
        }
}

class InfoAlert extends Alert {
        public InfoAlert() {
                super("通知");
                setType(AlertType.INFO);
                setTimeout(1000);
                setString("没有记录");
        }
}

class MemoryDataManager {
        RecordStore rs;

        public MemoryDataManager() {
                try {
                        rs = RecordStore.openRecordStore("PersonInfo", true);
                        if (rs.getNumRecords() == 0) {
                                Person person1 = new Person("李树青", "[email protected]",
                                                "00862584028398");
                                addRecord(person1);
                                Person person2 = new Person("胡哥", "[email protected]",
                                                "00861000001111");
                                addRecord(person2);
                                rs.closeRecordStore();
                        }
                } catch (Exception e) {
                        System.out.println(e.getMessage());
                }
        }

        public static MemoryDataManager getDataManager() {
                return new MemoryDataManager();
        }

        public int addRecord(Person person) {
                int personID = 0;
                try {
                        rs = RecordStore.openRecordStore("PersonInfo", true);
                        personID = rs.getNextRecordID();
                        person.setID(personID);
                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
                        DataOutputStream dos = new DataOutputStream(baos);
                        byte[] data = person.serialize();
                        rs.addRecord(data, 0, data.length);
                        dos.close();
                        baos.close();
                        rs.closeRecordStore();
                } catch (Exception e) {
                        System.out.println(e.getMessage());
                }
                return personID;
        }

        public void deleteRecord(String key) {
                try {
                        rs = RecordStore.openRecordStore("PersonInfo", true);
                        RecordEnumeration re = rs.enumerateRecords(null, null, false);
                        while (re.hasNextElement()) {
                                byte[] tmp = re.nextRecord();
                                Person person = Person.deserialize(tmp);
                                int personID = person.getID();
                                if (personID == Integer.parseInt(key)) {
                                        rs.deleteRecord(personID);
                                        break;
                                }
                        }
                        rs.closeRecordStore();
                } catch (Exception e) {
                        System.out.println(e.getMessage());
                }
        }

        public Hashtable getRecords() {
                Hashtable results = new Hashtable();
                try {
                        rs = RecordStore.openRecordStore("PersonInfo", true);
                        RecordEnumeration re = rs.enumerateRecords(null, null, false);
                        while (re.hasNextElement()) {
                                byte[] tmp = re.nextRecord();
                                Person person = Person.deserialize(tmp);
                                int personID = person.getID();
                                results.put(String.valueOf(personID), person);
                        }
                        rs.closeRecordStore();
                } catch (Exception e) {
                        System.out.println(e.getMessage());
                }
                return results;
        }
}

class Person {
        int ID;
        String name;
        String Email;
        String phone;

        public Person() {
        }

        public Person(String name, String Email, String phone) {
                setName(name);
                setEmail(Email);
                setPhone(phone);
        }

        public void setID(int id) {
                ID = id;
        }

        public int getID() {
                return ID;
        }

        public String getName() {
                return name;
        }

        public void setName(String name) {
                this.name = name;
        }

        public String getEmail() {
                return Email;
        }

        public void setEmail(String email) {
                Email = email;
        }

        public String getPhone() {
                return phone;
        }

        public void setPhone(String phone) {
                this.phone = phone;
        }

        public byte[] serialize() {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                try {
                        DataOutputStream dos = new DataOutputStream(baos);
                        dos.writeInt(ID);
                        dos.writeUTF(name);
                        dos.writeUTF(Email);
                        dos.writeUTF(phone);
                        baos.close();
                        dos.close();
                } catch (Exception e) {
                        System.out.println(e.getMessage());
                }
                return baos.toByteArray();
        }

        public static Person deserialize(byte[] data) {
                ByteArrayInputStream bais = new ByteArrayInputStream(data);
                DataInputStream dis = new DataInputStream(bais);
                Person person = new Person();
                try {
                        person.ID = dis.readInt();
                        person.name = dis.readUTF();
                        person.Email = dis.readUTF();
                        person.phone = dis.readUTF();
                        bais.close();
                        dis.close();
                } catch (Exception e) {
                        System.out.println(e.getMessage());
                }
                return person;
        }

        public String toString() {
                return ID + ":" + name + ":" + Email + ":" + phone;
        }
}

你可能感兴趣的:(基于RMS的通讯录管理程序)