版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、移动设备平台开发app开发详解项目名称: 日历系统 院 系: 计算机学院 专业班级: xxxx 学 号: xxxxxxx 学生姓名: xxx 目录移动设备平台开发1一、系统功能需求分析31.1 系统登录功能31.2 功能需求描述31.3 界面需求描述41.4运行需求描述41.5可行性分析4二、系统分析与设计62.1系统功能结构62.2 系统界面布局6三、系统实现83.1 实现系统的关键技术83.2 界面83.关键代码介绍133.1 日历显示activity133.2 创建菜单133.3 左右滑动屏幕133.4跳转到今天143.5显示/修改所有日程的activity163.6日期转换17四、总结
2、与展望19五、参考文献20一、 系统功能需求分析随着信息时代的到来,越来越多的新技术正在不断的给人们的日常生活带来很大的便利,手机等一些移动设备也成为了现代生活必不可少的一样生活工具。android系统凭借其良好的用户体验、低廉的成本及高开放性产生了巨大的应用量和广阔的应用面。如今,基于android系统的应用极为丰富,从输入法到影音播放器,从系统工具到网页浏览器,从社交网络客户端到学习办公助手工具,以及形式繁多的游戏应用,都有力体现了android平台的强大的适应性和发展潜力。 而日历应用作为智能终端的出厂必备控件,更是android系统中不可或缺的一部分。而应用开发商力求为客户带
3、来更好的用户体验,将日历这一原本普通的生活用品打造成植于移动终端中的生活助手,且界面风格迥异,功能也是趋于多样化和一体化。设计并实现一款基于android平台的日历系统,具备基本的日期显示功能;能够显示公历、农历、星期、节日等;并提供日程记事本功能。要求该系统能够在真机上顺利安装并运行。 1.1 系统登录功能本功能可进行权限的区分,使管理员和图书借阅者都可使用本系统,并根据角色的不同,具有不同的界面和功能。1.2 功能需求描述 该系统除实现基本的日历功能之外,还有附加的插件以满足用户需求。 (1)可以使用户查看当天日期为何年何月何日、当天是星期几、阴历日期为多少。
4、;(2)可满足用户对于是否闰年、闰几月、生肖年、干支年的查询需求。 (3)用户能够获的具体日期的节日信息,包括国际节日与中国传统节日。 (4)为用户提供日程管理功能,允许在指定日期下添加、查询、删除、修改提醒事件。 (5)可快速将用户指定的公历日期转换为农历日期。 (6)可快速跳转到用户想要查看的日期。 (7)提供当天日期定位功能。1.3 界面需求描述 用户界面(user interface,简称ui)是软件的重要部分。用户通过ui来得到服务,后台的代码结构往往与用户的直观体验关系不大,故用户界面的成功与否直接关系到用户软件的满意度1
5、2。 (1) 界面应布局合理,简洁大方,使用户对于日期信息一目了然. (2)当天日期应特殊显示,使用户能够方便快捷地得知当天信息。 (3)本月日期与非本月日期应区别显示。 (4)允许用户左右滑动屏幕来跨月查询。 1.4运行需求描述该系统应能够在虚拟机上和真机上顺利安装、运行、卸载;应保证运行流畅,不卡机不死机;能够适应不同智能终端的多种设备屏幕。 1.5可行性分析可行性分析的目标是用最小的代价尽快确定问题是否能够解决,以避免盲目投资带来的巨大浪费。所以应该使用先进科技技术开发方便省时的基于android的日历系统,android是基于
6、用java语言开发7。不仅能够提高相关人员的工作效率和降低成本,而且能够减少易出现的错误。我所设计的基于android的日历系统主要有以下几点优势:1、经济可行性经济可行性研究是对组织的经济现状和投资能力进行分析,对系统建设运行和维护费用进行估算,对系统建成后可能取得的社会和经济效益进行估计。很多的开发环境都可以在网上收索完成,一些功能的源代码也可以在网上找到,加以修改既可以完成。因而在经济上的投入不算多,而系统设计完成后既可以投入使用,在使用的时候只需将软件安装在手机或平板等移动设备上即可投入使用,完全不需要其他的经济消耗。当系统投入运行后可以为学校或者相关部门节约大量的人力、物力,其所带来
7、的效益也会远远的大于系统软件的开发成本费用。因此,因此,在经济上是可行的8。2 、技术可行性要求利用现有的设备、软件及技术人员,看是否能够达到目标,这是技术可行性研究中要考虑的一个问题。本次要开发的日历系统是基于android的系统,java语言是一种面向对象的编程语言,也是当今社会中最流行的一门语言利用这些工具软件既可以轻松完成日历系统的设计与开发。因此,本次基于android的日历系统的项目开发在技术上是绝对可行的。3 、社会可行性随着数据化、信息化技术的迅速发展,当今社会人们利用手机等移动设备来管理信息也已经发展成为了一种导向和趋势。所以开发本系统的目标不仅可以提高工作效率,减轻劳动强度
8、,而且还会提高准确率,具有很好的社会意义10。因此,本项目的设计和开发是具有一定的社会可行性的。综上所述,开发本次基于android的日历系统从经济上、技术上以及社会上都是完全可靠的。二、 系统分析与设计2.1系统功能结构该日历系统以显示当月日期及年月日等信息的主界面为主,通过intent触发日程管理界面、公农历转换控件、当天日期定位菜单、日期跳转项。功能结构如2-1所示。 日历系统显示当前日期
9、菜单功能当前日期日程管理界面指定日期跳转当前日期定位闰年生肖干支星期公历转换农历 图2-1 日历系统功能结构 2.2 系统界面布局 本日历系统的主界面采用线性布局(linear layout)与列表视图(gridview)相结合的界面构造。图2-2为主界面的简要布局。view_calender_day_call.xmlactivity_main.xmlview_calender.xmltitleborpagetablelayoutmeekindexday cells ares图2-2 主界面布局示意三、 系统实现3.1 实现系统的关键技术根
10、据第一章所设计的android应用软件系统功能框架和界面的设计,分析出实现这些功能和界面所需的各个关键的技术点,并深入研究这些关键技术点,这些技术点包括:(1)android的xml文件的编码规则;(2)系统各种界面布局的实现方式;(3)系统中activity的创建以及activity间的自由切换;(4)sqlite数据库的使用;(5)使用信息提示框的弹出;(6)以及图片资源的加入。下面举例介绍数据库的关键技术:sqliteopenhelper类是android下操作sqlite的内部实现类,它封装了大部分函数和操作数据库的具体功能,帮助创建数据库和数据库版本管理。使用必须创建一个子类来实现其
11、oncreate(sqlitedatabase), onupgrade(sqlitedatabase, int, int)方法,同时任意实现onopen(sqlitedatabase)方法,同时打开数据库操作必须保证数据库存在,如果不存在则创建它,并且对其必要的升级,维护其保持一个最佳的状态。使用本类提供内容开始创建数据库是非常容易的,首先必须对数据库进行升级,以避免在数据库启动后长期使用而阻塞数据。3.2 界面3.2.1 主界面主界面主要提供日期信息显示,默认显示当前日期所在的月份,标注当前的日期。显示星期、农历日期及节假日。允许呼出菜单栏,并支持左右滑动。如图3-1所示。 图3-1 主界面
12、3.2.1 菜单项目操作 菜单栏包含四项功能操作;当今日期定位、指定日期跳转、日程管理以及公农历转化。如图3-2所示。 图3-2 菜单项目操作 (1)定位至今天日期。在查看某一时间的日历后,通过这一菜单键迅速定位到今天的日期。 (2)指定日期跳转。快速查询该天的月份。如图3-3所示。 图3-3 跳转(3) 日程。查看当前日历所定位日期的日程安排,及编辑日程。 如图3-4 当前无日程。 图3-4 当前无日程 图3-5 添加日程 图3-5 添加日程 图3-6 所有日程 图3-6 所有日程(4) 日期转换。输入一个阳历的日期,转化为农历的日期。如图3-6 日期转换。 图3-6 日期转换3.3关键代码
13、介绍3.1 日历显示activity public void addtexttotoptextview(textview view)stringbuffer textdate = new stringbuffer();draw = getresources().getdrawable(r.drawable.top_day);view.setbackgrounddrawable(draw);textdate.append(calv.getshowyear().append("年").append(calv.getshowmonth().append("月"
14、).append("t");if (!calv.getleapmonth().equals("") && calv.getleapmonth() != null) textdate.append("闰").append(calv.getleapmonth().append("月").append("t");textdate.append(calv.getanimalsyear().append("年").append("(").append
15、(calv.getcyclical().append("年)");view.settext(textdate);view.settextcolor(color.black);view.settypeface(typeface.default_bold);3.2 创建菜单public boolean oncreateoptionsmenu(menu menu) menu.add(0, menu.first, menu.first, "今天");menu.add(0, menu.first+1, menu.first+1, "跳转");m
16、enu.add(0, menu.first+2, menu.first+2, "日程");menu.add(0, menu.first+3, menu.first+3, "日期转换");return super.oncreateoptionsmenu(menu);3.3 左右滑动屏幕 public boolean onfling(motionevent e1, motionevent e2, float velocityx,float velocityy) int gvflag = 0; /每次添加gridview到viewflipper中时给的标记if
17、 (e1.getx() - e2.getx() > 120) /像左滑动addgridview(); /添加一个gridviewjumpmonth+; /下一个月calv = new calendarview(this, getresources(),jumpmonth,jumpyear,year_c,month_c,day_c); gridview.setadapter(calv); /flipper.addview(gridview); addtexttotoptextview(toptext); gvflag+; flipper.addview(gridview, gvflag);
18、this.flipper.setinanimation(animationutils.loadanimation(this,r.anim.push_left_in);this.flipper.setoutanimation(animationutils.loadanimation(this,r.anim.push_left_out);this.flipper.shownext();flipper.removeviewat(0);return true; else if (e1.getx() - e2.getx() < -120) /向右滑动addgridview(); /添加一个grid
19、viewjumpmonth-; /上一个月calv = new calendarview(this, getresources(),jumpmonth,jumpyear,year_c,month_c,day_c); gridview.setadapter(calv); gvflag+; addtexttotoptextview(toptext); /flipper.addview(gridview); flipper.addview(gridview,gvflag); this.flipper.setinanimation(animationutils.loadanimation(this,r
20、.anim.push_right_in);this.flipper.setoutanimation(animationutils.loadanimation(this,r.anim.push_right_out);this.flipper.showprevious();flipper.removeviewat(0);return true;return false;3.4跳转到今天 public boolean onmenuitemselected(int featureid, menuitem item) switch (item.getitemid() case menu.first: /
21、跳转到今天 int xmonth = jumpmonth; int xyear = jumpyear; int gvflag =0; jumpmonth = 0; jumpyear = 0; addgridview(); /添加一个gridview year_c = integer.parseint(currentdate.split("-")0); month_c = integer.parseint(currentdate.split("-")1); day_c = integer.parseint(currentdate.split("-
22、")2); calv = new calendarview(this, getresources(),jumpmonth,jumpyear,year_c,month_c,day_c); gridview.setadapter(calv); addtexttotoptextview(toptext); gvflag+; flipper.addview(gridview,gvflag); if(xmonth = 0 && xyear = 0) /nothing to do else if(xyear = 0 && xmonth >0) | xyear
23、 >0) this.flipper.setinanimation(animationutils.loadanimation(this,r.anim.push_left_in);this.flipper.setoutanimation(animationutils.loadanimation(this,r.anim.push_left_out);this.flipper.shownext(); else this.flipper.setinanimation(animationutils.loadanimation(this,r.anim.push_right_in);this.flipp
24、er.setoutanimation(animationutils.loadanimation(this,r.anim.push_right_out);this.flipper.showprevious(); flipper.removeviewat(0); break; case menu.first+1: new datepickerdialog(this, new ondatesetlistener() overridepublic void ondateset(datepicker view, int year, int monthofyear,int dayofmonth) /190
25、1-1-1 -> 2049-12-31if(year < 1901 | year > 2049)/不在查询范围内new alertdialog.builder(calendaractivity.this).settitle("错误日期").setmessage("跳转日期范围(1901/1/1-2049/12/31)").setpositivebutton("确认", null).show();elseint gvflag = 0;addgridview(); /添加一个gridview calv = new cal
26、endarview(calendaractivity.this, calendaractivity.this.getresources(),year,monthofyear+1,dayofmonth); gridview.setadapter(calv); addtexttotoptextview(toptext); gvflag+; flipper.addview(gridview,gvflag); if(year = year_c && monthofyear+1 = month_c) /nothing to do if(year = year_c && m
27、onthofyear+1 > month_c) | year > year_c ) calendaractivity.this.flipper.setinanimation(animationutils.loadanimation(calendaractivity.this,r.anim.push_left_in); calendaractivity.this.flipper.setoutanimation(animationutils.loadanimation(calendaractivity.this,r.anim.push_left_out); calendaractivi
28、ty.this.flipper.shownext(); else calendaractivity.this.flipper.setinanimation(animationutils.loadanimation(calendaractivity.this,r.anim.push_right_in); calendaractivity.this.flipper.setoutanimation(animationutils.loadanimation(calendaractivity.this,r.anim.push_right_out); calendaractivity.this.flipp
29、er.showprevious(); flipper.removeviewat(0); /跳转之后将跳转之后的日期设置为当期日期 year_c = year;month_c = monthofyear+1;day_c = dayofmonth;jumpmonth = 0;jumpyear = 0;,year_c, month_c-1, day_c).show(); break;3.5 显示/修改所有日程的activity public class scheduleall extends activity private scrollview sv = null;private linearla
30、yout layout = null;private bordertextview texttop = null;private scheduledao dao = null;private schedulevo schedulevo = null;private arraylist<schedulevo> schlist = new arraylist<schedulevo>();private string scheduleinfo = ""private final linearlayout.layoutparams params = new
31、linearlayout.layoutparams(layoutparams.fill_parent, layoutparams.wrap_content);private int scheduleid = -1;overrideprotected void oncreate(bundle savedinstancestate) / todo auto-generated method stubsuper.oncreate(savedinstancestate);dao = new scheduledao(this);sv = new scrollview(this);params.setma
32、rgins(0, 5, 0, 0);layout = new linearlayout(this); / 实例化布局对象layout.setorientation(linearlayout.vertical);layout.setbackgroundresource(r.drawable.schedule_bk);layout.setlayoutparams(params);texttop = new bordertextview(this, null);texttop.settextcolor(color.black); texttop.setbackgroundresource(r.dra
33、wable.top_day);texttop.settext("所有日程");texttop.setheight(47);texttop.setgravity(gravity.center);layout.addview(texttop);sv.addview(layout);setcontentview(sv);getscheduleall();/* * 得到所有的日程信息 */public void getscheduleall()schlist = dao.getallschedule();if(schlist != null)for (schedulevo vo :
34、 schlist) string content = vo.getschedulecontent();int startline = content.indexof("n");if(startline > 0)content = content.substring(0, startline)+"."else if(content.length() > 30)content = content.substring(0, 30)+"."scheduleinfo = calendarconstant.sch_typevo.get
35、scheduletypeid()+"n"+vo.getscheduledate()+"n"+content;scheduleid = vo.getscheduleid();createinfotext(scheduleinfo, scheduleid);elsescheduleinfo = "没有日程"createinfotext(scheduleinfo,-1);/* * 创建放日程信息的textview */public void createinfotext(string scheduleinfo, int scheduleid
36、)final bordertextview info = new bordertextview(this, null);info.settext(scheduleinfo);info.settextcolor(color.black); info.setbackgroundcolor(color.white);info.setlayoutparams(params);info.setgravity(gravity.center_vertical);info.setpadding(10, 5, 10, 5);info.settag(scheduleid);layout.addview(info)
37、;/点击每一个textview就跳转到shceduleinfoview中显示详细信息info.setonclicklistener(new onclicklistener() overridepublic void onclick(view v) string schid = string.valueof(v.gettag();string scheduleids = new stringschid;intent intent = new intent();intent.setclass(scheduleall.this, scheduleinfoview.class);intent.pute
38、xtra("scheduleid", scheduleids);startactivity(intent););3.6 日期转换 public class calendarconvert extends activity private lunarcalendar lc = null;private bordertextview convertdate = null;private bordertextview convertbt = null;private textview lunardate = null;private int year_c;private int
39、month_c;private int day_c;public calendarconvert()lc = new lunarcalendar();overrideprotected void oncreate(bundle savedinstancestate) / todo auto-generated method stubsuper.oncreate(savedinstancestate);setcontentview(r.layout.convert);convertdate = (bordertextview) findviewbyid(r.id.convertdate);con
40、vertbt = (bordertextview) findviewbyid(r.id.convert);lunardate = (textview) findviewbyid(r.id.convertresult);intent intent = getintent();int date = intent.getintarrayextra("date");year_c = date0;month_c = date1;day_c = date2;convertdate.settext(year_c+"年"+month_c+"月"+da
41、y_c);convertdate.setonclicklistener(new onclicklistener() overridepublic void onclick(view v) new datepickerdialog(calendarconvert.this, new ondatesetlistener() overridepublic void ondateset(datepicker view, int year, int monthofyear,int dayofmonth) if(year < 1901 | year > 2049)/不在查询范围内new alertdialog.builder(calendarconvert.this).settitle("错误日期").setmessage("跳转日期范围(1901/1/1-2049/12/31)").setpositivebutton("确认", null).show();e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 下一步工作计划简短
- 2024年中图版高二上学期期末地理试题与参考答案
- 预防校园欺凌总结
- 心脑血管监测个人工作总结
- 小学消防安全集中除患攻坚大整治工作总结
- 幼儿园升旗手发言稿
- 教师家访制度在家校合作中的作用
- 水利工程钢筋连接施工方案
- 现代商务谈判(第2版)课件 项目八 识变从宜 克敌制胜
- 纳税计缴与申报(第四版)课件12.3企业税务风险应对策略(上)
- 抑郁症和抑郁情绪课件
- 经期延长1课件
- 生物医学传感-生物传感器课件
- 安全警示标示牌整方案
- 三年级数学单位换算练习题
- 同仁堂-老字号的营销典范案例分析课件
- 质量员培训教程(质量标准)课件
- 护理对讲系统施工技术方案
- STCW公约马尼拉修正案(中文译稿草稿)
- 园林空间设计课件
- 医院手术室进修汇报课件
评论
0/150
提交评论