基于Android的课程表App设计与实现_第1页
基于Android的课程表App设计与实现_第2页
基于Android的课程表App设计与实现_第3页
基于Android的课程表App设计与实现_第4页
基于Android的课程表App设计与实现_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

第一章绪论1.1课题背景Android是目前最流行的移动端操作系统。在全世界的很多地方的售货量已经超越iPhone系统,android成为了世界上最大的智能手机操作系统。国内,android社区十分火爆,这些社区为android在中国的推广起到了很好的效果,同时也为android的相关产品的提供了消费市场。国内的厂商和运营商也陆陆续续的加入了android阵营,其中有华为通讯,联想,中国移动,中国联通等大企业。国内厂家也纷纷采用android系统的产品,所以能想到android将会被广泛应用在国产智能联网的设备上,将更进一步扩大android系统的应用领域。从2011年android在全球第一次超过Symbian,成为了全球第一。在2013年09月全世界android设备达到了惊人10亿台。2018第一季度Android平台以惊人42.8%的移动广告流量第一次把iOS甩在身后。考虑到Android自身的优势已经技术的成熟。我选择了Android系统来完成我的毕业设计——基于Android课程表app,是一款将计大学生课程表信息通过网络在手机端表示,这无疑会给大学生带来极大的方便。而我的目的就是开发大学生课程表和一些对学生有用的信息保存到MySQL并在手机显示,可以实时提供学生查看。首先通过对该系统的开背景及系统功能需求进行分析得到了学生用户的主要模块包括:课表的导入、课表的查看与查询、以及与同学之间进行课上课后在线交流;功能模块包括:校园头条推荐、用户自定义安排提醒。最后对这些模块进行设计与实现。1.2安卓平台简介Google于2007年11月5日宣布Android的诞生、一个致力于为移动终端一个着重打造移动终端,真正意义上开放和完整的操作。1.2.1安卓平台的优势1.开放性2.不受束缚3.齐全的硬件4.方便开发Android平台没有过多的之约象征着自由。因此不难想象,新颖别致的软件会诞生的必然的。但是它也是一把双刃剑:让暴力、血腥、情色方面的负能量得以钻了空子。1.2.2安卓系统编程语言在Android中,开发应用大体上分了三部分,大部分开发者使用Java编程语言来开发应用软件,小部分通过NDK使用C/C++编程语言来开发应用软件,还有很小一部分利用脚本语言以及网页来开发。如下是分别是游戏和应用的比例图。图1-1

第二章系统开发环境与相关技术2.1系统开发的环境Android的上层应用程序不仅基于Dalvik虚拟机,还需要采用Java语言开发的,所以,Google公司推荐使用主流的Java语言继承开发环境Eclipse。不仅需要Eclipse,而且使用Java语言进行开发,还需要有由SUN公司提供的JavaSDK。此外,Android和Java开发有较大的不同,所以才需要有Google提供的AndroidSDK。同时,还要要在Eclipse安装ADT,为Android开发提供开发工具(是Eclipse下开发工具的升级下载的工具)。总而言之,需要软件如下,方可搭建Android的开发环境,才能进行Android应用程序的编程工作。(1)Eclipse(2)JDK(3)AndroidSDK(4)ADT(AndroidDevelopmentTools)2.2安卓环境的搭建2.2.1软件下载准备分别下载JDK、Eclipse、AndroidSDK。2.2.2JDK安装SDK安装完成后,设置环境变量(非必须)。1.我的电脑,属性,高级,环境变量(依次点击),然后在系统变量中添加以下内容:2.JAVA_HOME值为:E:\Android\Java\jdk1.6.0_21(我所安装JDK的目录)3.CLASSPATH值:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\bin;4.Path:在开始追加%JAVA_HOME%\bin;环境搭建好以后。首先打开cmd窗口,然后输入java–version对照下图JDK的版本信息若一致则JDK安装成功了,如图:图2-1安卓环境设置JDK效果测试图2.2.3AndroidSDK安装下载完成后我的解压路径(我的解压路径为E:\Android\android-sdk-windows)第一步运行SDKSetup.exe,然后点击AvailablePackages下载。第二部在用户变量中新建PATH值为:AndroidSDK中的tools绝对路径(D:\AndroidDevelop\android-sdk-windows\tools)然后点击确认。第三步重启计算机,然后再开机。运行cmd窗口,检查SDK是不是安装成功。输入android–h出现以下的画面,表明安装成功,如图:图2-2安卓环境设置SDK效果测试图2.2.3ADT安装双击Eclipse,点击菜单中的"Help"的"InstallNewSoftware"选项点击Add按钮,输入Name和Location:Name(无要求),Location(输入/android/eclipse)后点击确认。返回后,在workwith选项中找到我们刚才添加的ADT,点击DeveloperTools,勾选AndroidDDMS和AndroidDevelopmentTool,然后按步骤完成。完成之后:选择Window>中Preferences...选项在左面板选择Android,右侧点击Browse...然后选中SDK路径(本机为:E:\Android\android-sdk-windows点击Apply)。配置完成。2.2.5创建AVD,创建AVD为使Android应用程序可以在电脑模拟器上运行手机软件。1、在Eclipse中。选择Windows中AndroidSDKandAVDManager选项2、点击左侧面板的VirtualDevicesan选项,再右侧点击New选项3、输入Name,选择Target的API,SDCard(大小不做要求),Skin随便选一个,Hardware目前保持默认就行4、点击CreateAVDjiu(完成创建AVD)2.3Android架构图2-1展示了Android操作系统的主要组件。2.3.1Android生命周期图2-2Activity生命周期2.3.2Java特点(1)面对对象(2)可移植性(universality)(3)安全性(security)(4)多线程(thread)(5)多态(6)解释执行(7)分布性第三章系统需求分析及概要设计3.1系统的需求分析我的软件是一个安卓平台的手机课程表app。它是为大学生提供课程表方面服务的,它包括日历的查看、日历上日期对应课程表的查看、课程表的增加、课程表的删除、课程表的修改等。3.2系统的概要设计1.app功能需求a.核心需求:查询课程b.基本型需求:记录课程笔记、课前提醒、蹭课2.设计app要求:认真的进行需求分析,认真掌握完成此论文的相关技术、在使用Android的技术的基础上进行主模块的设计及支模块的独立性、在结合前端HTML使之成为一个整体,让app具有完整性、编程语言编辑身份验证功能,考虑数据库安全、数据的完整性等问题。

第四章 系统架构4.1架构的设计4.1.1架构的层次结构层次结构图如下。图4-1结构图的最顶层,统称为表现层(UI层),直接为用户提供手机视觉界面,引导用户进行操作。通常情况下,UI层间接作用于数据库进行交互,通过业务逻辑层进行的。4.1.2架构实现从架构设计图中可以了解到,层与层之间的联系是向下依赖的,底层对于它的上一层是不了解的,上层变动的设计对下一层的调用是没有影响的。所以一般先从底层的接口设计开始。图4-2图4-2:IDAL层的接口模板图4-3图4-3:IDALSchedule继承IDAL接口图4-4图4-4:抽象工厂接口的实现定义数据库字段以及建表语句图4-5SQLiteHelper辅助类图4-6(3)定义基础提供程序图4-1-3(4)数据访问提供程序的具体实现图4-1-4(5)具体工厂的实现虽然我们封装好了对数据库进行访问的操作,但是它的实例化在逻辑层中进行是不可取的,而是应该通过具体工厂ScheduleProvider提供的实例,业务逻辑层不需要知道ScheduleProvider具体类名的存在,只需要需要知道IDALSchedule接口即可。图4-1-5(6)业务逻辑层图4-1-6(7)表现层图4-1-74.1.3小结不管是网站还是手机软件,项目中用的最多的还是mvc设计模式。在上例当中也是用了mvc设计模式,view层理所应当的在我们所看到的Ui层,android利用xml文件来布局整个Ui层,在这方面做的很好。能够很好的解耦整个框架,模型层,本项目中ScheduleProvider就是业务类,控制层,可以很好的协调模型层和Ui层。

第五章系统的详细设计5.1课程表启动界面5.2课程表管理模块界面5.3课程表添加模块界面从界面中可以看到两个文本框和两个按钮(text+button),有两个文本框,个是密码文本框,一个用户名文本框一。用户的文本框hint属性值我设置为“请输入账号”,InputType属性值我设置为“number”。密码文本框的hint属性值我设置为“请输入个人密码”,InputType属性值我设置为“textPassword”。两个按钮分别为注册和登录按钮。如下为文本框和按钮的部分实现代码:<EditTextandroid:id="@+id/Lusername"android:layout_width="match_parent"android:layout_height="44.0dip"android:singleLine="true"android:background="#ffffff"android:hint="请输入账号"android:inputType="number"android:maxLength="16"android:maxLines="1"android:paddingLeft="12.0dip"android:textColor="#ff1d1d1d"android:textColorHint="#ff666666"android:textSize="16.0sp"/><Buttonandroid:id="@+id/btlogin"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="12.0dip"android:background="@drawable/login_button_bg"android:gravity="center"android:paddingTop="5.0dip"android:text="登陆"android:textColor="#ff333333"android:textSize="18.0sp"/>登录按钮事件代码:bt_login.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ Stringsql="select*frompersonwherename=" +et_name.getText().toString(); PersonBeenbeen=ScheduleBLL.getInstance(LoginActivity.this) .queryScheduleToDataBase(sql); if(been.getPass()!=null&&been.getPass().equals(et_password.getText().toString())){ OverDatadata=OverData.getInstance(); ScheduleEntityentity=newScheduleEntity(); entity.setName(et_name.getText().toString()); entity.setPass(et_password.getText().toString()); data.setEntity(entity); Intentin=newIntent(LoginActivity.this, MainFragmentActivity.class); LoginActivity.this.startActivity(in); finish(); } else{ Toast.makeText(LoginActivity.this,"用户不存在或者密码错误",Toast.LENGTH_LONG).show(); } } });注册按钮事件代码:bt_resigner.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ //TODOAuto-generatedmethodstub Intentin=newIntent(LoginActivity.this, RegisterActivity.class); LoginActivity.this.startActivity(in); } });注册界面中有一个按钮和三个文本框,两个密码框,一个用户名和一个注册按钮。文本框与按钮的部分实现代码分别如下:<EditTextandroid:id="@+id/username"android:layout_width="match_parent"android:layout_height="44.0dip"android:singleLine="true"android:background="#ffffff"android:hint="请输入账号"android:inputType="number"android:maxLength="16"android:maxLines="1"android:paddingLeft="12.0dip"android:textColor="#ff1d1d1d"android:textColorHint="#ff666666"android:textSize="16.0sp"/><EditTextandroid:id="@+id/pass"android:layout_width="match_parent"android:layout_height="44.0dip"android:layout_marginTop="3dip"android:singleLine="true"android:background="#ffffff"android:hint="请输入个人密码"android:inputType="textPassword"android:maxLength="16"android:maxLines="1"android:paddingLeft="12.0dip"android:textColor="#ff1d1d1d"android:textColorHint="#ff666666"android:textSize="16.0sp"/><Buttonandroid:id="@+id/btregister"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="12.0dip"android:background="@drawable/login_button_bg"android:gravity="center"android:paddingTop="5.0dip"android:text="注册"android:textColor="#ff333333"android:textSize="18.0sp"/>5.4课程提醒设置管理模块界面注册按钮事件代码:privatevoidinitListener(){ //TODOAuto-generatedmethodstub bt_register.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ //TODOAuto-generatedmethodstub if(tv_pass.getText().toString() .equals(tv_restart.getText().toString())){ Stringsql="select*frompersonwherename=" +tv_username.getText().toString(); PersonBeenbeen=ScheduleBLL.getInstance( RegisterActivity.this).queryScheduleToDataBase(sql); if(been.getName()==null){ ScheduleEntityentity=newScheduleEntity(); entity.setName(tv_username.getText().toString()); entity.setPass(tv_pass.getText().toString()); ScheduleBLL.getInstance(RegisterActivity.this) .addScheduleToDataBase(entity,newPersonSet(),DBKey.Schedule.TABLE_SCHEDULE); Toast.makeText(RegisterActivity.this,"用户已注册",Toast.LENGTH_LONG).show(); finish(); } else Toast.makeText(RegisterActivity.this,"用户已经存在",Toast.LENGTH_LONG).show(); } else { Toast.makeText(RegisterActivity.this,"2次密码不一致",Toast.LENGTH_LONG).show(); } } }); }5.5课程笔记主界面课程笔记主界面如下:图5-1<TextViewandroid:id="@+id/tv_month"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center"android:text="xxxx年14月"android:textColor="#ffffffff"android:textSize="21.0dip"/>头部的TextView<GridViewandroid:id="@+id/gridview"android:layout_width="fill_parent"android:layout_height="wrap_content"android:background="#00000000"android:clickable="true"android:clipChildren="true"android:columnWidth="55.0dip"android:horizontalSpacing="1.0dip"android:listSelector="@null"android:numColumns="7"android:paddingBottom="1.0dip"android:stretchMode="columnWidth"android:verticalSpacing="1.0dip"/>GridView日期表格5.6时间空间模块界面时间控件的界面:图5-2弹出菜单界面主要代码及事件:(1)<ListViewandroid:id="@+id/behind_list_show"android:layout_width="match_parent"android:layout_height="500dip"android:layout_gravity="top"android:layout_marginBottom="@dimen/list_margin_height"android:layout_marginTop="@dimen/title_height"android:divider="@drawable/dis_behind_side"android:listSelector="#0fff"android:cacheColorHint="#0000"></ListView>(2)publicclassMainFragmentActivityextendsBaseSlidingFragmentActivityimplements SlidingActivityBase{(3)//[start]初始化函数 privatevoidinitSlidingMenu(){ setBehindContentView(R.layout.behind_slidingmenu); //customizetheSlidingMenu sm=getSlidingMenu(); sm.setShadowWidthRes(R.dimen.shadow_width); sm.setBehindOffsetRes(R.dimen.slidingmenu_offset); //sm.setFadeDegree(0.35f); sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE); sm.setShadowDrawable(R.drawable.slidingmenu_shadow); //sm.setShadowWidth(20); sm.setBehindScrollScale(0); }publicvoidqueryDate() { newDatePickerDialog(CalendarActivity.this.getActivity(), newOnDateSetListener(){ publicvoidonDateSet(DatePickerview,intyear, intmonthOfYear,intmonthOfYear1){ //1901-1-1---->2049-12-31 if(year<1901||year>2049){ //不在查询范围内 newAlertDialog.Builder( CalendarActivity.this.getActivity()) .setTitle("错误日期") .setMessage("跳转日期范围(1901/1/1-2049/12/31)") .setPositiveButton("确认",null).show(); }else{ intxMonth=jumpMonth; intxYear=jumpYear; intgvFlag=0; jumpMonth=0; jumpYear=0; addGridView();//添加一个gridView year_c=year; month_c=monthOfYear+1; day_c=monthOfYear1; calV=newCalendarAdapter( CalendarActivity.this.getActivity(), getResources(),jumpMonth,jumpYear, year_c,month_c,day_

温馨提示

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

评论

0/150

提交评论