Android程管理系统设计开发.doc_第1页
Android程管理系统设计开发.doc_第2页
Android程管理系统设计开发.doc_第3页
Android程管理系统设计开发.doc_第4页
Android程管理系统设计开发.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

南京工业职业技术学院项目技术报告 智能终端应用系统开发实训 Android日程管理系统设计与开发(2013/12/32014/01/3)项目名称Android日程管理系统设计与开发院 系计算机与软件学院班 级移设1213组 别第五组学 号1202613106、09、23、48、50、52学生姓名顾飞黄锦烽张国浩 张慧敏张燕云朱冰雪指导老师张以利目录第1章 绪论51.1日程管理的起源51.2日程管理的特点51.3任务分配5第2章 系统开发环境及技术62.1系统开发环境6 2.1.1硬件环境6 2.1.2软件支持62.2系统开发技术6 2.2.1 java 简介6 2.2.2 eclipse简介7 2.2.3 SQLite简介8第3章 日程管理的设计与分析9 3.1 用户需求9 3.2 功能需求9 3.3 日程管理设计难易点分析9 3.4 日程管理设计总体框架10第4章 概要设计 4.1系统总体功能设计11 4.1.1 系统设计原则11 4.1.2 系统结构功能图11 4.2 数据库设计11 4.2.1 分类报表11 4.2.2 数据库表12第5章 APP界面设计13 5.1 APP应用图标设计13 5.2 界面元素13第6章 详细设计与实现13 6.1 程序引导加载界面13 6.2 欢迎界面15 6.3注册登录模块16 6.4程序主界面模块18 6.5 滑动菜单模块19 6.6添加日程模块23 6.7 个人中心模块26 6.8 反馈信息界面29 6.9 应用分享模块29 6.10 应用推荐模块29 6.11 关于我们界面30 6.12 设置模块30 第7章 应用测试33小结34参考文献38第1章 绪论1.1 日程管理的起源在没有手机功能齐全的时代,我们的日程安排只能通过手写记录,经常会因为没有及时翻阅记录而错过了重要的日程,随着手机技术的飞速发展,手机应用的迅速推广,手机改变了人们的生活,工作的方式。日程管理就是将每天的工作和事务安排在日期中,并做一个有效的记录,方便管理日程的工作和事务,达到工作备份的目的。同时也具有对日常工作进行指导、监督的作用。 1.2 日程管理的特点 1:绿色免费,程序轻便小巧,只占用几M内存! 2:非常灵活的日期提醒设置 3:全年月日周的周期定时循环提醒 4:绝不错过未开机情况下的提醒 5:完善的日程查询功能 6:功能完善,简单易用 1.3 任务分配表1.1 任务分配表 能够清晰的看到每个人在项目开发过程中所承担的任务顾飞任务分配 已经做好的功能归类 项目设置,编写文档 黄锦烽设置通知栏常驻 语音识别 张国浩欢迎界面 图片资源准备张慧敏数据库表设计 设置界面布局张燕云图标设计 主界面 引导界面图片设计朱冰雪时间日期选择器 记事本功能,编写文档第2章 系统开发环境及技术2.1 系统开发环境 2.1.1 硬件环境处理器Pentium以上;内存容量1G以上;外存容量50G以上; 2.1.2软件支持操作系统: windows 7编程语言:JAVA数据库: SQLite开发工具: eclipse 2.2 系统开发技术 2.2.1 java 简介背景:Java是一种应用分布式网络环境中的程序设计语言,由sun公司开发,Java语言广为人知,得益于Internet的迅猛发展。人们开始了解并使用这种神奇的语言,一般的应用程序、Applet、web服务器乃至手机的嵌入式系统,Java都足以胜任。Java对网络提供了强有力的支持,这也是这种奇妙语言的魅力所在。特点: (1) 面对对象 (2)可移植性(universality) (3)安全性(security) (4)多线程(thread) (5)多态 (6)解释执行 (7)分布性 2.2.2 eclipse简介Eclipse中三个最吸引人的地方:一是它创新性的图形API,即SWT/JFace,在此之前,我曾经用过Java 的AWT/SWING来开发Windows应用程序,AWT/SWING其界面客观地讲不够美观,而且界面响应速度比较慢;而SWT/JFace则大大改善了Java在这方面的能力。二是它的插件机制。三是利用它的插件机制开发的众多功能强大的插件。Eclipse平台体系结构:Eclipse 平台是一个具有一组强大服务的框架,这些服务支持插件,比如Java开发环境插件(JDT)、插件开发环境(PDE)和其他的第三方插件(New tool)。它由几个主要的部分构成:平台运行库、工作区、工作台、团队支持和帮助。Eclipse平台体系结构:平台运行库是内核,它在启动时检查已安装了哪些插件,并创建关于它们的注册表信息。为降低启动时间和资源使用,它在实际需要任何插件时才加载该插件。除了内核外,其他每样东西都是作为插件来实现的。工作区是负责管理用户资源的插件。这包括用户创建的项目、那些项目中的文件,以及文件变更和其他资源。工作区还负责通知其他插件关于资源变更的信息,比如文件创建、删除或更改。工作台为 Eclipse 提供用户界面。它是使用标准窗口工具包(SWT)和一个更高级的API(JFace)来构建的;SWT 是 Java 的 Swing/AWT GUI API 的非标准替代者,JFace则建立在 SWT 基础上,提供用户界面组件。SWT 已被证明是 Eclipse 最具争议的部分。SWT 比 Swing 或 SWT 更紧密地映射到底层操作系统的本机图形功能,这不仅使得 SWT 更快速,而且使得 Java 程序具有更像本机应用程序的外观和感觉。使用这个新的 GUI API 可能会限制 Eclipse 工作台的可移植性,不过针对大多数流行操作系统的 SWT 移植版本已经可用。Eclipse 对 SWT 的使用只会影响 Eclipse 自身的可移植性使用 Eclipse 构建的任何Java 应用程序都不会受到影响,除非它们使用 SWT 而不是使用 Swing/AWT。团队支持组件负责提供版本控制和配置管理支持。它根据需要添加视图,以允许用户与所使用的任何版本控制系统(如果有的话)交互。大多数插件都不需要与团队支持组件交互,除非它们提供版本控制服务。 2.2.3 Sqlite简介SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至今已经有13个年头,SQLite也迎来了一个版本 SQLite 已经发布。SQLite是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。不像常见的客户-服务器范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。 第3章 日程管理的设计与分析3.1 用户需求(1)功能需求:本系统完成对自己的日程进行记录,每天日程安排以及查看修改工作。 (2)权限需求:用户管理员拥有最高的权限,可以对系统中所有的数据进行查看、添加、修改和删除等操作;普通用户只可以对自己的进程进行查看、添加、修改和删除等操作。 3.2 功能需求(1)用户登录、用户注册:用户通过登录的方式进行口令校验安全进入在线日程管理系统:用户注册是用户为进入该系统时将个人信息提交到数据库中。 (2)日程管理:其中使用ListView控件,对某一天或某段时间的日程进程查看,和对某个日程的地点、开始时间、重要性及联系电话进行修改,更新等操作。3.3 日程管理设计难易点分析数据库操作(增删改查)界面的整体设计:找不到适合的框架,自己又不会写调试程序的时候经常性的遇到异常3.4 日程管理总体框架日程管理APP开发流程包含 应用定位、项目规划、UI设计数据库设计,功能类的实现以及工具类的附加 图3.1 总体框架图 第4章 概要设计4.1系统总体功能设计 4.1.1系统设计原则日程管理APP主要分为两大块功能:日程记录功能:日程添加 闹钟提醒个人中心:能够进行注册 登录 并且能够对自己的信息进行修改系统设置:设置主题 通知栏的开启 清除缓存等功能应用分享:根据第三方提供的share分享服务 能够将APP分享到别的平台 4.1.2系统机构功能图日程管理概要设计包含四大模块:日程管理,个人中心,系统设置,应用分享 图 4.1 系统功能图4.2 数据库设计 4.2.1 分类报表本次实训采用了一张数据库两张表(分别是日程表和用户表)4.2.2 数据库表数据库采用了两张数据库表 分别是日程管理表(Remind表)和用户信息表(Usertab表)Remind表 字段 数据类型备注titlevarchar标题remindDatevarchar设置闹钟日期remindTimevarchar设置闹钟的时间serviceflaginteger闹钟服务的开关_idinteger日程的idremindCountsinteger闹钟计数notevarchar正文 图表 4.2 Remind表数据表内容Usertab表 字段数据类型备注idint用户idusernamevarchar用户名passwordvarchar密码nicknamevarchar昵称regist_timevarchar注册的时间 图表 4.3 Usertab表数据表内容第5章 APP界面设计5.1 APP应用图标设计图标设计含义:一周有7天,我们要计划着做好每一天的事情,所以APP的名字为 7DayToDo绘制工具:Ps 绘制方法:钢笔工具切片图层,填充色块而成 图5.1 应用图标5.2 界面元素图标设计伪扁平蓝色+灰色 朴素大方设计比较简洁,易于查看 第6章 详细设计与实现6.1程序引导加载页面每次进入应用时会显示一个程序的加载页面图6.1 程序引导加载图主要代码(设置线程休眠后进行跳转)final Intent intent = new Intent(this, GuideActivity.class);/ 如果之前启动过这个Activity,并还没有被destroy的话,而是无论是否存在,都重新启动新的activityintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);/ 创建一个新的线程来显示欢迎动画,指定时间后结束,跳转至指定界面new Thread(new Runnable() Overridepublic void run() try Thread.sleep(3000);/ 用线程暂停3秒来模拟做了一个耗时3秒的检测操作SharedPreferences preferences = getSharedPreferences(isFirstUse,MODE_WORLD_READABLE); isFirstUse = preferences.getBoolean(isFirstUse, true); if (isFirstUse) startActivity(new Intent(Welcome.this, GuideActivity.class); else startActivity(new Intent(Welcome.this, MainActivity.class);/ 获取应用的上下文,生命周期是整个应用,应用结束才会结束/getApplicationContext().startActivity(intent);/ 跳转finish();/ 结束本欢迎画面ActivityEditor editor = preferences.edit(); editor.putBoolean(isFirstUse, false); mit(); catch (InterruptedException e) e.printStackTrace();).start();6.2 第一次进入时的欢迎界面第一次使用应用所看到的欢迎漫画 图6.2 欢迎界面图主要代码(创建一个引导图片切换适配器来管理几个view)private void initView() LayoutInflater mLi = LayoutInflater.from(this);view1 = mLi.inflate(R.layout.gudie_view01, null);view2 = mLi.inflate(R.layout.gudie_view02, null);view3 = mLi.inflate(R.layout.guide_view03, null);view4 = mLi.inflate(R.layout.guide_view04, null);viewPager = (ViewPager) findViewById(R.id.viewpager);views = new ArrayList();vpAdapter = new ViewPagerAdapter(views);regist = (Button) view4.findViewById(R.id.regist);login = (Button) view4.findViewById(R.id.login);startBt = (Button) view4.findViewById(R.id.startBtn);private void initDate() viewPager.setOnPageChangeListener(this);viewPager.setAdapter(vpAdapter);views.add(view1);views.add(view2);views.add(view3);views.add(view4);6.3注册登录模块注册登录所展示的UI界面以及数据库写入的实现方法图6.3 注册登录图主要代码(用db_help来管理数据库的增删改查 只需给它传一个sql语句便可执行)sql=select * from usertab where username=+ nameString + ;cursor = db.select(sql);if (cursor.getCount() = 0) Toast.makeText(getBaseContext(), 该用户名不存在,Toast.LENGTH_LONG).show(); else cursor.moveToFirst();String password = cursor.getString(2);if (password.equals(passString) SharedPreferences userkey;/用户名存放userkey=getSharedPreferences(userkey,0);/打开Preferences,名称为userkey,如果存在则打开它,否则创建新的PreferencesSharedPreferences.Editor editor = userkey.edit();/让userkey处于编辑状态editor.putString(name, nameString);/存放数据mit();/完成提交Toast.makeText(getBaseContext(), 成功,Toast.LENGTH_LONG).show();Intent intent = new Intent(LoginActivity.this,MainActivity.class);startActivity(intent);finish(); else Toast.makeText(getBaseContext(), 密码错误,Toast.LENGTH_LONG).show();sql=select * from usertab where username=+ usernameString + ;cursor = db.select(sql);if (cursor.getCount() 0) Toast.makeText(getBaseContext(), 该用户名已存在,Toast.LENGTH_LONG).show(); else sql=insert into usertab(username,password,nickname,regist_time) values(+ usernameString+ ,+ passwordString+ ,+ nicknameString + , + time + );db.insert(sql);cursor.close();6.4程序主界面模块利用SlidingMenu+ViewPager+fragment开源框架所组成的应用主界面框架图6.4 程序主界面模块图主要代码(SlidingMenu+ViewPager+fragment开源框架)FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();MenuFragment menuFragment = new MenuFragment();fragmentTransaction.replace(R.id.menu, menuFragment);/ 加载滑动设置布局ScheduleFragment sf = new ScheduleFragment();/ 新建一个日程管理Fragment,并在里面创建一个viewtitle.setText(近期日程);fragmentTransaction.replace(R.id.contnet, sf);/ 所创建新的Frgment布局替换容器的布局fragmentTmit();SlidingMenu sm = getSlidingMenu();sm.setShadowWidth(50);sm.setShadowDrawable(R.drawable.shadow);sm.setBehindOffset(60);sm.setBehindWidth(300);/ 设置SlidingMenu菜单的宽度sm.setFadeDegree(0.35f);sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);6.5滑动菜单利用Preferences自定义布局,来设计滑动菜单里的显示内容图6.5 滑动菜单图主要代码addPreferencesFromResource(R.xml.menu);/ add listenerfindPreference(a).setOnPreferenceClickListener(this);findPreference(b).setOnPreferenceClickListener(this);findPreference(c).setOnPreferenceClickListener(this);findPreference(d).setOnPreferenceClickListener(this);findPreference(e).setOnPreferenceClickListener(this);findPreference(f).setOnPreferenceClickListener(this);findPreference(g).setOnPreferenceClickListener(this);public boolean onPreferenceClick(Preference preference) 6.6添加日程界面模块几个控件组成的组成的布局,设置线程完成闹钟响应的功能图6.6 添加日程图主要代码(定时线程启动)new Thread(new Runnable() Overridepublic void run() sql = insert into remind (Title,Note,RemindTime,RemindTimeSecond,RemindCounts,ServiceFlag) values(+ workRemind.this.etTitle.getText().toString()+ ,+ workRemind.this.etNote.getText().toString()+ ,+ workRemind.this.etTime.getText().toString()+ ,+ workRemind.this.etRemindTimeSecond.getText().toString()+ ,+ counts + , + flags + );helper.insert(sql);/ 通过id分辨不同的pendingintentif (!updateFlag.equals(1) String sql = select * from remind;myDBhelper myhelper = new myDBhelper(workRemind.this);Cursor cursor = myhelper.select(sql);if (cursor.getCount() 0) cursor.moveToLast();Log.i(*lastid,cursor.getInt(cursor.getColumnIndex(_id)+ );pendingid = cursor.getInt(cursor.getColumnIndex(_id);6.7个人中心模块每个布局都有一个设置的界面,点击进去该Acttivity图6.7 个人中心图主要代码(截取头像图片)private void showDialog() new AlertDialog.Builder(mActivity).setTitle(设置头像).setItems(items, new DialogInterface.OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) switch (which) case 0:Intent intentFromGallery = new Intent();intentFromGallery.setType(image/*); / 设置文件类型intentFromGallery.setAction(Intent.ACTION_GET_CONTENT);startActivityForResult(intentFromGallery,IMAGE_REQUEST_CODE);break;case 1:Intent intentFromCapture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);/ 判断存储卡是否可以用,可用进行存储if (Tools.hasSdcard() intentFromCapture.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(new File(Environment.getExternalStorageDirectory(),IMAGE_FILE_NAME);startActivityForResult(intentFromCapture,CAMERA_REQUEST_CODE);break;).setNegativeButton(取消, new DialogInterface.OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) dialog.dismiss();).show();6.8反馈信息界面摆放布局实现界面显示图6.8 反馈信息图主要代码 6.9应用分享模块暂未开发6.10应用推荐模块暂未开发6.11关于我们界面摆放布局实现界面显示图6.9 关于我们界面图主要代码 6.12设置模块设置界面包含两大功能(通知栏常驻,清除缓存)图6.10 设置界面图主要代码(通知栏开关 清除缓存)manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);/ 创建一个通知的管理类PendingIntent contentIntent = PendingIntent.getActivity(SetActivity.this, 0, intent, 0);builder.setContentIntent(contentIntent);builder.setContentTitle(7DayToDo);builder.setContentText(点击进入应用);builder.setTicker(有通知来了);/ 第一次出现在状态栏的内容builder.setSmallIcon(R.drawable.ic_launcher);Notification notification = builder.build();/ 仅仅限于在高版本4.1中使用manager.notify(1000, notification); else manager.cancel(1000);public class DataCleanManager /* * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache) * * param context */public static void cleanInternalCache(Context context) deleteFilesByDirectory(context.getCacheDir();/* * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases) * * param context */public static void cleanDatabases(Context context) deleteFilesByDirectory(new File(/data/data/+ context.getPackageName() + /databases);第7章 应用测试需要完成页面数量 28个实际完成页数 16个发现BUG 4个 清除缓存不够彻底 线程没有结束掉 设置头像相机无法截图 通知栏开启容易被清掉 警告框未完成失去焦点事件 小 结顾飞:其实刚开始接手这个实训的时候,觉得难度挺大的,因为之前我们根本就没做过什么有关联的一些东西,一开始就遇到了个瓶颈,也许这是一个必然的过程,但到后面发现这是一个渐进学习的过程,安卓编程到后面有很多有趣的东西,比如xml的编写 传感器 几种轻量级的存储方式,整个项目都能够看懂什么意思,写起代码时也比较轻松,由于是用的第三方开源框架,一开始设计的时候是毫无头绪,不知道怎么改,没有了解过fragment(碎片)的使用,到后来,渐渐的了解了它的生命周期,感觉上比activity更好用,实训快完成了,这是一个积累经验的过程,第一次做手机上的软件,虽然还没用到网络编程,但也挺有成就感的,好好学习吧,无论是在美工,还是在代码编写上都必须更上一层楼!朱冰雪:感谢组长的辛勤指点,老师的严谨细致、一丝不苟的作风将会是我以后工作、学习中的榜样;他们循循善诱的教导和不拘一格的思路给予我无尽的启迪。我由衷的感谢他们给予我的帮助。在这五周的学习中,我们学会了充分的了解了自己的学习能力,针对拟完成项目的设计功能要求与工艺规范,查阅资料,了解相关知识或技术情况,主动参与团队各阶段的讨论,表达自己的观点以及意见,在程序设计阶段出现了程序错误,最终在小组的讨论下解决了问题,充分的加强了小组的团队合作能力,在学习过程中,刻苦认真,在关键问题时小组组员激烈讨论,在问题上下功夫,充分发挥自己的主动性,创造性的解决问题,并培养自己在整个过程中的团队合作能力,与团队协作意识.在这次实训中,我主要负责的是作为组长的助手,帮组长做页面的功能和实训报告。一开始的学习中,总是出现很多错误,不够顺利,对很多知识点也不了解,但是找来很多书籍,上面都有资料,认真的看书,看看别人的代码,试着学习,慢慢的就开始经手了,实在不行的,就上网查资料,网上的资料真是无穷无尽的,让我大饱眼福,也学习了很多,最后,加上组长和组员的努力,实训项目7DayToDo落实了。我十分感谢学校在这一学期给我们安排了这样一个十分有意义的实训,让我们在新学期能有一个新的起点,好的开始。相信在新的一学期里,只要我们更加努力,不放松,一定会取得一个令人满意的好成绩!张慧敏:不知不觉,五周的实训已接近尾声,这学期也就在不知不觉中悄悄过去了。通过五周的android实训,基本掌握了Android应用程序开发的一般流程。对常用控件基本掌握其用法,对其事件的监听方法也基本掌握。学习Android不仅是对前沿开发技术的了解,也是对编程知识的一次提升。 通过学习Android的控件、布局、Activity、Service等一系列基础知识,对整个Android的开发有了大致的了解。例如: 要的布局(或者控件) ,在学习界面中,我发现Android为我们提供了很好的类似反射机制,通过Layout文件夹下的配置文件,可以

温馨提示

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

评论

0/150

提交评论