Android应用案例课设报告.docx

上传人:b****5 文档编号:6470019 上传时间:2023-01-06 格式:DOCX 页数:43 大小:396.93KB
下载 相关 举报
Android应用案例课设报告.docx_第1页
第1页 / 共43页
Android应用案例课设报告.docx_第2页
第2页 / 共43页
Android应用案例课设报告.docx_第3页
第3页 / 共43页
Android应用案例课设报告.docx_第4页
第4页 / 共43页
Android应用案例课设报告.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

Android应用案例课设报告.docx

《Android应用案例课设报告.docx》由会员分享,可在线阅读,更多相关《Android应用案例课设报告.docx(43页珍藏版)》请在冰豆网上搜索。

Android应用案例课设报告.docx

Android应用案例课设报告

 

Android应用案例

课程设计

 

文件状态:

[]草稿

[√]正式发布

[]正在修改

项目名称:

我的云账本

文件标识:

android_app-1

当前版本:

1.3.1

作者:

魏燕

学号:

31713109

小组成员:

魏燕、潘正杰、赵德祥

指导教师:

史梦安

完成日期:

2015.7.2

 

淮安信息职业技术学院计算机与通信工程学院

版本历史

版本/状态

作者

参与者

起止日期

备注

1.0.1

魏燕

马子璇

2015.6.25

代码完成

1.1.1

魏燕

马子璇

2015.6.27

修改云存储的功能

1.2.1

魏燕

马子璇

2015.6.27

优化界面以及功能

1.3.1

魏燕

马子璇

2015.7.2

修改报告中的visio图

表格名称

各功能开发表

序号

功能

子功能

开发人员

1

主界面

控制层(事件等)

魏燕

2

显示层

马子璇

3

账信息添加

数据层(Dao层)

马子璇

4

界面控制层

魏燕

5

显示层

马子璇

6

服务端

魏燕

7

账信息查询统计

数据层(Dao层)

魏燕

8

界面控制层

马子璇

9

显示层

魏燕

10

服务端

马子璇

11

账类型查看及修改

数据层(Dao层)

马子璇

12

界面控制层

魏燕

13

显示层

马子璇

14

服务端

魏燕

15

账信息删除

数据层(Dao层)

魏燕

16

界面控制层

马子璇

17

显示层

魏燕

18

服务端

马子璇

19

关于

魏燕、马子璇

一、前言

记账软件记录着各种数据,如果软件一不小心删掉,所有数据就没有,就会觉得很可惜。

现在云盘普遍都支持接入应用。

本系统主要用于账信息的存储,主要通过移动数据网络或者WIFI,实现客户与服务端的云存储。

客户可以通过登录查询自己的账户信息。

二、系统分析

2.1系统开发遵循的标准或规范

2.1.1统一的开发平台

移动端开发使用Eclipse4.3.2+AndroidSDK;

服务端开发采用Eclipse4.3.2;

移动端数据库开发采用SQLsever。

2.1.2统一技术规范

总体上采用Java语言进行客户端及服务端的开发,移动客户端开发端采用Android开发技术规范,系统静态及动态建模原则上要求使用UML技术规范。

2.2“云备忘录”功能设计

2.2.1本地备忘信息管理模块

通过该模块的,用户可以完成对备忘信息的管理,主要功能包括:

1.备忘信息添加,用户使用该功能可以完成对备忘信息的添加;

2.备忘信息查询及统计,用户通过该功能完成对特定条件下的备忘信息的查询及统计工作,

3.备忘信息查看及修改,用户通过该功能可以查看特定账信息的明细并可对其进行修改;

4.备忘信息信息删除,用户可以删除特定账信息内容(只做逻辑删除,不做数据库层的物理删除,修改对应记录的status列数据,0表示不可用,1表示可用)

5.备忘信息提醒,用户添加完信息设置是否提醒,使用这个功能,用户可以在通知栏上看到提醒的信息。

6.备忘信息更新,点击更新按钮,用户可以更新状态,进行联网,使信息同步到数据库中。

2.2.1.1系统顶层用例图如图2.1:

 

图2.1系统用例图

2.2.1.2消费信息模型类类图如图2.2:

图2.2账信息类图

 

2.2.2.信息的云存储的静态模型图

智能手机通过WIFI或者移动数据访问服务器,完成服务器与客户端的数据传输。

通过联网登录系统,添加信息,修改、删除信息,把信息发送到服务端,进行信息传输。

如图5—1网络拓扑图。

图5-1网络拓扑图

 

联网以后,用户可以添加、查询、修改、删除、更新备忘信息,即使本地信息删除了,服务端还存有以前的信息,此功能可以防止信息的误删方便用户的使用,详细图解参照下图图2-2系统用例图。

图2.2系统活动图

三、系统设计

3.1系统采用的异步通信框架

在Android2.3.3版本以后,所有联网操作不能在UI线程中进行。

必须在新建线程里进行网络连接,否则将会抛出“NetworkOnMainThreadException”异常。

而在Android系统中只能在主线程(UI线程)中对UI组件进行控制,如果通过子线程启动网络连接并对UI控件进行修改,这就需要与UI线程进行通信。

可以使用Handler类实现子线程与主线程的通信,为提高程序的健壮性,降低代码的耦合度,设计SocketProcessor类(见附件1-6)处理异步通信请求。

3.2系统初始化

系统采用mysql数据库记录备忘信息,在移动端启动前需要进行数据库及数据表等的初始化。

3.1系统初始化的动态模型

启动程序后,获取备忘信息,生成备忘信息对象,存储在本地。

如果联网后,把信息序列化之后发送给服务端,服务端接收后,反序列化存储到云端,通过客户端解析响应判断有没有存储成功。

相关活动图如图3.1系统活动图:

图3.1系统活动图

3.2数据库设计

系统采用SQLite关系型数据库进行数据库设计,由系统对象关系分析可知,系统数据存储结构如表一所示。

表1备忘信息表

表名

note_info

列名

数据类型

非空

描述

主键

外键

id

int

主键,自增

Y

name

varchar(50)

Y

默认备忘名称

date

varchar(50)

Y

日期

work

varchar(50)

Y

内容

ischeck

integer

Y

True成功false失败

status

integer

Y

0标识不可用,1标识可用

 

3.3主界面设计

由于采用移动手持终端作为应用程序载体,为提高人机交互效果,主界面宜采用扁平化设计。

可以更加简单直接的将信息和事物的工作方式展示出来,减少认知障碍的产生。

主界面设计如图3.4所示。

图3.4主界面设计

3.5云同步设计

由于用户在未联网状态时,账信息保存在本地数据库中,服务器是收不到任何数据,所以我们设计云同步功能,该功能主要是把本地数据与服务端同步,以便用户后期管理。

3.5.1采用的协议

采用网络通信协议,运用第三方辅助工具JSON包,对数据序列化反序列化进行传输。

利用MyData类控制各种数据传输。

MyData类见图3.5.

图3.5MyData类图

3.5.2云同步动态模型

获取本地数据库数据,对每条数据进行序列化,将序列化字符串发送到服务器,服务器接收字符串,进行反序列化解析,并且与服务器中数据进行对比,如果此条数据在服务器中没有体现,则保存在数据库中,整个数据遍历完毕,响应本次操作,客户端接收响应,同步完成。

动态图如下图3.5.2。

图3.5.2云同步动态模型

3.5.3序列化反序列化关键代码

序列化:

MyDataresponse=newMyData();

response.type=CommonData.ResponseType.ADD_notepad;

response.data=ni;

response.status="ok";

returnJSON.toJSON(response).toString();

反序列化:

MyDatamd=JSON.parseObject(data,newTypeReference>(){});

Stringtype=md.type;

System.out.println("接收请求:

"+data);//由于不知道何种请求,首选将JSON字符串反序列化为MyData对象

//判断请求类型,根据不同的请求类型,重新反序列化JSON字符串

四、系统实现

4.1数据库存储系统的实现

本存储系统利用Andorid的SQLSever关系型数据库存储系统实现。

其数据表字段及数据表创建等核心代码如下所示:

数据存储代码:

客户端:

//账信息数据表相关字段

publicfinalStringTNAME_1="account_info";

publicfinalStringCOLUMN1_1="account_type";

publicfinalStringCOLUMN2_1="account";

publicfinalStringCOLUMN3_1="account_remark";

publicfinalStringCOLUMN4_1="account_date";

publicfinalStringCOLUMN5_1="account_record_time";

publicfinalStringCOLUMN6_1="type";//账信息类型,1表示入账,-1表示出账

publicfinalStringCOLUMN7_1="status";//记录状态,1表示可用,0表示不可用

//账信息数据表相关字段

publicfinalStringTNAME_2="account_type_info";

publicfinalStringCOLUMN1_2="account_type_name";

publicfinalStringCOLUMN2_2="account_type_remark";

publicfinalStringCOLUMN3_2="account_type_time";//录入到数据库中的时间

publicfinalStringCOLUMN4_2="type";//账类型信息对应的类型,-1表示消费(出账),1表示收入(入账)

publicfinalStringCOLUMN5_2="status";//记录状态

mSQLiteDB.execSQL("createtableifnotexists"

+TNAME_1+"("+_ID+"integerprimarykeyAUTOINCREMENT,"

+COLUMN1_1+"integer,"+COLUMN2_1+"text,"

+COLUMN3_1+"text,"+COLUMN4_1+"date,"

+COLUMN5_1+"time,"+COLUMN6_1+"integer,"+COLUMN7_1+"integer)");

mSQLiteDB.execSQL("createtableifnotexists"

+TNAME_2+"("+_ID+"integerprimarykeyAUTOINCREMENT,"

+COLUMN1_2+"text,"+COLUMN2_2+"text,"

+COLUMN3_2+"time,"+COLUMN4_2+"integer,"+COLUMN5_2+"integer)");

mSQLiteDB.close();

服务端:

publicstaticbooleanaddAccountInfo(AccountInfoai){

newSMADao_up().upData("insertintoaccount_type_infovalues(?

?

?

?

?

?

?

?

?

)",

newObject[]{

null,

ai.getAccountType().getId(),

ai.getAccount(),

ai.getAccountRemark()+"",

ai.getAccountDate(),

ai.getUserInfo().getId(),

ai.getNativeId(),

ai.getDeviceId(),

ai.getStatus()});

returntrue;

}

4.2系统功能实现

4.2.1本地账类型管理

用户登陆后可进行在已有的账类型基础下可以添加账信息。

点击主界面的查询按钮弹出对话框,可以按查询条件查询账类型对应的账项目信息,选择查看可以查看具体信息,并对他进行修改。

点击删除可进行删除。

点击添加按钮可以添加账项目。

4.2.1.1账类型管理显示效果

用户登录后可以添加信息如4.1添加显示效果,可以点击主页面的查询按钮弹出对话框,在对话框里进行查询和修改如4.1查询显示效果和4.1修改显示效果。

4.1添加显示效果4.1查询显示效果4.1修改显示效果

4.2.1.2相关核心代码

chaxun.setOnClickListener(newOnClickListener(){

@Override

publicvoidonClick(Viewarg0){

//TODOAuto-generatedmethodstub

Stringzhanglx=zhang_leixing.getSelectedItem().toString().trim();

if(zhanglx.startsWith("出账")){

queryAccountType_=(Vector)newAccountDao(context)

.findAccountTypeByType(-1);

ala.notifyDataSetInvalidated();

}elseif(zhanglx.startsWith("入账")){

queryAccountType_=(Vector)newAccountDao(context)

.findAccountTypeByType

(1);

ala.notifyDataSetChanged();

}

}

});

//添加按钮事件

add.setOnClickListener(newOnClickListener(){

@Override

publicvoidonClick(Viewarg0){

//TODOAuto-generatedmethodstub

newSetAddDialog(context).showDialog();

}

});

set_List.setOnItemLongClickListener(newOnItemLongClickListener(){

@Override

publicbooleanonItemLongClick(AdapterView

>arg0,Viewarg1,

intpos,longarg3){

finalintposi=pos;

//TODOAuto-generatedmethodstub

newModifyChoosenDialog(context){

publicvoiditemEvent(DialogInterfacearg0,intpos){

//TODOAuto-generatedmethodstub

super.itemEvent(arg0,pos);

CommonData.acc=queryAccountType_.elementAt(posi);

Stringtext=(String)this.items[pos];

if(text.equals("查看")){

newZChakanDialog(context){

publicvoidonCancel(DialogInterfacearg0){

chaxun.performClick();

};

}.showDialog();

}elseif(text.equals("删除")){

newAlertDialog.Builder(context).setTitle("确认删除")

.setPositiveButton("确定",//设置确定按钮,第二个参数是传事件对象

newDialogInterface.OnClickListener(){

publicvoidonClick(DialogInterfacedialog,intwhichButton){

//删除操作

if(CommonData.acc.getId()<7){

Toast.makeText(context,"删除失败,默认类型无法删除",

Toast.LENGTH_LONG).show();

}else{

newAccountDao(context).deleteAccountType_(CommonData.acc.getId());

Toast.makeText(context,"删除成功",Toast.LENGTH_LONG).show();

}

}

}).setNeutralButton("取消",null).show();

}

this.dismiss();

}

}.showSingleChoiceDialog();

returnfalse;

}

});

}

4.2.2用户注册及登录功能

将用户的信息添加到数据库中,先进行用户注册,把用户信息添加到数据库中,注册时若数据数据库中没有数据则注册,然后点击菜单中的登陆按钮,就可以显示登陆成功。

然后就可以进行用户的信息添加查询之类的操作。

4.2.2.1用户登录动态模型

打开主页面的菜单,点击菜单中的注册按钮,就可以使用用户注册的功能,注册成功之后,返回,点击菜单中的登陆按钮,就可以成功的登陆。

接着就可以添加信息,修改信息,生成请求对象,序列化反序列化之后,可以存储到服务端。

服务端通过客户端的响应判断是否同步到服务端。

如下图,图4.2.2.1用户登录动态图。

活动动态图:

图4.2.2.1用户登录动态图

4.2.2.2登录界面效果

1.进入主页面,打开注册系统,先进行注册,注册成功之后点击登陆按钮就可以登陆了。

如图2-2-1所示。

图2-2-1主界面菜单图2-2-2注册窗口图2-2-3登录窗口

相4.2.2.3关核心代码

//发送登录请求的编码如下所示:

//获取用户数据,封装成json,发送

Stringname=nameEdit.getText().toString().trim();

Stringpass=passEdit.getText().toString().trim();

UserInfouser=newUserInfo();

user.setUserName(name);

user.setUserPass(pass);

MyDatarequest=newMyData();

request.type=CommonData.RequestType.LOGIN;

request.data=user;

request.status="ok";

Stringrequest_=JSON.toJSON(request).toString();

SocketProcessor.sendData(request_);

//处理用户登录响应的Handler编码如下所示

_response_login_handler=newHandler(){

@Override

publicvoidhandleMessage(Messagemsg){

//TODOAuto-generatedmethodstub

super.handleMessage(msg);

Stringdata=msg.getData().getString(SocketProcessor.KEY);

MyDatamd_=JSON.parseObject(data,newTypeReference>(){});

if(md_.status.equals("ok")){

CommonData.login_user=md_.data;

userText.setText("用户:

"+md_.data.getNickName());

loginDialog.dismiss();

}elseif(md_.status.equals("notok")){

showToast("用户名、密码错误!

");

}

}

};

服务端关键代码:

if(type.equals(CommonData.RequestType.LOGIN)){

//JSON.

MyDatamd_=JSON.parseObject(data,newTypeReference>(){});

Stringname=md_.data.getUserName();

Stringpass=md_.data.getUserPass();

System.out.println("用户名:

"+name+"密码:

"+pass);

UserInfouser=UserInfoDao.findUserInfoByNamePass(name,pass);

if(user!

=null){//合法用户

MyData

展开阅读全文
相关搜索

当前位置:首页 > 工程科技 > 能源化工

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

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