ImageVerifierCode 换一换
格式:DOC , 页数:27 ,大小:323.50KB ,
资源ID:1151241      下载积分:10 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 微信支付   
验证码:   换一换

加入VIP,免费下载资源
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.wodocx.com/d-1151241.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(J2ME个人通讯录管理程序.doc)为本站会员(精***)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(发送邮件至2622162128@qq.com或直接QQ联系客服),我们立即给予删除!

J2ME个人通讯录管理程序.doc

1、J2ME课程设计报告J2ME个人通讯录管理程序专 业: 计算机科学与技术 班 级: 06级应用2班 组 号: 200601 指导教师: 汤蓉 二00九年 十二 月 二十 日摘要1)介绍项目意义背景。此个人通讯录管理程序的编写,有利于用户通过手机来管理通讯录,方便用户对通讯录进行增加、删除以及对所需的信息进行快速地查询,满足快节奏、高效率的现代生活的需求|。该应用程序采用RMS(记录管理系统)存储机制存储数据,满足一般通讯录的使用需求。2)本文作的主要工作:(1)从软件工程的角度,流程化的记录了该项目的完成过程。(2)从程序开发者的角度,记录了程序的开发过程,便于以后项目的更改和维护。(3)从用

2、户的角度,分析了软件进展情况,方便用户的阅读和使用。3)本文组织 第一章 前言第二章 需求分析第三章 概要设计第四章 详细设计第五章 源代码及可执行程序第六章 特殊问题解决方法第七章 使用说明及测试结果第八章 结论目 录1.前言11.1编写目的11.2背景11.3定义12.需求分析22.1任务概述22.1.1方案选择22.1.2目标22.2用户的特点22.3开发进度时间安排22.2需求规定32.2.1对性能的规定32.2.1.1精度32.2.1.2时间特性要求32.2.2输入输出要求32.2.3数据管理能力要求32.2.4故障处理要求42.3运行环境规定42.3.1设备42.4其他42.4.1

3、42.4.253.概要设计53.1系统用例图(主要功能)53.2接口设计73.2.1用户接口73.2.2外部接口83.2.2.1软件接口83.2.2.2硬件接口83.2.3内部接口83.3运行设计83.3.1运行模块组合83.3.2运行控制83.3.3运行时间93.4系统数据结构设计93.5系统出错处理设计93.5.1出错信息93.5.2补救措施103.5.3系统维护设计104.详细设计104.1系统详细设计与框图104.2 设计主 iBook类114.3数据模型部分的设计124.4界面设计135.源代码(关键部分)156.特殊问题解决方法206.1.问题1206.1.1 问题描述206.1.

4、2 解决方案216.1.3 解决结果216.2.问题2216.2.1 问题描述216.2.2 解决方案216.2.3 解决结果217.使用说明及测试结果217.1.使用说明217.2.测试结果228.结论22231. 前言 1.1编写目的说明编写这份软件需求说明书的目的,指出预期的读者。1) 定义软件总体要求,作为用户和软件开发人员之间相互了解的基础。 2) 提供系统初步设计和对用户影响的信息,作为软件人员进行软件结构设计和编码的基础。 3) 作为软件总体测试和项目验收的依据。预期的读者 项目开发人员,最终用户。1.2背景说明:a 待开发的软件系统的名称:个人通讯录管理程序b 本项目的 提出者

5、 汤蓉 开发者 200601钱思成小组 用户 使用支持java扩展程序手机的个人用户c 该软件系统同其他系统或其他机构的基本的相互来往关系:需要支持java2.0扩展的手机平台。1.3定义l MIDP(Mobile Information Device Profile):移动信息设备框架l RMS (Record Management System) :记录管理系统l MVC(Model-View-Controller):模型-视图-控制器2. 需求分析2.1任务概述2.1.1方案选择1.功能方案在比较前人的方案和现可选方案后,发现对于手机存储数据方面大多采用RMS(记录管理系统),这种存储机

6、制被视为一种简单的面向记录的数据库模型。由于它的高效,快捷,和使用的普遍性,所以本应用程序使用RMS来管理和解释数据。2.技术方案主要考虑代码的框架问题。可选方案有二:一是普通框架,按功能模块划分程序代码,二是采用MVC模式,将视图,模型分离的方式控制程序运行。 考虑到该程序包含较多的界面,为了方便的实现界面的导航,同时为了便于代码的分工和面向对象的思想,所以选择了现在较为流行的MVC模式开发。2.1.2目标此个人通讯录管理程序的编写,有利于用户通过手机来管理通讯录,方便用户对通讯录进行增加、删除以及对所需的信息进行快速地查询,满足快节奏、高效率的现代生活的需求|2.2用户的特点熟练的进行手机

7、操作,能使用一般手机程序。2.3开发进度时间安排第10周完成任务书并开始软件的初步设计第10-12周完成需求分析报告并进入代码实现阶段第12-14周概要设计报告,继续进入代码实现主要阶段并同步进入测试阶段第15周完成该软件的开发工作,并完成总报告2.2需求规定 2.2.1对性能的规定2.2.1.1精度说明对该软件的输入、输出数据精度的要求,可能包括传输过程中的精度。输入的姓名的长度 小于20个字节移动电话号码 大于11位整数固定电话 大于8位整数 Email 要求符合email格式2.2.1.2时间特性要求a 响应时间:能在一般手机平台上达到小于1s的相应时间2.2.2输入输出要求输入的姓名的

8、长度 小于20个字节,支持中文,英文,数字,字符混和。如: 风中aik2009移动电话号码 大于11位整数 如: 1380138000固定电话 大于8位整数 如: 85964131Email 要求符合email格式 如:aik 2.2.3数据管理能力要求说明需要管理的文卷和记录的个数、表和文卷的大小规模,要按可预见的增长对数据及其分量的存储要求作出估算。能存储和管理最多200条记录2.2.4故障处理要求出现下列bug一定更正。A 出现手机死机bug。B 出现数据显示出错,C 不能按照预定的规定进行操作,或操作出错D 以上未列出的,但严重影响系统功能的bug。2.3运行环境规定2.3.1设备实际

9、运行终端手机 :索爱W800及其系列。虚拟调试:JAVA虚拟机。2.4其他2.4.1工作时序图图12.4.2系统的部分静态类图图23. 概要设计3.1系统用例图(主要功能)如图3-1所示:图3-1 系统用例图3.2接口设计3.2.1用户接口在用户界面部分,根据需求分析的结果,用户需要一个用户友好界面。在界面设计上,应做到简单明了,易于操作,并且要注意到界面的布局,应突出的显示重要的以及出错信息。如下图为系统欢迎界面(图3-2-1)。 图3-2-1 欢迎界面如下图为系统主界面(图3-2-2) 图3-2-2 系统主界面3.2.2外部接口3.2.2.1软件接口 数据导出:个人通讯信息导出成备份文本信

10、息格式。3.2.2.2硬件接口 1) 键盘(输入设备)2) 屏幕(输出设备)3.2.3内部接口内部接口方面,各模块之间采用函数调用、参数传递、返回值的方式进行信息传递。具体参数的结构将在下面数据结构设计的内容中说明。接口传递的信息将是以数据结构封装了的数据,以参数传递或返回值的形式在各模块间传输。3.3运行设计3.3.1运行模块组合1) 输入数据用到的模块:连接数据库模块;验证数据模块;存储数据模块2) 查看数据用到的模块:连接数据库模块;调用数据模块3) 控制器用到的模块:界面向控制器提交请求的模块;控制器接受处理界面请求的模块。3.3.2运行控制通过用户选择不同的功能,调用界面控制类进行页

11、面间的切换。3.3.3运行时间对于一般的单个记录的操作,延时可忽略不计。但如果涉及到的查询记录,或者用户进行的操作相当耗费CPU的时候,延时会很明显。如果某项操作耗费时间已经超过1分钟还没结束,用户应自行决定放弃此操作或退出本软件。3.4系统数据结构设计View向UIController控制器传递的动作和数据组成,定义如表3-4:请求动作动作名称描述EVENT_NEW_RECORD_SELECTED选择查看新纪录EVENT_SAVE_RECORD_SELECTED选择保存新记录EVENT_NEWPHONE_BACK_MAINUI新纪录页面返回主界面EVENT_SEARCHUI_BACK_MAI

12、NNUI查询页面返回主界面EVENT_CLEAR_RECORD清除记录EVENT_CLEAR_RECORD_YES清除记录 选择是EVENT_CLEAR_RECORD_NO清除记录 选择否EVENT_DELETE_RECORD删除记录EVENT_DELETE_RECORD_YES删除记录 选择是EVENT_DELETE_RECORD_NO删除记录 选择否EVENT_DISPLAY_INFOMATION详细信息列表EVENT_DETAIL_BACK_LIST详细信息返回列表EVENT_SEARCH_RECORD查询记录EVENT_SEARCH_RECORD_ANYWAY查询记录ADD_NEW_R

13、ECORD选择添加新纪录HELP选择帮助表3-4 系统动作3.5系统出错处理设计3.5.1出错信息用一览表的方式说明每种可能的出错或故障情况出现时,系统输出信息的形式、含意及处理方法。如表3-5-1:序号出错或故障情况系统输出信息及处理1添加新记录如果用户名和手机号为空客户端调用进行处理,系统弹出错误的提示,要求用户重新输入。2查询用户输入的用户名为空客户端调用进行处理,系统弹出错误的提示,要求用户重新输入。3在插入的过程中,SQL语句有可能抛出异常例如主键重复,不能为空的语句没有输入数值系统会抛出异常信息,并给出提示信息,只要用户返回上一个页面,重新输入正确的数据,进行同样的操作即可得到正确

14、的结果。4系统其他异常报错退出表3-5-1 出错信息3.5.2补救措施系统通过不同的界面提示信息,提示用户更正操作,让后台屏蔽异常或抛出异常状态,使得管理员在调试的过程中发现问题3.5.3系统维护设计说明为了系统维护的方便而在程序内部设计中作出的安排,包括在程序中专门安排用于系统的检查与维护的检测点和专用模块。 各个程序之间的对应关系,可采用矩阵图的形式;4. 详细设计4.1系统详细设计与框图4.1.1系统静态类图(如图4-1所示) 图4-1系统静态类图4.2 设计主 iBook类iBook 类是程序的基本执行单元,是本程序的主类,它是通过扩展javax.microedition.midlet

15、.MIDlet类来实现的。其类图如图4-2所示:图4-2 iBook 类该类是应用程序的主类,startApp(),pauseApp(),destroyApp()三个方法构成了一个控制MIDlet生命周期的状态机。同时该类初始化了控制器和模型对象。4.3数据模型部分的设计4.3.1 Account类 存储的基本信息封装而成的类 其类图如图4-3-1所示图4-3-1Account类 该类设计了要用户账户要存储的信息:用户名(userName),手机号(mobilePhone),邮件(email)和电话(phone)。以及相应的get和set方法等。 4.3.2索引类 Index类中有两个数据成员

16、key和recordID 其中key对应Account类的userName项,recordID为Account记录存储中的记录ID。其类图如图4-3-2所示:图4-3-2索引类 其中的serialize()和deserialize()方法分别为序列化函数和反序列化函数。serialize()方法实现把对象序列化为字节流以便在网络中传输。deserialize()方法用于把对象的字节流转化成对象。4.3.3设计控制器 UIController控制器类接受来自View的请求,并调用Model类提供的相应的方法来进行处理,并把处理的结果返回给View。其类图如图4-3-3所示:图4-3-3控制器类该

17、控制器类的handleEvent()方法通过一个switchcase语句来对不同的事件进行导航。该控制器的内部还定义了一个内部类EventID,该类的每一个值用于标识一个事件。4.4界面设计4.4.1 设计欢迎界面 WelcomeUI类是实现应用程序的欢迎界面的实现类。主要任务是在屏幕指定位子显示欢迎信息。其类图如图4-4-1所示:图4-4-1 欢迎界面类4.4.2 设计确认对话框 ConfirmationDialog类是应用程序确认对话框,其主要任务是实现Windows系统中常见的确认对话框的功能,其类图如图4-4-2所示:图4-4-2确认对话框类4.4.3 设计搜索界面 SearchPho

18、neUI完成通信录的搜索功能,其类图如图4-4-3所示:图4-4-3搜索界面类4.4.4 设计添加电话号码界面 NewPhoneUI类主要完成用户号码的添加任务。其类图如图4-4-4所示:图4-4-4 NewPhoneUI类4.4.5 设计电话号码列表显示界面NewPhoneUI类实现了一个显示列表,它显示符合查询条件的号码列表。其类图如图4-4-5所示:图4-4-5 NewPhoneUI类5. 源代码(关键部分)UIController类中的内部类EventID( 该类的每一个值用于标识一个事件)代码如下:public static class EventID private EventID

19、() public static final byte EVENT_NEW_RECORD_SELECTED = 1; public static final byte EVENT_SAVE_RECORD_SELECTED = 2;public static final byte EVENT_NEWPHONE_BACK_MAINUI = 3;public static final byte EVENT_LISTPHONE_BACK_MAINUI = 4; public static final byte EVENT_SEARCHUI_BACK_MAINNUI = 5; public static

20、 final byte EVENT_CLEAR_RECORD_YES = 6; public static final byte EVENT_CLEAR_RECORD_NO = 7; public static final byte EVENT_DELETE_RECORD = 8; public static final byte EVENT_DELETE_RECORD_YES = 9; public static final byte EVENT_DELETE_RECORD_NO = 10; public static final byte EVENT_DISPLAY_INFOMATION

21、= 11;public static final byte EVENT_DETAIL_BACK_LIST = 12;public static final byte EVENT_SEARCH_RECORD = 13; public static final byte EVENT_SEARCH_RECORD_ANYWAY = 14; public static final byte ADD_NEW_RECORD = 100;public static final byte SEARCH_RECORD = 101; public static final byte CLEAR_RECORD = 1

22、02;public static final byte LIST_RECORD = 103; public static final byte HELP = 104; UIController类中的handleEvent()方法,该方法被重载,前一个方法传入一个enentID号,主要负责界面导航;后一个方法传入一个enentID号和一个对象,主要负责数据处理。/事件处理方法,主要负责界面导航 public void handleEvent(int eventID) switch (eventID)case EventID.ADD_NEW_RECORD: newPhoneUI.clear();

23、display.setCurrent(newPhoneUI); break; case EventID.CLEAR_RECORD:dialog.setMessage(Title.delete_phonebook) dialog.display(EventID.CLEAR_RECORD); break; case EventID.EVENT_CLEAR_RECORD_YES:trymodel.clearAllRecord(); display.setCurrent(indexFunctionUI); catch (ApplicationException e) e.printStackTrac

24、break; case EventID.LIST_RECORD: new Thread() public void run()try waitCanvas.setMMessage(Title.gettingList);display.setCurrent(waitCanvas);Index index = model.listRecord();listPhoneUI.init(index);display.setCurrent(listPhoneUI); catch (ApplicationException e)e.printStackTrace();.start();break; case

25、 EventID.SEARCH_RECORD: searchPhoneUI.init(); display.setCurrent(searchPhoneUI); break; case EventID.EVENT_NEWPHONE_BACK_MAINUI: display.setCurrent(indexFunctionUI);break; case EventID.EVENT_LISTPHONE_BACK_MAINUI:display.setCurrent(indexFunctionUI);break;case EventID.EVENT_SEARCHUI_BACK_MAINNUI:disp

26、lay.setCurrent(indexFunctionUI);break; case EventID.EVENT_DETAIL_BACK_LIST: display.setCurrent(listPhoneUI);break; default: break;/事件处理方法,主要负责数据处理public void handleEvent(int eventID, Object obj)switch (eventID)/保存选中的记录case EventID.EVENT_SAVE_RECORD_SELECTED:tryAccount account = (Account) obj0;/判断Acc

27、ount是否已在RMS中 if (model.isRecordExist(account.getUserName() showAlert(Title.record_exist, indexFunctionUI, AlertType.WARNING); else model.addRecord(account);showAlert(Title.record_added,indexFunctionUI,AlertType.CONFIRMATION); catch (ApplicationException e) e.printStackTrace(); break;/删除记录,但没真正删除,需要用

28、户确认case EventID.EVENT_DELETE_RECORD:String userName = (String) obj0;dialog.setMessage(Title.DELETE_RECORD + userName + ?);dialog.display(EventID.EVENT_DELETE_RECORD, obj); break;/确定删除 case EventID.EVENT_DELETE_RECORD_YES: try String userName = (String) obj0;model.deleteRecord(userName); int i = (Int

29、eger)obj1).intValue();listPhoneUI.delete(i); catch (ApplicationException e)e.printStackTrace();break;/显示帐户的详细信息case EventID.EVENT_DISPLAY_INFOMATION: String userName = (String) obj0;try Account account = model.getAccount(userName); detailInfoUI.init(account); display.setCurrent(detailInfoUI); catch

30、(ApplicationException e)e.printStackTrace(); break; /查询记录case EventID.EVENT_SEARCH_RECORD: tryString userName = (String)obj0;Index index = model.searchIndex(userName); if(index.length5 | index.length =0) /没有满足记录时 setCurrent(searchPhoneUI);else /找到满足记录时listPhoneUI.init(index);display.setCurrent(listP

31、honeUI);catch(ApplicationException e)e.printStackTrace(); Break/查询记录 case EventID.EVENT_SEARCH_RECORD_ANYWAY:try String userName = (String)obj0; Index index = model.searchIndex(userName); if(index.length = 0)showAlert(无匹配纪录!,searchPhoneUI,AlertType.INFO); elselistPhoneUI.init(index);display.setCurre

32、nt(listPhoneUI); catch(ApplicationException e)e.printStackTrace(); default: break;6. 特殊问题解决方法 6.1. 问题1 6.1.1 问题描述 在查找时,RMS记录的“主键”仅仅限于int类型,无法使用其他类型。另外另外如果一个记录对应一个含有多个字段的对象,那么通常一个记录占有的存储空间也比较大,这样会大大影响性能,消耗大量的内存。6.1.2 解决方案 采用RMS操作框架中的索引机制,新建一个Index类,Index类中有两个数据成员key和recordID,其中key对应的是Account类的userNam

33、e项,recordID为Account记录存储中的记录ID,将它们之间建立起映射关系,同时将它们存储到另外一个记录存储中。6.1.3 解决结果这样加快了查找速度,节省系统的内存空间,问题得到了解决。6.2. 问题2 6.2.1 问题描述 项目中用到的一些固定字符串(如开发者,开发团队,主界面用户选项等)只能为本程序使用,如果以后需要将该程序用于其他扩展程序,就会带来不便于修改的问题(如需要修改者找到程序对应使用该常量的位置再加以修改,这样降低了二次开发的效率)。6.2.2 解决方案增加一个工具类Title,该类定义了一系列项目中需要用到的字符串常量,这样使得所有的常量位于一个专有的文件中,便于

34、修改或二次开发使用。6.2.3 解决结果这样使得所有的字符串常量位于一个文件中,方便了以后的修改,问题得到解决。7. 使用说明及测试结果 7.1. 使用说明本项目使用NetBeans作为开发工具,项目是按照NetBeans IDE中完整的MIDP项目结构打包发布,用户只需将打包文件解压,得到源代码文件。打开NetBeans,点击文件-打开项目,找到对应的解压文件主目录文件,打开直接运行即可。注意:该项目本团队使用的是NetBeans 6.7(推荐使用)开发,该版本已经集成对j2me项目的开发支持,如果使用者用的是NetBeans其他版本,则可能还需下载安装相应插件(如Mobility Pack

35、)运行。7.2. 测试结果该程序实现了通讯录的基本功能,如增加记录、删除记录、显示所有记录、查询记录、显示详情,清空记录等。通讯录记录信息包括:姓名,移动电话,固定电话,电子邮箱。满足了一般用户的实际需求,具有实用和方便性。 由于采用了索引机制,使得程序的查询速度比较快,经过测试,程序的运行速度符合一般j2me项目的要求。8. 结论 该项目通过一个通讯录管理程序,实现了基本的增加记录、删除记录、显示所有记录、查询记录、显示详情,清空记录等功能。项目采用MVC模式,将视图和模型分开,符合面向对象的思想。 通过该项目的实践,小组的成员实现了分工合作,培养了团队合作的精神。该个人通讯录是对MIDP子

36、系统RMS(记录存储系统)的一个代码实现。在开发过程中,大家更加深入地了解了RMS的基本特性和运作原理,将理论的知识付诸了实践。同时对于j2me手机开发也有了更多的了解。当然,也熟悉了NetBeans这个以前相对较少使用的IDE。 在项目的开发过程中,由于经验的缺乏也遇到一些技术上的问题(如控制器部分的代码架构如何实现等问题),但最后在团队的努力下解决了难题,完成了项目的开发。 项目的最终成功完成是令人喜悦的,但中间的过程也是让人感到快乐的!1 王天顺, 岳鹏 J2me程序开发使用案例从入门到精通 ,清华大学出版社,2008年2 詹健飞, J2me开发精解 ,电子工业出版社,2009年第01组组长: 钱思成20000000组员:许 辉0000000000陈 森0000000000赵 强0000000000马路遥 2006051134签名:撰写人:组员:

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922