当前位置:首页 >> 工学 >>

毕设论文-Android点名系统


基于 Android 的上课点名系统的设计与实现
摘要
传统的课堂点名费时费力,而且容易造成疏漏。现在上课老师点名的方式还很 传统, 在占用大量时间的同时还令人反感, 以文本形式进行签到数据的管理效率低下。 而随着物质水平的提高和移动通信水平的发展,几乎人人都有了自己的手机,手机成 为了人们生活中必不可少的工具。在这个互联网高度发展的时代, Google 公司旗下 的 Android 手机平台以其人性化的界面以及独特的操作体验在短时间内占领了移动 通信市场。随着 Android 平台的普及和使用, Android 手机应用关注度越来越高。 Android 开发技术是当今的一个热门技术,涉及到手机通讯、手机游戏、日常应用等 各 个方 面 。 如 今利 用 Android 手 机 解决 日 常问 题 的 条 件也 趋 于 成熟 , 于 是 用基 于 Android 手机的课堂点名系统来点名以及进行智能的签到数据统计必定是将来课堂点 名签到的一个趋势。 本文阐述了软件的功能需求、界面需求及性能需求。介绍了 Android 系统架构及 开发平台,根据系统的特性进行软件架构设计,引入了二维码技术,完整实现了一款 实用的上课签到系统。随着手机硬件的不断发展和 Android 系统的更新升级,本签到 软件还有更多功能扩展的空间和技术研究的方向。 该系统采用 Android SDK , Eclipse 作为开发工具。 关键词: Android ;签到系统;二维码

摘要 ............................................................................................................................................ 1 Abstract ......................................................................................................... 错误!未定义书签。 1 绪论 ......................................................................................................................................... 1 1.1 课题背景 ........................................................................................................................ 1 1.2 点名系统的发展 .............................................................................................................. 1 1.3 本文主要工作 ................................................................................................................. 2 2 Android 系统简介 .................................................................................................................... 3 2.1 Android 系统概述 .......................................................................................................... 3 2.2 Android 系统架构 .......................................................................................................... 4 2.3 Android 开发环境配置 ................................................................................................... 6 2.4 Android 程序开发 .......................................................................................................... 9 2.4.1 程序开发组件 ...................................................................................................... 9 2.4.2 程序界面开发 .................................................................................................... 12 2.5 Android 系统数据存储方式 .......................................................................................... 14 3 SQLite 数据库 ........................................................................................................................ 14 3.1 SQLite 主要语法 .......................................................................................................... 15 3.1.1 结构新建 ........................................................................................................... 15 3.1.2 结构删除 ................................................................................ 错误!未定义书签。 3.1.3 数据操作 ................................................................................ 错误!未定义书签。 3.1.4 事务处理 ................................................................................ 错误!未定义书签。 3.2 SQLite 内置函数 ............................................................................... 错误!未定义书签。 3.3 SQLite 常用操作 ............................................................................... 错误!未定义书签。 3.3.1 数据库文件的打开和关闭 ....................................................... 错误!未定义书签。 3.3.2 数据库文件的查询 .................................................................. 错误!未定义书签。 4 签到系统的设计与实现 ............................................................................................................ 22 4.1 数据库设计 .................................................................................................................. 22 4.2 功能设计 ..................................................................................................................... 22 4.3 系统运行截图 .............................................................................................................. 29 5 结论与展望 ............................................................................................................................ 30 参考文献 ................................................................................................................................... 31 致谢 .......................................................................................................................................... 32

1 绪论
1.1 课题背景
随着社会的发展,经济水平的提高,手机越来越普及。据工信部统计数据,2014 年一月底中国移动通讯用户达 12.35 亿,其中 4.19 亿( 33.94% )为 3G 用户,8.38 亿 ( 67.80% )为移动互联网接入用户。同时伴随着移动互联网技术的发展,手机的功 能也变得越来越丰富。 从原来只具有简单通信功能的非智能手机到现在具有手机操作 系统,除通话功能以外,还集上网、聊天、炒股、收发邮件等功能于一身的智能手机 系统。 基于 Android 平台应用程序的开发就更加具有市场价值智能手机具有五大特点: 具有开放的操作系统,可以自由安装第三方应用,使系统功能得到无限扩展;具有无 线接入互联网的能力, 即在 GSM 网络中需要支持 GPRS , 在 CDMA 网络中支持 CDMA 1X 或 3G 网络;具有 PDA 的功能,包括 PIM( 个人信息管理 )、多媒体应用、浏览网 页、日程记事等;功能强大,扩展性强,第三方支持多;人性化,可以根据个人需要 扩展及其功能。 传统的课堂签到费时费力,而且容易造成疏漏。现在上课老师点名的方式还很传 统,在占用大量时间的同时还令人反感,以文本形式进行签到数据的管理效率低下。 而随着物质水平的提高和移动通信水平的发展,几乎人人都有了自己的手机,手机成 为了人们生活中必不可少的工具。在这个互联网高度发展的时代, Google 公司旗下 的 Android 手机平台以其人性化的界面以及独特的操作体验在短时间内占领了移动 通信市场。随着 Android 平台的普及和使用, Android 手机应用关注度越来越高。 Android 开发技术是当今的一个热门技术,涉及到手机通讯、手机游戏、日常应用等 各 个方 面 。 如 今利 用 Android 手 机 解决 日 常问 题 的 条 件也 趋 于 成熟 , 于 是 用基 于 Android 手机的课堂点名系统来点名以及进行智能的签到数据统计必定是将来课堂点 名签到的一个趋势。

1.2 点名系统的发展
点名是现代企事业管理的基础,也是衡量企事业管理水平的重要标志。随着电 子芯片的高度集成化,点名系统的功能也变得越来越完善和强大,而且越来越容易操 作。以下是点名系统的发展过程: 1) 人工签到的方式:在信息技术还没有被广泛运用的时候,日常 点名管理工作主要 依靠大量的人力来完成; 2) 单一的键盘输入密码方式:常常会有因忘记密码而被拒之门外尴尬的事发生; 3) 接触卡式点名系统:例如:磁码卡,它是把磁质贴在塑料卡片上制成的,磁卡可 以改写,应用方便,其缺点是易消磁,易磨损;铁码卡,这种卡片中间用特殊的
1

金属线排列编码,采用金属烧磁原理制成,不易被复制,铁码卡可有效地防磁、 防水、防尘、是安全性较高的一种卡,但仍然可能会因为卡片被消磁或弄脏,而 将使用人员拒之门外; 4) 感应卡(非接触式 IC 卡):卡片采用了先进的半导体制造技术和信息安全技术, 利用电子回路及感应线圈在读卡器本身产生的特殊振荡频率,当卡片进入读卡器 能量范围时产生共振,感应电流使电子回路发射信号到读卡器,经读卡器将接收 的信号转换成卡片资料,送到控制器对比。它具有以下突出特点:存储量大,从 几字节到几兆字节;体积小,重量轻,携带方便,抗干扰能力强;安全性高,存 储器本身具有控制密码,若非法解密,卡片会自毁;能脱机方式使用,对网络的 要求不高,故投资较小;寿命长,读写次数大于 10 万次;数据保存时间长达 10 年以上。 以上几种点名系统都存在着一个共同的缺点,即不能从根本上杜绝密码 遗失、盗用、破解或冒名顶替等现象的出现。 5) 生物识别系统:生物识别以生物技术为基础,以信息技术为手段,将两大高新技 术交汇融合为一体。 生物识别技术是利用人体生物特征进行身份认证的一种技术。 生物特征是指惟一的、可测量或可自动识别的生理特征或行为特征。生理特征多 为先天性的,如指纹、眼睛虹膜、脸像、静脉等;行为特征则多为后天性的,如 笔迹、步态等。与传统的身份鉴别手段相比,基于生物特征的身份鉴别技术具有 以下优点:不会遗忘或丢失;防伪性能好,不易伪造或被盗;随身携带,随时随 地可用。 由于生物识别技术特有的这些优点,很快受到人们的普遍欢迎,得到了 迅速地发展。

1.3 本文主要工作
本文首先介绍了 Android 操作系统的四层架构及基于 Android 系统的应用程 序开发方法,还介绍了二维码技术。接下来以签到系统的研发过程为例,详细阐述了 开发 Android 系统应用程序的具体过程。本文一共分为五章: 第一章是绪论,主要叙述了签到系统的应用背景以及研究现状进行介绍。 第二章对 Android 系统以及 Android 开发进行了系统地介绍。 第三章对 Android 开发使用的数据库 Sqlite 数据库进行了详细的介绍。 第四章主要介绍了签到系统的功能模块和系统的设计与实现以及对系统的测 试。 第五章对本文的研究内容进行了总结及对未来的发展进行了展望。最后是参考 文献和致谢。

2

2 Android 系统简介
2.1 Android 系统概述
Android 一词本意是指“机器人”,是 Google 公司推出的开源手机操作系统作 为 Google 移动互联网战略的重要组成部分, Android 操作系统借助于 Google 这个强 大的推手和开放手机联盟的支持,由默默无闻变得备受瞩目,各种各样基于 Android 系统的设备相继问世。 虽然 Android 系统从推出到现在不过短短几年时间, 但作为移动终端设备操作系 统中的重量级一员,它的影响力越来越大,吸引了越来越多的开发者、设备生产商和 软件开发商等加入。作为一个推出不久的移动终端开发平台,为何会有如此强大的发 展潜力和如此迅猛的发展速度,每个人都会有自己的答案。总结起来,可能包 括以下 几点: 1)系统的开源性和免费性:Android 系统是一个对第三方软件完全开放的平台, 开发者在编写 Android 应用程序时具有更大的自由度。 2)移动互联网的发展:Android 采用 WebKit 浏览器引擎,与其它系统相比,更 强调搜索功能,界面更强大,是一种融入全部 Web 应用的互联网络平台。 3)相关厂商的大力支持:从组建开放手机联盟开始,Google 一直向服务提供商、 芯 片 厂 商 和 手 机 销 售 商 提 供 Android 平 台 的 技 术 支 持 , 帮 助 他 们 开 发 出 更 好 的 Android 设备。 凡事都具有两面性,作为一个如此受欢迎的系统也不例外。 Android 系统也有自 身的一些缺点,具体如下: 1 )技术需要进一步完善:每个系统都不是完美的, Android 也不例外,系统自 身的一些 bug 需要进一步完善。尤其是 Android 系统作为一个开源的系统,面临的攻 击会比其它封闭系统要多,这是 Android 系统要持续发展所必须解决的一个重要问 题。 2 )开放手机联盟模式的挑战: Android 由开放手机联盟开发、维护和完善,这 种模式,是否会对 Android 未来的发展、定位起到阻碍作用,这些都不能下定论。 3)其他技术的竞争:微软因为拥有 PC 操作系统市场最大的占有率,在未来手 机与电脑互相联动并实现无缝对接方面 Windows Mobile 相比 Android 具有先天优势, 此外,即使在智能终端自身的操作系统上, iOS 系统也是 Android 的一个劲敌。这些 都给 Android 系统的进一步发展带来了巨大挑战,如果能很好的解决这些问题,也将 会进一步促进系统的发展。

3

2.2 Android 系统架构
Android 系统采用了软件栈的设计结构,从上到下由四层组成,分别是 Linux 内核 层、中间层、应用程序框架( Application Framework )和应用层( Applications )。如 图 2-1 所示。

图 2-1 Android 系统架构

下面对每层进行具体的描述: (一) Linux 内核: Android 系统的内核在 Linux2.6 内核的基础上进行了相应的裁 剪和改进,继承了 Linux 内核安全性、内存管理、进程管理、网络协议栈和驱动模型 等。 Linux 内核同时也为硬件和软件之间提供了衔接,屏蔽了下层硬件的具体细节来 为上层提供服务。 (二) Android 函数库: Android 包含一个能被不同组件使用的 C/C++ 库,这些库 通过 Android 应用程序框架来为上层应用程序提供服务,下面是一些常用的核心库: 1)libc:系统 C 库,从 BSD 发展而来的标准 C 函数库,是专门为基于嵌入式 Linux 设备所定制的。 2 )媒体库:基于 PacketVideo OpenCORE ,支持多种常用的音频、视频格式回访 和录制,同时支持静态图像文件。 3 )Surface Manager :管理显示子系统,为多个应用程序提供 2D和 3D 图层的无缝 融合。
4

4 ) SGL:底层的 2D 图形引擎。 5 ) 3D libraries :基于 OperGL ESI.OAPI 实现,可以使用硬件 3D 加速或高度优化 的软件 3D 加速。 6 ) RreeType :位图和矢量字体显示。 7 )SQLite :一个对所有应用程序可用的、功能强大的轻量级关系型数据库引擎。 (三) Android 运行时: Android 运行时环境由一个核心库 (Core Libraries) 和一个 D alvik 虚拟机组成,核心库为上层应用程序编程提供了 Java 语言核心库的大多数功 能。Dalvik 虚拟机是一个不同于其他标准虚拟机的虚拟系统,采用寄存器架构,能在 一个设备中同时高效运行多个程序。它基于 Linux 内核的一些功能,如多线程机制和 内存管理机制等。 Dalvik 虚拟机可以运行 Android 程序,这些程序需要使用 dx 工具转 换成 .dex 类型的可执行文件,该格式文件在大小方面往往比同样的 .class 文件压缩成 的 .jar 文件更小,可以降低对内存的要求。 (四)应用程序框架:包含编写核心应用所使用的 API接口,开发者可以使用这 些接口来编写自己的应用程序,该程序的架构设计简化了组件的重用,任何一个应用 程序都可以发布它的功能块,同时还可以使用其他程序发布的功能块 ( 但是要遵循安 全限制 )。每个应用都会包括一系列的服务和系统,具体如下: 1)丰富而又可扩展的视图:构建应用程序时可以将这些视图进行各种组合来形 成各式各样的应用程序界面。常用的视图包括:列表、网格、文本框、按钮和内嵌的 浏览器等。 2 )内容提供器:提供数据共享的途径,如联系人数据库。 3 )资源管理器:管理非代码资源,如字符串、图片和布局文件等并提供这些资 源的访问方式。 4 )通知管理器:帮助应用程序在状态栏中显示各自的提示信息,如收到短信 5 )活动管理器:管理应用程序的生命周期,还提供导航或回退功能等。 (五)应用程序:包括电话、短信、口历、地图、浏览器、通讯录等核心应用 程序。

5

2.3 Android 开发环境配置
由于 Java 语言具有强大的功能和与平台无关的特性,并且还具备强制类型安全, 因此 Google 选择使用 Java语言来开发 Android 系统下的应用程序。 Eclipse 是一个开放源代码的、基于 Java的且具有良好扩展性的开发平台。 Eclipse 本身只是一个框架和一组服务, 但是通过加入插件可以构建针对不同语言的开 发环境,目前支持的主要开发语言有 Java 和 C/C++ 。基于以上优点选择使用 Eclipse 来 搭建 Android 程序的开发环境并详细介绍环境的配置过程。搭建 Android 开发环境有以 下五个主要步骤:下载并安装 JDK ;下载并安装 Eclipse ;下载 Android SDK ;下载并 安装 ADT 插件;配置 Android AVD 。 1 )下载并安装 JDK ; JDK 是 Java SE Development Kit 的简写,其中包括了 Java 运行环境、Java 开发工具 和一些 Java 核心类库等。在安装 Eclipse 之前,必须先下载和安装 JDK 。 JDK 是由 SUN 公司开发,因此要下载最新的 JDK ,只要登录 SUN公司的官网,选 择适合自己电脑的版本下载并按照提示安装即可,如图 2-2 所示。

图 2-2 下载安装 JDK

JDK 安装完成后,还得配置相应的环境变量才能使用。环境变量的配置分为两部 分,一是 JAVA HOME 变量的配置,二是 CLASSPATH 变量的配置,这两者的配置方 法类似。 2)下载并安装 Eclipse ; 进入 http ://www.eclipse.org/downloads/ 页面,选择合适的 Eclipse 版本下载,如图 2-3 所示。安装时注意选择合适的安装路径。

6

图 2-3 下载安装 Eclipse

3 )下载 Android SDK ; Android SDK 是 Android 专用的软件开发包工具,包括程序开发中用到的函数库、 编 译 程 序 等 资 源 , 是 开 发 Android 程 序 必 备 的 工 具 之 一 。 SDK 的 下 载 网 址 是 http : //developer.Android.com/sdk/index.html ,下载后,不用安装,只要解压到适当的位置 并 在 Eclipse 中 进 行 设 置 即 可 使 用 。 具 体 设 置 方 法 是 在 Eclipse 界 面 上 选 择 Window-Preference-Android , 然 后 在 SDK Location 框 中 选 择 SDK 的 解 压路 径 , 点 击 Apply按钮,最后单击 OK 完成。如图 2-4 。

图 2-4 加载 Android SDK
7

4)下载并安装 ADT 插件; ADT 是为方便 Android 应用而开发的插件,包含一系列强大的扩展功能,可以方 便、快捷的创建、运行和调试 Android 程序。安装 ADT 的步骤如下: 首 先 , 打 开 Elicpse , 选 择 Windows-Preference-Help-Software Updates 然 后 选 择 Available Software 接 着 选 择 Add Sites , 在 弹 出 的 地 址 框 中 输 入 http : //dl-ssl.google.com/Android/eclipse/ , 然 后 单 击 OK 。 在 出 现 的 列 表 中 确 保 http : //dl-ssl.google.com/Android/eclipse/ 选项被选中,然后单击 Install 按钮,最后安照提示 步骤即可完成安装。 5)配置 Android AVD 。 在 Android SDK1.5 版本以后的开发中,必须至少创建一个 AVD 来模拟一套虚拟 设备运行 Android 应用程序。创建 AVD有两种方式,一种是命令行方式,另一种是在 Eclipse 中创建,无论哪种方式,系统都会在默认文件路径下自动创建一个 Android 文 件夹来保存与 AVD 有关的配置信息。这里只介绍在 Eclipse 中创建 AVD 的方法,步骤 如下:打开 Eclipse ,单机 Android 小机器人打开 Android SDK and AVD Manager ;点击 左侧面板的 Virtual Devices ,再点击右侧的 New ;填入 Name ,选择 Target 的 API, SD Card 大小任意;点击 Create AVD 即可完成 AVD 的创建。如图 2-5 。

图 2-5 配置 AVD

8

2.4 Android 程序开发
2.4.1 程序开发组件
一个 Android 应用程序通常由以下五个组件中的任意多个组成: 活动 (Activity ) 、 意图 (Intent ) 、 服务 (Service ) 、 广播接收器 (Broadcast Receiver ) 和内容提供器 (Content Provider )。 Activity 负责应用程序的界面显示; Intent 负责不同组件之间的交互; Service 在后台运行,负责执行程序中比较费时的任务;而 Content Provider 为不同的 应用程序之间提供了一种数据共享方式。 其中 Activity 组件是每个应用程序所必须用 到的,因为任何一个应用程序都必须具备与用户交互的界面。 ( 一) Activity :最 基本 的应 用 程序 组件 ,通 常表 示 为一 个单 独的 屏幕 。 每个 Activity 都 是 通 过 继 承 来 被 实 现 为 一 个 单 独 的 活 动 类 , 一 个 应 用 程 序 通 常 由 多 个 Activity 组成,每个 Activity 都具有自己的生命周期。Android 系统中通过一个被称为 Activity 栈的东西来管理各个 Activity 之间的关系,当有新的 Activity 启动时,它被 置于栈顶,之前的 Activity 被保留在栈中,不再出现在前台,直到当前的 Activity 退 出为止。打开前一个 Activity 可以通过回退来实现。 Activity 的生命周期如图 2-6 所 示,主要有以下 4 种状态,分别是: 1)活动状态,此时 Activity 处于栈顶位置并可以与用户交互,具有可见性。 2)暂停状态,此时的 Activity 失去了焦点,但是依然保持可见状态 (非全屏或是 透明 ) 并保存所有的信息,在内存过低时可能被 “ 销毁 ” 。 3)停止状态,此时的 Activity 由于被其他 Activity 所遮挡而处于不可见状态, 但是依然会保存所有的信息,在系统内存过低时会被 “ 销毁 ” 。 4)结束状态,此时的 Activity 已经被从内存中销毁,下一次启动时需要重置之 前被保存的状态。

9

图 2-6 Activity 的生命周期

从上图可以看出, Activity 有以下三个循环过程: 1)一个 Activity 的生命周期从 onCreate(Bundle)开始,到 onDestroy() 结束,在 onCreate() 中会设置所有的状态和资源,在 onDestroy() 中回收 这些资源,例如一个 Activity 中由于存在比较耗时的任务,会重新开启一个后台线程,这个线程可以在 onCreate() 中创建,在 onDestroy() 中停止。 2)在 onStart() 到 onStop() 之间,Activity 处于生命周期的前两个状态,此时无论 该 Activity 是否能与用户交互,都具有可见性,可以保存相关的信息。 3)从 onResume() 开始到 onPause() 结束, Activity 处于活动状态,可以实现和用 户的交互。 Activity 可以经常在 resumed 和 paused 状态之间切换, 如当一个新的 Intent 被发送时。 Activity 的整个生命周期由以下几个函数定义,其中每个函数都可以重载。 public class Activity extends ApplicationContext { protected void onCreate(Bundle savedlnstanceState) ; protected void onStart() ; protected void onResume() ;
10

protected void onPause() ; protected void onStop() ; protected void onDestroy() ; } (二) Service :没有可视化的用户界面,在后台运行,通常用来完成比较耗时 的工作,并且可以与其它程序进行交互。最典型的 Service 应用是在后台播放音乐或 是从网络上下载数据。有两种不同的方式可以来启动一个 Service ,第一种方式是通 过调用 Context.startService() 来启动,调用 Context.stopService() 来结束,这种方式无 论调用了多少次 startService() 方法, 都只需要调用一次 stopService() 方法来停止服务。 第二种方式是建立一个到服务对象的链接,通过调用这个链接来获得服务。这个链接 通过 Context.bindService() 方法建立, 并通过调用 Context.unbindService() 方法来关闭。 多个用户可以绑定至同一个服务提供对象。 一个 Service 也具有一定的生命周期,如图 2-7 所示。

图 2-7 service 的生命周期

从上图可以看出, service 主要有以下两个循环过程:
11

1)完整的生命周期:从 onCreate() 开始到 onDestroy() 结束,在 onCreate() 函数中 完成初始化,在 onDestroy() 函数中释放所有的资源。例如一个音乐播放程序,可以 在 onCreate() 中创建音乐播放线程,在 onDestroy() 中终止这个线程。 2 )活跃的生命周期:从 onStart() 开始,在这个函数中处理传递给 startService() 的 Intent 对象。 例如对于一个音乐播放程序, 会在 Intent 中找到需要播放的音乐曲目。 (三) BroadcastReceiver :用来接收广播信息,并给出相应的处理结果。这些广 播信息也许来自于系统自身,如电池电量低、拍摄照片、来电话或短信等;也许来自 应用程序,比如下载完成时发送通知来告知用户。每个应用程序拥有的广播接收器没 有限制,并且可以对任意感兴趣的通知进行响应,广播接收器也不具有用户界面。广 播接收器的生命周期很短,只有在广播消息抵达接收器并且接收器中的 onReceive() 函数被调用时处于活跃状态,一旦 onReceive() 函数返回后,广播接收器就处于失活 状态。 ( 四 ) Intent : 协 助 前 面 提 到 的 三 种 组 件 完 成 通 信 过 程 , 一 个 Intent 由 动 作 (Action )、数据 (Data) 、分类 (Category) 、类型 (Type) 、组件 (Component) 和扩展信息 (Extra )等内容组成,系统根据 Intent 中所携带的不同描述信息来决定将此 Intent 交 给哪个组件以及该组件获得 Intent 后要采取的动作。 (五) Content Provider :为应用程序之间共享数据提供了一个统一的接口并隐 藏了具体的数据来源, Android 系统中为一些常见的应用 (如联系人、音乐、图像等 ) 定义了相应的 Content Provider ,调用者通过相应的 URI 来对数据进行访问。通常 Content Provider 将一个应用程序的数据封装,并向需要使用该数据的其他应用程序 赋予权限, 这样就可以使得数据在多个程序之间共享。 需要注意的是, Content Provider 是基于权限控制的,这种做法可以提高数据的安全性。

2.4.2 程序界面开发
Android 系统为开发者提供了丰富的可视化界面设计组件,包括菜单、对话框、 按钮、文本框等,其中最主要的界面元素包括以下三类。 1 )视图组件 (View :是基类 Android.view.View 的一个实例,用来存储屏幕上特 定矩形内的布局和内容属性,由视图又衍生出了一个子类 Widgets( 窗体控件 ),用来 处理屏幕区域的测量和绘制, 常用的 Widget 包括 Text , EditText , Button , CheckBox 和 ScrollView 等。 2)视图容器 (ViewGroup :是基类 Android.view.ViewGroup 的一个实例,用来承 载和管理一组下层的视图和其他视图组,通常称为 View 的容器。 3 )布局管理: Android 使用布局管理器来管理应用程序中各用户界面的组件, 这样做的好处是可以避免因手机分辨率、尺寸等的差异导致编写的应用程序无法移 植,因为布局管理器能根据运行平台调整组件的大小。所有的布局管理器都是
12

ViewGroup 的子类,图 2-8 表示布局管理器中各类的关系。

图 2-8 Android 布局管理器的类图

1 )LinearLayout( 线性布局 ) :该布局中元素之间成线性排列,常用的布局有水平 布局和垂直布局。 2 ) RelativeLayout( 相对布局 ) :该布局中元素之间根据相对位置排列,即在指定 一个元素位置时往往会以它的父元素或其它元素的位置作为参照, 来决定当前元素的 位置,这种布局方式相对随意,没有规律性,但必须保证在使用之前其参照物己经存 在。 3 )AbsoluteLayout( 绝对布局 ) :该布局中元素之间根据坐标排列,即将整个手机 划分成坐标系,通过指定坐标系中的两个偏移量来决定元素的位置。 4 ) FrameLayout( 帧布局 ) :该布局为每个加入的组件都创建了一个空白区域 ( 一 帧 ) ,这些帧会根据 gravity 属性自动对齐,这样会形成组件叠加的效果。 5 ) TableLayout( 表格布局 ) :该布局中元素之间的排列由表格决定,表格的行和 列通过添加 TableRow 或其他组件来控制,通常加入一个 TableRow 或是一个组件都 代表一行,表格的宽度取决于父容器的宽度,这种布局只是实现方式与表格类似,但 元素之间并没有实际的分界线。 Android 中提供了两种方式来利用上面的组件设计布局,一是在 XML 布局文件 中通过设置 XML 属性进行控制,二是在 Java 程序中通过调用函数进行控制,也可以 将这两种方法组合起来使用。 Android 推荐使用 XML 布局文件的方式来控制用户界 面的显示,这样做不仅简单明了,还可以将视图控制逻辑从代码中剥离出来,放入一 个单独的文件中进行控制,更好的体现了 MVC 原则。
13

2.5 Android 系统数据存储方式
Android 系统一共提供了四种数据存储方式,分别是 SharedPreferences( 通过键值 二元组存储简单数据 ) 、文件 ( 存储较大规模的数据 ) 、SQLite 数据库 ( 存储结构化数据 ) 和 ContentProvider( 用于应用程序之间的数据共享 ) ,下面详细介绍每一种方式的具体 使用方法和使用场合。 1) SharedPreferences :用键 / 键值形式的二元组来存储数据,支持的数据类型有 Boolean , string , float , long 和 integer ,通常用来存储默认值、实例变量、 UI 状 态 和 用 户 设 置 等 。 每 个 应 用 程 序 Context 均 有 一 个 SharedPreferences 对 象 , 通 过 getSharedPreferences() 函数来获取该对象,通过 getBoolean() , getFloat() 和 getInt() 等 函数读取该对象中存储的数据,这些函数一共有两个参数,第一个参数为键 / 键值对 中的键,第二个参数为指定键对应的键值,如果该键值不存在则以默认的函数返回值 代替。 修改 SharedPreferences 对象中的内容需要用到 putBoolean() , putFloat() 和 putInt() 等函数,并且在修改完后还要调用 commit() 函数,否则修改无效。 2)文件操作:Android 上层应用程序是用 Java 语言编写的,在 Java的 I/O 包中提供 了 大 量 的 文 件 读 写 函 数 , 如 java.io.BufferedReader , java.io.FileInputStream , java.io.FileOutputStream 等,Android 对这些函数都有良好的支持,除此之外,Android 还提供了 openFileInput 和 openFileOutput 这两个函数用来简化对文件的读写操作,与 Java I/O 包中的函数所不同的是, 这两个函数只能操作当前应用程序所在目录的文件。 3 ) SQLite 数据库: SQLite 是一种开源的、与底层无关的,轻量级的数据库,最 大支持 2048GB 的数据存储,与其它大多数 SQL 数据库不同的是, SQLite 没有独立的 服务进程。 SQLite 中的数据库文件是跨平台的,可以在 32 位和 64 位系统之间,甚至 Big-Endian 和 Little-Endian 两种不同的架构之间自由的拷贝数据, SQLite数据库被用在 大量的消费类电子产品中。 SQLite 数据库具有以下特点: 1)无需配置:直接解压可执行文件即可运行。 2)没有服务进程:不需要提交到服务器处理后再返回结果。 3)单个数据文件:将用户数据存储在一个文件中。 4)数据文件可跨平台移植:不受操作系统位数和架构的限制。 5)紧凑:不需要系统提供太大的资源,占用不到 1M 的内存空间就可运行。 6 ) 事 务 性 : 采 用 独 立 事 物 处 理 机 制 , 遵 守 ACID (Atomicity , Consistency , Isolation , Durability) 原则。使用数据库的独占性和共享锁处理事务,这样既允许 多个进程并发读取数据库中的数据,又能保证最多只有一个进程写数据,可以有效地 防止读脏数据、不可重复读、丢失修改等异常的发生。

3 基于 Android 平台的教学点名软件设计
14

3.1 需求分析
需求分析的任务是调查应用领域,对应用领域中各种应用的信息要求和操作要 求进行详细分析, 形成需求分析说明书。 需求分析的目标是给出应用领域中的数据项、 数据项之间的关系和数据操作任务的详细定义,为数据库的概念设计、逻辑设计和物 理设计奠定坚实的基础,为优化数据库的逻辑结构和物理结构提供可靠依据。

3.1.1 点名系统的主要特点和要求
本点名系统主要是针对学校点名而研发的。学校点名不同于普通的企业单位点 名。其特点是体系庞大,班级众多,上课时间各不相同。而且有时会由于临 时原因调 课,而且在非上课时间学生的流动性比较大,容易在非上课时间或由非点名对象对点 名造成干扰。由于学生的出勤情况是和期末的成绩挂钩,因此点名记录的时效性比较 长。任课教师需要随时了解自己的课程学生的出勤情况,同时管理人员也要能快速够 统计学生们的出勤情况,为了让学生们能够改正不规范的学习态度,要及时给予学生 们缺勤的警告和处理。 学校点名系统的主要要求就是能够考察记录学生的上课出勤、旷课、早退、请 假的情况。首先点名系统应具有区间划分功能,能够准确的划分上课班次、时间从而 对不同的课时进行点名 ; 其次是不能占用上课时间对学生进行点名,为了提高效率节 约时间,对点名的速度也是由要求的 ; 然后就是能对学生进行准确识别,杜绝代点名 现象 ; 由于非正常出勤在时间上有一定的相似度,因此 点名系统必须能区分学生的旷 课、迟到、早退、请假情况,遇到学生请假的情况,教师可以在系统中提前输入请假 信息不予点名,或者如果请假学生己经被记录为缺勤,老师可以视具体情况更改出勤 信息,同样,如果遇到节假口或者特殊事件造成的集体缺勤、迟到或者早退的情况, 系统管理员能在事前或者事后进行记录修改 ; 在非点名时间不记录任何点名输入,以 排除非点名时间的输入对点名的干扰,同时要求能分辨出数据库中不存在的指纹,排 除非点名对象对点名的干扰 ; 保存以往点名记录,可供管理员查询,任课教师可查询 本人课程学生以往的出勤情况,被点名的学生可以查询本人以往的点名情况。 技术方面的难点在于,由于高校非固定教室的教学模式,造成需要在各个上课 点前,服务器将给定教室内上课学生的指纹在课前分发到各教室,点名后又需要将点 名情况传回服务器,通信要求、并发要求、及异常处理问题。

3.1.2 设计目标及原则
1 )系统设计目标 学生上下课方便直观地扫描二维码进行点名 ; 简捷处理请假、审核,节口设置等 相关事项 ; 如实反映每个人的点名情况,杜绝舞弊 ; 管理员可随时查询点名记录与课表 档案 ; 管理员可方便地统计、打印或导出点名统计结果 ; 经济合理的运营成本。
15

2 )系统设计原则 先进性 : 采用当前先进的技术和成熟稳定的设备 ; 安全性 : 数据的安全性与课表资料的安全性 ; 实用性 : 合理的配置,合适的功能使整个系统运行稳定、可靠并且成本最省 ; 方便性 : 功能完善,软件操作清晰简单 ; 可扩展性及易维护性原则 : 系统在容量和功能上考虑了用广将来的需求增长,可 以随意地增加新的设备或新的系统,并保证使用的一致性 ; 开放性 : 为保证其他设备的协同运行,同时考虑到投资者的长远利益,本系统必 须是开放系统,并结合相关的国际标准或工业标准执行。

3.1.3 系统体系结构分析
管 理 信息系统的平台体系结构发展历史从单机单用户发展到文件 / 服务器 (F/S) 模式,再到客户机 / 服务器 (C/S) 模式和浏览器 / 服务器 (B/S) 模式。 在本系统中,结合实际使用情况,采用 C/S 和 B/S 结合的体系结构,以数据库为 服务器端,其它均为客户端。数据库服务器主要为点名资料,点名数据的存取提供服 务。Web服务器为请假管理、点名数据的查询输出提供服务。需要对数据库进行频繁 操作例如添加、修改资料的人员使用 C/S 客户端,这样客户端功能比较强、安全系数 也高。查询模块中则使用 B/S ,客户端进行数据的查询,这样客户端比较灵活,有 IE 浏览器,就可以通过网络查询每个人的点名情况,可以不受环境限制。如此处理,可 充分发挥各种模式的优越性, 避免了 B/S 结构在响应速度等方面的缺点以及 C/S 结构在 维护和灵活性等方面的缺点。

3.2 功能模块设计
经过分析,本点名系统各模块的功能简述如下 : 基本信息设置模块:该模块主要用于系统基础信息设置,包括部门结构、学生 或教师、班次、排班、点名规则、请假类型、法定节假口等信息。具体包括以下子模 块。 1 )部门结构 该部分主要是指教学单位的组织结构,用于增加、修改、删除单位的部门,对 部门的人员进行设置,可以按树形结构录入。 2 )学生和教师信息 该部分主要提供用户注册功能,包括学生和教师,并将注册用户信息保存在对 应数据库的数据表中。 3 )班次信息 该部分的班次信息是指教学单位实际的班次信息,即学校作息时间。 4 )排班信息
16

该部分主要是指每个学生的课程表、或每个教师的上课表。 5 )点名规则 点名规则中包含系统一系列的规定,迟到、早退的处理规定等。 系统管理:这是一个后台管理模块,只有管理员才能使用它。系统管理中有以 下子模块 : 1 )数据管理 数据管理包括系统数据初始化、数据库备份、数据库恢复等批量操作,以及基 本数据的添加、删除、修改和查询等操作。 2 )二维码管理 二维码管理是由管理员向数据库服务器添加、删除、修改学生 / 教师基本信息, 由服务器自动生成二维码并下发等管理。 3 )点名管理 点名管理包括学生 / 教师点名、点名结果处理、点名统计等功能。 4 )用户管理 管理员对学生 / 教师的权限进行动态设置。 5 )系统设置 系统设置包括数据库服务器地址设置、点名时间段设置、系统时间设置等。 查询:该部分是系统结构的核心部分,用于点名结果的查询和点名报表的打印 输出。包括以下子模块 : 1 )点名信息查询 该部分主要查询学生 / 教师出勤的情况,可单个查询,也可以以部门为单位查询 集体出勤结果。 2 )异常点名查询 该模块主要用来对学生病 / 请假、缺签到 / 退、集体点名异常等一些异常点名进行 处理。学生病假、请假时,都没有点名记录,为了准确统计点名情况,并在报表中对 病假、请假信息进行统计,必须对这些信息进行详细的登记。缺签到 / 退处理是对一 些特殊情况下没有点名的记录,但又不能在报表中表现出来时进行人为修正。集体点 名异常也是对于一些特殊的点名记录进行修正。 3 )当前点名查询 该部分用于查询学生当前时间的出勤情况,结合学生的班次设置,可以统计出 当前时间的学生出勤情况。可按个人查询,也可以以部门为单位查询。 4 )点名报表管理 该部分用于输出系统的点名结果。 系统维护,该模块主要对系统数据进行维护处理,分为以下子模块 : 1 )管理员设置
17

该部分主要用于设置系统管理员及其操作密码。管理员权限分为“完全权限” 和“普通权限”。完全权限拥有所有的权限,“普通权限”只有查询及部 分功能设置 权限。 2 )清除过期数据 该部分主要用来清除系统过期不用的数据,即对 点名记录中过期不再使用的记 录进行删除。在删除之前可选择是否备份数据。 3 )导入点名数据 该部分用来导入其它点名机器上的点名数据,对于单位有多个点名点的系统, 可以将各分点名点的数据集中进行统计管理。用到整个数据库。该功能同时还可用于 数据的恢复。 4 )导出点名数据 该部分用来将点名机器上的数据导出,对于单位有多个点名点的系统,可以通 过此功能将各分点名点的数据导出,汇总到一个集中点进行统计管理,同时可用此功 能来进行系统数据备份。用到整个数据库。 5 )初始化系统 初始化系统是对整个系统所有登录的数据进行清零处理,回到系统初始安装的 情况。用到整个数据库。

3.3 数据库设计
数据库的设计是与系统的开发过程紧密相连的。数据库设计是管理信息系统设 计的核心。数据库设计是在一个给定的应用环境下,构造最优的数据模式、建立起数 据库, 使之能有效地存储数据, 同时构造出应用系统以支持各种应用的信息处理需求。

3.3.1 概念设计
概念设计是对现实世界的一种抽象,即对实际的人、物、事和概念进行人为处 理,抽取人们关心的共同特点,忽略其本质的细节。它独立于机器以及特定的 DBMS , 是系统中各用户共同关心的数据结构。 根据数据库的设计流程,就可以设计出能够满足用户需求的各种实体,以及它 们之间的关系,为后面的逻辑结构设计打下基础。这些实体包含各种具体信息,通过 相互之间的作用形成数据的流动。本数据库设计规划出的实体有 : 学生信息实体、教 师信息实体、班次信息实体、点名信息实体等。 学生信息实体 E-R 图如图 3-1 所示。

18

图 3-1 学生实体 E-R 图

教师信息实体 E-R 图如图 3-2 所示。

图 3-2 教师实体 E-R 图

班次信息实体 E-R 图如图 3-3 所示。

图 3-3 班次实体 E-R 图

点名信息实体 E-R 图如图 3-4 所示。
19

图 3-4 点名信息实体 E-R 图

3.3.2 逻辑结构设计
逻辑结构设计的任务是将概念结构 ( 即 E-R 图 ) 转换为与选用的 DBMS 所支持的数 据模型相符的逻辑数据模型,并进行优化。根据前面分析得到的 E-R 图,结合 MySql 的特点进行修正,得到了如下的主要关系数据表。
表 3-1 学生信息表 STUtable

名称 学号 学生姓名 性别 班级代码 密码 二维码 名称 教师代码 教师姓名 性别 角色代码 密码 备注

字段名 STUnumber STUname STUsex ClassID Password EID 字段名 TEAnumber TEAname TEAsex RoleID Password Describe

数据类型 integer text text integer text text 数据类型 integer text text integer text text

是否主码 yes no no no no no 是否主码 yes no no no no no

是否非空 no no no no 是否非空 no no no

表 3-2 教师信息表 TEAtable

20

表 3-3 班次信息表

名称 班级代码 班级名称 备注

字段名 ClassID ClassName Describe

数据类型 integer text text
表 3-4 点名信息表

是否主码 yes no no

是否非空 no no

名称 点名表 ID 学号 教师代码 班级代码 点名时间 日期

字段名 DMID STUnumber TEAnumber ClassID DMtime DMDate

数据类型 integer text text integer time date

是否主码 yes no no no no no

是否非空 no no no no no no

21

4 签到系统的设计与实现
4.1 数据库设计
本系统涉及到签到数据的统计处理等,因此需要进行数据库设计。本系统共设 计了两张数据库表,分别是签到信息表 qiandaotable 和名单信息表 mingdantable 。见 表 4-1、 4-2 所示。
表 4-1 签到信息表 qiandaotable

id date xuehao name

integer text text text
表 4-2 名单信息表 mingdantable

primary key not null not null not null

id xuehao name

integer text text

primary key not null not null

签到信息表包含 id 、签到日期、学号和姓名这几个属性,名单信息表主要包含 学生的个人信息,即学号和姓名等基础信息。

4.2 功能设计
本系统主要设计一款能够在 Android 终端运行的系统,该系统能在课堂上帮助老 师同学方便地进行签到,还能对签到数据进行准确统计,方便老师掌握出勤情况,而 且该系统还具有防止代签的功能。 1 )主界面设计 主界面主要包含一些本系统的基本操作及功能显示。在主界面可以进行签到、 统计、查看名单和历史等操作。实现本部分功能的部分代码如下所示: import DAO.DBAdapter ; import android.app.Activity ; import android.content.Intent ; import android.database.Cursor ; import android.os.Bundle ; import android.view.View ; import android.view.View.OnClickListener ; import android.widget.Button ; import android.widget.DatePicker ; import android.widget.EditText ; import android.widget.Toast ; public class MainActivity extends Activity { Button mingdan ;
22

Button tongji ; Button qiandao ; Button lishi ; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState) ; setContentView(R.layout.main) ; mingdan=(Button) findViewById(R.id.mingdan) ; tongji=(Button) findViewById(R.id.tongji) ; qiandao=(Button) findViewById(R.id.qiandao) ; lishi=(Button) findViewById(R.id.lishi) ; mingdan.setOnClickListener(new OnClickListener() { public void onClick(View v) { startActivity(new Intent("mingdan")) ; } }) ; qiandao.setOnClickListener(new OnClickListener() { public void onClick(View v) { startActivity(new Intent("qiandao")) ; } }) ; lishi.setOnClickListener(new OnClickListener() { public void onClick(View v) { startActivity(new Intent("lishi")) ; } 2 )签到功能 本系统主要利用二维码技术实现签到功能。实现该部分功能的部分代码如下: import java.util.ArrayList ; import DAO.DBAdapter ; public class qiandao extends Activity { Button fanhui3 ; Button qiandao2 ; Button mabutton ; ListView studentlist2 ; DatePicker date ; BaseAdapter ba ; ArrayList<String> al=new ArrayList<String>() ; DBAdapter db ; EditText xuehao2 ; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState) ; setContentView(R.layout.qiandao) ; fanhui3=(Button) findViewById(R.id.fanhui3) ; qiandao2=(Button) findViewById(R.id.qiandao2) ; mabutton=(Button) findViewById(R.id.mabutton) ; studentlist2=(ListView) findViewById(R.id.studentlist2) ;
23

xuehao2=(EditText) findViewById(R.id.xuehao2) ; date=(DatePicker) findViewById(R.id.date) ; db=new DBAdapter(getApplicationContext()) ; qiandao2.setOnClickListener(new OnClickListener() { public void onClick(View v) { String dt=date.getYear()+"."+date.getMonth()+"."+date.getDayOfMonth() ; String[] xh=xuehao2.getText().toString().split("-"); int a=0 ; db.open() ; Cursor c=db.getqiandao(xh[0] , dt); if(c.moveToFirst()) { a=1 ; } db.close() ; if(a==0) { db.open() ; db.insertqiandao(xh[0] , xh[1] , dt) ; db.close() ; Toast.makeText(getApplicationContext() , " 签 到 成 功 " , Toast.LENGTH_SHORT) ; } else { Toast.makeText(getApplicationContext() , " 已经签到 " , Toast.LENGTH_SHORT) ; } xuehao2.setText("") ; } }) ; fanhui3.setOnClickListener(new OnClickListener() { public void onClick(View v) { finish() ; } }) ; mabutton.setOnClickListener(new OnClickListener() { public void onClick(View v) { startActivity(new Intent("MainActivity2")) ; db.open() ; Cursor c2=db.getmingdan2(MainActivity2.ma) ; if(c2.moveToFirst()) {
24

String value=c2.getString(1)+"-"+c2.getString(2) ; xuehao2.setText(value) ; } db.close() ; } }) ; db.open() ; Cursor cursor=db.getmingdan() ; if(cursor.moveToFirst()) { do{ String xh=cursor.getString(1) ; String name=cursor.getString(2) ; al.add(xh+"-"+name) ; }while(cursor.moveToNext()) ; } cursor.close() ; db.close() ; 3 )名单查看功能 主要实现签到名单的查看功能。实现该部分功能的部分代码如下所示: import java.util.ArrayList ; import DAO.DBAdapter ; public class mingdan extends Activity { Button fanhui ; Button tianjia ; ListView studentlist ; BaseAdapter ba ; ArrayList<String> al=new ArrayList<String>() ; DBAdapter db ; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState) ; setContentView(R.layout. mingdan ) ; fanhui=(Button) findViewById(R.id. fanhui ); tianjia=(Button) findViewById(R.id. tianjia ) ; studentlist=(ListView) findViewById(R.id. studentlist ) ; db=new DBAdapter(getApplicationContext()) ; tianjia.setOnClickListener(new OnClickListener() { public void onClick(View v) { startActivity(new Intent("tianjia")) ; } }) ; fanhui.setOnClickListener(new OnClickListener() { public void onClick(View v) { finish() ; }
25

}) ; db.open() ; Cursor cursor=db.getmingdan() ; if(cursor.moveToFirst()) { do{ String xh=cursor.getString(1) ; String name=cursor.getString(2) ; al.add(xh+"-"+name) ; }while(cursor.moveToNext()) ; } cursor.close() ; db.close() ; ba=new ba() ; studentlist.setAdapter(ba) ; } public class ba extends BaseAdapter{ public int getCount() { return al.size() ; } @Override public Object getItem(int position) { return null ; } @Override public long getItemId(int position) { return 0 ; } 4 )历史查看功能 主要实现签到历史的查看功能。实现该部分功能的部分代码如下所示: public class lishi extends Activity { Button fanhui4 ; TextView yingdao ; TextView shidao ; ListView datelist ; ListView weidaolist ; ArrayList<String> al=new ArrayList<String>() ; ArrayList<String> al2=new ArrayList<String>() ; ArrayList<String> al3=new ArrayList<String>() ; DBAdapter db ;
26

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState) ; setContentView(R.layout. lishi ) ; fanhui4=(Button) findViewById(R.id. fanhui4 ) ; shidao=(TextView) findViewById(R.id. shidao ); yingdao=(TextView) findViewById(R.id. yingdao ) ; datelist=(ListView) findViewById(R.id. datelist ) ; weidaolist=(ListView) findViewById(R.id. weidaolist ) ; fanhui4.setOnClickListener(new OnClickListener() { public void onClick(View v) { finish() ; } }) ; db=new DBAdapter(getApplicationContext()) ; db.open() ; Cursor c=db.getdate() ; if(c.moveToFirst()) { do { al.add(c.getString(0)) ; }while(c.moveToNext()) ; } c.close() ; db.close() ; ba ba=new ba() ; datelist.setAdapter(ba) ; datelist.setOnItemClickListener( new OnItemClickListener() { public void onItemClick(AdapterView<?> arg0 , View arg1 , int arg2 , long arg3) { String yd ; String sd ; al2.clear() ; al3.clear() ; db.open() ; Cursor cursor=db.getyingdao() ; cursor.moveToFirst() ; yd=cursor.getString(0) ; cursor.close() ; db.close() ; yingdao.setText(" 应到: "+yd) ; db.open() ; Cursor cursor2=db.getshidao(al.get(arg2)) ;
27

cursor2.moveToFirst() ; sd=cursor2.getString(0) ; cursor2.close() ; db.close() ; shidao.setText(" 实到: "+sd) ; db.open() ; Cursor cursor3=db.getmingdan() ; Cursor cursor4=db.getqiandao(al.get(arg2)) ; if(cursor4.moveToFirst()) { do { al2.add(cursor4.getString(2)) ; }while(cursor4.moveToNext()) ; } cursor4.close() ; if(cursor3.moveToFirst()) { do { int panduan=0 ; for(int i=0 ; i<al2.size() ; i++) { if(cursor3.getString(1).equals(al2.get(i))) { panduan=1 ; break ; } } if(panduan==0) { al3.add(cursor3.getString(2)) ; } }while(cursor3.moveToNext()) ; } cursor3.close() ; db.close() ; ba2 ba2=new ba2() ; weidaolist.setAdapter(ba2) ; }} ); }
28

4.3 系统运行截图
系统的部分运行截图如图 4-1、 4-2 、 4-3 、 4-4 、 4-5 、 4-6 所示。

29

5 结论与展望
点名是高等院校课堂教学的一个重要环节。通过点名,教师可以把握学生的到 课率,可以促进对学生的了解,是师生之间沟通的常用方法之一。开发基于 Android 系统的用于高校教学点名的应用程序是本毕业设计题目的主要任务。 手机应用程序存 储学生与教师的基本信息, 教师可以在手机设备上对学生进行 点名, 并快速认识学生。 本系统主要实现了以下功能: 1 )课程及学生信息管理功能。能够对任课教师及课程的有关属性进行录入和维 护;能够对选修该课程的学生信息进行录入和维护。对于这些基本信息的维护可直接 在手机上完成,也可由手机应用提供数据导入功能,直接将在 PC 机上维护的信息导 入手机中的数据库。 2 )课堂点名功能。上课时,教师运行该点名软件,可完成对学生的点名操作。 点名时,学生只需录入(可通过摄像头利用二维码扫描方式完成)自己的学号,软件 则会根据当前时间及课程设定的上课时间完成出勤情况登记。 3)出勤统计查询功能。实现对特定课程、特定学生的出勤情况的统计功能,以 及特定条件的出勤情况的查询功能。 由于本人的水平有限,虽然本系统实现了一些基本功能,但还存在不足。具体 如下: 1 )系统操作界面还有待优化,界面显示不够友好; 2 )系统的签到方式是使用二维码实现,但由于本人对二维码的学习认知还不够 深入,在实现技术上存在欠缺,没有很好地实现,在以后这方面还值得注意; 3 )系统是基于 Android 的签到系统,即只能在 Android 终端上运行,以后还需 要做到多平台的支持性。

30

参考文献

31

致谢

32


相关文章:
学生课堂点名管理系统 - 论文终稿
密级公开 学 号×× ××大学 毕业设计学生课堂点名管理系统的设计与实现 论文作者 : 指导教师 :××老师 系别 :数学与计算机科学系 专业 :计算机科学与技术 ...
基于安卓的系统开题报告
本科生毕业设计(论文)开题报告 论文题目:基于 Android 平台的学生教务信息系统设计与实现 学 院: 基于 Android 平台的学生教务信息管理系统 一、 课题的研究目的和...
语音点名系统设计与实现
AndroidiPhoneiPad 扫描二维码下载 支持Android / iPhone / iPad文档信息举报文档 ...唐山师范学院本科毕业论文 题学 目生 语音点名系统设计与实现 闫志英 李小慧 讲...
毕业设计任务书
毕业设计(论文)的基本要求: 进行基于 Android 技术的滨州学院二维码点名签到系统的设计与开发, 综合运用 所学的专业理论知识,培养基于 Android 技术的手机应用系统...
基于TTS技术的课堂自动点名系统--成绩模块的设计与实现
苏州大学本科生毕业设计(论文) 目录摘要 ......2008 数据库 为工具设计并实现一个高校教师基于 TTS 技术的课堂自动点名系统。该系统的功能主要有 课程管理模块、...
《 课堂随机点名系统》任务书(计应1)
青岛理工大学琴岛学院 毕业设计(论文)任务书系 专部: 业: 李新新 计算机工程系 计算机应用技术 学号: 20090311050 学生姓名: 设计(论文)题目: 课堂随机点名系统 ...
毕业论文
爱护室内公物,损坏或丢失要赔偿,毕业时要如数交还教室公物方 可办理毕业离校...我班里,内务扣分的同学主动投稿为量化争分,我会在班会课上点名表扬,重大违纪...
基于actionscript的课堂随机点名系统
毕业论文(设计)开题报告书论文(设计)题目 学生姓名 所在院系 基于 ActionScript 的课堂随机点名软件设计 学号 软件学院 专业年级 指导教师姓名、职称 软 讲师 ...
学生综合成绩管理系统设计毕设论文
学生综合成绩管理系统设计毕设论文_管理学_高等教育_教育专区。通信工程毕业论文本科...但传统的校园考勤方式,即点名方式 不仅十分繁琐低效,还会浪费宝贵的课堂时间。 ...
vb毕业论文(设计)
学校代码 10125 专业代码 Shanxi University of Finance and Economics 本科毕业论文(设计) VB 课堂点名回答问题系统的设计与实现 题目: 学专学姓 院: 业: 号: ...
更多相关标签: