- 相關推薦
課堂點名軟件(一)
課堂點名軟件
目 錄
一、緒 論 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();
svetType("System.String"));
DataColumn dc2 = new DataColumn(time_1.Text, Type.GetType("System.String"));
dt1.Columns.Add(dc1);
dt1.Columns.Add(dc2);
for (int ij = 0; ij < (int)nummen; ij++)
{
//ij = Num(arrNum, ij);
if (ij < (int)nummen)
{
DataRow dr = dt1.NewRow();
dr["姓 名"] = reutrnDs().Tables[0].Rows[ax[ij]][1];
dr[time_1.Text] = reutrnDs().Tables[0].Rows[ax[ij]][int.Parse(time_1.Text)+2];
dt1.Rows.Add(dr);
}
}
Dgv.DataSource = dt1;
}
3.2.2.1 隨機抽點子模塊
在隨機抽點子模塊要做到的功能是從原始點名名單里隨機的抽出一部分人來生成一個隨機點名名單,然后對其進行點名。
隨機抽點子模塊主要利用一個隨機函數來對DataSet數據集里面的學生所在行進行隨機抽點。在DataSet數據集里面的數據是以二維表方式存放的,在這個二維表里面每一行代表一個學生及其出勤記錄。而行號就是確定學生姓名的關鍵字了。我的做法是首先得到總行數row,確定抽點人數比例用這個比例去乘以row得出抽點人數nummen,然后再從0-row中隨即抽取nummen個不相同的數字存放在數組arrNum中。這樣就確定了抽點名單了,再將名單顯是在dataGridView3里。點名時就只對arrNum數組里相對應行號的學生點名。
具體流程示意圖:
主要相應函數:
//產生隨機數并裝入數組arrNum
int[] arrNum;
public int[] getRandomNum(in od.Fill(ds,"ds");
}
然后可以選擇是否置頂顯示,主要代碼如下
if (top == 0)
{
this.TopMost = true;
button2.Text = "取消置頂";
top = 1;
}
else
{
this.TopMost = false;
button2.Text = "置頂顯示";
top = 0;
}
然后選擇是否需要語音點名,然后開始點名。主要代碼如下:
Random ra = new Random();
name_3.Text =ds.Tables[0].Rows[ra.Next(0, ds.Tables[0].Rows.Count)][1].ToString();
if (checkBox1.Checked == true)
{
try
{
svsf = new SpeechVoiceSpeakFlags();
svc = new SpVoiceClass();
svc.SetVolume(Convert.ToUInt16(80));
svc.SetRate(2);
svc.Voice = svc.GetVoices(string.Empty, string.Empty).Item(3);
}
catch
{
MessageBox.Show("語音庫不存在,請安裝Microsoft Speech SDK 5.1和Microsoft Speech SDK 5.1 Language Pack! ");
checkBox1.Checked = false;
}
mythread = new Thread(Voice);
mythread.Start();
}
2.1 操作流程
3.2.4 出勤統計模塊
1.1 設計方法
本功能模塊主要為實現對歷史出勤情況的一個統計匯總。主要分為學生個人出勤情況統計和班級出勤情況統計。主要工作流程見下圖:
1.2 界面設計
點擊tabControl1上的出勤統計選項卡,這時出現一個空白界面。然后向此界面上分別添加一個button按鈕、dataGridView、groupBox和六個label。再給上述控件設定相應的參數,具體參數見下表:
類型 Name Text
button openfile_3 統計
dataGridView dataGridView4
groupBox groupBox1 班級出勤情況:
label Label6 個人出勤情況:
label Label11 班 級:
label Label12 總人數:
label Label13 出勤總人次:
label Label14 缺席總人次:
label Label15 出 席 率:
這樣出勤統計模塊的界面就設計好了,如圖所示:
1.3 主要程序代碼說明
主要用于計算并顯示統計結果。
算法示意:
public void dt_3(DataGridView Dgv)
{ int c1,ct,cf=0,cg=1,to=0,cto=0;
string c0=cf.ToString() ,cv=cg.ToString();
DataTable dt3 = new DataTable();
DataColumn dc1 = new DataColumn("姓 名", Type.GetType("System.String"));
DataColumn dc2 = new DataColumn("缺席次數", Type.GetType("System.String"));
DataColumn dc3 = new DataColumn("點名總次數", Type.GetType("System.String"));
dt3.Columns.Add(dc1);
dt3.Columns.Add(dc2);
dt3.Columns.Add(dc3);
for (int ij = 0; ij < row; ij++)
{
ct=c1=0;
DataRow dr = dt3.NewRow();
dr["姓 名"] = reutrnDs().Tables[0].Rows[ij][1];
for (int cc = 3; cc<column;cc++ )
{
if (reutrnDs().Tables[0].Rows[ij][cc].ToString()== c0)
{
c1++;
ct++;
cto++;
}
if (reutrnDs().Tables[0].Rows[ij][cc].ToString() == cv)
{
ct++;
to++;
}
}
dr["缺席次數"] = c1;
dr["點名總次數"] = ct;
dt3.Rows.Add(dr);
}
Dgv.DataSource = dt3;
label11.Text += " " + openFileDialog1.FileName.Substring(openFileDialog1.FileName.LastIndexOf("\\") + 1);
label12.Text += " " + row+"人";
label13.Text += " " + to+"人次";
label14.Text += " " + cto+"人次";
float ccf;
ccf= (float)to / ((float)to + (float)cto)*100;
label15.Text += " " +ccf.ToString("F")+"%";
}
2.1操作流程
只需點擊“統計”按鈕,便可生成通解結果。
四、系統的測試與運行
4.1 軟件測試
盡管軟件質量保證是貫穿軟件開發全過程的活動,但最關鍵的步驟是軟件測試,軟件測試是對軟件規格說明、軟件設計和編碼的最后復審,目的是在軟件產品交付之前盡可能發現軟件中潛伏的錯誤。大量統計表明,軟件測試工作量往往占軟件開發總工作量的40%以上。
這個階段是用來測試程序,找出系統Bug并修改錯誤的過程。雖然在每個模塊開發的過程中都進行過階段性的測試,但是現場整體測試更接近將來系統投入使用的情況。
在查閱了資料后,了解到系統的整體測試方法主要有非漸增測試法和漸增測試法兩種。其中漸增測試法適用于模塊間數據流多、可以單獨測試各個模塊到測試多的模塊的情況。由于系統各部分之間有密切的關系,所以選擇漸增測試法作為測試的方法。
測試時首先對各個模塊的功能進行測試,對照需求分析逐個測試系統的功能;然后對照數據庫的內容察看各個查詢功能反饋的結果是否正確;最后整體運行系統,測試各個模塊之間的銜接是否會對系統的整體性能發生影響。為了測試程序的健壯性,還可以在測試過程中故意輸入一些錯誤的數據,保證系統能夠自行處理這些錯誤,使得系統在日常的使用中不會由于工作失誤而無法運行。
測試小結
在測試過程中,確實發現了很多的錯誤。一部分因為開發環境與實際使用環境不同產生的,比如說圖片的效果不對,或者控件的位置出現偏移等等;還有數據庫的連接問題,在不同的計算機上因為計算機名的不同導致無法連接數據庫,這些問題通過現場的調試基本得到了解決。
使用面向對象的開發工具進行系統開發后,由于其獨有的特點,所以調試時與傳統的程序開發語言并不完全相同,就本次開發過程中使用的Microsoft Visual Studio 2005來說,例如:在Microsoft Visual Studio 2005的定義當中,面向對象的設計方法使得很多模塊的變量封裝起來,由此,對象的變量常常是不可見的,定義全局變量一定要在窗體之外的公用模塊中,而且要定義為公用。
另一部分錯誤卻出乎意料,比如說有些控件數組的初始化問題。因為要知道很多情況下程序的錯誤是連鎖性的,一個語句錯誤,其后相關語句也跟著出錯,所以找出錯誤源是很重要,在程序中設置斷點或在調試模式下執行程序,可以快速發現和糾正錯誤,把無法初始化的控件元素單獨初始化后,問題可以得到解決。
經過測試的過程,認識到自己在程序的編寫和思路方面都存在一定的問題,相信經過不斷的學習和經驗積累,可以實現較大的改觀。
參考文獻
張忠國. Visual C#中隨機數使用實例
關于紅葉二級電站生產管理系統開發要求. 紅葉二級電站生產管理系統 2008
配網管理系統---需求分析說明書. 紅葉二級電站生產管理系統 2008
商小千. 燕山大學里仁學院“兩課”社會調查報告 2006
白 春. POS系統在零售行業的應用 2005
svc.SetRate(2);
svc.Voice = svc.GetVoices(string.Empty, string.Empty).Item(3);
}
catch
{
MessageBox.Show("語音庫不存在,請安裝Microsoft Speech SDK 5.1和Microsoft Speech SDK 5.1 Language Pack! ");
checkBox1.Checked = false;
}
private void Voice()//
{
svc.Speak(name.Text.Trim(), svsf);
mythread.Abort();
}
//用于語音的朗讀
mythread = new Thread(Voice);
mythread.Start();
“缺席”按鍵主要程序
“缺席”按鍵主要程序和“開始”類似(略)。只是BindToView(0, i, int.Parse(time.Text) + 2)函數輸入為0。
2.1 操作流程
(注:如沒有安裝Microsoft Speech SDK 5.1和Microsoft Speech SDK 5.1 Language Pack的計算機則會提示:“語音庫不存在,請安裝Microsoft Speech SDK 5.1和Microsoft Speech SDK 5.1 Language Pack!” )
3.2.2 部分抽點模塊
1.1設計方法
本功能模塊主要實現按總人數比例生成隨機抽點名單和更具歷史出勤情況生成抽點名單,然后根據生成的抽點名單進行無聲或語音點名。并向數據庫記錄下點名記錄。主要工作流程見下圖:
1.2界面設計
點擊tabControl1上的部分點名選項卡,這時出現一個空白界面。然后向此界面上分別添加八個button按鈕、一個checkBox、trackBar、兩個comboBox、兩個dataGridView和六個Label。再給上述控件設定相應的參數,具體參數見下表:
類型 Name Text
button openfile_1 打開
button back_1 上一個
Button next_1 下一個
Button appeare_1 開始
Button absent_1 缺勤
Button random 隨機抽點
Button duty 出勤抽點
button re_1 重讀
checkBox checkBox2 隨機抽點
trackBar trackBar2
comboBox percent
comboBox time_1
dataGridView dataGridView2
dataGridView dataGridView3
Label tato1
Label name_1
Label Label3 次
Label Label4 第
Label Label5 抽點比例
Label Label7 抽點名單:
Label Label9 (注:1表示已到,0表示缺席。)
(注:向time_1的Itmes屬性裝入30個點名次數。例如:1,2,3...。
向percent的Itmes屬性裝入百分比。例如:10%、20%、30%、40%、50%、60%、70%、80%再對trackBar2的maximum和minmum賦值分別為100和0。)
這樣部分抽點功能模塊的界面就設計好了,如圖所示:
1.3主要程序說明
1 基本函數
//創建到excel數據庫的連接(同上,略)
//返回DataAdapter(同上,略)
//將數據裝入到DataSet里面(同上,略)
//聲明一個類,確定更改字段名。用于對數據的的修改添加。(同上,略)
//用于修改數據庫內的數據(同上,略)
//顯示文件到DataGridView2
顯示文件到DataGridView3
public void dt_1(DataGridView Dgv,int[] ax)//創建數據表格用于裝和顯示生成的名單
{
DataTable dt1 = new DataTable();
DataColumn dc1 = new DataColumn("姓 名", Type.GetType("System.String"));
DataColumn dc2 = new DataColumn(time_1.Text, Type.GetType("System.String"));
dt1.Columns.Add(dc1);
dt1.Columns.Add(dc2);
for (int ij = 0; ij < (int)nummen; ij++)
{
//ij = Num(arrNum, ij);
if (ij < (int)nummen)
{
DataRow dr = dt1.NewRow();
dr["姓 名"] = reutrnDs().Tables[0].Rows[ax[ij]][1];
dr[time_1.Text] = reutrnDs().Tables[0].Rows[ax[ij]][int.Parse(time_1.Text)+2];
dt1.Rows.Add(dr);
}
}
Dgv.DataSource = dt1;
}
3.2.2.1 隨機抽點子模塊
在隨機抽點子模塊要做到的功能是從原始點名名單里隨機的抽出一部分人來生成一個隨機點名名單,然后對其進行點名。
隨機抽點子模塊主要利用一個隨機函數來對DataSet數據集里面的學生所在行進行隨機抽點。在DataSet數據集里面的數據是以二維表方式存放的,在這個二維表里面每一行代表一個學生及其出勤記錄。而行號就是確定學生姓名的關鍵字了。我的做法是首先得到總行數row,確定抽點人數比例用這個比例去乘以row得出抽點人數nummen,然后再從0-row中隨即抽取nummen個不相同的數字存放在數組arrNum中。這樣就確定了抽點名單了,再將名單顯是在dataGridView3里。點名時就只對arrNum數組里相對應行號的學生點名。
具體流程示意圖:
主要相應函數:
//產生隨機數并裝入數組arrNum
int[] arrNum;
public int[] getRandomNum(int num, int minValue, int maxValue)
{
Random ra = new Random(unchecked((int)DateTime.Now.Ticks));
arrNum = new int[num];
for (int i = 0; i <= num - 1; i++)
{
arrNum[i] = 1234567;
}
int tmp = 0;
for (int i = 0; i <= num -1; i++)
{
tmp = ra.Next(minValue, maxValue); //隨機取數
arrNum[i] = getNum(arrNum, tmp, minValue, maxValue, ra); //防止取到重復的數字,并值賦到數組中
}
return arrNum;
}
//判斷是否有重復隨機數
public int getNum(int[] arrNum, int tmp, int minValue, int maxValue, Random ra)
{
int n = 0;
while (n <= arrNum.Length - 1)
{
if (arrNum[n] == tmp) //利用循環判斷是否有重復
{
tmp = ra.Next(minValue, maxValue); //重新隨機獲取。
tmp = getNum(arrNum, tmp, minValue, maxValue, ra);//遞歸:如果取出來的數字和已取得的數字有重復就重新隨機獲取。
}
n++;
}
return tmp;
}
3.2.2.2 出勤抽點子模塊
出勤抽點子模塊要做到的功能主要是根據學生每個人的歷史出勤情況有針對性的按比例生成點名名單。也就是缺勤次數越多的學生被加入這個點名名單的幾率越大。
出勤抽點子模塊主要是利用兩個數組和一個隨機函數做到的。首先,獲取DataSet內的點名名單的行數row,然后根據選取的抽點人數百分比得出抽點人數nummen。將0-row行學生的行號裝入數組aa。之后對整個DataSet數據集里裝的每個學生的出勤情況進行遍歷,如有缺勤記錄則向aa數組繼續裝入一次相應的行號(即同一個人出現幾次缺勤就裝幾次他的行號進去增加被抽中的幾率)。在遍歷數據的同時記下所有人總的缺勤次數z。然后利用getRandomNum函數從0-row+z中隨機取出nummen個不相同的數字存入arrNum。現在就可以根據arrNum內存的數據確定aa的相應行號,通過aa又可以確定DataSet數據集里面裝得學生名單的行號了。實際上arrNum數組里面裝得就是生成的出勤名單了。
流程示意圖:
主要相應函數:
將將0-row行學生的行號和缺勤記錄的行號裝入數組aa。
z = row;
if (z <= 30)
t = 1;
if (30 < z && z <= 80)
t = 2;
if (80 < z && z <= 160)
t = 3;
if (160 < z)
t = 4;
aa = new int[row * row * t];
//原有行裝入數組
for (a = 0; a < row; a++)
aa[a] = a;
//增加行裝入數組
int dc = 0;
string dd = dc.ToString();
for (c = 0; c < row; c++)
for (a = 3; a < column; a++)
{
if (dd == reutrnDs().Tables[0].Rows[c][a].ToString())
{
for (int k = 0; k < t; k++)
aa[z] = c; z++;
}
}
出勤隨機函數
Int wz;
public int[] getRandomNum(int num, int minValue, int maxValue)
{
wz=0;
Random ra = new Random(unchecked((int)DateTime.Now.Ticks));
arrNum = new int[num];
for (int i = 0; i <= num - 1; i++)
{
arrNum[i] = 1234567;
}
int tmp = 0;
for (int i = 0; i <= num -1; i++)
{
tmp = ra.Next(minValue, maxValue); //隨機取數
arrNum[i] = getNum(arrNum, tmp, minValue, maxValue, ra); //取出值賦到數組中
wz++;
}
return arrNum;
}
//判斷是否有重復隨機數
public int getNum(int[] arrNum, int tmp, int minValue, int maxValue, Random ra)
{
int n = 0;
while (n <wz)
{
if (arrNum[n] == tmp||aa[arrNum[n]]==aa[tmp]) //利用循環判斷是否有重復
{
tmp = ra.Next(minValue, maxValue); //重新隨機獲取。
tmp= getNum(arrNum, tmp, minValue, maxValue, ra);//遞歸:如果取出來的數字和已取得的數字有重復就重新隨機獲取。
}
n++;
}
return tmp;
}
2.1 操作流程
3.2.3 課堂答題抽點模塊
1.1 設計方法
由于大學課堂人數眾多,任課教師記不得很多學生的姓名。提供此功能主要免去了教師反復抽點某些認識的學生,使每個學生都有被抽到的機會。本功能模塊主要實現課堂教學過程中任課教師進行的答題抽點功能,同時還提供小型浮動窗口置頂顯示的功能方便教學時在PowerPoint、Word和其他一些演示功能的界面上進行抽點,這樣就不會影響教學。
主要工作流程見下圖:
1.2 界面設計
點擊tabControl1上的答題點名選項卡,這時出現一個空白界面。在界面上添加一個button按鈕和一個Label。再給上述控件設定相應的參數,具體參數見下表:
類型 Name Text
Label Label8 進入課堂答題點名系統!
button Button1 進 入
這樣答題點名功能模塊的部分界面就設計好了,如圖所示:
現在開始設計答題點名窗體首先在課堂點名解決方案中添加一個窗體命名為que。然后向窗體上添加五個button、一個checkBox和三個label。再給上述控件設定相應的參數,具體參數見下表:
類型 Name Text
button openfile_3 選擇名單
button Random_1 點名
button Button1 關閉
button Button2 顯示置頂
button Button3 重讀
checkBox checkBox1 語音
label Label1 請
label Label2 答題!
label Label3
這樣答題點名功能模塊的界面就設計好了,如圖所示:
1.3主要程序說明
主窗體main部分:
本段代碼主要用來進入子船體que
答題點名下的進入que界面的的button按鍵的事件
private void button1_Click(object sender, EventArgs e)
{
this.Hide();
qus qus = new qus();
qus.ShowDialog();
this.Close();
}
子窗體que部分:
本窗體主要用來進行答題點名功能。
首先選擇點名名單利用open();函數
public void open()
{
ds.Clear();
this.openFileDialog1.ShowDialog();
string MyFileName = this.openFileDialog1.FileName;
address = MyFileName.Trim();
string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + address + ";Extended Properties=Excel 8.0";
System.Data.OleDb.OleDbConnection conn = new OleDbConnection(strConn);
string strCmdText = "select * from [Sheet1$]";
OleDbDataAdapter od = new OleDbDataAdapter(strCmdText, conn);
【課堂點名軟件(一)】相關文章:
自動發油控制軟件設計(一)03-07
免費vc中國象棋軟件(一)03-07
機電一體化系統中的軟件03-14
論析軟件價值效用論與軟件資本流通03-19
新課程化學課堂導入初探(一)11-23
軟件無形性在軟件工程教育中的影響的論文12-08
一種基于網絡的監控軟件設計與實現11-20
論一種加強軟件項目管理的實踐模式03-19
淺論一種加強軟件項目管理的實踐模式03-13