《C语言程序设计》课程移动学习平台的设计与实现
2018-08-22贾玉宁杨颖
贾玉宁,杨颖
(阜阳师范学院计算机与信息工程学院,阜阳 236000)
0 引言
互联网的发展使计算机技术在教育领域也得到了广泛的应用。近些年移动通信技术的发展更是推动了一种新型的数字化学习方式出现——移动学习[1]。针对计算机科学与技术及相关专业学生零基础学习《C语言程序设计》课程入门难的问题,通过对传统课堂教学和学生学习方法的充分调研分析发现,完全依赖于教材、教师和教室的传统意义上的大班教与学很难使学生的深度学习行为发生。因此,根据项目组成员学习MOOC课程的体验和收获,提出了移动互联网+高级语言程序设计的学习平台的新思路。结合本校学生特点和专业培养目标,设计和实现了C语言程序设计的学习平台,其目标是提升学生的学习兴趣,使学生的深度学习行为真正发生,奠定学生扎实的程序设计能力。
1 学习平台的需求分析
《C程序设计语言》的很多知识点比较枯燥难懂,课时有限,仅仅只是课堂时间是不能够让每个学生很好地掌握该课程的知识结构。通过一些普通本科院校学生的网上问卷需求调研发现,学生除了按照教学计划开展课堂学习之外,课余的碎片化时间往往通过网络开展自主学习。
C语言学习平台作为日常学习的辅助手段,主要目的是解决学生学习遇到的困难以及提升学生对知识的掌握。调查发现,学生会对一些新学到的概念以及细节性的问题理解不清,所以C语言学习平台需要有疑难解析的功能;为了开拓学生的解题思路和打破原有的解题模式,一题多解功能也是必不可少的;知识是需要不断学习并强化的,能力拔高功能就是提升学生技能层次的功能;与教师或者同学的交流也是学习的重要环节,讨论区也是必要的功能。图1是该学习平台从用户的角度描述的用例图。
图1 学习平台的用例图
C语言学习平台需要手机端的支持,考虑到手机系统的普及度以及使用度,C语言学习平台的开发是基于Android移动系统,基于Android平台来开发移动学习应用更具可行性[2]。该C语言学习平台使用Android Studio开发工具开发。Android Studio是谷歌推出的新的Android开发环境,开发者可以在编写程序的同时看到自己的应用在不同尺寸屏幕中的样子[3]。
该C学习平台采用Fragment而不是Activity来管理UI,绕开Android系统Activity使用规则的限制。Fragment用于在一个Activity中描述部分操作界面和相关的行为,使用Fragment分散整个Activity的布局体现出了良好的模块化思维[4]。该平台用到了两个重要的支持类库,一个是Fragment类(android.support.v4.app.Fragment),另一个是 FragmentActivity类(android.support.v4.app.FragmentActivity)。
2 C学习平台的设计
2.1 系统模块设计
根据用户需求总结出来的反映了用户需求的系统逻辑模型转换成可以实施的物理模型,把整个设计划分成单元,主要解决如何去做的问题。整个应用程序分为四大模块,分别是疑难解析、一题多解、能力拔高和讨论区。模块结构图如图2所示。
图2 C语言学习平台模块结构图
2.2 数据存储的设计
此项目运用的数据存储是JSON,其全称是JavaS-cript Notation(JavaScript对象表示法)[5]。JSON独立于编程语言,它表达数据的方式对通用的编程概念都很友好,存储形式也比较简单,通过“名称-值对”的形式构成的,书写简单。不同模块的JSON文件相互独立,没有错综复杂的关系。
为了实现不同模块呈现不同的内容,建立三个JSON文件,分别是与“疑难解析”对应的propra.json、与“一题多解”对应的radom.json和与“能力拔高”对应的simulation.json文件,存放在assets文件夹下。三个JSON 文件都是用“description”、“type”和“title”名称,冒号的右边则是相应的值。在相对应的ProgrammingExercisesFragmentController、RandomPracticeFragmentController和SimulationExercisesFragmentController类中定义PATH变量,即private final String PATH;再给PATH赋予不同的JSON文件名,然后通过initData(PATH)方法来调用JSON文件。JSON文件与相应的类的关系如图3所示。
图3 JSON文件与相应的类的关系
讨论区需要从网上服务器存取数据,并不是依赖于本地,所以讨论区并没有使用到JSON存储。
3 C语言学习平台的实现
3.1 主界面
为了给用户展示一个直观的界面,该平台主界面采用了在界面中心放四个圆形按钮的设计,每个按钮对应一个学习模块,当用户进入该应用时就能知道该应用的功能。用户界面如图4所示。
主界面的布局用的就不是线性布局LinearLayout,而是相对布局RelativeLayout。RelativeLayout布局中的组件是相对其他组件进行位置摆放的,具有一定的摆放自由性,而LinearLayout布局中的组件是按照平行或者垂直方向进行摆放的,这里为了按钮摆放的美观,进而采用了相对布局RelativeLayout。
3.2 C语言学习平台功能的实现
为了能够在“疑难解析”、“一题多解”和“能力拔高”三个模块之间实现随意滑动切换,在顶部设计了能够滑动的导航栏,如图5所示。
图4 用户界面
图5 滑动的顶部导航栏
该导航菜单是由ExamViewPagerAdapter类控制的,ExamViewPagerAdapter继承于FragmentPagerAdapter类,该类适合相对静态的页面,并且数量较少的。在ExamViewPagerAdapter类中声明动态数组ArrayList<>,变量名为 fragments,以及 ProgrammingExercisesFragment、RandomPracticeFragment和SimulationExercises-Fragment类的对象,让fragments调用add()方法添加到List<>里。如图6所示。该界面是通过fragment来管理activity的,activity在其视图层级里提供一处位置来放置fragment的视图。MainActivity托管着ProgrammingExercisesFragment、RandomPracticeFragment和SimulationExercisesFragment如图7所示。
图6 ExamViewPagerAdapter与三大模块类的关系
图7 MainActivity托管着ProgrammingExercisesFragment、RandomPracticeFragment和SimulationExercisesFragment
页面滑动的设计可以让用户通过滑动页面直接进入相应的学习模块,而不用返回主界面进行操作。
主界面有“疑难解析”、“一题多解”、“能力拔高”和“讨论区”。疑难解析的主要功能是把各个章节较难理解,以及学生在学习C语言课程时所忽略的重要知识点,为了让学生能够循序渐进的学习知识,该模块主要以文字的形式把问题呈现给学生。当学生用户点击该模块时,页面会跳转到问题的分类页面,如图8所示。在跳出的分类页面中选择相应的类型点击,然后界面会跳转到“疑难解析”的界面,如图9所示。
图8 疑难解析分类界面
图9 疑难解析界面
图10 一题多解界面
图11 一题多解分类界面
图12 一题多解解析界面
图13 一题多解界面
图14 能力拔高分类界面
一题多解是根据某一个典型的例题,给出解出这个例题的思路和多种方法,打破一题一解的思路,从而开拓学生的思维能力。在图8进入“疑难解析”的状态下,用户可以通过滑动页面直接进入“一题多解”,无需返回主界面进行操作,一题多解界面如图10所示,如果想了解一题多解的类型,也可以返回主界面点击“一题多解”按钮进入一题多解分类界面,如图11所示。为了提供可以参考的答案,在界面底部有“解析”按钮,点击后会出现系统给出的参考答案,一题多解解析界面如图12所示。
能力拔高当用户解决了困惑自己的问题,并且也通过相应的题目得到训练,有了努力做基础,可以选择更高难度的编程题。那么“能力拔高”是用户进一步提升知识能力,以及运用知识的阶梯。通过滑动页面来进入“能力拔高”界面如图13所示,在能力拔高分类界面中有不同类别的拔高性题目,能力拔高分类界面如图14所示。该模块设有解题思路,解题的突破口。“解析”按钮给出这道题的参考答案,能力拔高解析界面如图15所示。
3.3 讨论区模块的实现
讨论区是加强用户与用户交流的模块,能够解决用户在学习中遇到的问题,以及分享自己的学习经验。用户之间的交流能够加强对知识的理解以及能力的提升都是有非常大的帮助,用户可以在讨论区发表自己的帖子。讨论区界面如图16所示。
图15 能力拔高解析界面
图16 讨论区界面
4 结语
基于Android开发的C语言程序设计学习平台功能更具针对性,通过在本院理工科学生中的测试使用,学生普遍反映良好。该学习平台能够很好地辅助学生的课堂学习,同时根据个人所需对程序设计进行深入学习。随着平台的投入运行,根据学生的使用需求,后期会不断增加新的题目内容,包括在“能力提升”模块增加程序设计大赛的题目等。另外,还会进一步完善讨论区的功能。