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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(Android应用案例课设报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Android应用案例课设报告.docx

1、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图表格名称各功能开

2、发表序号功能子功能开发人员1主界面控制层(事件等)魏燕2显示层马子璇3账信息添加数据层(Dao层)马子璇4界面控制层魏燕5显示层马子璇6服务端魏燕7账信息查询统计数据层(Dao层)魏燕8界面控制层马子璇9显示层魏燕10服务端马子璇11账类型查看及修改数据层(Dao层)马子璇12界面控制层魏燕13显示层马子璇14服务端魏燕15账信息删除数据层(Dao层)魏燕16界面控制层马子璇17显示层魏燕18服务端马子璇19关于魏燕、马子璇一、前言 记账软件记录着各种数据,如果软件一不小心删掉,所有数据就没有,就会觉得很可惜。现在云盘普遍都支持接入应用。本系统主要用于账信息的存储,主要通过移动数据网络或者WI

3、FI,实现客户与服务端的云存储。客户可以通过登录查询自己的账户信息。二、系统分析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.备忘信息添加,用户使用该功能可以完成对

4、备忘信息的添加;2.备忘信息查询及统计,用户通过该功能完成对特定条件下的备忘信息的查询及统计工作, 3.备忘信息查看及修改,用户通过该功能可以查看特定账信息的明细并可对其进行修改;4.备忘信息信息删除,用户可以删除特定账信息内容(只做逻辑删除,不做数据库层的物理删除,修改对应记录的status列数据,0表示不可用,1表示可用)5.备忘信息提醒,用户添加完信息设置是否提醒,使用这个功能,用户可以在通知栏上看到提醒的信息。6.备忘信息更新,点击更新按钮,用户可以更新状态,进行联网,使信息同步到数据库中。2.2.1.1系统顶层用例图如图2.1: 图2.1系统用例图2.2.1.2消费信息模型类类图如图

5、2.2:图2.2 账信息类图2.2.2.信息的云存储的静态模型图智能手机通过WIFI或者移动数据访问服务器,完成服务器与客户端的数据传输。通过联网登录系统,添加信息,修改、删除信息,把信息发送到服务端,进行信息传输。如图51网络拓扑图。 图5-1网络拓扑图联网以后,用户可以添加、查询、修改、删除、更新备忘信息,即使本地信息删除了,服务端还存有以前的信息,此功能可以防止信息的误删方便用户的使用,详细图解参照下图图2-2系统用例图。图2.2 系统活动图三、系统设计3.1系统采用的异步通信框架在Android2.3.3版本以后,所有联网操作不能在UI线程中进行。必须在新建线程里进行网络连接,否则将会

6、抛出“NetworkOnMainThreadException”异常。而在Android系统中只能在主线程(UI线程)中对UI组件进行控制,如果通过子线程启动网络连接并对UI控件进行修改,这就需要与UI线程进行通信。可以使用Handler类实现子线程与主线程的通信,为提高程序的健壮性,降低代码的耦合度,设计SocketProcessor类(见附件1-6)处理异步通信请求。3.2系统初始化系统采用mysql数据库记录备忘信息,在移动端启动前需要进行数据库及数据表等的初始化。3.1 系统初始化的动态模型启动程序后,获取备忘信息,生成备忘信息对象,存储在本地。如果联网后,把信息序列化之后发送给服务端

7、,服务端接收后,反序列化存储到云端,通过客户端解析响应判断有没有存储成功。相关活动图如图3.1系统活动图:图 3.1 系统活动图3.2 数据库设计 系统采用SQLite关系型数据库进行数据库设计,由系统对象关系分析可知,系统数据存储结构如表一所示。表1 备忘信息表表名note_info列名数据类型非空描述主键外键idint主键,自增Ynamevarchar(50)Y默认备忘名称datevarchar(50)Y日期workvarchar(50)Y内容ischeckintegerYTrue成功false失败statusintegerY0标识不可用,1标识可用 3.3 主界面设计 由于采用移动手持终

8、端作为应用程序载体,为提高人机交互效果,主界面宜采用扁平化设计。可以更加简单直接的将信息和事物的工作方式展示出来,减少认知障碍的产生。主界面设计如图3.4所示。 图3.4 主界面设计3.5 云同步设计由于用户在未联网状态时,账信息保存在本地数据库中,服务器是收不到任何数据,所以我们设计云同步功能,该功能主要是把本地数据与服务端同步,以便用户后期管理。3.5.1采用的协议采用网络通信协议,运用第三方辅助工具JSON包,对数据序列化反序列化进行传输。利用MyData类控制各种数据传输。MyData类见图3.5.图3.5MyData类图3.5.2云同步动态模型获取本地数据库数据,对每条数据进行序列化

9、,将序列化字符串发送到服务器,服务器接收字符串,进行反序列化解析,并且与服务器中数据进行对比,如果此条数据在服务器中没有体现,则保存在数据库中,整个数据遍历完毕,响应本次操作,客户端接收响应,同步完成。动态图如下图3.5.2。图3.5.2 云同步动态模型3.5.3序列化反序列化关键代码序列化:MyData response = new MyData(); response.type = CommonData.ResponseType.ADD_notepad; response.data = ni; response.status = ok; return JSON.toJSON(respons

10、e).toString();反序列化:MyData md = JSON.parseObject(data, new TypeReferenceMyData(); String type = md.type; System.out.println(接收请求:+data);/由于不知道何种请求,首选将JSON字符串反序列化为MyData对象/判断请求类型,根据不同的请求类型,重新反序列化JSON字符串四、系统实现4.1 数据库存储系统的实现 本存储系统利用Andorid的SQLSever关系型数据库存储系统实现。其数据表字段及数据表创建等核心代码如下所示: 数据存储代码:客户端: /账信息数据表相

11、关字段 public final String TNAME_1 = account_info; public final String COLUMN1_1 = account_type; public final String COLUMN2_1 = account; public final String COLUMN3_1 = account_remark; public final String COLUMN4_1 = account_date; public final String COLUMN5_1 = account_record_time; public final Strin

12、g COLUMN6_1 = type;/账信息类型,1表示入账,-1表示出账 public final String COLUMN7_1 = status;/记录状态,1表示可用,0表示不可用 /账信息数据表相关字段 public final String TNAME_2 = account_type_info; public final String COLUMN1_2 = account_type_name; public final String COLUMN2_2 = account_type_remark; public final String COLUMN3_2 = accoun

13、t_type_time;/录入到数据库中的时间 public final String COLUMN4_2 = type;/账类型信息对应的类型,-1表示消费(出账),1表示收入(入账) public final String COLUMN5_2 = status;/记录状态mSQLiteDB.execSQL(create table if not exists + TNAME_1 + ( + _ID + integer primary key AUTOINCREMENT, + COLUMN1_1 + integer, + COLUMN2_1 + text, + COLUMN3_1 + tex

14、t, +COLUMN4_1+ date, + COLUMN5_1 + time, +COLUMN6_1+ integer,+COLUMN7_1+ integer); mSQLiteDB.execSQL(create table if not exists + TNAME_2 + ( + _ID + integer primary key AUTOINCREMENT, + COLUMN1_2 + text, + COLUMN2_2 + text, + COLUMN3_2 + time, + COLUMN4_2 + integer, + COLUMN5_2 + integer); mSQLiteD

15、B.close();服务端:public static boolean addAccountInfo(AccountInfo ai) new SMADao_up().upData(insert into account_type_info values(?,?,?,?,?,?,?,?,?), new Object null, ai.getAccountType().getId(), ai.getAccount(), ai.getAccountRemark()+, ai.getAccountDate(), ai.getUserInfo().getId(), ai.getNativeId(), a

16、i.getDeviceId(), ai.getStatus(); return true; 4.2 系统功能实现 4.2.1本地账类型管理用户登陆后可进行在已有的账类型基础下可以添加账信息。点击主界面的查询按钮弹出对话框,可以按查询条件查询账类型对应的账项目信息,选择查看可以查看具体信息,并对他进行修改。点击删除可进行删除。点击添加按钮可以添加账项目。4.2.1.1账类型管理显示效果用户登录后可以添加信息如4.1添加显示效果,可以点击主页面的查询按钮弹出对话框,在对话框里进行查询和修改如4.1查询显示效果和4.1修改显示效果。 4.1添加显示效果 4.1查询显示效果 4.1修改显示效果 4.2

17、 .1.2相关核心代码 chaxun.setOnClickListener(new OnClickListener() Override public void onClick(View arg0) / TODO Auto-generated method stub String zhanglx = zhang_leixing.getSelectedItem().toString().trim(); if(zhanglx.startsWith(出账) queryAccountType_ = (Vector) new AccountDao(context) .findAccountTypeByT

18、ype(-1); ala .notifyDataSetInvalidated(); else if(zhanglx.startsWith(入账) queryAccountType_ = (Vector) new AccountDao(context) .findAccountTypeByType(1); ala .notifyDataSetChanged(); ); /添加按钮事件 add.setOnClickListener(new OnClickListener() Override public void onClick(View arg0) / TODO Auto-generated

19、method stub new SetAddDialog(context).showDialog(); ); set_List.setOnItemLongClickListener(new OnItemLongClickListener() Override public boolean onItemLongClick(AdapterView arg0, View arg1, int pos, long arg3) final int posi = pos; / TODO Auto-generated method stub new ModifyChoosenDialog(context) p

20、ublic void itemEvent(DialogInterface arg0, int pos) / TODO Auto-generated method stub super.itemEvent(arg0, pos); CommonData.acc = queryAccountType_.elementAt(posi); String text = (String) this.itemspos; if (text.equals(查看) new ZChakanDialog(context) public void onCancel(DialogInterface arg0) chaxun

21、.performClick(); ; .showDialog(); else if(text.equals(删除) new AlertDialog.Builder(context).setTitle(确认删除) .setPositiveButton(确定,/ 设置确定按钮,第二个参数是传事件对象 new DialogInterface.OnClickListener() public void onClick(DialogInterface dialog,int whichButton) / 删除操作 if(CommonData.acc.getId() 7) Toast.makeText(co

22、ntext,删除失败,默认类型无法删除,Toast.LENGTH_LONG).show(); else new AccountDao(context).deleteAccountType_(CommonData.acc.getId(); Toast.makeText(context,删除成功,Toast.LENGTH_LONG).show(); ).setNeutralButton(取消, null).show(); this.dismiss(); .showSingleChoiceDialog(); return false; ); 4.2.2用户注册及登录功能 将用户的信息添加到数据库中,

23、先进行用户注册,把用户信息添加到数据库中,注册时若数据数据库中没有数据则注册,然后点击菜单中的登陆按钮,就可以显示登陆成功。然后就可以进行用户的信息添加查询之类的操作。4.2.2.1 用户登录动态模型 打开主页面的菜单,点击菜单中的注册按钮,就可以使用用户注册的功能,注册成功之后,返回,点击菜单中的登陆按钮,就可以成功的登陆。接着就可以添加信息,修改信息,生成请求对象,序列化反序列化之后,可以存储到服务端。服务端通过客户端的响应判断是否同步到服务端。如下图,图4.2.2.1用户登录动态图。活动动态图: 图4.2.2.1用户登录动态图4.2.2.2 登录界面效果 1.进入主页面,打开注册系统,先

24、进行注册,注册成功之后点击登陆按钮就可以登陆了。如图2-2-1所示。 图2-2-1 主界面菜单 图2-2-2注册窗口 图2-2-3登录窗口 相4.2.2.3关核心代码 /发送登录请求的编码如下所示: /获取用户数据,封装成json,发送 String name = nameEdit.getText().toString().trim(); String pass = passEdit.getText().toString().trim(); UserInfo user = new UserInfo(); user.setUserName(name); user.setUserPass(pass

25、); MyData request = new MyData(); request.type = CommonData.RequestType.LOGIN; request.data = user; request.status = ok; String request_ = JSON.toJSON(request).toString(); SocketProcessor.sendData(request_);/处理用户登录响应的Handler编码如下所示_response_login_handler = new Handler() Override public void handleMes

26、sage(Message msg) / TODO Auto-generated method stub super.handleMessage(msg); String data = msg.getData().getString(SocketProcessor.KEY); MyData md_ = JSON.parseObject(data, new TypeReferenceMyData(); if(md_.status.equals(ok) CommonData.login_user = md_.data; userText.setText(用户:+md_.data.getNickNam

27、e(); loginDialog.dismiss(); else if(md_.status.equals(notok) showToast(用户名、密码错误!); ; 服务端关键代码:if(type.equals(CommonData.RequestType.LOGIN) /JSON. MyData md_ = JSON.parseObject(data, new TypeReferenceMyData(); String name = md_.data.getUserName(); String pass = md_.data.getUserPass(); System.out.println(用户名:+name+ 密码:+pass); UserInfo user = UserInfoDao.findUserInfoByNamePass(name, pass); if(user != null)/合法用户 MyData

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

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