




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象程序设计II -J2ME课程设计论文题 目:手机个人通讯录学 院:计算机与信息工程学院专 业:计算机科学与技术班 级:计算机06-6班姓 名:罗 溪学 号:07起止时间:2010.07.06-2010.07.16 成绩: 课程设计成绩评定表质量评价指标(在相应栏目打)评 价 项 目评 价 质 量优秀良好一般及格不及格工作量和态度实验、计算可靠性文字和图表质量程序完成情况总体评价评定成绩评定人员签名IV课程设计任务书一、设计题目:手机个人通讯录二、设计内容:个人通信录是在移动电话中常用的程序,它可以用来理解在持久存储中进行添加、查找和删除的过程.它可以清楚地演示每个界面切换的过程,以及响应用户输入命令的方法。介绍自己程序的总体功能三、设计要求:1开始显示初始化欢迎界面,主界面显示用户可操作的基本功能,如添加联系人,查看联系人,删除联系人,查找联系人等。2添加联系人存储时,如果没有添加姓名,就直接按了SELECT,那么界面将会显示:姓名不能为空。3联系人姓名、移动电话、固定电话和电子邮件信息录入完之后,单击保存按纽,这就完成了联系人的添加,界面并显示:添加联系人完成。概要介绍一下程序的具体功能四、工作计划:时间完成内容提交文档备注第1天查找资料,确定题目,选择方案课程设计任务书设计准备阶段第2天第3天题目分析,设计算法算法描述设计阶段第4天功能模块的划分和设计结构流程图等第5天第6天实现具体数据结构和模块无第7天程序设计与调试无运行并验证程序功能第8天第9天检查程序第10天整理材料,撰写论文课程设计论文指导教师: 王艳涛 陈伟 高辉 教研室主任: 2008 年 12月31 日II 本科课程设计论文摘 要本文利用J2ME语言编程的思想来完成系统的设计,进行突出数据库的特征,然后编写出程序设计代码进行界面设计,实现友好的界面交互,具有清晰的程序流程图,最后编程实现了全过程。关键词:J2ME 面向对象 通讯录7目 录课程设计成绩评定表II课程设计任务书III摘 要II目 录III1 设计内容12 设计过程12.1设计方案的论证12.2概要设计12.3界面设计图22.4代码实现63 设计总结6参考文献7附录:程序源代码71 设计内容个人通信录是在移动电话中常用的程序,它可以用来理解在持久存储中进行添加、查找和删除的过程.它可以清楚地演示每个界面切换的过程,以及响应用户输入命令的方法。介绍自己程序或系统的总体功能。2 设计过程2.1设计方案的论证Eclipse是当今最流行的Java开发IDE之一,它是一个开发源代码的、基于Java的可扩展开发平台,因为它具有良好的可扩展性。 它是一个开发源代码的、基于Java的可扩展开发平台,因为它具有良好的可扩展性.J2ME开发可以继承在Eclipse中完成,利用Eclipse界面友好的优势,提高J2ME应用程序的开发效率。Eclipse框架的这种灵活性来源于其扩展点。它们是在XML中定义的已知接口,并充当插件的耦合点。扩展点的范围包括从用在常规表述过滤器中的简单字符串,到一个Java类的描述。任何Eclipse插件定义的扩展点都能够被其它插件使用,反之,任何Eclipse插件也可以遵从其它插件定义的扩展点。除了解由扩展点定义的接口外,插件不知道它们通过扩展点提供的服务将如何被使用。Eclipse的最大特点是它能接受由Java开发者自己编写的开放源代码插件,这类似于微软公司的VisualStudio和Sun微系统公司的NetBeans平台。Eclipse为工具开发商提供了更好的灵活性,使他们能更好地控制自己的软件技术。结合软件工程课程所学知识,用结构化方法或面向对象方法,论述自己设计题目的需求分析结果。文字+一些必须的图、表。2.2概要设计功能模块的划分与总体设计,可以借助类图和模块图等来表示,如果使用数据库,还要有数据库的概要设计介绍,可使用E-R图等来表示。本程序共有8个java源文件:Address.java:该文件负责写入数据记录集。.AddressbookMIDlet.java:该文件是MIDlet父类。Data.java:该文件负责载入通讯录的全部内容。FlashUI.java:该文件负责创建欢迎界面。ListUI.java:该文件负责创建通讯录条目界面。MainUI.java:该文件负责创建主界面。NewUI.java:该文件负责创建添加联系人界面。WaitUI.java:该文件负责创建提示界面。2.3界面设计图介绍具体的各个界面的图,并对相应的图做详细的描述。经过进一步的分析设计,得到系统的框图如图1所示。(1)初始化欢迎界面(如图2所示)欢迎界面停止三秒后进入主程序界面。初始欢迎界面即闪屏显示了程序初始的第一个屏幕,一般用于显示版权信息.程序中使用FlashUI实现。(2)主界面(如图3所示)进入主程序界面后选择主菜单里的选项,它是由MainUI类实现,它包含了用户可操作的基本功能,如添加联系人,查看联系人,删除联系人,查找联系人。(3)添加联系人初始状态(如图4所示)添加联系人界面由NewUI类实现,它包含了联系人信息的所有内容,包括联系人姓名、移动电话、固定电话和电子邮件信息。要求用户从键盘输入。(4)添加联系人输入状态(如图5所示)添加联系人的信息。进行输入。包括联系人信息的所有内容,包括联系人姓名、移动电话、固定电话和电子邮件信息。(5)添加联系人存储时,姓名不能为空(如图6所示)添加联系人存储时,如果没有添加姓名,就直接按了SELECT,那么界面将会显示:姓名不能为空。(6)添加联系人完成时提示界面(如图7所示) 联系人姓名、移动电话、固定电话和电子邮件信息录入完之后,单击保存按纽,这就完成了联系人的添加,界面并显示:添加联系人完成。(7)查看联系人界面(如图8所示)因为此界面是一个List界面,所以在完成了联系人的添加之后,弹出一个主菜单,上面分别显示了:添加联系人,查看联系人,删除联系人,查找联系人的信息。在List界面中,选中查看联系人信息,按SELECT键进入。(8)查看联系人基本信息界面(如图9所示) 选中了查看联系人选项之后,弹出了所有的联系人界面,例如:张三,李四,赵钱。选中联系人张三。(9)查看联系人界面(菜单)(如图10所示)选中联系人张三之后,按手机的菜单键,弹出了两项菜单,分别是:详细信息和退出选项,选中详细信息选项,按SELECT按纽进入。图 1系统结构框图图 2初始化欢迎界面图 图 3主界面图图 4添加联系人初始状态 图5添加联系人输入状态图 6添加联系人存储时提示界面 图 7 添加联系人完成时提示界面图8查看联系人界面 图 9查看联系人基本信息界面(10)查看联系人详细信息界面(如图11所示) 这样就进入了联系人张三的详细信息菜单,界面就显示联系人张三的详细信息,包括联系人张三的姓名、移动电话、固定电话和电子邮件信息。图 10查看联系人界面 图11查看联系人详细信息界面2.4代码实现介绍程序的编码实现,如果程序代码量不是很大,直接把代码粘到这里,如果代码量非常大(可以把代码放到最后面),在这里可以粘一些主要核心功能代码。还可以介绍一下,如何设计和测试的。经过前面的工作,最后在集成编辑环境中,编写的程序代码见附录程序所示。3 设计总结结合程序最终运行效果,总结一下,程序是否达到了预期目的,有哪些不足地方,还可以进一步做哪些方面的改进。结合自己两周课程设计的过程,总结一下,自己有哪些收获,哪些不足,今年怎样去做。在本次编程过程中,使我收益非浅、收益良多,在同学的帮助下才能够顺利的编程工作才得以如期完成,我以后会好好学习的,让今天所学的深深印在脑海中,会更加的使自己更完善的理解知识,谢谢老师!参考文献附自己课程设计参考的图书、文章信息。1 崔忠折.金属学及热处理.机械工业出版社,1989:60-982 张安风,陆文华.高铸铁的氧化行为.金属学报.1993,29(6):263-2683 王颖.敦促新理论的研究.哈尔滨工业大学硕士论文.1992:8-134 J.R.McDnonell, D.Wagen.Evolving Recurrent Percepptions Time Modeling. IEEETrans.on Neural Netwoks.1994,5(1):24-38附录:程序源代码/Address.javaimport java.io.*;public class Address private String userName=;private String mobilePhone=;private String email=;private String phone=;public Address(String userName,String mobilePhone,String email,String phone)this.userName=userName;this.mobilePhone=mobilePhone;this.email=email;this.phone=phone;public String getEmail()return email;public void setEmail(String email)this.email=email;public String getMobilePhone()return mobilePhone;public void setMobilePhone(String mobilePhone)this.mobilePhone=mobilePhone;public String getPhone()return phone;public void setPhone(String phone)this.phone=phone;public String getUserName()return userName;public void setUserName(String userName)this.userName=userName;public static boolean matches(byte data1,String userName) throws IOExceptionByteArrayInputStream bais=new ByteArrayInputStream(data1);DataInputStream dis=new DataInputStream(bais);tryreturn(dis.readUTF().equals(userName);catch(IOException e)e.printStackTrace();return false;public byte serialize() ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); try dos.writeUTF(userName); dos.writeUTF(mobilePhone); dos.writeUTF(phone); dos.writeUTF(email); /wsvPersonName.writeObject(dos); dos.flush(); baos.close(); dos.close(); catch(Exception exc) exc.printStackTrace(); return baos.toByteArray(); /AddressbookMIDlet.javaimport javax.microedition.midlet.*;import javax.microedition.lcdui.*;public class AddressBookMIDlet extends MIDlet implements CommandListener/public class UIArrangement Display dis;Alert alert;AddressBookMIDlet addressBookMIDlet;/Command exitCommand;/Command okCommand;WaitUI waitUI;MainUI mainUI;FlashUI flashUI;NewUI newUI;ListUI listUI;/FindUI findUI;/ConfirmUI confirmUI;Data data;/Command exitCommand;/Command mainCommand; public static final byte EVENT_NEW_ADDRESS=1;public static final byte EVENT_SAVE_ADDRESS=2;public static final byte EVTNE_DELETE_ADDRESS=3;public static final byte EVENT_FIND_ADDRESS=4;public static final byte EVENT_LIST_ADDRESS=5;public static final byte EVENT_NEW_BACK_MAINUI=6;public static final byte EVENT_LIST_BACK_MAINUI=7;public static final byte EVENT_FIND_BACK_MAINUI=8;public static final byte EVENT_CLEAR_ADDRESS_YES=9;public static final byte EVENT_CLEAR_ADDRESS_NO=10;public static final byte EVENT_DELETE_ADDRESS_YES=11;public static final byte EVENT_DELETE_ADDRESS_NO=12;public static final byte EVENT_DELETE_ADDRESS=13;public AddressBookMIDlet()String listtype=添加联系人,查看联系人,删除联系人,查找联系人;/this.addressBookMIDlet=abm;dis=Display.getDisplay(this);/exitCommand=new Command(退出,Command.SCREEN,1);/okCommand=new Command(确定,Command.SCREEN,1);waitUI=new WaitUI();mainUI=new MainUI(listtype,this);flashUI=new FlashUI();newUI=new NewUI(this);listUI=new ListUI(this);data=new Data();/findUI=new FindUI(this);/contentUI=new ContentUI(this);/confirmUI=new ConfirmUI(dis,null,);/exitCommand=new Command(退出,Command.SCREEN,1);/mainUI.addCommand(exitCommand);/mainUI.addCommand(okCommand);/mainUI.setCommandListener(this);public void handleEvent(int event,Object obj)switch(event)case EVENT_NEW_ADDRESS:newUI.clear();dis.setCurrent(newUI);break;/*case EventType.EVENT_CLEAR_ADDRESS_YES:ata.clearAllrecord();dis.setCurrent(mainUI);catch(ApplicationException e)break;*/case EVENT_CLEAR_ADDRESS_NO:break; case EVENT_LIST_ADDRESS:waitUI.setMessage(正在获取联系人列表);dis.setCurrent(waitUI);/Index index=data.listRecord();/listUI.init(); String userN=aa,bb,cc; String u=;userN=data.getuserData();for(int i=0;iuserN.length;i+)u=userNi;listUI.append(u,null);/*/this.append(张三,null);dis.setCurrent(listUI);break;/*case EventType.EVENT_FIND_ADDRESS:findUI.init();dis.setCurrent(findUI);break;*/case EVENT_NEW_BACK_MAINUI:case EVENT_LIST_BACK_MAINUI:case EVENT_FIND_BACK_MAINUI:dis.setCurrent(mainUI);break;case EVENT_SAVE_ADDRESS:tryAddress address=(Address)obj;/*if(data.isRecordExist(address.getUserName()/(该联系人已经存在,mainUI,AlertType.WARNING);alert=new Alert(警告,联系人已经存在,null,AlertType.WARNING);addressBookMIDlet.dis.setCurrent(alert,addressBookMIDlet.dis.getCurrent();else*/data.addRecord(address);/showAlert(联系人添加完成,mainUI,AlertType.CONFIRMATION);alert=new Alert(报告,联系人添加完成,null,AlertType.WARNING);addressBookMIDlet.dis.setCurrent(alert,addressBookMIDlet.dis.getCurrent();catch(Exception e)break; /*case EventType.EVENT_DELETE_ADDRESS_NO:String userName=(String)obj;setMessage(确定要删除+userName+么?);break;case EventType.EVENT_DELETE_ADDRESS_YES:tryString userName=(String)obj;data.deleteRecord(userName);catch(ApplicationException e)break;default:break;*/ public void commandAction(Command c,Displayable d) /if(c=exitCommand) / notifyDestroyed(); / / if(c=okCommand) / protected void destroyApp(boolean arg0) throws MIDletStateChangeException / TODO 自动生成方法存根protected void pauseApp() / TODO 自动生成方法存根protected void startApp() throws MIDletStateChangeException / TODO 自动生成方法存根dis.setCurrent(flashUI);tryThread.sleep(3000);catch(InterruptedException e)dis.setCurrent(mainUI);/Data.javaimport java.io.*;import javax.microedition.lcdui.*;import javax.microedition.rms.*;public class Data static RecordStore addressRS=null;Address address;Alert alert;/RecordStore addressIndexRS=null;private static class AddressFilter implements RecordFilterString userName;public AddressFilter(String userName)this.userName=userName;public boolean matches(byte data)tryreturn Address.matches(data, userName);catch(IOException e)e.printStackTrace();return false;/*public static class IndexFilter implements RecordFilterString key;int type;public IndexFilter(String key)this.key=key;public IndexFilter(String key,int type)this.key=key;this.type=type;/*public boolean matches(byte data)try/return Index.matches(data,type);catch(IOException e)e.printStackTrace();return false;*/public Data()tryaddressRS=RecordStore.openRecordStore(myAddressBook, true);/addressIndexRS=RecordStore.openRecordStore(index, true);catch(RecordStoreException e)public void addRecord(Address address) throws Exception try byte data1=address.serialize(); int id=addressRS.addRecord(data1,0,data1.length); /Index index=new Index(address.getUserName(),id); /addIndex(index); catch(Exception Ee) /String userName;static byte byteComplexData=new byte1;public byte getRecordData()tryByteArrayInputStream complexStream=new ByteArrayInputStream(byteComplexData);DataInputStream complexDataStream=new DataInputStream(complexStream);for(int i=1;ibyteComplexData.length)byteComplexData=new byteaddressRS.getRecordSize(i);addressRS.getRecord(i,byteComplexData,0);/userName+=userName+n+complexDataStream.readUTF();complexStream.reset();complexStream.close();complexDataStream.close();/alert=new Alert(正在读入记录,userName,null,AlertType.WARNING);catch(Exception e)return byteComplexData;public static String userName=new String88;public static int j=0;static String u;public static void list(String sn)userNamej+=sn;/return userName;static byte byteComplexData1=new byte1;public static String getuserData()tryByteArrayInputStream complexStream=new ByteArrayInputStream(byteComplexData1);DataInputStream complexDataStream=new DataInputStream(complexStream);for(int i=1;ibyteComplexData.length)byteComplexData=new byteaddressRS.getRecordSize(i);addressRS.getRecord(i,byteComplexData,0);u=complexDataStream.readUTF();list(u);/complexStream.reset();/alert=new Alert(读入记录,u,null,AlertType.WARNING);complexStream.close();complexDataStream.close();/alert=new Alert(正在读入记录,userName,null,AlertType.WARNING);catch(Exception e)return userName;/*public void addIndex(Index index)trybyte index_data=index.serialize();if(rs_index.getNumRecords()0)RecordEnumeration records=addressIndexRS.enumerateRecords(new IndexFilter(index.getKey(),null,false);addressIndexRS.addRecord(index_data,0,index_data.length);catch(IOException e)public Index getIndex(String key)tryif(rs_index.getNumRecords()0)RecordEnumeration records=rs_index.enumerateRecords(new AddressFilter(key),null,false);index=Index.deserialize(rs_index.getRecord(records.nextRecordId();return index;catch(RecordStoreException e)public void deleteIndex(String key)tryRecordEnumeration records=rs_index.enumerateRecords(new IndexFilter(key),null,false);while(records.hasNextElement()rs_index.deleteRecord(records.nextRecordId();return;catch(RecordStroeException e)public boolean isRecordExist(String userName)tryif(rs_index.getNumRecords()0)RecordEnumeration records=rs_index.enumerateRecords(new IndexFilter(userName),null,false);if(records.numRecords()0)return true;else return false;catch(RecordStoreException e)e.printStackTrace();return true;*/ /* public void deleteRecord(String userName) try Index index=getIndex(userName); addressRS.deleteRecord(recordID); deleteIndex(userName); catch(RecordStoreException e)*/public void calearAllRecord()tryaddressRS.closeRecordStore();/addressRS_index.closeRecordStore();RecordStore.deleteRecordStore(myAddressBook);/RecordStore.deleteRecordStore(index);catch(RecordStoreException e)/*public Address getAddress(String userName)tryIndex index=getIndex(userName);Address address=null;if(index!=null)address=Address.deserialize(addressRS.getRecord(index.getRecordID();return;catch(RecordStoreException e)*/FlashUI.javaimport javax.microedition.lcdui.Canvas;import javax.microedition.lcdui.Graphics;import java.io.*;import javax.microedition.lcdui.*;public class FlashUI extends Canvas private int width;private int height;private Image image;public FlashUI()width=this.getWidth();height=this.getHeight();image=createImage(/res/Flash.png);public Image createImage(String name)Image image=null;tryimage=Image.createImage(name);catch(IOException e)return image;protected void paint(Graphics g) / TODO 自动生成方法存根if(image!=null)g.drawImage(image,(width-image.getWidth()/2,(height-image.getHeight()/2,Graphics.TOP|Graphics.LEFT);/ListUI.javaimport javax.microedition.lcdui.*;public class ListUI extends List implements CommandListener AddressBookMIDlet addressBookMIDlet;/Data data=new Data();Alert alert;public static final Command backCommand=new Command(返回,Command.BACK,2);public static final Command infoCommand=new Command(详情,Command.ITEM,1);public static final Command deleCommand=new Command(删除,Command.OK,3);public ListUI(AddressBookMIDlet addressBookMIDlet)super(查看联系人,List.IMPLICIT);this.addressBookMIDlet=addressBookMIDlet;this.addCommand(backCommand);this.addCommand(deleCommand);this.addCommand(infoCommand);this.setCommandListener(this);/data=new Data();/*public void init()trydeleteAll();for(int i=0;i=0,i-)delete(i);*/byte getRecordData11=data.getRecordData();/*String userName=;int n=getRecordData11.length;for(int i=0;in;i+)userName+=ream.readUTF();*/public void commandAction(Command c, Displayable d1) try/int n=data.addressRS.getNumRecords();int n=2;/ TODO 自动生成方法存根if(c=backCommand)addressBookMIDlet.handleEvent(addressBookMIDlet.EVENT_LIST_BACK_MAINUI,null);else if(c=deleCommand)if(n=0)alert=new Alert(报告,无效操作,null,AlertType.WARNING);addressBookMIDlet.dis.setCurrent(alert);String record=getString(getSelectedIndex();int ind
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江西省临川市2025年高三练习题(二)(山东卷)物理试题
- 药物代谢的个体差异研究试题及答案
- 药物疗效与安全性评估试题及答案
- 计算机二级考试的复习策略与判断能力的提升分析试题及答案
- 职业教育发展路径与实施方案解析
- 水好玩也危险安全
- 推动研究生教育高质量发展新举措
- 推动农业高等教育创新发展探索新型策略与实施路径
- 2025年环卫清洁装备项目建议书
- 体育产业未来趋势与市场前景深度解析
- 冬奥会33项应急预案是
- 建筑电工培训课件
- 中班语言课件《章鱼先生卖雨伞》
- 【杜邦分析法企业财务分析文献综述】
- 人教版二年级下册快乐读书吧课外阅读测试卷
- 2023年成都市锦江区九年级二诊语文试题(含答案)
- 妇产科护理学 简答题
- 毕业论文工程量计算与造价控制
- 人机料安全等方面应急措施及处理方法
- 麻醉学课件:多器官功能障碍综合征
- 2023年中石油职称英语考试通用选读
评论
0/150
提交评论