移动设备平台开发app课程设计Calendar System.docx
- 文档编号:18615663
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:26
- 大小:690.36KB
移动设备平台开发app课程设计Calendar System.docx
《移动设备平台开发app课程设计Calendar System.docx》由会员分享,可在线阅读,更多相关《移动设备平台开发app课程设计Calendar System.docx(26页珍藏版)》请在冰点文库上搜索。
移动设备平台开发app课程设计CalendarSystem
移动设备平台开发
App开发详解
项目名称:
日历系统
院系:
计算机学院
专业班级:
XXXX
学号:
XXXXXXX
学生姓名:
XXX
一、系统功能需求分析
随着信息时代的到来,越来越多的新技术正在不断的给人们的日常生活带来很大的便利,手机等一些移动设备也成为了现代生活必不可少的一样生活工具。
Android系统凭借其良好的用户体验、低廉的成本及高开放性产生了巨大的应用量和广阔的应用面。
如今,基于Android系统的应用极为丰富,从输入法到影音播放器,从系统工具到网页浏览器,从社交网络客户端到学习办公助手工具,以及形式繁多的游戏应用,都有力体现了Android平台的强大的适应性和发展潜力。
而日历应用作为智能终端的出厂必备控件,更是Android系统中不可或缺的一部分。
而应用开发商力求为客户带来更好的用户体验,将日历这一原本普通的生活用品打造成植于移动终端中的生活助手,且界面风格迥异,功能也是趋于多样化和一体化。
设计并实现一款基于Android平台的日历系统,具备基本的日期显示功能;能够显示公历、农历、星期、节日等;并提供日程记事本功能。
要求该系统能够在真机上顺利安装并运行。
1.1系统登录功能
本功能可进行权限的区分,使管理员和图书借阅者都可使用本系统,并根据角色的不同,具有不同的界面和功能。
1.2功能需求描述
该系统除实现基本的日历功能之外,还有附加的插件以满足用户需求。
(1)可以使用户查看当天日期为何年何月何日、当天是星期几、阴历日期为多少。
(2)可满足用户对于是否闰年、闰几月、生肖年、干支年的查询需求。
(3)用户能够获的具体日期的节日信息,包括国际节日与中国传统节日。
(4)为用户提供日程管理功能,允许在指定日期下添加、查询、删除、修改提醒事件。
(5)可快速将用户指定的公历日期转换为农历日期。
(6)可快速跳转到用户想要查看的日期。
(7)提供当天日期定位功能。
1.3界面需求描述
用户界面(User Interface,简称UI)是软件的重要部分。
用户通过UI来得到服务,后台的代码结构往往与用户的直观体验关系不大,故用户界面的成功与否直接关系到用户软件的满意度[12]。
(1)界面应布局合理,简洁大方,使用户对于日期信息一目了然.
(2)当天日期应特殊显示,使用户能够方便快捷地得知当天信息。
(3)本月日期与非本月日期应区别显示。
(4)允许用户左右滑动屏幕来跨月查询。
1.4运行需求描述
该系统应能够在虚拟机上和真机上顺利安装、运行、卸载;应保证运行流畅,不卡机不死机;能够适应不同智能终端的多种设备屏幕。
1.5可行性分析
可行性分析的目标是用最小的代价尽快确定问题是否能够解决,以避免盲目投资带来的巨大浪费。
所以应该使用先进科技技术开发方便省时的基于Android的日历系统,Android是基于用Java语言开发[7]。
不仅能够提高相关人员的工作效率和降低成本,而且能够减少易出现的错误。
我所设计的基于Android的日历系统主要有以下几点优势:
1、经济可行性
经济可行性研究是对组织的经济现状和投资能力进行分析,对系统建设运行和维护费用进行估算,对系统建成后可能取得的社会和经济效益进行估计。
很多的开发环境都可以在网上收索完成,一些功能的源代码也可以在网上找到,加以修改既可以完成。
因而在经济上的投入不算多,而系统设计完成后既可以投入使用,在使用的时候只需将软件安装在手机或平板等移动设备上即可投入使用,完全不需要其他的经济消耗。
当系统投入运行后可以为学校或者相关部门节约大量的人力、物力,其所带来的效益也会远远的大于系统软件的开发成本费用。
因此,因此,在经济上是可行的[8]。
2、技术可行性
要求利用现有的设备、软件及技术人员,看是否能够达到目标,这是技术可行性研究中要考虑的一个问题。
本次要开发的日历系统是基于Android的系统,Java语言是一种面向对象的编程语言,也是当今社会中最流行的一门语言利用这些工具软件既可以轻松完成日历系统的设计与开发。
因此,本次基于Android的日历系统的项目开发在技术上是绝对可行的。
3、社会可行性
随着数据化、信息化技术的迅速发展,当今社会人们利用手机等移动设备来管理信息也已经发展成为了一种导向和趋势。
所以开发本系统的目标不仅可以提高工作效率,减轻劳动强度,而且还会提高准确率,具有很好的社会意义[10]。
因此,本项目的设计和开发是具有一定的社会可行性的。
综上所述,开发本次基于Android的日历系统从经济上、技术上以及社会上都是完全可靠的。
二、系统分析与设计
2.1系统功能结构
该日历系统以显示当月日期及年月日等信息的主界面为主,通过Intent触发日程管理界面、公农历转换控件、当天日期定位菜单、日期跳转项。
功能结构如2-1所示。
图2-1 日历系统功能结构
2.2系统界面布局
本日历系统的主界面采用线性布局(Linear Layout)与列表视图(GridView)相结合的界面构造。
图2-2为主界面的简要布局。
图2-2主界面布局示意
三、系统实现
3.1实现系统的关键技术
根据第一章所设计的Android应用软件系统功能框架和界面的设计,分析出实现这些功能和界面所需的各个关键的技术点,并深入研究这些关键技术点,这些技术点包括:
(1)Android的xml文件的编码规则;
(2)系统各种界面布局的实现方式;
(3)系统中Activity的创建以及Activity间的自由切换;
(4)Sqlite数据库的使用;
(5)使用信息提示框的弹出;
(6)以及图片资源的加入。
下面举例介绍数据库的关键技术:
SQLiteOpenHelper类是Android下操作Sqlite的内部实现类,它封装了大部分函数和操作数据库的具体功能,帮助创建数据库和数据库版本管理。
使用必须创建一个子类来实现其onCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase,int,int)方法,同时任意实现onOpen(SQLiteDatabase)方法,同时打开数据库操作必须保证数据库存在,如果不存在则创建它,并且对其必要的升级,维护其保持一个最佳的状态。
使用本类提供内容开始创建数据库是非常容易的,首先必须对数据库进行升级,以避免在数据库启动后长期使用而阻塞数据。
3.2界面
3.2.1主界面
主界面主要提供日期信息显示,默认显示当前日期所在的月份,标注当前的日期。
显示星期、农历日期及节假日。
允许呼出菜单栏,并支持左右滑动。
如图3-1所示。
图3-1主界面
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关键代码介绍
3.1日历显示activity
publicvoidaddTextToTopTextView(TextViewview){
StringBuffertextDate=newStringBuffer();
draw=getResources().getDrawable(R.drawable.top_day);
view.setBackgroundDrawable(draw);
textDate.append(calV.getShowYear()).append("年").append(
calV.getShowMonth()).append("月").append("\t");
if(!
calV.getLeapMonth().equals("")&&calV.getLeapMonth()!
=null){
textDate.append("闰").append(calV.getLeapMonth()).append("月")
.append("\t");
}
textDate.append(calV.getAnimalsYear()).append("年").append("(").append(
calV.getCyclical()).append("年)");
view.setText(textDate);
view.setTextColor(Color.BLACK);
view.setTypeface(Typeface.DEFAULT_BOLD);
}
3.2创建菜单
publicbooleanonCreateOptionsMenu(Menumenu){
menu.add(0,menu.FIRST,menu.FIRST,"今天");
menu.add(0,menu.FIRST+1,menu.FIRST+1,"跳转");
menu.add(0,menu.FIRST+2,menu.FIRST+2,"日程");
menu.add(0,menu.FIRST+3,menu.FIRST+3,"日期转换");
returnsuper.onCreateOptionsMenu(menu);
}
3.3左右滑动屏幕
publicbooleanonFling(MotionEvente1,MotionEvente2,floatvelocityX,
floatvelocityY){
intgvFlag=0;//每次添加gridview到viewflipper中时给的标记
if(e1.getX()-e2.getX()>120){
//像左滑动
addGridView();//添加一个gridView
jumpMonth++;//下一个月
calV=newCalendarView(this,getResources(),jumpMonth,jumpYear,year_c,month_c,day_c);
gridView.setAdapter(calV);
//flipper.addView(gridView);
addTextToTopTextView(topText);
gvFlag++;
flipper.addView(gridView,gvFlag);
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);
returntrue;
}elseif(e1.getX()-e2.getX()<-120){
//向右滑动
addGridView();//添加一个gridView
jumpMonth--;//上一个月
calV=newCalendarView(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.anim.push_right_in));
this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this,R.anim.push_right_out));
this.flipper.showPrevious();
flipper.removeViewAt(0);
returntrue;
}
returnfalse;
}
3.4跳转到今天
publicbooleanonMenuItemSelected(intfeatureId,MenuItemitem){
switch(item.getItemId()){
caseMenu.FIRST:
//跳转到今天
intxMonth=jumpMonth;
intxYear=jumpYear;
intgvFlag=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("-")[2]);
calV=newCalendarView(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){
//nothingtodo
}elseif((xYear==0&&xMonth>0)||xYear>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.flipper.setOutAnimation(AnimationUtils.loadAnimation(this,R.anim.push_right_out));
this.flipper.showPrevious();
}
flipper.removeViewAt(0);
break;
caseMenu.FIRST+1:
newDatePickerDialog(this,newOnDateSetListener(){
@Override
publicvoidonDateSet(DatePickerview,intyear,intmonthOfYear,
intdayOfMonth){
//1901-1-1---->2049-12-31
if(year<1901||year>2049){
//不在查询范围内
newAlertDialog.Builder(CalendarActivity.this).setTitle("错误日期").setMessage("跳转日期范围(1901/1/1-2049/12/31)").setPositiveButton("确认",null).show();
}else{
intgvFlag=0;
addGridView();//添加一个gridView
calV=newCalendarView(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){
//nothingtodo
}
if((year==year_c&&monthOfYear+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));
CalendarActivity.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.flipper.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
publicclassScheduleAllextendsActivity{
privateScrollViewsv=null;
privateLinearLayoutlayout=null;
privateBorderTextViewtextTop=null;
privateScheduleDAOdao=null;
privateScheduleVOscheduleVO=null;
privateArrayList
privateStringscheduleInfo="";
privatefinalLinearLayout.LayoutParamsparams=newLinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
privateintscheduleID=-1;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
//TODOAuto-generatedmethodstub
super.onCreate(savedInstanceState);
dao=newScheduleDAO(this);
sv=newScrollView(this);
params.setMargins(0,5,0,0);
layout=newLinearLayout(this);//实例化布局对象
layout.setOrientation(LinearLayout.VERTICAL);
layout.setBackgroundResource(R.drawable.schedule_bk);
layout.setLayoutParams(params);
textTop=newBorderTextView(this,null);
textTop.setTextColor(Color.BLACK);
textTop.setBackgroundResource(R.drawable.top_day);
textTop.setText("所有日程");
textTop.setHeight(47);
textTop.setGravity(Gravity.CENTER);
layout.addView(textTop);
sv.addView(layout);
setContentView(sv);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 移动设备平台开发app课程设计Calendar System 移动 设备 平台 开发 app 课程设计 Calendar