課堂點名軟體(一)

才智咖 人氣:3.01W

課堂點名軟體
 目  錄
一、緒  論 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