基于Android系统的校园助手应用程序开发毕业设计论文_第1页
基于Android系统的校园助手应用程序开发毕业设计论文_第2页
基于Android系统的校园助手应用程序开发毕业设计论文_第3页
基于Android系统的校园助手应用程序开发毕业设计论文_第4页
基于Android系统的校园助手应用程序开发毕业设计论文_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

xxx大学毕业设计(论文)DOCPROPERTYPO_TopicName基于Android系统的校园助手应用程序开发学院(系):计算机科学与技术学院专业班级:学生姓名:指导教师:xxx学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包括任何其他个人或集体已经发表或撰写的成果作品。本人完全意识到本声明的法律后果由本人承担。作者签名:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保障、使用学位论文的规定,同意学校保留并向有关学位论文管理部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权省级优秀学士论文评选机构将本学位论文的全部或部分内容编入有关数据进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。本学位论文属于1、保密囗,在年解密后适用本授权书2、不保密囗。(请在以上相应方框内打“√”)作者签名:年月日导师签名:年月日第1章绪论本文主要研究的是Android平台下校园助手应用程序的开发,首先,将从研究现状,研究内容,预期目标等方面做一个详细的介绍。1.1项目开发背景和意义1.1.1项目开发背景如今手机就像钥匙一样,是人们出门必带的物品之一。随着科技的迅猛发展,现在的手机都是智能手机,它的功能不仅仅只是用来打电话或是收发短信,用户还可以用它听歌看视频、用蓝牙传输数据、玩游戏、上网等等,比起用计算机访问因特网更方便快捷。而智能手机中占据领先地位的当数android操作系统的智能机。Android是一套真正意义的开放性移动设备综合平台,它包括操作系统、中间件和一些关键的平台应用。Android的Java程序运行环境包含一组Java核心函数库及Dalvik虚拟机,他们有效地优化了Java程序的运行过程。Android系统平台基于优化了的Linux内核,它提供诸如内存管理、进程管理、设备驱动等服务,同时也是手机硬件的连接层。Android最大的优点在于它是一个开放的体系结构,具有非常好的开发和调试环境,而且还制成各种可扩展的用户体验,Android里面有非常丰富的图形系统,对多媒体的支持功能和非常强大的浏览器。Android平台的开放性特点既能促进技术的创新,又有助于降低开发成本,还可以使运营商能非常方便地地址特色化产品,因此,它具有很大的市场发展潜力。1.1.2项目开发意义随着3G网络的使用,移动终端不再是通讯网络的终端,还将成为互联网的终端。因此,智能移动终端的应用和需要的服务将会有很大的发展空间。Android在短短的时间内以惊人的速度占据的大量的智能手机终端市场中脱颖而出,而且将继续扩大其用户量。而人流量、信息量都非常大的高校对智能终端的需求非常大,广大学生用户希望在第一时间最便捷的查询到需要的信息,因此,开发一款基于android手机的校园助手软件意义重大。1.2Android系统国内外发展现状Android系统,拥有低廉的引入成本,良好的用户体验开放性较强的特点,加上AndroidMarket和众多第三方应用商店做后盾,在应用方面的资源也非常丰富;虽然Android目前存在安全性和版本混乱等问题,但由于其适应了移动互联网的发展趋势,切合了移动互联网产业链各方的发展变化需求,所以取得了迅猛的发展。另外Android相比较与其他手机操作系统而言,具有以下特点:1、开放性手机平台Android是Google开发的基于Linux平台的开源手机操作系统。Google通过与运营商、设备制造商、手机公司和其他有关各方结成深层次的合作伙伴关系,希望借助建立标准化、开放式的智能手机操作系统,在移动产业内形成一个开放式的生态系统。开发性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者者来讲,最大的收益正式丰富的软件资源,开放的平台也会带来更大竞争,如此一来,消费者将可以用耕地的价位购得心仪的手机。2、网络集成性很高Android内部集成了大量的google应用,如Gmail、Reader、Map、Docs、Youtube等等,涵盖了生活中各个方面的网络应用,对长期使用网络、信息依赖度比较高的人群很合适。3、Android具备创新性自从Google开发出Android后,许多人认为其技术可信度要比其它操作系统略胜一筹,但这并不是用户购买Android智能手机的唯一原因。Android平台提供给第三方开发商一个十分宽泛、自由的环境,不会受到各种条条框框的阻挠。可想而知,会有多少新颖别致的软件会诞生人们认为Android是一种相对较新的、又较为成熟的技术,在达到巅峰之前还有很大发展空间。4、可以有丰富的硬件选择这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容,好比你从诺基亚Symbian风格手机一下改用苹果iPhone,同时还可将Symbian中优秀的软件带到iPhone上使用、联系人等资料更是可以方便地转移。1.3研究内容及预期目标本文的研究内容主要是:在移动通信环境下,基于Android系统开发校园常用应用程序,方便学生的学习和生活。校园助手主要设定课表模块,记事本、计算器等常用学习工具模块以及小应用等娱乐模块。通过使用本软件可以帮助学生合理安排好自己的学习时间、文体活动时间和参加社会活动的时间,能够丰富学生的校园文化生活,使得学生们的时间分配更加合理化,同时提高时间分配的合理性,能够实现德智体美全方面的发展。本软件预期要实现的目标是:第一,开发课表模块,通过该模块能够导入后台班级课表同时也能自定义编辑用户的个人时间规划安排。第二,通过添加记事本模块,可以将用户任意时刻想记录的事情都记录到系统中,功能类似于备忘录。最后,结合学生的普遍情况,加入计算器模块和娱乐小应用满足学生的一些其他方面的日常需求,同时也使程序的功能更加完善。概要设计2.1需求分析2.1.1必要性分析目前校园的信息量非常庞大,校园的管理方式走向科技化已经成为一种趋势。手机与校园信息进行对接,提供一些实用的服务不仅可以给学生和老师带来便利,同时也为学校的管理提供有效的支持,为校园信息化提供帮助。而且很多在校学生每天日常生活都缺乏合理的时间规划,从而导致了时间利用效率十分低下,往往许多计划也会因为忘记而导致计划被打乱,生活呈现出一种紊乱的状态。为此,开发本款校园生活小助手类的软件显得十分有必要。通过使用本软件,可以将生活中的琐事都添加到记录当中,实时提醒用户合理规划时间安排。另外,本软件可以记录生活中点点滴滴小事,抓住每一瞬间的触动和灵感等,实用性非常高。2.1.2功能需求整个开发过程分为前台和后台两部分,其主要功能需求为:软件的前台是手机客户端,在此客户端上开发课表,使用户可以实现对课表的查看、编辑和删除,另外,在此客户端上开发记事本,类似于备忘录,使用户可以记录自己个人计划、事务安排或者是作业等等。另外就是就是开发一个计算器,能满足用户日常的计算功能,还有开发一些小应用,使用户在紧张的学习之余还可以放松自己。应用软件当然也离不开管理数据的后台,后台主要拥有更高的管理权限。能够实现比用户权限更高级别的操作,以便于帮助用户更好地使用本款软件,如后台应该可以实现对课表的管理以及增删改查,可以实现对软件用户的人员管理等,这些都是在开发一款应用程序的过程中必须要实现的。2.2系统总体分析此设计是针对Android开发平台的校园助手应用程序的设计,该应用程序设计主要分为三大模块,即课程表模块、记事本、计算器模块以及一些额外的小应用模块,涉及的功能切合了当代大学生的实际需要,能满足学生学习生活中的基本需求。该应用程序完全采用Android原生的java语言进行开发,能够实现前后台良好的衔接和交互,系统运行流畅,响应速度很快,从而具有很好的用户体验。应用程序主要开发的部分是课表模块以及记事本模块,前台界面主要是采用最为简单的LinearLayout嵌套组成,其中课表模块是使用的远程数据库,并将课表模块的数据部分放在了移动云平台Bmob上,以便完成开发后能通过手机直接访问到远程数据,而不需要依赖Tomcat进行发布。记事本模块由于涉及到用户隐私,将其做成了本地数据库,在非联网的情况下也可以对记事本进行流畅的访问。

针对校园助手应用程序的系统模块设计主要分为三大模块,课程表模块,记事本模块,小应用模块。

系统详细模块图如下:各个功能模块的详细说明如下:记事本模块:要包括文本编辑、图片编辑和记录查看修改功能。用户可以直接通过点击对应界面的右上角的照相机按钮进入拍照界面,拍照完后跳转到文本编辑界面可以对照片相关内容进行描述说明。另外,用户在进入记事本界面后,可以看到之前所有的历史记录。并能够对所有记录进行修改删除等操作。课程表模块:该模块主要包括班级课本和个人计划安排,同时还能够对课本和个人信息进行批量删除和导入,在导入后的数据显示在课表中后可以对对应课程进行编辑。 小应用模块:该模块分为计算器和娱乐小应用模块,如数独游戏。 个人中心模块:主要包括个人资料的查看编辑、使用帮助、软件说明以及退出登录等。用户可以通过点击界面最上方我的资料处进入个人资料的编辑查看界面,点击使用帮助会弹出相关软件使用过程的帮助文档。第3章相关技术介绍3.1Android应用开发介绍Android开发中有四大组件,分别是Activity,Service,ContentProvider,BroadcastReceiver。1.Activity应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信。在Intent的描述结构中,有两个最重要的部分:动作和动作对应的数据。2.BroadcastReceiver 应用程序可以通过BroadReceiver对外部事件进行过滤,只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。3.Service一个Service是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播放。同时,系统也将保持这个service一直执行,直到这个service运行结束。另外,我们还可以通过使用Context.bindService()方法,连接到一个service上(如果这个service还没有运行将启动它)。当连接到一个service之后,还可以用service提供的接口与它进行通讯。4.ContentProvider android平台提供了ContentProvider使一个应用程序的指定数据集提供给其他应用程序。这些数据可以存储在文件系统中、在一个SQLite数据库、或以任何其他合理的方式,其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。只有需要在多个应用程序间共享数据时才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中,它的优点是统一数据访问方式。3.2Android生命周期介绍 图3.1图3.1所示为安卓系统开发中的生命周期图。系统中Activity被一个Activity栈所管理。当一个新的Activity启动时,将被放置到栈顶,成为运行中的Activity,前一个Activity保留在栈中,不再放到前台,直到新的Activity退出为止。Activity有四种本质区别的状态:在屏幕的前台(Activity栈顶),叫做活动状态或者运行状态(activeorrunning)如果一个Activity失去焦点,但是依然可见(一个新的非全屏的Activity或者一个透明的Activity被放置在栈顶),叫做暂停状态(Paused)。一个暂停状态的Activity依然保持活力(保持所有的状态,成员信息,和窗口管理器保持连接),但是在系统内存极端低下的时候将被杀掉。如果一个Activity被另外的Activity完全覆盖掉,叫做停止状态(Stopped)。它依然保持所有状态和成员信息,但是它不再可见,所以它的窗口被隐藏,当系统内存需要被用在其他地方的时候,Stopped的Activity将被杀掉。如果一个Activity是Paused或者Stopped状态,系统可以将该Activity从内存中删除,Android系统采用两种方式进行删除,要么要求该Activity结束,要么直接杀掉它的进程。当该Activity再次显示给用户时,它必须重新开始和重置前面的状态。3.3移动后端服务Bmob开发一个具有网络功能的移动应用,除了要开发客户端,还要开发服务端,还需要服务器。为了简化移动应用的开发和部署,让开发者只专注于客户端的开发,而将后端服务整合成API提供给开发者调用,这就是BaaS(BackendasaService)。目前,国外至少已经有二十多家企业进入了这个领域,其中,提供的后端服务比较全面的有StackMob、Parse、Kinvey。而国内,到目前为止只有三个平台,AMTBaaS、Xone以及Bmob。本次开发使用的就是Bmob移动云服务。在Bmob平台上,只需注册一个帐号,成功后申请创建任意多个数据库,获得对应的Key,下载对应版本的SDK并将其嵌入到移动应用中,便可以调用存取API,进行数据的任意操作,非常方便。Bmob提供了一体的可视化后台,数据操作简单方便,增删改查云端同步。离线数据操作,灵活应对用户网络不稳定的情况,此外还支持多表关联处理,数据的批量处理,还有本地化数据缓存操作让数据存取更快速。同时,Bmob还提供了丰富自由的数据类型。包括String(字符串)、Number(数值,包括整数和浮点数)、Boolean(布尔值)、Date(日期)、File(文件)、Geopoint(地理位置)、Array(数组)、Object(对象)等。这些数据类型是在我稍后的数据库设计中将主要使用到的,也许这跟我们平常使用的数据类型有一些区别,但是使用起来非常方便,完全能满足我们对数据类型的需求。针对移动应用开发的特性,Bmob还提供了主动推送服务,可以让移动开发者将信息从服务器直接推送到应用程序中,从而实现软件的主动更新、信息通知等服务;提供了简洁的文件存储功能,仅通过调用文件存储API就能够将视频、音频、照片、APK等文件存放到服务器端,以供随时下载使用;提供了专门针对用户的API功能,方便您对用户的管理工作,如注册、登录、注销、找回密码等;提供了地理信息功能,实现地理信息的搜索功能,如您可以检索某个地理位置附近的信息;提供了详尽的移动数据分析功能,让开发者能够查看并分析移动应用的用户变化、应用终端变化、用户粘合度等信息,从而有助于开发者更好的提升用户体验。另外,Bmob云存储服务平台除在服务器部署上的安全处理之外,还采用了多租户的虚拟隔离模式,即任何一个开发者的流量变化或者数据变化,均不会对其他开发者的应用带来影响。这些优秀的性能使Bmob成为了移动应用开发中的不可缺少的一部分,使用Bmob进行移动后台开发可以避免很多不必要的麻烦,让开发者更好地专注于程序优化和用户体验。3.4SQLite数据库SQLite,是一款轻型的数据库,是关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,最长用的就是现在的手机系统中,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。因为现在的手机内存还较小,而SQLite因为占用的资源很少,而且性能完全足够手机移动设备的使用,所以大部分手机软件开发都会选择使用SQLite数据库进行移动开发。对于程序开发人员而言,使用SQLite数据库也十分便捷。开发人员只需要下载SQLite数据库的JDBC,然后将下载到的包解压得到jar包sqlitejdbc-v033-nested.jar放至%JAVA_HOME%\lib下,并且将其路径添加到classpath系统环境变量中,然后就可以直接在代码中引用SQLite的驱动,调用相关方法进行数据库的操作。第4章校园助手数据库设计4.1系统E-R图下图4.1所示为程序中主要开发模块的系统E-R图,从中也可以看出整个系统的功能设计以及实体之间的联系,从而能进行程序的有序开发。 图4.14.2详细数据库设计下面为详细的数据库设计,因为后台数据库是建在前面介绍的Bmob云平台上面的,因此采用了Bmob上面的数据类型。在此做一个简单的说明。Bmob上面的String类型对应于平常使用的String类型,Number对应于平常使用的Int型,Boolean对应于平常使用的布尔型,Pointer和Relation分别表示一对一和一对多的关联数据类型。4.2.1课程表模块数据库设计如下表4.1所示为个人课程表数据库:属性数据类型说明备注objectIdString个人课表ID主键,不允许空UserPointer所属用户不允许为空Course_nameString课程名不允许为空WeekNumber每周上课时间不允许为空Section_numberNumber上课节数不允许为空Teacher_nameString任课教师姓名不允许为空ClassroomString上课地点不允许为空Week_StartNumber课程开始周数不允许为空Week_endNumber课程结束周数不允许为空 表4.1如下表4.2所示为班级课程表数据属性数据类型说明备注ObjectString班级课本ID主键,不允许为空MajorString专业不允许为空ClassesString班级不允许为空Course_nameString课程名不允许为空WeekNumber每周上课日期不允许为空Section_numberNumber每周节数不允许为空Teacher_nameString任课老师名字不允许为空ClassroomString上课地点不允许为空Week_startNumber开始周不允许为空Week_endNumber结束周不允许为空 表记事本模块的数据库设计如下表4.3为记事本记录表:属性数据类型说明备注IdString记录ID不允许为空ContentString记录内容允许为空PathString照片存储路径允许为空DateString添加时间不允许为空 表个人信息数据库设计如下表4.4为个人信息表:属性数据类型说明备注ObjectIdString用户id主键,不允许为空UsernameString用户名不允许为空PasswordString用户密码不允许为空MajorString专业不允许为空ClassesString班级不允许为空IsClassBoolean是否已导入课表不允许为空PersonalCoursesRelation用户个人课程不允许为空 表4.4第5章校园助手前端页面设计5.1主程序界面设计及实现5.1.1主程序界面图5-1图5-2图5-3上图5-1、5-2和5-3分别对应的是系统的四大模块。5-1对应的是课程表模块的进入页面,通过点击中心按钮查看课本可以进入课程表查看界面对课程表进行增删改查操作。5-2对应的是记事本模块和小应用,在该界面可以通过点击烂笔头进入文本编辑,点击右上的照相机小图标直接进入拍照界面点击拍照后再进行相关文本说明。另外,还可以点击计算器和小应用进入相关界面使用对应功能。5-3对应的是个人中心界面,通过点击上方的“我的资料”进入个人资料页面,实现对个人资料的查看和编辑。另外个人中心界面还设置了使用帮助以及软件申明等,帮助用户更好地使用软件,另外,客户点击退出登录可退出程序界面,注销用户登录信息。5.1.2主程序界面开发原理主程序界面设计采用了目前比较主流的类似QQ的滑动页面布局。在一个主Activity中使用一个ViewPager嵌套了三个Fragment,并自定义了一个ChangeColorIconWithText类,实现了底部三个可点击变色并切换fragment的按钮。通过滑动或点击底部按钮,可实现课程表、发现、我三个模块的自由切换,非常地方便快捷。其中ChangeColorIconWithText类中主要是使用了绘图的技术。如图所示,主程序的课表模块上只有一个蓝色的查看课表按钮,简洁大方,点击即可进入课表模块定制自己个性化的课表了。主程序的发现部分,主要是使用LinearLayout实现,通过给父LinearLayout和子LinearLayout定义不同的布局和背景颜色实现,同时,在烂笔头部分还加入了拍照的快捷键,可方便地应对需要及时拍照的突发情况。最后,在“我”的部分,设置了资料以及使用帮助和反馈,退出登录等内容,这个部分主要是使用一个ListView实现,并且使用的是Android自带的ListView布局,只需自己定义显示的每条数据即可。5.2课表模块界面设计及实现5.2.1课表模块界面展示图5-4如图5-4所示为课程表显示界面,该界面中,通过点击图片右下角的加号图标按钮,可以弹出选择提示,可进行班级课表的自动导入、批量删除以及个人课表的添加和批量删除。同时,用户可以通过点击课程表中对应课程对课程进行操作,但是因为班级课表是共享的,普通用户没有权限对其进行修改,只有个人添加的课程可以进行删除和编辑操作,而班级课程只能通过上述的导入和批量删除进行修改。5.2.2个人课表添加界面 图5-5 如图5-5所示为个人课表添加界面,该界面中,填充课程名、教师名字、教师等信息后然后点击添加按钮,可实现对课程表信息的添加。5.2.3课表模块界面开发原理课表模块的主界面主要是使用TextView实现,所有的格子都是通过添加带有格子背景的TextView实现的。课表最上面的星期一到星期日在layout的xml文件中上上定义,后面的空格子是通过for循环添加TextView实现。并且用户每次添加或一门课程,主课程表界面都能进行实时地更新。因为我在主Activity(即CourseTable)中将显示个人课表的方法定义在了OnResume中,每次进入CourseAddActivity后重新回到CourseTable中都会重新调用该方法,实现对课表的实时刷新。5.3记事本模块界面设计及实现5.3.1记事本模块界面展示 图5-6 如图5-6所示为记事本记录展示模块,在该界面中会将所有已添加的历史记录全部显示出来,可以点击对应记录进入相关界面对该记录进行查看和修改。在该界面中可以通过点击图片最下方的“新建”进入记录添加界面。 图5-7如图5-7则是通过“新建”进入的记录编辑界面。用户可以在空白处添加相关文本内容,然后点击右上角的照相机小图标进入拍照界面。拍照完毕后系统会自动返回此界面点击左上角的“√”符号即成功添加完一条完整的记录。5.3.2.记事本模块界面开发原理记事本的主界面主要采用的是一个ListView的布局,适配器是自己定义的继承于BaseAdapter的适配器MyAdapter,通过重写当中BaseAdapter的getView()等方法,自定义listView的布局文件以及适配的数据,能很好地实现ListView中每条数据的图文结合。进入记事本编辑界面,可在EditText中编辑文字内容,照片是使用一个ImageView存放,点击右上方的拍照按钮进入拍照界面,这里没有调用系统相机而是自定义了一个基于android.hardware.Camera的相机,通过自定义surfaceView和重写onPictureTaken方法实现相机个个性化,更符合用户的需求。5.4计算器模块界面设计及实现5.4.1计算器模块界面展示图5-8如图5-8所示为计算器模块,点击科学—>标准按钮,可实现标准计算器和普通计算器之间的切换,满足用户不同的使用需求。标准计算器可实现简单的加减乘除、切换到科学计算器就可以进行正余弦的计算以及对数、指数的运算,非常的方便,基本能满足用户的日常需要。5.4.2计算机模块界面开发原理由于计算器模块的界面主要是由整齐划一的按钮组成,所以实现起来也较为简单,主要是由LinearLayout嵌套组成,再在LinearLayout里面定义按钮。其中输入框是由两个TextView组成,以防止输入计算数据过多,造成无法显示或者为了显示数据破坏了界面的美观性等情况。5.5小应用模块界面设计及实现5.5.1小应用模块界面展示 图5-9如图5-9小应用模块主要就是开发了一个数独游戏,用户每点击一个空格就会弹出当前单元格所能填入的数字。当空格内没有可供填入的数字时会提示用户出错了,询问用户是否重置游戏。5.5.2小应用模块界面开发原理数独游戏的界面开发主要是使用了Android绘图,自定义了一个继承于View的ShuduView,并重写其中的onDraw方法,定义四根画笔分别用于绘制横向、纵向的线,以及数字。代码实现如下(以黑画笔随意绘制一根斜线为例):PaintlightPaint=newPaint();lightPaint.setColor(Color.BLACK);canvas.drawLine(0,0,200,200,lightPaint);在上面的界面图中可以看到数独中的单元格边界线就像一个凹槽一样,有一种刻进去的感觉,这主要是通过先画一根深一点的线再在旁边画一根稍浅的线实现。5.6个人中心模块界面设计及实现5.6.1个人中心模块界面展示 图5-10 如图5-10所示为个人中心界面中的“我的资料”子模块,在该模块中可以对用户的个人信息进行查看修改。此外,用户还能够在此界面查看软件的使用帮助和软件的基本信息以及登出操作。5.6.2个人中心模块界面开发原理个人中心模块的界面开发比较简单,就是用一个简单风格的ListView来实现的,再使用一个ArrayAdapter作为适配器,将列表中的数据适配上去即可。上方我的资料和那个小图标部分,是使用一个TextView再将其DrawableLeft属性定义为一张图片来实现。校园助手后台开发校园助手的后台开发主要分为登录模块、课程表模块,记事本模块、计算器及小应用模块等几个主要模块,在前面的数据库设计中有提到,其中登录模块、课程表模块的数据库是建立在Bmob移动云平台上面,因此字段采用的是Bmob的数据类型,而记事本模块的数据库采用的是Android的本地数据库SQLite,因此几个模块之间在数据库的开发上面也会有所不同,接下来本文将对程序结构以及这几个模块的具体实现做一个详细的介绍。6.1程序结构本校园助手应用程序开发的eclipse工程名为CampusAssistant,程序源代码的主要结构如图,由于程序涉及的功能模块相对而言较多,因此定义了不同的包用来存放不同功能的程序源文件。

程序各源文件包主要说明如下:包名主要文件说明com.mimi.uiLoginActivity等用户登录、主程序界面以及课程表模块的主要代码com.mimi.dbUser.java等存放数据库对象com.mimi.fragmentFoundFragment.java等存放主界面的三个Fragmentcom.mimi.noteNoteActivity.java等记事本模块的程序实现com.mimi.calculatorCalculatorActivity.java计算机的程序实现com.mimi.sudokuShuduView.java等小应用中数独游戏的程序实现com.mimi.utilsImageThumbnail.java等程序用到的工具类,如制作缩略图,判断用户是否联网等6.2登录模块登录模块主要是负责用户的登录、注册和注销等几个主要功能的实现。当然这个模块的实现主要是通过对Bmob上的User表进行增删改查,主要是通过调用Bmob提供的Api接口来实现相应的操作。Bmob提供了一个专门的用户类--BmobUser来自动处理用户账户管理所需的功能。有了这个类,便可以在应用程序中添加用户账户。BmobUser是BmobObject的一个子类,它继承了BmobObject所有的方法,具有BmobObject相同的功能。不同的是,BmobUser增加了一些特定的关于用户账户管理相关的功能。BmobUser除了从BmobObject继承的属性外,还有几个特定的属性:username:用户的用户名(必需)。password:用户的密码(必需)。而且,开发者可以通过继承扩展BmobUser自定义自己的用户类。本次程序开发中的登录模块就是通过BmobUser类来实现的。要使用BmobUser类只需在工程中导入Bmob官方提供的AndroidSdk,然后创建BmobUser对象即可。BmobUseruser=newBmobUser()。首先是注册用户部分,主要程序实现如下(以注册用户zhangsan为例):BmobUserbu=newBmobUser();bu.setUsername("zhangsan");bu.setPassword("123456");bu.signUp(this,newSaveListener(){//调用signUp方法即可。@OverridepublicvoidonSuccess(){//注册成功//TODOAuto-generatedmethodstubtoast("注册成功:");}@OverridepublicvoidonFailure(intcode,Stringmsg){//注册失败。//TODOAuto-generatedmethodstubtoast("注册失败:"+msg);}});然后是用户登录模块(也以“zhangsan”登录为例):BmobUserbu2=newBmobUser();bu2.setUsername("zhangsan"); bu2.setPassword("123456"); bu2.login(this,newSaveListener(){//调用login方法登录。publicvoidonSuccess(){//TODOAuto-generatedmethodstubtoast("登录成功:");}publicvoidonFailure(intcode,Stringmsg){//TODOAuto-generatedmethodstubtoast("登录失败:"+msg);}});然后在程序开发过程中可以如果需要获取当前登录用户的信息,也可以通过BmobUser类及时获取,非常的方便。主要实现如下:BmobUserbmobUser=BmobUser.getCurrentUser(this);如果在程序中扩展了用户类,可直接调用MyUseruserInfo=BmobUser.getCurrentUser(this,MyUser.class);得到所需要的用户的所有信息。然后用户可实时更新自己的个人资料,也是通过Bmob提供的Update方法来实现,跟前面的大同小异,此处不再赘述。最后是用户注销登录操作的程序实现,相对来说,用户退出操作的程序实现较为简单,只需如下的几行代码:BmobUser.logOut(this);//清除缓存用户对象BmobUsercurrentUser=BmobUser.getCurrentUser(this);6.3课程表模块课程表模块也是主要通过Bmob提供的一些方法接口来实现。课程表模块主要是对Bmob上的两张表--班级课表和个人课表进行增删改查。首先是用户已有课表的显示实现:Bmob专门提供了一个BmobQuery对象用于查询。在课程表的主ActivityCourseTable.Activity中,通过查询获得用户个人课表和班级课表的信息展示。下面主要展示一下班级课表查询代码,自动批量导入班级课表主要由此实现,个人课表查询代码同理不再赘述。BmobQuery<ClassCourse>query=newBmobQuery<ClassCourse>();query.addWhereEqualTo("major",user.getMajor());query.addWhereEqualTo("classes",user.getClasses());query.findObjects(this,NewFindListener<ClassCourse>){@OverridepublicvoidonError(intarg0,Stringarg1){//TODOAuto-generatedmethodstub }publicvoidonSuccess(List<ClassCourse>courses){}然后是用户添加和编辑课个人课表的程序实现:(此处以当前用户添加英语课为例)BmobUseruser=BmobUser.getCurrentUser();PersonalCoursec=newPersonalCourse();c.setUser(user);c.setCourseName(“英语”);c.save(CourseAddActivity.this,newSaveListener(){@OverridepublicvoidonError(intarg0,Stringarg1){//TODOAuto-generatedmethodstub }publicvoidonSuccess(){}同理,如果是编辑则调用c.update(this,newUpdateListener(){});即可完成课表的添加和编辑。最后是课表的删除操作,也是整个课程表模块比较简单的部分,假设需要删除课程c,只需调用c.delete(Contextcontext)方法即可实现。其实课程表模块还有一个比较核心的方法就是对查询到的课程进行展示,以及对新添加课程后课程表界面实时刷新的方法--showCourseInfo(),如前面课程表界面开发原理当中所说课程表格子背景都是通过创建TextView来实现,课程信息的展示同时也是通过创建TextView,同时使TextView通过课程的星期和节数来进行偏移。并且通过给每天的课程配上不同的颜色,便于用户区分,使程序拥有更好的用户体验。6.4记事本模块的实现如前所述,记事本模块采用SQLite本地数据库,因此,记事本模块用户对记录的添加、编辑和删除操作主要也是通过对SQLite本地数据库的增删改查来实现。首先,创建一个继承于SQLiteOpenHelper的NoteDB类,负责创建数据库,建表。主要通过编写构造方法和在onCreate中调用建表的SQL语句实现。之后如果要对本数据库进行增删改查,只需通过创建NoteDB对象,然后调用其getReadableDatabase()或getWritableDatabase()得到可供操作的SQLiteDatabase对象。主要代码如下:noteDB=newNoteDB(this);dbReader=noteDB.getReadableDatabase();dbWriter=noteDB.getWritableDatabase();对SQLite中的数据表进行增删改只需依次调用SQLiteDatabase对象的以下方法即可:Longinsert(Stringtable,StringnullColumnHack,ContentValuesvalues);Delete(Stringtable,StringwhereClause,String[]whereArgs);Update(Stringtable,ContentValuesvalues,StringwhereClause,String[]whereArgs);至于查询方法,SQlite那个本身提供的query方法需要传入的参数过多,因此原生的sql语句会更方便,在此基础上只需调用一个dbReader.rawQuery(sql,null)即可得到查询成功后的cursor对象。其实记事本主程序界面历史记录的显示就是通过这个查询功能实现的,而且在这里实现的是对数据库里以往添加记录的倒序查询,按时间由近到远排序,符合记事本的开发逻辑,查询得到的Cursor对象再传给适配器进行信息的展示。程序主要实现代码如下:privatevoidselectDB(){Stringsql="select*from"+NoteDB.TABLE_NAME+"orderbytimedesc";Cursorcursor=dbReader.rawQuery(sql,null);MyAdapteradapter=newMyAdapter(this,cursor); }为了实现数据的实时刷新,选择了在记事本主程序NoteActivity的OnResume方法中调用selectDB(),因此,每当当前页面失去焦点后再返回当前页面,就会重新调用一次OnResume方法,重新进行历史记录查询,实现记录的实时刷新。记事本模块除了对数据表的增删改查还有一个比较核心的功能就是拍照功能的实现。该功能主要通过android.hardware.camera来实现。重写CallBack类中的方法,由于在前面提到camera拍照界面取景是用surfaceView实现,在这里重写CallBack中的surfaceDestroyed()、surfaceCreated()、以及surfaceChanged()方法可控制拍照取景,拍照的方向等,再调用SurfaceView的getHolder().addCallBack(newCallBack{...})方法绑定到surfaceView,即可以定制自己个性化的相机。点击按钮拍照后,可调用Camera的takePicture(...)方法得到拍照后传回的数据,将其保存在手机本地,并将图片路径存入数据库,便于以后的查看。6.5计算器模块的实现计算器模块涉及到的功能比较多,所以相对来说代码会比较复杂一点。程序中除了两个主Activity用户界面显示和定义点击事件外,还定义了个Java类,Judge.java和GetValue.java分别用于字符串的判断处理和值得计算。下面主要对功能差不多的一些按钮及其点击事件做一个归类描述。用户点击数字按钮(0-9),程序会先判断当前显示有没有输入再进行字符串的追加。用户点击加减乘除按钮,程序会先判断当前显示屏中的字符串最后一个字符是否为运算符,如果是则将字符串最后一位去掉(string.substring(0,string.length-1)),再加上当前添加的运算符,组成当前显示屏的字符串。用户如果点击输入小数点,程序会调用Judge的judge1()方法判断最后一个字符是否是数字再进行相应的字符串追加。计算器当中最复杂的是输入等号后程序对输入表达式的运算,首先调用GetValue中的dispose1(Stringstr)方法判断str中是否有“π”,将其替换为数值,再调用GetValue中的bracket_dispose()处理字符串当中的括号表达式,主要思路是:遇到正括号就将它在字符串里的索引保存在一个链表里(插在链表头),遇到第一个反括号就处理这个括号里的表达式(取出链表第一个元素,然后根据这两个索引取出表达式,会调用一个专门处理log,ln,sin,cos,tan等的special_dispose函数,将反回一个自由加减乘除的表达式,再调用alg_dispose函数,返回一个可能还含有log,ln,sin,cos,tan等的但没有括号的表达式。最后再将得出的表达式结果显示在显示屏上。6.6小应用模块的实现小应用模块主要开发了一个数独游戏,数独游戏的实现逻辑其实也比较简单。主要功能的实现都是通过定义的一个Game类来进行封装,这样能很好地实现程序的跨平台性,这个定义的Game类同样也能运行在其他平台(如PC端)上。首先在Game类里面定义几组数独的原始数据,整个数独界面由9×9一共81个单元格组成,因此定义一个大小为81的整型数组用于存取每个单元格的数据,如果没有数据,则数组中此项为0。定义了这个整型数组,就可以很方便地直接获得指定坐标单元格中的数据,这在程序中通过定义的getTileString(intx,inty)方法来实现。游戏开始,用户没点击一个单元格,程序就能自动计算出这个单元格的不可用数据数组,从而将弹出对话框中的不可用数据设为不可见。因此用户可以方便地选择要填入的数字。程序中计算不可用数组,主要通过calculateUsedTiles(intx,inty)方法实现,主要代码如下:publicint[]calculateUsedTiles(intx,inty){intc[]=newint[9];for(inti=0;i<9;++i){//计算在y轴(列)方向上那些数字不可用 if(i==y){//如果这是用户点击的格子 continue;}intt=getTile(x,i);if(t!=0){ c[t-1]=t; } }for(inti=0;i<9;++i){//计算在y轴(列)方向上那些数字不可用 if(i==x){ continue; } intt=getTile(i,y); if(t!=0){ c[t-1]=t; } }intstartX=(x/3)*3;intstartY=(y/3)*3;//计算在九宫格内那些数字不可用。for(inti=startX;i<startX+3;++i){for(intj=startY;j<startY+3;++j){if(i==x&&j==y){ continue; } intt=getTile(i,j); if(t!=0){ c[t-1]=t; } }}当用户点击格子计算出的不可用数字数组大小等于9时,提醒用户出错并询问是否重置游戏。结论本次基于Android平台的校园助手应用程序的开发,切合现今学生的实际

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论