毕业论文-基于android的万年历的设计与开发.doc_第1页
毕业论文-基于android的万年历的设计与开发.doc_第2页
毕业论文-基于android的万年历的设计与开发.doc_第3页
毕业论文-基于android的万年历的设计与开发.doc_第4页
毕业论文-基于android的万年历的设计与开发.doc_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

中北大学信息商务学院2016届毕业设计说明书中北大学信息商务学院毕业设计说明书基于android的万年历的设计与开发 学生姓名:2016年 05 月21日第 1页 /共 39页原创性声明本人郑重声明:所呈交的毕业设计说明书/毕业论文,是本人在指导教师的指导下,独立进行研究所取得的成果。除文中已经注明引用的内容外,本文不包含其他个人或集体已经发表或撰写过的科研成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本声明的法律责任由本人承担。作者签名: 日期: 使用授权声明本人完全了解中北大学信息商务学院有关保管、使用毕业设计说明书/毕业论文的规定,其中包括:学院有权保管、并向有关部门送交毕业设计说明书/毕业论文的原件与复印件;学院可以采用复印、缩印或其他复制手段复制并保存毕业设计说明书/毕业论文;学院可允许毕业设计说明书/毕业论文被查询或借阅;学院可以学术交流为目的,复制赠送和交换毕业设计说明书/毕业论文;学院可以公布毕业设计说明书/毕业论文的全部或部分内容。作者签名: 日期: 导师签名: 日期: 中北大学信息商务学院2016届毕业设计说明书基于android的万年历的设计与开发摘要:社会的快速进步,科技不停的发展,互联网的巨大跨越,智能手机已经在人们的生活起居占了很大的成分,人们可以通过智能手机查找自己所需物品,生活的快节奏,人们需要一个可以每时每刻都可以掌握日期,节日,日程安排等重要事情的手机软件,Android版电子万年历鉴于此情况而开发出来。但部分万年历的功能单调,需开发一种功能强大、实用性强的软件。本课题设计的万年历操纵java语言、Android平台和eclipse工具等,通过万年历的算法实现需求的功能。本系统界面优美、操作快捷,具有良好的可扩展性。经过测试,能够满足手机用户的基本需求。关键字:Android平台;万年历算法;eclipseI中北大学信息商务学院2016届毕业设计说明书Android-based calendar design and developmentAbstract: The rapid progress of the society, technology does not stop the development, the Internet is a huge leap, smart phone has in peoples living accounted for large components, people can through intelligent mobile phone to find their required items, the fast pace of life, people need a every hour can master the date, festivals, scheduling and other important things of mobile phone software, version of the Android electronic calendar in view of this situation developed. But part of the calendar to develop a monotonous, powerful and practical software. This topic is the design of the calendar control Java language, the Android platform and the eclipse tools etc. Through the calendar algorithms achieve the demands of function. The system has a beautiful interface, fast operation and good expansibility. After testing, to meet the basic needs of mobile phone users.Keywords: Android; calendar algorithm;eclipseII目 录摘要Abstract目录11 引言11.1 研究的背景和意义11.2 研究内容11.3 预期功能11.3.1 功能强大11.3.2 操作方便12 关键性技术22.1.1 应用层(Application)22.1.2 应用框架层22.1.3 系统运行库层32,1,4 Linux内核层32.2 Android系统组件32.2.1 Activity 简介42.2.2 Service 简介42.2.3 Broadcast Receiver 简介42.2.4 ContentProvider简介42.3 Android主要控件42.3.1 EditText42.3.2 CheckBox52.3.3 DatePicker,TimePicker52.3.4 ImageView/ImageButton53 需求分析63.1 系统需求63.2 技术需求63.3 维护需求63.4 安全需求63.5 系统可行性分析63.5.1经济的可行性63.5.2 技术的可行性73.5.3 社会条件的可行性83.5.4 市场条件的可行性84 概要设计94.1 设计思想94.2 功能需求94.2.1 系统业务用例分析94.2.2 Android万年历需要实现功能104.3.1 主界面设计104.3.2 手机菜单104.3.3 日历菜单104.3.4 查询菜单104.3.5 星座界面104.3.6 解梦菜单114.3.7 记事本菜单115 详细设计与系统实现125.1.1 Main.xml文件中控制基本布局125.1.2 程序代码中的绘制125.2菜单界面的实现135.3功能实现流程155.3.1第一次进入程序155.3.2用户操作165.4 阳历算法185.5 阴历算法205.6 节日查看界面235.7 日期查看界面255.8 日记功能276 系统测试与运行316.1 测试概述316.1.1 测试意义316.1.2 编写的目的316.1.3 测试范围316.2 测试内容316.2.1 内容与功能测试316.2.2 容错性和易用性测试316.3 具体测试316.3.1 测试过程316.3.2 测试结果32参考文献34致谢35第 3页 1 引言1.1 研究的背景和意义 在互联网的时代,消息的快速传播,人们时时刻刻的掌握着不同的信息,人们对消息的需求、准确加大力度。人们对时辰、日期的精确性有更大的需求。传统的日历不能满足现在信息传播速度的要求,手机多功能的万年历于此诞生。大大方便了人们的生活对时间的关注,提高了人们对事件的了解及其准确的完成。 随着21世纪移动互联网高速成长的时代,人们操纵智能手机来查看信息、上网等,随时随地的掌握着私人的日程安排、日期、时间等等重要的事情。本课题所做的万年历是一个为用户提供日期的工具软件,具有中国传统阴历、节日、星座、提醒等功能。Android作为智能机的手机的操作系统,Android市场也据有很大的比例,这个软件也具备一定的市场价值。1.2 研究内容 本次设计为了完成用户的需求,从而设计出一款对日期安排等的程序,面对这样的程序设计,本文详细的简绍了设计的开始到设计的结束,讲解了设计的思路,如何开发等过程。1.3 预期功能1.3.1 功能强大除了万年历的基本功能(查看日期)外,还实现了农历阴历显示、年份干支、日期查询、星座、日志、提醒等功能。1.3.2 操作方便对于Android手机用户来说,本软件使用方便简单,功能简洁,界面优美,大大减少了用户的操作难度。2 关键性技术2.1 Android的体系机构 在android的操作系统中,将Android系统中,将基本体系分为五层;应用程序(Application)、应用程序框架(Application Framework)、系统运行层(Library)、android执行环境(Android Runtime)、Linux核心(Linux Kernel)。2.1.1 应用层(Application)应用层是和用户交互的一个结构层次,用户可以观察到应用程序,用户可以具体操纵。这种应用都是通过java语言编写的,可以自己完成的某些功能的应用程序。Android本身提供了桌面(Home),联系人(Contacts),拨打电话(Phone),浏览器(Browsers)等基础程序。程序员可以通过使用应用框架供应的API编写自己所想、所需要的程序,扩展应用的功能,为更多的消费者,提供更好、更便捷、更理性的服务。2.1.2 应用框架层(Application Framework)程序员利用供给的API,将自己完成的应用程序发布的功能,可以为其他程序所应用。设计过程中常用到的基本框架组件如下;1. 一组View(UI 组件),这些UI组件包含ImageView,DigitalClock,LinearLayout,HorizontalScrollView等等,灵活运用这些组件可以便捷方便的创建精彩的用户界面。2. Content Providers(内容提供者),通俗的理解Content Provider等于提供一种服务,通过这种服务能使各个应用程序之间的数据可以共享和访问。3. Resource Manager 通过了解便是Android的资源管理,android中的资源类型很多,如:字体、颜色、影视等。都是由它管理的。4. Notification Manager(消息通知管理),它在不影响用户正常使用和使用设备的时间在状态栏上提醒消息。例如:程序提醒消息,后台自动会将这个消息显示在状态栏上,用户可以实时的看到。5. Activity Manager(活动管理),用来管理应用程序的开始到结束,并提供程序的实现展示的引导作用和退出返回主界面的作用。 6. Window Manager(窗口管理),对于手机启动的窗口进行统一管理。 7. Location Manager(位置管理),为使手机的软件可以使用地图功能。 8. Telephoney Manager(电话管理),对电话的相关功能进行管理。 9. Package Manager(包管理),处理所有的安装在android系统内的应用程序,可以获取安装程序部分重要关键的信息。2.1.3 系统运行库层(Libraries) 系统运行库层涉及底层,设计普通的应用程序不会直接对这个底层进行操作。这层中包括了一组类库(Libraries)和运行时(RunTime)。1. 媒体库(Media Framework)可以播放我们常使用的音频格式和视频格式,也可以支持我们对图像的查看。编码格式包括:MPEG4、H.264,MP3、AAC、AMR、JPG、PNG。2. SGL 底层的2D图形引擎。3. OPENGL|ES,可以使用硬件3D加速或者利用高度优化的3D软加速。4. SQLite,智能手机中功能强大的轻量级数据库5. Core Libraries提供了Java语言的大部分功能。6. Dalvik VM,android平台的一个虚拟机,给设计者提供了很大的方便。2.1.4 Linux内核层(Linux Kernel) 1. 安全性(Security)。2. 内存管理(Memory Management)3. 进程管理(Process Management)4. 网络堆栈(Network Stack)5. 驱动程序模型(Driver Model)对android的整体架构有一定的理解后,对于理解android的一些机制和应用创造开发有很大的机会,只有真正理解了android框架才能更好的利用android提供的功能和服务设计出符合消费者心意的软件。2.2 Android系统组件Android的四大组件:活动-Activity、广播接收器-Broadcast Receiver、服务-Service和内容提供器-Content Provider。确定要应用的组件,应该在AndroidMani-fest.xml中列出,它是XML配置文件,可定义程序中组件的必要条件及功能。最基本的组件就是Activity,每一个软件的开发都离不开Activity。活动类可以显示通过视图控件构成的用户接口,同时就事件发出响应;广播接收器能够使应用程序就外部事件发出响应,服务在Android中拥有比较长的生命周期;内容提供器是对外提供数据的一个借口,根据标准开放出接口,使另外的应用取得数据。2.2.1. Activity 简介Android开发中Activity是必不可少的部分。一个完整的软件程序中Activity是离不开的,它可以展示用户需求的画面,通过代码实现界面与界面之间的转换。一个程序的开始到回到手机主界面,关闭手机软件,这便是Activity生命周期。2.2.2. Service 简介Service便是运行在Android后台中的服务,但是没有可供程序员查看的页面,所以当我们需要定义一个Service类,只需要继承定义好的Service类,继承和实现方法就可以了。定义一个Service必须在AndroidM anifest.xml配置文件注册,通过声明才能使用.Service有自己的完整的生命周期。2.2.3. Broadcast Receiver 简介Broadcast Receiver 我们称之为广播接收器,BroadcastReceiver是对发送出来的广播进行过滤接收并响应的一类组件。我们可以在你的应用程序中实现Broadcast Receiver来监听和响应这些广播的消息之间的传递。2.2.4. ContentProvider简介Content Provider 用来保留和检索数据,而且彼此使应用程序之间相互访问数据成为可能。它是应用程序共享数据的一种好的方法。Android 为常用的数据类型(如;音视频、图片和联系方法等)提供了大量的Content Provider。它们被定义在vider包下面。利用这样定义好的ContentProvider 我们可以便捷的进行数据操作。当然我们必须拥有适当的权限。2.3 Android主要控件2.3.1. EditText、 setText/getText 设置/获取文本内容 setHint 设置缺省显示内容 2.3.2. CheckBoxisChecked()判断是否被选中setOnCheckedChangeListener方法监视选中状态改变情况getSelectedView ()2.3.3. DatePicker,TimePicker 1) DatePicker2) TimePicker3) 获取系统当期时间和日期Calendar.getInstance()返回Calendar 2.3.4. ImageView/ImageButton setImageResource 设置显示图片3.需求分析3.1 系统需求 Android系统的智能手机几乎走进每一个人的手中,Android版电子万年历的使用对象大部分便是Android手机用户群体,Android系统可以满足大部分Android用户的需要,生活的快节奏带动着人们对时间更加看重,手机万能历的需求也是非常重要的。3.2 技术需求系统技术的先进性:Android版电子万年历利用移动终端安卓系统,利用分层设计的原则。需要设计人员熟悉Java编程语言和Android开发思路。并且对万年历的算法有深刻的了解和升入的考虑,并对Android界面编写要熟练使用,对Sqlite数据库和Xml解析技术都有很好的基础。3.3 维护需求系统的易维护性:此软件是一款客户端手机程序,有新版本的程序版本的时候服务器端会自动通知客户端更新,在进行程序的系统维护时候,只需要把最新软件放到服务器端,客户端会自动下载,减少了维护的成本和破坏。3.4 安全需求系统的安全性:本系统由于是一款手机日常软件,对安全性的要求比较低,数据库方面,主要针对本地数据库操作,不涉及和服务器数据交换,所以而对数据的安全性要求比较低。3.5 系统可行性分析开发任何一个软件,都会受到时间和资源上的限制。因此,在每一个项目发之前,都要进行实际利益的分析,可以减少项目的开发出现的突发情况,避免人力和财力的浪费。下面就以下几个个方面来介绍:3.5.1经济的可行性本软件开发在经济上需求比较低,只需要一台开发用的电脑和模拟器就可以了。开发周期比较短,经济上需求低。3.5.2 技术的可行性 本次设计的软件主要采用Java编程语言在eclipse工具,结合Android的API作为参考,进行设计的一款智能程序,其中的Java语言具有许多的特点,如:1. 面向对象Java编程的设计完全是面向对象的,支持代码继承和重用,支持代码封装多态。2. 平台无关性计算机中装有Java运行系统(Java虚拟机)的机械都能执行程序。这些字节码指令需要由Java虚拟机来执行,Java虚拟机中的解释器在获取到字节码后,将其转换并执行,而不是由操作系统来执行。所以不论是Windows还是Linux, Java程序都可以直接运行。3. 分布式Java有一个支持TCP/IP网络库其中包括HTTP等,凭借地址应用程序可以打开我们指定的访问网络,从而拿到我们需要的资料,这样的访问方式和我们访问本地文件的方式几乎完全相同。用Java分布式环境尤其是Intent环境提供动态内容将会变得更加容易,更加清晰,便于操作。4. 稳定、安全Java的异常处理机制可以在程序编写运行时,帮助检查出许多开发出现的错误。Null指针检查数组边界,检测异常出口字节代码效验等java编程中出现的问题。因此Java对于大部分的开发者是容易了解和学习的基本语言,异常处理机制大大减少了设计开发Java应用程序所要的时间。在安全性方面,避免了由于操作不当而带来的编程问题。5. 多线程多线程的软件程序在设计的便捷和功能的快速使用,都会比单线程要更完善。你可以用一个单线程来查看一副图片,这时你可以访问网页里的其他信息,两个同时进行,使用者也可以使用线程锁进行单个运行。3.5.3 社会条件的可行性市场上手机应用设计开发种类繁多,涉及面广。本款软件界面设计清晰,简单易用,便于操作。3.5.4 市场条件的可行性简单易用,通俗易懂。程序运行安全。4 概要设计4.1 设计思想本软件设计以万年历功能为主体,整合多种方便应用的功能为辅,利用模块化的设计将各个功能整合为一个功能方便的类生活助手的应用。由于系统各个功能之间以低耦合的方式设计,之后的功能改变以及功能升级也可以方便的进行。也为功能的增加提供了便利,有较高的可扩展性。与此同时,程序各模块所需要的方法,放在不同功能的包内,各个类之间的关联较小。4.2 功能需求4.2.1 系统业务用例分析根据学习期间在课外学习的经历,用例分析是使用用例对整个设计软件的测评的需求方式。作为UML的一种重要表示方法,用例分析方法在系统程序分析过程中有着极其重要的地位;因此,正确的使用用例分析软件有助于本系统项目的需求分析、体系结构设计、进度安排、测试和验证。下面针对用户,使用用例图进行用例分析。从4-2-1图中我们可以看出,用户可以查看日期、写日志、查看周公解梦、查看星座等。 图4-2-1 功能业务图示4.2.2 Android万年历需要实现以下功能1. 日期、星期的查看功能:用户登录界面上可以看到当天的日期、星期。并能根据用户选择的日期查看这天的星期,阴历等。2. 定时提醒功能:用户利用自己记录好的日志,进行设置定时的提醒,到达定时的时间,手机会自动提醒。3. 周公解梦、星座、节日查看:用户可以随时通过手机查看周公解梦、各个星座时间和历史上重大节日。4.3功能模块设计4.3.1 主界面设计用户进入万年历的日期界面,当前的主界面上呈现为手机今日的日期和月份,并且当天的日期背景明显比起其他的时间更容易发现和区别,在当前的月份中可以发现阴历时间。用户可以利用上下年、上下月和今天的设计按钮,来查看不同的日期,可以利用按钮来查看从未来或者过去的日期。 4.3.2 手机菜单通过点击手机的菜单按钮,从弹出的菜单中选择不同的功能模块模块,选择不同的模块,调到自己想要点到的主界面。具体菜单包括:节日、查询、星座、解梦、记事本等。4.3.3 日历菜单过点击节日菜单,来到节日界面。在节日界面里面用户可以看到阳历节日,阴历节日,方便快捷。4.3.4 查询菜单点击查询菜单,跳到查询界面。在查询界面里面,用户可以通过查询时间,查询出用户所有需要的日期。4.3.5 星座界面点击星座界面,进入到星座界面。在星座界面里面用户可以通过选择自己的或者其他人的的星座,来查看不同星座的时间等相关内容。4.3.6 解梦菜单点击解梦菜单,转到解梦主界面。在解梦界面用户可以自己选择所梦到的事物,并参考事物的对照查看含义。4.3.7 记事本菜单用户点击当天的日期的记事本,转到记事本界面。在记事本界面用户可以添加日记。并且可以查看以往的日记内容。5.详细设计与系统实现本款软件设计简单,操作便捷。启动本软件,首先进入初始见面,稍等之后进入主程序界面,然后按手机菜单按钮进入主功能菜单界面,进行功能选择操作,不同的功能对应的不同界面,给人一种新的体验。本软件涉及的软件包有,如下:a) calendarUI包里面放所有关于UI的界面。b) utils工具包。c) year农历阳历装换。d ) sql数据库管理相关包。5.1界面设计与实现界面的绘制包含两个部分,一部分在Main.xml文件中;另一部分通过程序代码在程序运行中控制实现界面设计。5.1.1 Main.xml文件中控制基本布局通过布局,利用文本框,按钮等基本控件,通过控件我们所展示出来当前月份的当前日期的阴历和阳历,和展示在屏幕的按钮功能进行日期的改变。对控件添加监听事件,可以通过java监听,代码调用部件之间的联系,添加我们需要的内容。5.1.2 程序代码中的绘制通过代码动态绘制日期的机构,并展现出来。最开始通过public LinearLayout getLayout()函数掌控整个日期的布局,具体实现是:先通过屏幕的具体宽度,算出每行总共7个Textview的每一个的宽度,做7次轮回,把周日、周一、周二、周三、周四、周五、周六的标题显示上去。通过layout.addvView(layout1)添加到.xml文件的布局里面。layout.addView(getLayout1(j,k,sumOfSolarMonth);循环6次添加到.xml文件中去。getLayout1(j,k,sumOfSolarMonth)函数控制月份中每一天的控件的绘制。此中还包含控制每个月份的第一天是星期几,一个月的最大天数等的掌握。效果图如5-1-2 所示。图5-1-2 万年历主界面 5,2菜单界面的实现本次设计的万年历主菜单没有使用Android内置的菜单,而是通过重写菜单的方法实现了自己个性化的菜单。将弹出对话框设置为菜单,通过menuDialog.setView(menuview)方法设置菜单的布局。Meunview通过标准的View.infalte初始化出来。同时重写onKey()方法,实现菜单的弹出。菜单里面是通过GridView布局,并通过为GridView设置适配器来显示菜单的各个选项,并为GridView添加OnItemClickListener()事件实现各个菜单的点击事件,进而进入不同的操作界面。程序菜单控制的主要函数public void initMenu() 和public BooleanonMenuOpened(int featureId,Menu menu)程序主要代码如下:public void initMenu() menuView = View.inflate(this, R.layout.gridview_menu, null);/ 创建AlertDialogmenuDialog = new AlertDialog.Builder(this).create();menuDialog.setView(menuView);menuDialog.setOnKeyListener(new OnKeyListener() public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) if (keyCode = KeyEvent.KEYCODE_MENU)/ 监听按键dialog.dismiss();return false;);menuGrid = (GridView) menuView.findViewById(R.id.gridview);menuGrid.setAdapter(getMenuAdapter(menu_name_array, menu_image_array ););效果图如5-2所示。图5-2 菜单界面效果图 5.3功能实现流程5.3.1第一次进入程序用户在第一次进入程序软件主界面的时候利用java方法实现主界面的展现和星期、日期等的显示。Set()函数在第一次加载的时候调用获得系统当前的时间,并转换为当前的日期和农历日期,通过获得系统时间的函数实现当前系统的时间的调用。并通过Tools.getCurTime(time,”yyyy年MM月dd日”);通过字符串截取分别获得年月日,并转换为int类型。主要函数如下:solar.get_Solar_day_date(year, month);/返回每月第一天是星期几solar.daysOfMonth(year, month-1)返回每月的天数lunar.animalsYear()返回干支具体代码实现如下:public void set() linearLayout.removeAllViewsInLayout(); Long time = System.currentTimeMillis();/取得系统的当前时间 String currentTime = Tools.getCurTime(time, yyyy年MM月dd日); int year = Integer.parseInt(currentTime.substring(0, 4); int month = Integer.parseInt(currentTime.substring(5, 7); int day = Integer.parseInt(currentTime.substring(8, 10); Log.e(Year:, year+年+month+月+day+日); SolarYear solar =new SolarYear();/控制阳历的类 k = solar.get_Solar_day_date(year, month);/返回每月第一天是星期几 sumOfSolarMonth = solar.daysOfMonth(year, month-1); Calendar today = Calendar.getInstance();today.setTime(chineseDateFormat.parse(currentTime);Lunar lunar = new Lunar(today);tv1.setText(currentTime.subSequence(0, 8);linearLayout.addView(getLayout();bottom_tv.setText(农历+lunar.cyclical()+lunar.animalsYear()+年+lunar);textView.setText( year+-+month+-+day+ +lunar.cyclical()+lunar.animalsYear()+年+lunar);5.3.2用户操作用户在点击上一年、下一年、上一月、下一月的时间调用set1(int year,int month)方法实现界面上农历和阳历的显示。用户点击上一年、下一年、上一月、下一月的时间,先获得当前年份和月份,在通过月份加一、减一,年份加一、减一来控制。通过set1(int year,int month)实现界面上日期的显示。具体实现如下:public void set1(int year,int month) String currentTime = year+年 +month+月; currentMonth = month; currentYear = year; SolarYear solar =new SolarYear();/控制阳历的类 k = solar.get_Solar_day_date(year, month);/返回每月第一天是星期几 sumOfSolarMonth = solar.daysOfMonth(year, month-1); for(int i=1;i=42;i+) TextView tv = (TextView) findViewById(i); TextView tv2 = (TextView) findViewById(100+i); tv.setText(); tv2.setText(); if(i=m) tv.setBackgroundColor(0x00000000);/透明色 if(currentMonth=nowMonth¤tYear=nowYear) tv.setBackgroundColor(R.color.aqua); System.out.println(tv.getText(); int j=1; for(int i=1;i=k) if(j=sumOfSolarMonth) tv.setText(j+); j+; 5.4阳历算法阳历算法成功的展现了每个月的第一天是星期几,而且计算出这个月一共有多少天。判断闰年的算法是能被4整除但是不能被100整除的年份都是闰年;能被100整除同时能被400整除的额也是闰年。具体实现如下:Public int get_Solar_day_date(int gc_solar_calendar_year,int gc_solar_calendar_month)int temp01;start_day_of_week = 2;temp_total_day = 0;int calculate_temp = 1;for(temp01 = calculate_temp; temp01gc_solar_calendar_year; temp01+)if(temp01%4 = 0)start_day_of_week +=2;temp_total_day +=366;elsestart_day_of_week +=1;temp_total_day +=365;for(temp01 = 1;temp01gc_solar_calendar_month;temp01+)switch(temp01)case 1: case 3: case 5: case 7:case 8: case 10:case 12:start_day_of_week +=3;temp_total_day +=31;break;case 2:if(gc_solar_calendar_year%4 = 0)&(gc_solar_calendar_year!=200)start_day_of_week +=1; temp_total_day +=29;elsestart_day_of_week +=0; temp_total_day+=28;break;case 4: case 6: case 9:case 11:start_day_of_week +=2;temp_total_day +=30;break;start_day_of_week%=7;/System.out.println(gc_solar_calendar_year+年,+gc_solar_calendar_month+月,第一天是周+(start_day_of_week);return start_day_of_week;public int daysOfMonth(int gc_solar_calendar_year,int gc_solar_calendar_month)if(gc_solar_calendar_month=1)return(gc_solar_calendar_year%4 = 0) & (gc_solar_calendar_year%100 != 0) | (gc_solar_calendar_year%400 = 0)? 29: 28);elsereturn(solarMonthgc_solar_calendar_month);55 阴历算法阴历的算法展现了对阳历的转换,实现了一年中各个月份的日期中查看阴历的便捷。这一次的程序设计采用公历推导出阴历的日期,展现出在手机屏幕上,便于人们的观看。部分代码如下所示:public Lunar(Calendar cal) SuppressWarnings(unused)int yearCyl, monCyl, dayCyl;int leapMonth = 0;Date baseDate = null;try baseDate = chineseDateFormat.parse(1900年1月31日); catch (ParseException e) e.printStackTrace(); / To change body of catch statement use/ Options | File T offset = (int) (cal.getTime().getTime() - baseDate.getTime() / 86400000L);dayCyl = offset + 40;monCyl = 14;/ 用offset减去每农历年的天数/ 计算当天是农历第几天/ i最终结果是农历的年份/ offset是当年的第几天int iYear, daysOfYear = 0;for (iYear = 1900; iYear 0; iYear+) daysOfYear = yearDays(iYear);offset -= daysOfYear;monCyl += 12;if (offset 0) offset += daysOfYear;iYear-;monCyl -= 12;/ 农历年份year = iYear;yearCyl = iYear - 1864;leapMonth = leapMonth(iYear); / 闰哪个月,1-12leap = false;/ 用当年的天数offset,逐个减去每月(农历)的天数,求出当天是本月的第几天int iMonth, daysOfMonth = 0;for (iMonth = 1; iMonth 0; iMonth+) / 闰月if (leapMonth 0 & iMonth = (leapMonth + 1) & !leap) -iMonth;leap = true;daysOfMonth = leapDays(year); elsedaysOfMonth = monthDays(year, iMonth);offset -= daysOfMonth;/ 解除闰月if (leap & iMonth = (leapMonth + 1)leap = false;if (!leap)monCyl+;/ offset为0时,并且刚才计算的月份是闰月,要校正if (offset = 0 & leapMonth 0 & iMonth = leapMonth + 1) if (leap) leap = false; else leap = true;-iMonth;-monCyl;/ offset小于0时,也要校正if (offset 0) offset += daysOfMonth;-iMonth;-monCyl;month = iMonth;day = offset + 1;5.6 节日查看界面 查询功能里面,用户可以利用下拉框可以来选择查看阴历和阳历节日。通过下拉框控件的onItemSelected事件方法来实现在列表显示的控件内,呈现上面节日的显示。其中spinner的数据是在AndroidValue文件下array.xml文件中。具体的节日是在代码中通过数组来控制。具体代码如下:public SimpleAdapter getAdapter()ListHashMap list = new ArrayListHashMap();String Ftv1 = null;String Day1 = null;if(m=0)Ftv1 = Ftv.lunarFtv;Day1 = Ftv.lunarDay;els

温馨提示

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

最新文档

评论

0/150

提交评论