多功能电话簿.docx

上传人:b****2 文档编号:24297075 上传时间:2023-05-26 格式:DOCX 页数:41 大小:211.93KB
下载 相关 举报
多功能电话簿.docx_第1页
第1页 / 共41页
多功能电话簿.docx_第2页
第2页 / 共41页
多功能电话簿.docx_第3页
第3页 / 共41页
多功能电话簿.docx_第4页
第4页 / 共41页
多功能电话簿.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

多功能电话簿.docx

《多功能电话簿.docx》由会员分享,可在线阅读,更多相关《多功能电话簿.docx(41页珍藏版)》请在冰豆网上搜索。

多功能电话簿.docx

多功能电话簿

 

漳州职业技术学院

《J2ME程序设计》

实验报告

题目基于J2ME的多功能电话簿

系别计算机工程系

专业及班级10嵌入式2班

学号及姓名1006003209林情、

1006003223林清、

1006003219李文利

指导老师庄景晖

日期2012年6月17日

1、前言

J2ME(Java2MicroEdition)是近年来随着各种不同设备,尤其是移动通信设备的飞速发展而诞生的一项新的开发技术。

它定位在消费性电子产品的应用上,对设备的智能化、多样化,提供了革命性的解决方案。

多功能电话簿是在移动电话中常用的程序,它可以用来理解在持久存储中进行添加、查找、浏览和删除的过程。

它可以清楚地演示每个界面切换过程,以及响应用户输入的命令,实现用户对个人电话簿信息的管理。

此次多功能电话簿设计的目的:

首先由于每个人都有手机,通讯录是必不可少的,很贴近我们的生活,通过设计这个项目能更深了解移动通信编程思想和移动应用开发过程。

2、系统总体设计

2.1系统设计目标

掌握用无线Java应用技术即J2ME技术的软件系统设计方法,通过开发多功能电话簿这个小系统,熟练使用J2ME开发平台,了解java各组件的使用。

2.2系统设计思路

(1)运行PhoneMIDlet.java出现的是一个动画图标,接着动画切换到另外一个图标并有伴有文字“欢迎电话簿”显示,然后弹出是否可以使用网络的选项。

如图2.2-1所示:

图2.2-1

(2)点击是跳转到欢迎主界面,该页面有进入和退出两个按钮选项。

如图2.2-2所示:

(3)选择进入后,就跳转我的电话簿界面,在这个界面,有两个按钮选项:

返回和菜单。

点击菜单可以进行添加号码、查询号码、发送短信、删除号码的操作。

如图2.2-3所示:

(4)选择添加号码选项,跳转到添加电话界面,在这个界面可以输入你要添加的姓名的电话。

这个界面也有两个按钮选项:

返回和确定添加。

如图2.2-4所示:

图2.2-2图2.2-3图2.2-4

(6)返回到我的电话簿界面,点击菜单,进入查询号码选项,就可以进入到查询电话簿的界面,在这里可以按姓名和号码的方式对联系人进行查询操作。

如图2.2-5所示:

(7)运行项目中的ClientMIDlet3.java,出现是否可以是用网络的询问,点击是进入客户端聊天界面。

如图2.2-6所示:

图2.2-5图2.2-6

(8)在进入我的电话簿界面菜单里发送短信选项后,就可以发送短信,然后可以再客户端界面收到你发送的信息。

如图2.2-7所示:

图2.2-7

(9)电话簿还实现了删除联系人的功能。

如图2.2-8所示:

图2.2-8

2.3系统总体架构

图表2.3-1

2.4系统流程图

图表2.4-1

3、系统设计

3.1系统总体设计

3.1.1数据库设计

移动信息设备框架(MobieIformationDeviceProfile)和移动Java应用程序的平台为MIDP应用程序提供一种跨多个调用持久存储数据的机制。

这种持久存储机制可以被视为一种简单的面向记录的数据库模型,被称为记录管理系统(RecordManagement,RMS)。

个人通讯录通过RMS来存储和管理数据。

3.1.2设计思想

(1)存储联系信息:

设计一个“联系人”类,完成联系人信息结构的定义,并提供外部访问接口;设计一个“存储类”,完成存储定义和创建,负责将联系人信息存储到存储器中;出于性能的考虑,还可以设计一个“索引类”,完成索引联系人的映射,可以显著提高联系人的查询速度。

(2)接收用户输入:

设计一个“界面控制”类,用于调度各个页面的显示,以及处理用户各种命令或输入;设计若干个“界面”类,用于每个独立的屏幕显示。

(3)初始欢迎界面:

初始欢迎界面,即闪屏显示了程序初始的第一个屏幕,一般用于显示版权信息。

(4)程序主界面:

它包含了用户可操作的基本功能。

3.2系统详细设计

3.2.1核心技术

在通常的MIDP应用程序中,包含多个Screen或者是Canvas,而界面之间的切换一般是依靠命令来进行切换,比如用户单击Next按扭就可以跳转到下一个界面,单击Previous按扭便会跳转到上一个界面。

当应用程序包含大量界面的时候,可以通过MVC实现页面导航。

MVC(Model-view-Controller,模型-视图-控制器)的核心思想是分离。

Model就是对试题类的抽象;View就是在屏幕上的表示;Controller即使协调者。

它是基于用户输入的,并将整个问题划分为3个功能模块。

模型(Model)

模型是应用程序的主体部分,表示业务数据或者业务逻辑,它响应视图的请求。

(2)视图(View)

视图是应用程序中用户界面相关的部分,是用户看到并与之交互的界面。

对于应用程序而言,视图就是一系列界面,用于向用户显示数据,并将用户命令传递给控制器,用户所有的操作都是通过视图来完成的。

(3)控制器(Controller)

控制器工作就是根据用户的输入来控制用户界面数据显示和更新Model对象状态

将MVC分离可以让不同的成员负责不同的模块,一般情况下,M部分由熟悉数据库和网络传输的成员负责;V交给对UI熟悉的成员负责。

这样可以提高效率。

通常MVC模式的应用程序的工作流程如图3.2.1-1所示。

图3.2.1-1

3.2.2静态类图

图3.2.2-1

MIDlet类MIDP的入口类即基本执行单元

BookMIDlet类被称为应用程序的主类。

RecordStore类用来实现记录存储和完成记录存储的创建,删除与更新,以及记录的添加,删除,查找和更新等操作。

Account类一般把存储的信息封装为Account类,它含有4个字段,即userName,mobilePhone,email和phone.

Model类和Index类RecordStore中来完成记录的添加,删除,读取和更新等操作。

AccountFilter类过滤器类

WelcomeUI类应用程序的欢迎界面实现类,主要任务就是在屏幕指定位置画出欢迎信息。

ConfirmationDialog类是应用程序的的确认对话框类,主要任务是实现形如Windows系统中常见的确认对话框的功能

SearchPhoneUI类完成通讯录的搜索功能,本类实现的搜索功能较弱,仅仅是根据用户名进行搜索。

NewPhoneUI类主要完成用户号码的天家任务,当用户输入完要存储的号码信息后,单击“保存”按钮,便可以完成号码的保存操作。

ListPhoneUI类实现了一个显示列表,它显示符合查询条件的号码列表。

Title类是作为一个工具类而存在的,该类定义了一系列本项目中用到的字符串常量,好处是便于以后修改。

3.2.3模块设计

1.程序主界面:

类出用户可以执行的操作,如添加联系人等。

2.添加联系人模块:

添加一个联系人所需要的各种信息,次界面包含了输入这些信息所需的界面控件。

3.查看/修改/删除联系人信息模块:

查看一个已经存储在通信录中的联系人信息,同时允许用户对信息进行修改,甚至删除。

4.查询联系人模块:

用于接受用户查询联系人的查询条件。

5.发送信息和接受模块:

用于用户发送消息和客户端接受信息。

4、小结

通过多功能电话簿的设计与实现,在编码和测试过程中,我们学到了不少的知识,也碰到了很多问题,总体功能非常明确实用,使用非常简单,便于操作,适合用户需求。

在编码之前,对整个系统进行系统的需求分析是非常重要和必要的,在这个基础上,我们逐个的完成各个功能模块,根据在课堂上学过的知识,在对后台数据的读写有了一定的了解后,通过参照课堂上做过的学生管理系统,把添加,删除,修改和查询等功能都实现了,在界面的设计上,加入了一些图片,让界面更加美观。

总的来说,通过j2me多功能电话簿的设计开发,对以前的知识又加深了印象,更加了解了MVC模式,以及面向对象的编程思想,让我掌握了更多编程技巧。

5、参考文献

[1]杨建,杨军.精通J2ME嵌入式软件开发[M].北京.电子工业出版社.2007.8

[2]詹建飞.J2ME开发精解[M].北京.电子工业出版社.2008.6

[3]温尚书.J2ME无线通信实用案例教程[M].北京.清华大学出版社.2003.10

[5]郭克华.JavaMe移动开发实例精讲[M].北京.清华大学出版社.2010.1

[6]

6、附录:

手机客户端的代码实现和分析

6.1控制类PhoneMIDLet.java,实现各个页面的跳转和参数的传递。

importjavax.microedition.lcdui.Display;

importjavax.microedition.midlet.MIDlet;

importjavax.microedition.midlet.MIDletStateChangeException;

 

publicclassPhoneMIDletextendsMIDlet{

privateWelcomeGameCanvaswelcomegc;

privateIntoGameCanvasintogc;

privateSearchFromsearch;

privateServerFormserver;

privatePhoneListphone;

privateAddFormadd;

privateThreadth1,th2,th3;

privateDisplaydisplay;

protectedvoidstartApp()throwsMIDletStateChangeException{

display=Display.getDisplay(this);

welcomegc=newWelcomeGameCanvas(this);//第一个界面

th1=newThread(welcomegc);

th1.start();

try{

th1.join();

}catch(InterruptedExceptione){

e.printStackTrace();

}

intogc=newIntoGameCanvas(this);//第二个界面

th2=newThread(intogc);

th2.start();

phone=newPhoneList(this);//第三个界面

add=newAddForm(this);//第四个界面

search=newSearchFrom(this);

try{

th2.join();

}catch(InterruptedExceptione){

e.printStackTrace();

}

server=newServerForm(this);//第六个界面

th3=newThread(server);

th3.start();

}

publicvoidchangeForm(Stringstr){

if(str.equals("WelcomeGameCanvas")){

display.setCurrent(welcomegc);

}

elseif(str.equals("IntoGameCanvas")){

display.setCurrent(intogc);

}

elseif(str.equals("ServerForm")){

display.setCurrent(server);

}

elseif(str.equals("SearchFrom")){

display.setCurrent(search);

}

elseif(str.equals("PhoneList")){

display.setCurrent(phone);

phone.refresh();//界面刷新

}

elseif(str.equals("AddForm")){

display.setCurrent(add);

add.refresh();//界面刷新

}

}

publicPhoneMIDlet(){

//TODOAuto-generatedconstructorstub

}

protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{

//TODOAuto-generatedmethodstub

}

protectedvoidpauseApp(){

//TODOAuto-generatedmethodstub

}

}

 

6.2AddForm.java添加电话界面:

添加完存储在数据库

importjava.io.IOException;

importjavax.microedition.lcdui.ChoiceGroup;

importjavax.microedition.lcdui.Command;

importjavax.microedition.lcdui.CommandListener;

importjavax.microedition.lcdui.Displayable;

importjavax.microedition.lcdui.Form;

importjavax.microedition.lcdui.Image;

importjavax.microedition.lcdui.ImageItem;

importjavax.microedition.lcdui.Item;

importjavax.microedition.lcdui.TextField;

 

publicclassAddFormextendsFormimplementsCommandListener{

privateImageItemimageitem;

privateImageimg;

privateCommandcmdBack=newCommand("返回",Command.BACK,1);

privateCommandcmdOk=newCommand("确定添加",Command.SCREEN,1);

privateTextFieldtfName=newTextField("请输入姓名","",10,TextField.ANY);

privateTextFieldtfPhone=newTextField("请输入电话","",10,TextField.PHONENUMBER);

privateChoiceGroupcg=newChoiceGroup("输入你要添加的姓名和电话",ChoiceGroup.EXCLUSIVE);

privatePhoneMIDletparent;

AddForm(PhoneMIDletparent){

super("添加电话");

this.parent=parent;

try{

img=Image.createImage("/shanchu1.png");

}catch(IOExceptione){

e.printStackTrace();

}

imageitem=newImageItem("",img,ImageItem.LAYOUT_CENTER,"");

this.addCommand(cmdBack);

this.addCommand(cmdOk);

this.append(cg);

this.append(tfName);

this.append(tfPhone);

this.append(imageitem);

this.tfName.setLayout(Item.LAYOUT_CENTER);//居中显示

this.tfPhone.setLayout(Item.LAYOUT_CENTER);

this.setCommandListener(this);

}

publicvoidcommandAction(Commandc,Displayabled){

if(c==cmdBack){//返回第二个界面,即显示电话薄界面

parent.changeForm("PhoneList");

}

elseif(c==cmdOk){

//第一步:

添加电话到记录集里,

this.addPhone();

}

parent.changeForm("PhoneList");//第二步:

切换到第二个界面,即显示电话薄界面

}

/***添加电话***/

publicvoidaddPhone(){

Customercus=newCustomer();

cus.setCname(tfName.getString());

cus.setPhone(tfPhone.getString());

RMSOpe.addPhone(cus);

refresh();

}

/***刷新界面***/

publicvoidrefresh(){

this.tfName.setString("");

this.tfPhone.setString("");

}

}

6.3ClientMIDlet3.java客户端:

与服务器互相发送信息

importjava.io.DataInputStream;

importjava.io.DataOutputStream;

importjava.io.IOException;

importjavax.microedition.io.Connector;

importjavax.microedition.io.ServerSocketConnection;

importjavax.microedition.io.SocketConnection;

importjavax.microedition.lcdui.Command;

importjavax.microedition.lcdui.CommandListener;

importjavax.microedition.lcdui.Display;

importjavax.microedition.lcdui.Displayable;

importjavax.microedition.lcdui.Form;

importjavax.microedition.lcdui.Image;

importjavax.microedition.lcdui.ImageItem;

importjavax.microedition.lcdui.TextField;

importjavax.microedition.midlet.MIDlet;

importjavax.microedition.midlet.MIDletStateChangeException;

 

publicclassClientMIDlet3extendsMIDletimplementsCommandListener{

privateDisplaydisplay;

privateImageItemimageitem;

privateImageimg;

privateFormform=newForm("客户端");

privateCommandcmdSend=newCommand("发送",Command.SCREEN,1);

privateTextFieldtfMessage=newTextField("聊天信息","",255,TextField.ANY);

privateServerSocketConnectionssc;

privateSocketConnectionsc2;

privateDataInputStreamdis;

privateDataOutputStreamdos;

protectedvoidstartApp()throwsMIDletStateChangeException{

display=Display.getDisplay(this);

display.setCurrent(form);

form.addCommand(cmdSend);

form.append(imageitem);

form.append(tfMessage);

form.setCommandListener(this);

form.append("聊天记录:

\n");

try{

sc2=(SocketConnection)Connector.open("socket:

//127.0.0.1:

9999");

dis=sc2.openDataInputStream();

dos=sc2.openDataOutputStream();

newReciveThread().start();

}catch(IOExceptione){

e.printStackTrace();

}

}

publicvoidcommandAction(Commandc,Displayabled){

if(c==cmdSend){

try{

dos.writeUTF(tfMessage.getString());

tfMessage.setString("");

}catch(IOExceptione){

e.printStackTrace();

}

}

}

classReciveThreadextendsThread{

publicvoidrun(){

while(true){

try{

Stringmessage=dis.readUTF();

form.append(message+"\n");

}catch(IOExceptione){

e.printStackTrace();

}

}

}

}

publicClientMIDlet3(){

try{

img=Image.createImage("/benpao.png");

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 其它语言学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1