基于安卓智能课程表打印版_第1页
基于安卓智能课程表打印版_第2页
基于安卓智能课程表打印版_第3页
基于安卓智能课程表打印版_第4页
基于安卓智能课程表打印版_第5页
免费预览已结束,剩余38页可下载查看

付费下载

下载本文档

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

文档简介

1、姓名张竞超学号1630100001院、系信息学院专业农业信息化指导教师夏江摘要:随着智能手机的快速发展,各种应用软件也得到了越来越多的人的关注。目前,在安卓软件市场中我们可以找到各种需求的软件,课程表管理类的软件也是随处可见的。本系统基于Android平台为学生用户群体设计一款新的课程管理软件。实现了每日视图、周视图、上课提醒、上课期间响铃模式切换、单双周(默认全部)等基本功能,另外还提供了当前周设计、签到记录设计、考试提醒、签到与成绩统计分析、分享等功能,以更好地满足用户对一款课程表应用需求。关键词:Android;课程表;SQLite目录1 .弓I言12 .系统分析22.1. 系统实现目标

2、2.2.2. 系统运行环境2.2.3. 系统开发环境3.2.4. 后台数据库3.3 .总体设计43.1. 系统总体设计描述4.3.2. 系统模块图. 系统总体结构43.2.2. 系统模块描述63.3. 数据库总体设计. 数据库设计介绍73.3.2. E-R图73.3.3. 数据库表设计84 .详细设计和系统实现94.1. 详细设计和系统实现9.4.2. 功能模块的设计和实现. 课程数据增、删、改模块104.2.2. 数据库读写模块224.2.3. 系统设置模块254.2.4. 系统中其他功能的实现285 .评估测试335.1. 测试环境.335.2.

3、测试计划.335.2.1. 交互测试335.2.2. 功能测试345.3. 测试结果与评价386 .结论391.1.随着智能手机的快速发展,各种应用软件也得到了越来越多的人的关注。目前,在安卓软件市场中我们可以找到各种需求的软件,课程表管理类的软件也是随处可见的。其中智能课程表在Android市场中占有一定的空间,甚至些公司也开发了这一类的应用软件,例如:超级课程表。这款软件得到很多学生的大力支持。在大学生中,所学课程的种类繁多、上课地点的不断变化、课程的临时修改和添加,让学生们疲于不断的记忆上课的教室、地点和是否有更改。这类软件操作复杂,界面不宜辨识。另一类软件,基本上都是只实现了课程表设置

4、、查询和上课时间提醒功能等。根据学校教学纪律规定,在课堂教学时间段内,学生和教师都不容许接听电话。目前在上课时,教师和学生一般都是把手机设置为静音或震动模式,没课时再设置回来。学生和老师都经常可能会发生上课时忘记设置手机的情况。正上着课,手机铃声突然响起来了,既分散了学生的注意力,也打断了老师的讲课思路。出于这两点,我想做一款解决这两个矛盾的课程表,也就是自己的课题设计。1.2. 分析2.1. 系统实现目标目标1:既然作为一款课程表类app,自然是需要课程的基本管理即增、删、改、查,其中增”的方式是手动添加;删除录入的信息,但是在数据库中不是真正的删除,作为一个字段的标记式删除,首先这么设计的

5、原因是系统不会处理过多数据,这也让UndoBar的实现成为可能;改”提供了对录入信息的修改;查”在系统的各处都有体现,从数据库拉取数据,提供各种信息的显示。目标2:上课提醒、以及上课自动切换震动模式。可以让学生在上课前知道下一节是什么课,上课切换震动也是为学生提供便利防止上课铃声响打断老师的讲课思路。目标3:课程总表,对一星期的课表一目了然,同时可以直接在总表中创建课程,还有快速判断时间的设计。目标4:签到统计,每周每次课的签到信息,集中显示以了解自己的上课情况,对自身做出监督。目标5:考试提醒,对考试的设定以及提醒功能。目标6:考试成绩与签到的分析柱状图,提供一个图谱用来了解自己上课情况与成

6、绩的关系。目标7:分享,将上课、签到、成绩信息分享到其他应用程序。2.2. 系统运行环境智能课程表”是基于移动平台,如今的移动领域有Apple的iOS,Google的Android,以及Microsoft的WindowsPhone三大平台,其中Android的市场份额在三大平台中是最大的,因为Android的框架结构中处于顶层的是应用开发层,且是基于Java语言的开发。本智能课程表”故采用Android平台为广大的大学生提供一个课程管理的解决方案。为了设计更好的用户体验,系统采用Android4.4的SDK开发,这直接导致的是低于此版本的Android是无法使用本应用的,因为应用到了4.4所特

7、有的特性。系统运行环境:平台Android,SDK®本4.4+。2.3. 系统开发环境Android的应用层软件的开发是基于Java的,故开发环境选择的是Eclipse,开发Android需要安装Google提供的ADT插件,虽然Google在发布了自己的基于idea的开发工具AndroidStudio2.2版本,但是由于目前市场教程大部分还是关于Eclipse,故继续使用Eclipse来调试。Android的SDK使用版本是4.4,另外JDK本是1.6。2.4.后台数据库SQLite简介:SQLite是一个开源的嵌入式关系数据库,它在2000年由D.RichardHipp发布,它的

8、减少应用程序管理数据的开销,SQLite可移植性好,很容易使用,很小,高效而且可靠。SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。SQLite的数据库权限只依赖于文件系统,没有用户帐户的概念。SQLite有数据库级锁定,没有网络服务器。它需要的内存,其它开销很小,适合用于嵌入式设备。需要做的仅仅是把它正确的编译到你的程序。SQLite具有零配置、可移植、Compactness简单、灵活、可靠的特点。SQLit既不SQLite采用了模块的设计,它有三个子系统,包括八个独立的模块构成。因此移动平台的数据库解决方案大多是采用SQLite,能够满足开发者的一般数据

9、的存储需求。3.总体设计3.1. 系统总体设计描述系统的设计阶段的需要解决的问题是构建整个项目的大体框架,因为如果自己没有一个明确的框架,那么代码写到后面的话也就是越来越乱,剪不断理还乱的结果了。所以说设计的阶段很重要,例如建房子需要先把图纸画好,就算是动工也是先打好框架。同样软件工程也是一门工程学,所以同样需要对要设计的系统画”一个设计的框架。总体设计是软件开发人员根据软件需求说明书的要求,运用结构化程序设计思想,将软件自上而下逐层分解成多个软件模块,直到分解成每一个模块只具有单一的功能,能用一个或几个程序实现的树形结构为止。总体设计阶段还要定义个模块的数据传递关系,数据的存储关系,输入输出

10、格式,已经对运行环境的要求。经过需求分析阶段的工作,课程管理系统所需要完成的功能即需要做什么已经了然于心了,现在就是设计整个系统的工作了。总体设计过程可分为两个主要阶段:功能设计,根据大学生们对课程管理的需求做出相应的功能上的决策,结合网上调研跟线下的调查决定设计这个应用的相应功能;结构设计,确定整个软件的结构,由哪些子类别所组成。其中功能设计是在需求分析的基础上进行的,这里的功能”其实是泛指,例如软件所要实现的功能,还包括系统设计时候的数据处理,实现功能的算法。而结构设计,是将整个系统按照不同的功能和层次划分为一个个相对简单而独立的模块,每个模块实现系统的某一项具体功能,自顶向下,逐步细化,

11、这样增加了软件的可复用性,且对于代码的结构则更加清晰明了,阅读起来也更加的有条理。3.2. 系统模块图3.2.1. 系统总体结构模块层次图,是描述软件层次特性的工具,描述某个模块负责管理控制哪些模块以及上下级模块或者是统计模块之间的数据传递关系,能够清楚的表明系统的结构,并可用来粗略的估计系统的规模。优点也是显而易见的,能够很清楚的表达系统结构,保证思路清晰,缺点是只能粗略的表达而不能表达整个系统的逻辑。根据需求分析得到的数据流图,由用户的需要以及完善系统所添加的一些功能得到系统的模块层次图。系统主要实现数据录入(添加课程)、数据查询(显示课程的各种信息)、数据统计(签到统计等)以及数据分析(

12、与成绩的关联对比分析)。见图3.1。数据显示初忤1梗决考试视图模块签到统计视图模块周视图显示模块日视图沅示模块图3.2显示模块细化3.2.2. 系统模块描述系统模块描述:1)课表管理系统功能:用于协调管理整个系统;2)数据库读写模块功能:统一系统的读写数据库操作;3)数据显示视图模块功能:将数据按照不同的展示要求呈现给用;4)系统设置模块功能:设置系统的偏好信息,如上下课时间、一学期周数、当前周等;5)数据的增、删、改模块功能:用户添加、修改或是删除教学楼、科目、课程和考试的条目;6)其他功能:用于便捷处理的工具类,例如计算当前周、分享模块等。3.3. 数据库总体设计3.3.1. 数据库设计介

13、绍数据库历杳前来表示而或的春厂“数据库的应用教学蝌|库是指自描述的完整记录的集合。还包杳关于它本身结构的描述。另夕一卜;:二和提高数据库应用的性能的索引。最后,数据库还包含关于使用程序的数据。咪呼陟学吁理学患个学期由的衽如我彳叫唐下课此彳心的滔/老师、上课的地点起这些.本属性。而教金蠢统为立的,:口道这些基本属性中课程名与老师可以作为一个单独表存在,即科目表。某一科目所有的基本属性有两个科目名和教帅讲叫上课地点与时间并不能作为科目表中的字段,因为某一科目在一周中可能有多节课而且在不同的时间段。而上课的地点即教学楼信息同样可以作为单独而一张表,减少了课程表中的重复. R图1课程测试

14、概念模型是对信息世界建模,所以概念模型能够方便、准确地表示出信息世界中的常用概念。概念模型的表示方法很多,其电最为著名最为常用的是P.P.S.ChenT1976者辆ft出的实体-联系方法(Entity-RelationshipApproach)。该方法用E-R图来描述现实世界的概念模型,E-R方法也称E-R模型。E-R图由实体、实体的属性以及实体之间的关系三部分组成,实体是具有相同的性质并且彼此之间可以相互区分的现实世界对象的集合;属性是实体所具有的特征,它是描述实体或者关系的性质的数据项,实体之间的关系通过直线连接。在本课程管理系统中,主要有以下实体:科目、教学楼、课程、考试。科目的属性有_

15、id、科目名、教师名,未包含开课以及结课的周数,因为这个并不是固定的,且其中ID是自增长而且是唯一编号;教学楼的属性有_id与教学楼名称;课程实体包含的属性相对来说多一些,主要有星期几、第几节、科目ID、上课周数、教学楼ID、教室号码、备注、签到信息、颜色、提前提醒时间等;考试的属性有引用的科目ID(这个ID只有被课程引用才会出现在考试表中)、考试的具体时间、考试的教学楼、考试的教室号、考试最后的分数和科目的总分、颜色、考试提醒。图3.2实体关系图如图3.3所示,图中实体的属性只选取重要的属性。每一个课程包含了教学楼实体、科目实体还有自身的属性(只列举重要的),每个被课程表引用的科目都会产生一

16、个课程测试的实体,它也包含了教学楼等属性。这样设计的优点有利于扩展系统的功能,例如我可以给课程实体和课程测试实体添加属性成为当前系统的规模。同时给查询数据库也带来了诸多方便,只需在查询的时候增加新增的属性即可。3.3.3.数据库表设计一共设计了4张表,分别是:1)教学楼表(教学楼的ID,教学楼名);2)科目表(科目的ID,科目名,科目的昵称,教授老师名);3)课程表(课程的ID,星期几,第几节课,科目的ID,上课周,教学楼ID,教室号,签到标记,颜色代码,提前提醒时间,删除与否);4)考试表(考试课程的ID,科目ID,考试时间,教学楼ID,教室号,考试得分,总分,得分与否标记,颜色代码,提前提

17、醒时间,删除与否);4.详细设计和系统实现4.1. 详细设计和系统实现详细设计阶段的目标:确定应该怎么样实现系统,给出软件模块结构中各个模块内部过程描述。该阶段是用程序设计语言来描述所要完成系统的功能,即代码实现的一个设计过程。详细设计阶段要确定模块的算法以及数据结构,其任务是设计出系统的蓝图,这样就可以在后期系统的实现中根据详细设计中的蓝图很合理的设计每一个模块。其中需要遵循的几个原则:模块的逻辑描述要清晰易读,正确可靠;设计出的处理过程应该尽可能的简单易懂;选择恰当的描述工具来描述各个模块的算法。系统实现即编码阶段。编码就是指将软件详细设计的说明书用程序设计语言翻译出来的代码。软件的设计开

18、发过程,最后就是通过编码对功能的实现。运用软件功能方法设计软件,主要是为了提高软件质量,软件质量在很大程度上取决于设计的质量,同时编码的好坏也是影响软件质量的十分重要的因素。另外,编码质量的好坏,也直接影响了软件测试和软件维护工作的进行。但是系统实现是在系统设计的基础上的,基本上定下了系统设计,就基本上定下了系统实现。4.2. 功能模块的设计和实现本章介绍本系统的各个模块的设计和实现。首先在Eclipse中配置好ADT和AndroidSDK等开发环境然后新建一个Android项目,项目名为Timetable,Android项目中的AndroidManifest.xml文件中配置本软件需要使用的

19、权限。在Android中权限是通过配置文件中声明来向系统请求权限,安装时会将软件所请求的权限显示出并要求用户授权。在本系统中,所需要的权限有:CHANGE_CONFIGURATIONVIBRATEWRITE_EXTERNAL_STORAGEWAKE_LOCKI项权限。Android开发中用户界面和代码是分开的,我们可以在layout布局中布局好界面,然后再来写代码。课程管理软件主要功能有:1)显示当天的课程;2)显示本周的课程;3)显示考试的课程;4)分析考试分数与签到信息以图表的方式显示给用户;5)显示当前周;6)上课提醒、切换响铃模式;7)考试提醒;8)分享到其他应用程序。4.2.1,课程

20、数据增、删、改模块打开课程表”进入到dayView模式之后,在软件的功能按钮,分别是切换view、显示当前周、添加课程,点才切换显示模式,分别有日视图、周视图、统计视图(考试,按钮弹出Toast显示当前是第几周并定位到今天,点按添加课程模式,也即课程数据的录入模块。如图4,1所示辩看四回5后班耨年系疣同江E声目姬1,智41工生:黑草李电师第6节00000140汇攀4305箫一周Z中国特色社会主义张云轩ActionBar上有二个安“view下拉菜单可系统),点按当前周'添加课程”按钮可进入LFm1用星期二谭空玲第一周EIME首先要想添加课程,则需要先在设置页面中选择教学楼”以及科目”来添

21、加本学期所有科目名称以及上课地点的基本信息,设置完这些基本信息后在添加课程"ActMt*就可以添加相应的课程。如图4,2所示就学楼i*文宁曲上曲引轼守持依目变卡学曲避为H日耳他设者事学用阅依,HttK式*1amat-.广宣示/节串Mtiswu忙后自前皓音上谓帮父得白中骈经注身自动爵音喷式上下那时间前-L7何.工于美于基软件图4.2进入添加课程后,其中星期几选项是根据用户点击添加课程”时Page所在星期几自动判断,减少了用户的输入操作,整个添加课程需要用户输入的数据有:教室号、备注信息,其他如科目、教学楼、上课周、上课时间、提醒时间使用下拉菜单帮助用户快速输入,科目与教学楼的数据需要先

22、在设置界面手动添加。点按左上角的保持按钮即可保存输入课程信息到t_curriculums表中。关键代码:protectedvoidonCreate(BundlesavedInstanceState)super.onCreate(savedlnstanceState);/设置标题栏setTitle(R.string.add_curriculum);UIBindUtil.bind(this,R.layout.add_curriculum2);/mSaveButton.setText(R.string.save_continue);mBuildingDAO=DAOFactory.getBuildin

23、gDAOInstance(this);mCourseDAO=DAOFactory.getCourseDAOInstance(this);mCurriculumDAO=DAOFactory.getCurriculumDAOInstance(this);settingsPreferences=getSharedPreferences(AppConstant.Preferences.PREFERENCES_NAME,Context.MODE_PRIVATE);mToast=Toast.makeText(this,null,Toast.LENGTH_SHORT);initSpinner();/init

24、ButtonListener();allRadioButton.setChecked(true)/*初始化所有的spinner。*/privatefinalvoidinitSpinner()/设置表示星期几的spinnerArrayAdapter<CharSequence>dayAdapter=ArrayAdapter.createFromResource(CurriculumAdd.this,R.array.spinner_weeks,android.R.layout.simple_spinner_item);dayAdapter.setDropDownViewResource(

25、android.R.layout.simple_spinner_dropdown_item);daySpinner.setAdapter(dayAdapter);Bundlebundle=getIntent().getExtras();System.out.println(bundle.getInt("dayOfWeek");daySpinner.setSelection(bundle.getInt("dayOfWeek")%7,true);/设置表示第几节的spinnerfinalintclassCount=settingsPreferences.ge

26、tInt(AppConstant.Preferences.CLASSES_ONE_DAY,12);finalStringtmp=newStringclassCount;for(inti=0;i<classCount;i+)tmpi=AppConstant.CLASSES_ONE_DAYi;ArrayAdapter<String>classAdapter=newArrayAdapter<String>(CurriculumAdd.this,android.R.layout.simple_spinner_item,tmp);classAdapter.setDropDo

27、wnViewResource(android.R.layout.simple_spinner_dropdown_item);classSpinner.setAdapter(classAdapter);classSpinner.setSelection(bundle.getInt("onClass"),true);/设置提醒时间的spinnerArrayAdapter<CharSequence>aheadTimeAdapter=ArrayAdapter.createFromResource(CurriculumAdd.this,R.array.class_remi

28、nd_time,android.R.layout.simple_spinner_item);aheadTimeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);remindSpinner.setAdapter(aheadTimeAdapter);remindSpinner.setSelection(AHEAD_TEN_MIN);coursesCursor=mCourseDAO.getAllCourses();SimpleCursorAdaptercoursesCursorAdapter=

29、newSimpleCursorAdapter(this,android.R.layout.simple_spinner_item,coursesCursor,newString"course",newintandroid.R.id.text1);coursesCursorAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);coursesSpinner.setAdapter(coursesCursorAdapter)buildingsCursor=mBuildingDAO

30、.getAllBuildings();SimpleCursorAdapterbuildingsCursorAdapter=newSimpleCursorAdapter(this,android.R.layout.simple_spinner_item,buildingsCursor,newString"building",newintandroid.R.id.text1);buildingsCursorAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);building

31、sSpinner.setAdapter(buildingsCursorAdapter);/开始周数finalintendWeek=settingsPreferences.getInt(AppConstant.Preferences.ALL_WEEK,22);finalStringstartWeeks=newStringendWeek;for(inti=0;i<startWeeks.length;i+)startWeeksi=AppConstant.WEEKS_ON_TERMi;)ArrayAdapter<String>startWeeksAdapter=newArrayAda

32、pter<String>(CurriculumAdd.this,android.R.layout.simple_spinner_item,startWeeks);startWeeksAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);weekStartSpinner.setAdapter(startWeeksAdapter);/结束周数setWeekEndSpinner(1,endWeek);this.startManagingCursor(coursesCursor);thi

33、s.startManagingCursor(buildingsCursor);)/设置结束周数。paramstart上限。paramend下限。*/privatefinalvoidsetWeekEndSpinner(intstart,intend)*开始周数被选择后的回调方法。*/publicvoidonWeekStartItemSelected(AdapterView<?>view,Viewv,intposition,longid)finalintendWeek=settingsPreferences.getInt(AppConstant.Preferences.ALL_WEEK

34、,22);/*setWeekEndSpinner(position+1,endWeek);finalStringendWeeks=newStringend-start+1;for(inti=0;i<endWeeks.length;i+)endWeeksi=AppConstant.WEEKS_ON_TERMstart+i-1;ArrayAdapter<String>endWeeksAdapter=newArrayAdapter<String>(CurriculumAdd.this,android.R.layout.simple_spinner_item,endWee

35、ks);endWeeksAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);weekEndSpinner.setAdapter(endWeeksAdapter);weekEndSpinner.setSelection(0);/*是否已经填写完整(上课地点及科目)*return当且仅当上课地点或科目至少有一个为空时,弹出提示返回false,否则返回true。*/privatefinalbooleanhasCompleteFill()0)if(coursesCursor.getCount()&

36、lt;=mToast.setText(R.string.add_curriculum_courseIsNull);mToast.show();returnfalse;0)if(buildingsCursor.getCount()<=mToast.setText(R.string.add_curriculum_buildingIsNull);mToast.show();returnfalse;returntrue;/*检查上课时间是否冲突。*return当且仅当冲突时返回true,否则返回false。* /privatefinalbooleancheckWeeksConflict(Curr

37、iculumcurriculum)curriculum.setDay(daySpinner.getSelectedItemPosition();curriculum.setOnClass(classSpinner.getSelectedItemPosition()+1)Cursorc=mCurriculumDAO.getCurriculumsWeeks(curriculum.getDay(),curriculum.getOnClass();while(c.moveToNext()if(curriculum.isConflictWith(c.getInt(c.getColumnIndex(&qu

38、ot;weeks")c.close();returntrue;c.close();returnfalse;/上课周数实际上是否为空。paramcurriculum课程信息return当且仅当为空时返回true,否则返回false。* 清除输入文本。* /privatefinalvoidclearEditText()remarkEdit.setText("");/*roomNumEdit.setText("");* /privatefinalbooleanisWeeksNull(Curriculumcurriculum)if(curriculum

39、.getWeeks()&0xffffff)=0)returntrue;returnfalse;/* 保存课程信息。* /privatefinalvoidsaveCurriculum(Curriculumcurriculum)coursesCursor.moveToPosition(coursesSpinner.getSelectedItemPosition();curriculum.setCourseId(coursesCursor.getInt(coursesCursor.getColumnIndex("_id");buildingsCursor.moveToPo

40、sition(buildingsSpinner.getSelectedItemPosition();curriculum.setBuildingId(buildingsCursor.getInt(buildingsCursor.getColumnIndex("_id")curriculum.setRemind(MyUtils.getRemindTime(remindSpinner.getSelectedItemPosition();curriculum.setRoomNum(roomNumEdit.getText().toString();curriculum.setRem

41、ark(remarkEdit.getText().toString();/添加课程的开始肯定是一节课也没有上过curriculum.setSign(DEFAULT_SIGN_STATE);curriculum.setDeleted(DEFAULT_DELETE_STATE);/颜色后来再设置curriculum.setColor(0);if(mCurriculumDAO.insertCurriculum(curriculum)mToast.setText(R.string.add_curriculum_addSuccess);mToast.show();elsemToast.setText(R

42、.string.add_curriculum_addFailure);mToast.show();/*得到表示上课周数的int型数据。*return*/privatefinalintgetCurriculumWeeks()intweeks=0;/设置上课周数finalintstart=weekStartSpinner.getSelectedItemPosition()+1;finalintend=weekEndSpinner.getSelectedItemPosition()+start;finalintradioId=weekGroup.getCheckedRadioButtonId();i

43、f(radioId=oddRadioButton.getId()weeks=Curriculum.weekModelParseToInt(start,end,AppConstant.Weeks.ODD,AppConstant.Weeks.FLAG_ODD);elseif(radioId=evenRadioButton.getId()weeks=Curriculum.weekModelParseToInt(start,end,AppConstant.Weeks.EVEN,AppConstant.Weeks.FLAG_EVEN);elseweeks=Curriculum.weekModelPars

44、eToInt(start,end,AppConstant.Weeks.ALL,AppConstant.Weeks.FLAG_ALL);returnweeks;在添加课程”的Activity中,ActionBar具有三个按钮,分别是返回上层、放弃、保存,符合AndroidDesign的设计标准,用户很快即可上手,如图4.1所示。在dayView视图中,每一个item代表一个课程项,长按课程项会弹出ContextMenu,也即上下文菜单,再选择所需要的操作。长按事件在触屏手机的应用很常见,把一些不常用到的功能放在上下文菜单中是符合AndroidDesign的设计,让用户以最少的触摸操作完成需要做的

45、事,这种设计与哈夫曼树也是符合的。如图4.3所示至夏里副二星期一而1行061_高级操柞系统M2节10201ZM,加高触网络千益师第*B他00-01,粗£?4306中H特色社会主义东天祥图4.3在长按课程项后弹出了ContextMenu,且以ContextualActionMode显示,这也是个很合理的设计,避免了弹出对话框占用屏幕空间,将需要用到的选项在ActionBar中显示,其中有3项,分别是详细信息(属于数据查询模块)、编辑、删除。编辑界面同添加界面布局是一样的,唯独自动将所有原本存储在数据库的该课程信息自动填充在每个下拉菜单与输入框中,用户只需修改需要的项再点按保存”即可完成

46、编辑”操作。修改成功后会通过一个短暂的Toast提示用户操作成功与否。删除课程功能在ContextMenu的右上角,点按删除”即可删除选中的课程项,但是在数据库中并没有真正的删除,数据库中使用到上面提供的一个deleted字段标记该课程项是否被删除,这样的好处是可撤销删除操作。在点按删除后项目会从列表中删除,同时会自动弹出一个自定义的Toast,点按所示的撤销即可撤销用户的删除操作。4.2.2课程数据显示视图模块数据的显示即数据查询,在整个系统中几乎是到处可见,整个系统有dayView即日视图、weekView即周视图、staView即统计视图。每一个view者B需要显示必须的信息,在日视图中

47、需要显示当天的课程,左右滑动可以看到一周7天的课程,但是每一处的信息显示都需要根据具体的模式相应的来显示出课程信息。例如在日视图中把一天的课程按照上课的顺序列出来,其中每项是一个listitem,这是一个自定义的item,显示了一些必要的信息,如上课时间(第几节,具体时间)、上课地点、课程名、教师名,这些都是必要的信息,4.4所示。同时课程名的字体较大,因为课程名是最主要的,其他一些必要信息以相对较小的字体显示,这些都是相对比较次要的。软件还会自动判断该课程在本周中是否有课,有课则是正常显示,无课则采用灰色跟叉号显示。如图hJII11总课表用三HRfflfiIS六星期一星曰二襄江1OM-124

48、W葡沛00-00-01«图峙色社会主义抵工程图4.4数据库中的t_curriculums表的字段很多,表示其录入的信息也相对较多,需要查看这些具体详细的信息的话可以点击每项具体的课程,在弹出的对话框中,标题栏显示课程名+教师名,然后上课的时间、地点、上课周、备注、签到信息都显示在这个对话框中。在周视图中,由于手机屏幕大小的限制,显示的信息有课程昵称(这个也是为课程总表而设计)、上课地点的信息,周视图中具有判断当前时间的功能,整个表格相当对一个时间轴,过去的时间用灰色显示,未来的时间以白色色块显示,同时点击小方块可以查看或者是添加课程,大大方便了用户通览一周的课程。签到视图周同样有查询

49、操作,会将所有课程列出,用小方块来表示每一周,签到周将会以打勾的小方块表示,无课周将会以带叉的小方块显示(这里的列表会显示每一个在t_curriculums中的记录,即若是一科目一周中有4节课,在这里就会显示4条该课程的签到信息),点击其中任何一条就会提示是否添加考试,添加考试后所有属于该科目的课程记录就会合并为一条记录在考试"Page中显示。在考试"Pag升点击某一项后弹出对话框提示输入分数以及课程总分信息,然后该科目记录标记为结课并显示在巴结课"Page中,经过了一学期的使用以及最终结课,这样每次课的签到信息则与成绩就有了分析价值,如图4.5所示。图4.54.

50、2.2.数据库读写模块数据库的读写采用标准的DAO(DataAccessObject)即数据访问对象的设计,为整个系统提供接口用来访问数据库。在系统中每一个数据库对象都提供了一个DAO接口。同时配合DTO(DataTransferObject)即数据传输对象用于在ListView中显示数据。关键代码:publicinterfaceICurriculumDAO/*查询所有的课程return返回*/publicCursorgetAllCurriculums();/*查询某一天的课表。paramday指定的某一天,值为0-6,分别表示周日至周六。return返回当天所有课程的id,科目名,教学楼名,

51、课室号。*/publicCursorgetCurriculumsByDay(intday);/*得到在某一天某一节课上课的课程的上课周数信息。paramday表示星期几的一个整数。paramonClass表示在第几节returnCursor,指定星期几和第几节上课的所有课程的上课周数。*/publicCursorgetCurriculumsWeeks(intday,intonClass);/*得到在某一天某一节课上课的课程的上课周数信息。paramday表示星期几的一个整数。paramonClass表示在第几节。paramid当前课程的idreturnCursor,指定星期几和第几节上课的所有

52、课程的上课周数。*/publicCursorgetCurriculumsWeeks(intday,intonClass,intid);/*得到在某一天的某一节课是否有课。paramday表示星期几的一个整数。paramclassOnDay表示在第几节。*/publicCursorgetCurriculumByOnClass(intday,intclassOnDay);/*获取指定某一节课的信息细节信息。(包括具体的科目名,老师名,教学楼,)paramid指定某一节课的ID.returnCursor此Cursor对象已经指向第一个。*/publicCursorgetCurriculumDetai

53、l(intid);/*获取指定某一节课信息(只查询课程表)。paramid指定某一节课的ID.returnCursor此Cursor对象已经指向第一个。*/publicCursorgetCurriculum(intid);publicCursorgetCurriculumCount(intdayOfWeek);/*获取指定某一科目被引用的所有课程信息(只查询课程表)。paramid指定某一科目的ID*/publicCursorgetAllCourseIDCurriculum(intid);/*删除指定的某一节课。paramid指定某一节课的ID.return当且仅当删除成功时返回true,否则

54、返回false。*/id);id);publicbooleandeleteCurriculum(int/*撤销删除某一节课。*/publicbooleanundoDelCurriculum(int/*清空所有课程。*return当且仅当删除课程成功时返回true,否则返回false。*/publicbooleandeleteAllCurriculums();/*查询课程表是否是空的。*return当且仅当课程表中的数据是空的时候返回true,否则返回false。*/booleanisCurriculumsEmpty();/*添加课程。* paramcurriculum要插入的课程。* retu

55、rn当且仅当插入成功时返回true,否则返回false* /publicbooleaninsertCurriculum(Curriculumcurriculum);/* 修改课程。* paramcurriculum要修改的课程。* return当且仅当修改成功时返回true,否则返回false*/publicbooleanupdateCurriculum(Curriculumcurriculum);)4.2.3,系统设置模块系统设置,如本学期周数、当前周、一天课程数、一节课时间、课间休息时间以及每节课的上下课时间,这些都需要用户根据自身情况进行设置。在Android中系统提供了一个继承自Act

56、ivity的类为PreferenceActivity,该类提供简当的生成系统设置菜单的功能,会自动将控件的状态保存至SharePreference故件中,这些设置信息以键值对的形式保存,在系统的其他地方同样可以很方便的从SP文件中获取设置信息。在本系统中,有如下设置项:1)学期周数(allweek),用于表示一学期的周数;2)开学日期(fristdayyear,fristdaymonth,fristday),这是根据用户设置当前周,然后通过计算得到开学日期所在周的第一天(本系统中周日代表一周的第一天)o这样就可以在任何情况下根据开学日期来计算得到当前周的值;3)一节课时间(classlastmin),表示一节课的持续时间,单位分钟;4)课间休息时间(classbreakmin),表示默认的课间的休息时间,单位分钟,这两项的作用在后面阐述;5)上课时间(classtime+id),其中id表示第几节课,在设置Acti

温馨提示

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

评论

0/150

提交评论