當前位置:學問君>學習教育>畢業論文>

課堂點名軟件(一)

學問君 人氣:3.03W

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