课堂点名软件(一)

课堂点名软件
 目  录
一、绪  论 2
1.1.当代大学生出勤的现状 2
1.2.对大学课堂点名现状的分析 3
二、对课堂点名软件的分析 3
2.1 设计思想 3
2.1.1 系统的设计思想 3
2.1.2  系统的设计目标 4
2.1.3  系统的基本框架 4
2.1.3.1 总体模块结构 5
2.1.3.2 子模块结构 5
2.1.4  系统的实现环境 7
2.1.4.1 硬件环境 7
2.1.4.2 软件环境 7
2.2开发工具的选用及介绍 7
三、课堂点名软件的具体设计与实现 10
3.1数据表的设计与实现 10
3.2 课堂点名软件的软件部分设计 11
3.2.1 全体点名模块 12
3.2.2 部分抽点模块 21
3.2.2.1 随机抽点子模块 25
3.2.2.2 出勤抽点子模块 26
3.2.3 课堂答题抽点模块 29
3.2.4 出勤统计模块 33
四、系统的测试与运行 37
4.1   软件测试 37
4.2 测试小结 37
参考文献 38

课堂点名软件(一)

 


一、绪  论
在电器化教学飞速发展的今天,计算机成为课堂辅助教学的重要工具。它在课堂教学的课件演示、课堂实验、课堂学生管理等各个方面发挥着重要的作用。目前课堂教学,尤其是大学课堂教学课件的演示主要是用计算机来实现的,很多的课堂实验也是用计算机模拟可以实现的。而学生管理等方面更是少不了计算机的应用,从一名大学生进入大学校园的那一天起他的档案资料就被录入了学校的计算机。为了更好的管理学生日常的学习、生活大学校园也实现了自动化办公和自动化教学。这种种自动化办公和自动化教学也是由各种功能的软件所支撑其来的。可见计算机软件管理在学生管理中起到了很大的作用。所以我想到了设计一个课堂点名软件来辅助课堂教学。本软件采用Microsoft Visual Studio 2005.NET的Visual C#进行编写。

关键字:课堂点名,点名,课堂,软件
1.1.当代大学生出勤的现状
大学生是国家青年中的精华,是未来建设祖国、实现中华民族伟大复兴的中坚力量;而大学又是人一生中学习知识、锻炼能力的关键时期。大学生在大学中能够接受多少知识直接关系到他们未来的发展,决定他们能不能担当起祖国合格建设者的光荣职责。在大学生的学习生活中,学校教育无疑是最重要的环节,通过老师们的言传身教,大学生能够迅速掌握各种知识,提升个人素质。但是,在当代大学生却存在一个及其普遍的现象——逃课,“必修课选逃、选修课必逃”成为很多学生的上课准则,一个课堂上只有寥寥数人的景象经常发生;有些课堂上虽然有不少人在上课,但迟到、早退,上课中途又逃课等现象却频频会发生。
学生的天职是学习,上好每一节课是其最基本的任务,也是其汲取知识、增长才干的最基本途径。而近些年来,大学生逃课现象在大学校园里普遍出现,并由逐步蔓延的趋势,几乎成了高校中流行的通病,严重影响了大学的教学质量。大学生出勤率的高低是衡量大学教学管理是否科学的标准之一.只有保证有较高的出勤率,才能保证教学质量,才能让学生学到更多的科学文化知识,才能更好的提高大学生科学文化素质.据此希望大学能够采取科学的措施来改善这种状况,营造良好的大学学风,为学生负责,为社会负责。
高校扩招以来,伴随着教育改革的深入,越来越多的青年学子能够有机会步入理想的大学校园,实现青春的梦想.但是大学生并非一些人心中的殿堂,当不少大学生感受到大学所带来的压力时,彷徨和困惑接踵而至.此时,逃课成了他们逃避现实的方法之一.首先,同学们对于"必修课选逃,选修课选逃"等对旷课的说法普遍持有"可以接受"的态度,站人说的70%.虽然没有人支持逃课,但是明确反对的仅占20%,而抱"无所谓"心态的同学则可以理解为默许,占到总人数的10%.(如表1)
    表1对旷课的看法
 支持 反对 可以接受 无所谓
人数 1 2 21 3
百分比 0% 20% 70% 10%

这是旨在了解同学在思想认识上是如何看待逃课现象的,他们在各自思想的指导下,表现为"逃课"或者"不逃课"的行为,与此相吻合的是,同学中有逃课经历的人数竟然站调查人数的66.7%.其中,逃课缺勤的课程选择上,"对其无兴趣的"占总人数的63.33%,"课程管理松的"占26.67%.(如表2)
   
 表2缺勤较多的课程
 专业课 基础课 课程管理松 无兴趣
人数 1 2 8 19
百分比 3.33% 6.67% 26.7% 63.33%
1.2.对大学课堂点名现状的分析
通过上述对当代大学生出勤现状的调查分析,我们得出一个结论当代大学生课堂出勤率持续低下以成普遍现象。目前大学期间学生获得知识增长才干的主要途径仍是课堂教学,但在如今低下得出勤率的情况下学生在课堂又能学到多少知识令人堪忧。由此大部分学校或任课教师为保证教学质量让更多的学生学到更多的知识,采用了课堂点名签到的办法提高出勤率。此方法确实起到了立竿见影的效果,很多课堂上又出现了座无虚席的景象。有保障的出勤率使得教学质量大大提高。
目前任课教师课堂点名一般采用两种方式,即逐个对全部学生点名和自己进行抽点。全部逐个点名的好处显而易见,它可以真实的记录和反映所有学生得出勤情况,具有很强的说服力。但是此方法的弱点也是显而易见的耗时多,教师点名工作量大占去课堂教学的大量时间。为此抽点则要实用的多,可以短时间完成点名减少教师点名工作量,从而减少因点名而占用的课堂时间。不过这种点名方式也有它的弊端,他带有教师强烈的主管情绪。做不到真正公平的随机抽点,也做不到按一定比例进行抽点。
目前课堂点名大多还是使用传统的点名方式,即任课教师手持学生点名名单对名单上的学生姓名点出,然后由学生答到再由教师对点名名单进行手工的记录出勤与否。如此教师每次给不同的班上课都要带多份纸制名单很不方便,而且名单容易丢失。点名期间点错后不易修改,且教师每次点名工作量大。有时由于课堂人多人声嘈杂还会出现漏点、错点和点名效率低下的情况。
二、对课堂点名软件的分析
2.1 设计思想
2.1.1 系统的设计思想
        先进性:采用先进的计算机和数据库技术,选用具有良好发展前景的.产品,为应用及开发创造一个良好的环境,使系统具有先进性,并在相当长的时期内不失其先进性。
        实用性:选用的产品技术先进、成熟,支持软件多、开发工具丰富,价格合理,符合国际、国家或行业标准;用户界面做到直观、友好,业务人员只需经过简单培训即可操作。在归纳共性的基础上充分考虑具体商业企业的个性,使之成为一个结构合理、功能齐全、界面友好、实用性强的系统。
        可靠性:采用良好的操作系统和数据库,确保数据的一致性和完整性,并使系统免受病毒感染。提供完善的数据备份方案和系统崩溃后的恢复手段。
        可维护性:系统提供强有力的数据库管理功能,能有效地进行数据库系统的管理、维护、监视;能方便地进行系统的控制、重组和性能调整,使系统保持良好的性能。应用系统应有相应的管理、维护功能,提供用户帮助功能以方便用户的使用和维护。
        可扩充性:学生名单的增减不影响系统的运行;系统设备配置灵活方便,兼容性和开放性好,便于升级;应用软件实现模块相互独立,控制程序和执行程序相分离,具有高度的程序独立性和数据独立性,使机构和业务变化的影响减至最小,方便了扩充和修改。
2.1.2  系统的设计目标
操作界面简单,容易操作。
实现课堂全部点名的功能和指定某人点名。
实现按人数比例对学生进行随机抽点和根据历史出勤情况进行智能抽点。
实现课堂答题的随机抽点功能。
实现语音化点名或无声点名。
实现对点名数据的统计分析功能。
具有点名名单的扩充性和灵活性。
2.1.3  系统的基本框架
本系统采用C/S开发模式;
C/S (Client/Server)结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构。
C/S其结构分为两层,数据层、应用层


2.1.3.1 总体模块结构

2.1.3.2 子模块结构
2.1.3.2.1  全体点名模块

2.1.3.2.2  部分抽点模块

2.1.3.2.3  答题点名模块

2.1.3.2.4  出勤统计

2.1.4  系统的实现环境
应用系统与其所处的系统环境密切相关,一个系统的功能及性能好坏,环境起着十分显著的作用。
2.1.4.1 硬件环境
系统的硬件配置如下:
        PIII 800 CPU
        256M 内存
        15英寸显示器
        30G 硬盘
2.1.4.2 软件环境
课堂点名软件要求安装在Windows 2000以上的系统里,并要求安装Microsoft .NET Framework 2.0。若要实现中文语音点名则还必须安装Microsoft Speech SDK 5.1和Microsoft Speech SDK 5.1 Language Pack。
2.2开发工具的选用及介绍
     开发本软件开发工具主要用到了Microsoft Visual Studio 2005.NET和Microsoft Office 2003,以及Microsoft .NET Framework 2.0、Microsoft Speech SDK 5.1和Microsoft Speech SDK 5.1 Language Pack等平台的支持。
     Visual Studio .NET 是一套完整的开发工具,用于生成 ASP Web 应用程序、XML Web services、桌面应用程序和移动应用程序。Visual Basic .NET、Visual C++ .NET、Visual C# .NET 和 Visual J# .NET 全都使用相同的集成开发环境 (IDE),该环境允许它们共享工具并有助于创建混合语言解决方案。另外,这些语言利用了 .NET Framework 的功能,此框架提供对简化 ASP Web 应用程序和 XML Web services 开发的关键技术的访问。
Windows 窗体
Windows 窗体是用于 Microsoft Windows 应用程序开发的、基于 .NET Framework 的新平台。此框架提供一个有条理的、面向对象的、可扩展的类集,使您能够开发功能丰富的 Windows 应用程序。另外,Windows 窗体可作为多层分布式解决方案中的本地用户界面。

.NET Framework 旨在实现下列目标:
提供一个一致的面向对象的编程环境,而无论对象代码是在本地存储和执行,还是在本地执行但在 Internet 上分布,或者是在远程执行的。
提供一个将软件部署和版本控制冲突最小化的代码执行环境。
提供一个可提高代码(包括由未知的或不完全受信任的第三方创建的代码)执行安全性的代码执行环境。
提供一个可消除脚本环境或解释环境的性能问题的代码执行环境。
使开发人员的经验在面对类型大不相同的应用程序(如基于 Windows 的应用程序和基于 Web 的应用程序)时保持一致。
按照工业标准生成所有通信,以确保基于 .NET Framework 的代码可与任何其他代码集成。
.NET Framework 具有两个主要组件:公共语言运行库和 .NET Framework 类库。公共语言运行库是 .NET Framework 的基础。您可以将运行库看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。事实上,代码管理的概念是运行库的基本原则。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。.NET Framework 的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,您可以使用它开发多种应用程序,这些应用程序包括传统的命令行或图形用户界面 (GUI) 应用程序,也包括基于 ASP.NET 所提供的最新创新的应用程序(如 Web 窗体和 XML Web services)。
.NET Framework 可由非托管组件承载,这些组件将公共语言运行库加载到它们的进程中并启动托管代码的执行,从而创建一个可以同时利用托管和非托管功能的软件环境。.NET Framework 不但提供若干个运行库宿主,而且还支持第三方运行库宿主的开发。
.NET Framework 环境

()

SAPI SDK(Microsoft Speech SDK 5.1和Microsoft Speech SDK 5.1 Language Pack)
SAPI SDK是微软公司免费提供的语音应用开发工具包,这个SDK中包含了语音应用设计接口(SAPI)、微软的连续语音识别引擎(MCSR)以及微软的语音合成(TTS)引擎等等。目前的5.1版本一共可以支持3种语言的识别 (英语,汉语和日语)以及2种语言的合成(英语和汉语)。SAPI中还包括对于低层控制和高度适应性的直接语音管理、训练向导、事件、语法编译、资源、语音识别(SR)管理以及TTS管理等强大的设计接口。其结构如图(1):


图(1)
语音引擎则通过DDI层(设备驱动接口)和SAPI(SpeechAPI)进行交互,应用程序通过API层和SAPI通信。通过使用这些API,用户可以快速开发在语音识别或语音合成方面应用程序。
()

三、课堂点名软件的具体设计与实现
3.1数据表的设计与实现
   本系统使用Microsoft Office 2003 里的EXECL表作为数据库。这主要是介于目前学校实际网络情况而定的,如设计SQL Server 2000等数据库实现全校统一管理则需要良好的网络环境。通过实际了解本了教室的网络情况得出以下不利因素:
1.网络稳定性差
2.网络病毒流行
3.很多教室网络完全不通
为了能够更好的保障本系统的使用。所以,选择了基于本地数据库的设计方法。
其次,从了解得知任课教师从教务处获得的名单格式为Html的网页格式。具体请见下图:

名单为Html网页格式。介于对Html网页文件的操作安全性、数据存储性和可操作行方面考虑,所以放弃了直接将Html网页作数据库的设计。从而选择了操作更加简单,安全性更高的EXCEL表做数据库。
EXECL点名数据库的结构如下:
列  名 类   型
序号 常   规
姓名 常   规
学号 常   规
第一次 常   规
… …
在本数据库中用1和0表示出勤和缺勤的记录,空值表示未点名。
任课教师可以方便的自行建立数据库进行点名。具体方法是:将原名单的Html文件打开,将其中表格内的所有行和所有列进行复制,然后新建一个excel表,打开新建的excel表,在excel表的第一个空点击鼠标右键粘贴,然后保存退出即可。如此一个学生数据库名单就建立成功,便可以方便的进行点名操作了。
建立好的数据库具体见下图:

3.2 课堂点名软件的软件部分设计
本系统主要为实现:
操作界面简单,容易操作。
实现课堂全部点名的功能和指定某人点名。
实现按人数比例对学生进行随机抽点和根据历史出勤情况进行智能抽点。
实现课堂答题的随机抽点功能。
实现语音化点名或无声点名。
实现对点名数据的统计分析功能。
具有点名名单的扩充性和灵活性。
为实现上述点名功能本系统由两个Winform窗体和四个的模块组成。两个Winform窗体分别为main主窗体和que答题点名窗体。main主窗体主要由全体点名模块、部分抽点模块和出勤统计模块组成,而que答题点名窗体主要由课堂答题抽点模块组成。具体架构如下所示:

3.2.1 全体点名模块
1.1 设计方法
     本模块用于对全体学生进行点名,也可以指定对某人进行点名。需要实现无声点名和语音点名功能,并向数据库记录下点名记录。主要工作流程见下图:


1.2界面设计
    打开Microsoft Visual Studio 2005,选择【文件】|【项目】|【Visual C#】|【Windows应用程序】命令,然后就可以新建项目,如图所示:


这时在窗口上会出现一个新窗体。向窗体中添加一个tabControl用于切换各个模块的功能界面。如图所示:

    然后向tabpage1上添加控件,分别为八个button,;再填加一个checkBox、trackBar、comboBox和dataGridView;最后添加五个Label。再给上述控件设定相应的参数,具体参数见下表:
类型 Name Text
tabpage Tabpage1 全体点名
tabpage Tabpage2 部分点名
tabpage Tabpage3 答题点名
tabpage Tabpage4 出勤统计
button openfile 打开
button top 第一个
button tail 最后一个
button back 上一个
button next 下一个
button appeare 开始
button absent 缺勤
button red 重度
checkBox checkBox1 语音点名
trackBar trackBar1 
comboBox time 
dataGridView dataGridView1 
Label Label1 第
Label Label2 次
Label Label10 (注:1表示已到,0表示缺席。)
Label tato 
Label name 
(注:向comboBox1的Itmes属性装入30个点名次数。例如:1,2,3...。再对trackBar1的maximum和minmum赋值分别为100和0。)
这样第一个功能模块的界面就设计好了,如图所示:

1.3主要程序说明
   1 基本函数
//创建到excel数据库的连接
public OleDbConnection returnConn()
        {
            string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + address + ";Extended Properties=Excel 8.0";
            System.Data.OleDb.OleDbConnection conn = new OleDbConnection(strConn);
            return conn;
        }
        //返回DataAdapter
        public OleDbDataAdapter returnRa()
        {
            string strCmdText = "select * from [Sheet1$]";
            OleDbDataAdapter od = new OleDbDataAdapter(strCmdText, returnConn());
            return od;
        }

        //将数据装入到DataSet里面
        DataSet ds;
        public DataSet reutrnDs()
        {
            if (ds != null) //用于判断数据集是否为空,防治数据集的重读现象。
            {
                return ds;
            }
            else
            {
                ds = new DataSet();
                returnRa().Fill(ds, "ds");
                return ds;
            }
        }

//声明一个类,确定更改字段名。用于对数据的的修改添加。
        public string ReturnName(int i)
        {
            string[] AllName = new string[] { "序号", "姓 名", "学 号", "第1次", "第2次", "第3次", "第4次", "第5次", "第6次", "第7次", "第8次", "第9次", "第10次", "第11次", "第12次", "第13次", "第14次", "第15次", "第16次", "第17次", "第18次", "第19次", "第20次", "第21次", "第22次", "第23次", "第24次", "第25次", "第26次", "第27次", "第28次", "第29次", "第30次" };
            if (i >= 0 && i < AllName.Length)
                return AllName[i];
            else
                MessageBox.Show("值错误");
            return "";
        }

         //打开文件
        public void open()
        {
            this.openFileDialog1.ShowDialog();
            string MyFileName = this.openFileDialog1.FileName;//获取文件地址
            address = MyFileName.Trim();
            if (address != "")
            {
                row = reutrnDs().Tables[0].Rows.Count;//获取名单的总行数
                column = reutrnDs().Tables[0].Columns.Count;//获取名单的总列数
            }
        }

//显示文件到DataGridView1
        void dis(DataGridView Dgv, Label lab, int i, int j)
        {
            returnConn();
            returnRa();
            Dgv.DataSource = reutrnDs().Tables[0].DefaultView;//将名单显示到dataGridView1里面
            lab.Text = reutrnDs().Tables[0].Rows[i][j].ToString();//将人名显示到name里面
        }


//用于修改数据库内的数据
        public void BindToView(int UpValue, int whichUpdateRow, int whichUpdateCl)
        {
            DataSet ds = reutrnDs();
            try
            {

                ds.Tables["ds"].Rows[whichUpdateRow][whichUpdateCl] = UpValue;
            }
            catch
            {
                MessageBox.Show("类型不匹配或者主键不可更改");
                return;
            }
            OleDbDataAdapter od = returnRa();
            if (true)
            {
                if (ds.Tables["ds"].GetChanges() != null)
                {
                    OleDbConnection conn = returnConn();
                    od.UpdateCommand = new OleDbCommand();
                    od.UpdateCommand.CommandText = "update [sheet1$] set " + ReturnName(whichUpdateCl) + "='" + ds.Tables["ds"].Rows[whichUpdateRow][whichUpdateCl].ToString() + "' where [" + ReturnName(2) + "]=" + ds.Tables["ds"].Rows[whichUpdateRow][2].ToString();
                    od.UpdateCommand.Connection = conn;
                    conn.Open();;
                    od.UpdateCommand.ExecuteNonQuery();
                }
            }


点击事件程序
首先编写了“打开”按键下的点击事件。用于选择要打开的excel数据库文件。并将其显示在dataGridView1、name和tato里面。dataGridView1用于显示选定的整个数据库的内容,name显示当前点名学生的姓名,tato用于显示数据库名称,一般可设为班级名称。
private void openfile_Click(object sender, EventArgs e)
        {
            if (ds != null) //将数据集清空,以备用。
            {
                ds.Dispose();
            }

            open();
            if (address != "")
            {
                i = 0; //数据的行控制
j = 1; //数据的列控制
hang = 0; //用于控制dataGridView1里面的光标移动
                l = 1; //用于判断是否选择了名单
                dis(dataGridView1, name, i, j);
                dataGridView1.CurrentCell = dataGridView1.Rows[i].Cells[1];
            }
            tato.Text = openFileDialog1.FileName.Substring(openFileDialog1.FileName.LastIndexOf("") + 1);
            appeare.Text = "开  始";
            tot = 0; //用于记录点名总人数
sd = 0; //用于记录实到人数
dy= 0; //用于控制语音朗读
        }

“上一个”按键主要程序
i -= 1;
     dataGridView1.CurrentCell = dataGridView1.Rows[dataGridView1.CurrentRow.Index + 1].Cells[1];
    name.Text = reutrnDs().Tables[0].Rows[i][j].ToString();

“下一个”按键主要程序
i += 1;
     dataGridView1.CurrentCell = dataGridView1.Rows[dataGridView1.CurrentRow.Index + 1].Cells[1];
    name.Text = reutrnDs().Tables[0].Rows[i][j].ToString();

“第一个”按键主要程序
i = 0;
       dataGridView1.CurrentCell = dataGridView1.Rows[0].Cells[1];
     name.Text = reutrnDs().Tables[0].Rows[i][1].ToString();

“最后一个”按键主要程序
i = row-1;
       dataGridView1.CurrentCell = dataGridView1.Rows[0].Cells[1];
     name.Text = reutrnDs().Tables[0].Rows[i][1].ToString();

“开始”按键主要程序
本按键主要用于朗读姓名和记录出勤。记录出勤主要调用到BindToView(1, i, int.Parse(time.Text) + 2)函数。
编写语音函数首先要安装Microsoft Speech SDK 5.1和Microsoft Speech SDK 5.1 Language Pack。然后在Visual Studio 2005.NET程序里添加引用中的COM里引用Microsoft Speech Object Library。


语音朗读部分程序:
Try  //用于将语音函数实例化和初始化
                        {
                            svsf = new SpeechVoiceSpeakFlags();
                            svc = new SpVoiceClass();
                            sv