激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频

課堂點(diǎn)名軟件(一)

時(shí)間:2024-09-04 05:20:13 計算機畢業(yè)論文 我要投稿
  • 相關(guān)推薦

課堂點(diǎn)名軟件(一)

課堂點(diǎn)名軟件
 目  錄
一、緒  論 2
1.1.當代大學(xué)生出勤的現狀 2
1.2.對大學(xué)課堂點(diǎn)名現狀的分析 3
二、對課堂點(diǎn)名軟件的分析 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  系統的實(shí)現環(huán)境 7
2.1.4.1 硬件環(huán)境 7
2.1.4.2 軟件環(huán)境 7
2.2開(kāi)發(fā)工具的選用及介紹 7
三、課堂點(diǎn)名軟件的具體設計與實(shí)現 10
3.1數據表的設計與實(shí)現 10
3.2 課堂點(diǎn)名軟件的軟件部分設計 11
3.2.1 全體點(diǎn)名模塊 12
3.2.2 部分抽點(diǎn)模塊 21
3.2.2.1 隨機抽點(diǎn)子模塊 25
3.2.2.2 出勤抽點(diǎn)子模塊 26
3.2.3 課堂答題抽點(diǎn)模塊 29
3.2.4 出勤統計模塊 33
四、系統的測試與運行 37
4.1   軟件測試 37
4.2 測試小結 37
參考文獻 38

課堂點(diǎn)名軟件(一)

 


一、緒  論
在電器化教學(xué)飛速發(fā)展的今天,計算機成為課堂輔助教學(xué)的重要工具。它在課堂教學(xué)的課件演示、課堂實(shí)驗、課堂學(xué)生管理等各個(gè)方面發(fā)揮著(zhù)重要的作用。目前課堂教學(xué),尤其是大學(xué)課堂教學(xué)課件的演示主要是用計算機來(lái)實(shí)現的,很多的課堂實(shí)驗也是用計算機模擬可以實(shí)現的。而學(xué)生管理等方面更是少不了計算機的應用,從一名大學(xué)生進(jìn)入大學(xué)校園的那一天起他的檔案資料就被錄入了學(xué)校的計算機。為了更好的管理學(xué)生日常的學(xué)習、生活大學(xué)校園也實(shí)現了自動(dòng)化辦公和自動(dòng)化教學(xué)。這種種自動(dòng)化辦公和自動(dòng)化教學(xué)也是由各種功能的軟件所支撐其來(lái)的?梢(jiàn)計算機軟件管理在學(xué)生管理中起到了很大的作用。所以我想到了設計一個(gè)課堂點(diǎn)名軟件來(lái)輔助課堂教學(xué)。本軟件采用Microsoft Visual Studio 2005.NET的Visual C#進(jìn)行編寫(xiě)。

關(guān)鍵字:課堂點(diǎn)名,點(diǎn)名,課堂,軟件
1.1.當代大學(xué)生出勤的現狀
大學(xué)生是國家青年中的精華,是未來(lái)建設祖國、實(shí)現中華民族偉大復興的中堅力量;而大學(xué)又是人一生中學(xué)習知識、鍛煉能力的關(guān)鍵時(shí)期。大學(xué)生在大學(xué)中能夠接受多少知識直接關(guān)系到他們未來(lái)的發(fā)展,決定他們能不能擔當起祖國合格建設者的光榮職責。在大學(xué)生的學(xué)習生活中,學(xué)校教育無(wú)疑是最重要的環(huán)節,通過(guò)老師們的言傳身教,大學(xué)生能夠迅速掌握各種知識,提升個(gè)人素質(zhì)。但是,在當代大學(xué)生卻存在一個(gè)及其普遍的現象——逃課,“必修課選逃、選修課必逃”成為很多學(xué)生的上課準則,一個(gè)課堂上只有寥寥數人的景象經(jīng)常發(fā)生;有些課堂上雖然有不少人在上課,但遲到、早退,上課中途又逃課等現象卻頻頻會(huì )發(fā)生。
學(xué)生的天職是學(xué)習,上好每一節課是其最基本的任務(wù),也是其汲取知識、增長(cháng)才干的最基本途徑。而近些年來(lái),大學(xué)生逃課現象在大學(xué)校園里普遍出現,并由逐步蔓延的趨勢,幾乎成了高校中流行的通病,嚴重影響了大學(xué)的教學(xué)質(zhì)量。大學(xué)生出勤率的高低是衡量大學(xué)教學(xué)管理是否科學(xué)的標準之一.只有保證有較高的出勤率,才能保證教學(xué)質(zhì)量,才能讓學(xué)生學(xué)到更多的科學(xué)文化知識,才能更好的提高大學(xué)生科學(xué)文化素質(zhì).據此希望大學(xué)能夠采取科學(xué)的措施來(lái)改善這種狀況,營(yíng)造良好的大學(xué)學(xué)風(fēng),為學(xué)生負責,為社會(huì )負責。
高校擴招以來(lái),伴隨著(zhù)教育改革的深入,越來(lái)越多的青年學(xué)子能夠有機會(huì )步入理想的大學(xué)校園,實(shí)現青春的夢(mèng)想.但是大學(xué)生并非一些人心中的殿堂,當不少大學(xué)生感受到大學(xué)所帶來(lái)的壓力時(shí),彷徨和困惑接踵而至.此時(shí),逃課成了他們逃避現實(shí)的方法之一.首先,同學(xué)們對于"必修課選逃,選修課選逃"等對曠課的說(shuō)法普遍持有"可以接受"的態(tài)度,站人說(shuō)的70%.雖然沒(méi)有人支持逃課,但是明確反對的僅占20%,而抱"無(wú)所謂"心態(tài)的同學(xué)則可以理解為默許,占到總人數的10%.(如表1)
    表1對曠課的看法
 支持 反對 可以接受 無(wú)所謂
人數 1 2 21 3
百分比 0% 20% 70% 10%

這是旨在了解同學(xué)在思想認識上是如何看待逃課現象的,他們在各自思想的指導下,表現為"逃課"或者"不逃課"的行為,與此相吻合的是,同學(xué)中有逃課經(jīng)歷的人數竟然站調查人數的66.7%.其中,逃課缺勤的課程選擇上,"對其無(wú)興趣的"占總人數的63.33%,"課程管理松的"占26.67%.(如表2)
   
 表2缺勤較多的課程
 專(zhuān)業(yè)課 基礎課 課程管理松 無(wú)興趣
人數 1 2 8 19
百分比 3.33% 6.67% 26.7% 63.33%
1.2.對大學(xué)課堂點(diǎn)名現狀的分析
通過(guò)上述對當代大學(xué)生出勤現狀的調查分析,我們得出一個(gè)結論當代大學(xué)生課堂出勤率持續低下以成普遍現象。目前大學(xué)期間學(xué)生獲得知識增長(cháng)才干的主要途徑仍是課堂教學(xué),但在如今低下得出勤率的情況下學(xué)生在課堂又能學(xué)到多少知識令人堪憂(yōu)。由此大部分學(xué);蛉握n教師為保證教學(xué)質(zhì)量讓更多的學(xué)生學(xué)到更多的知識,采用了課堂點(diǎn)名簽到的辦法提高出勤率。此方法確實(shí)起到了立竿見(jiàn)影的效果,很多課堂上又出現了座無(wú)虛席的景象。有保障的出勤率使得教學(xué)質(zhì)量大大提高。
目前任課教師課堂點(diǎn)名一般采用兩種方式,即逐個(gè)對全部學(xué)生點(diǎn)名和自己進(jìn)行抽點(diǎn)。全部逐個(gè)點(diǎn)名的好處顯而易見(jiàn),它可以真實(shí)的記錄和反映所有學(xué)生得出勤情況,具有很強的說(shuō)服力。但是此方法的弱點(diǎn)也是顯而易見(jiàn)的耗時(shí)多,教師點(diǎn)名工作量大占去課堂教學(xué)的大量時(shí)間。為此抽點(diǎn)則要實(shí)用的多,可以短時(shí)間完成點(diǎn)名減少教師點(diǎn)名工作量,從而減少因點(diǎn)名而占用的課堂時(shí)間。不過(guò)這種點(diǎn)名方式也有它的弊端,他帶有教師強烈的主管情緒。做不到真正公平的隨機抽點(diǎn),也做不到按一定比例進(jìn)行抽點(diǎn)。
目前課堂點(diǎn)名大多還是使用傳統的點(diǎn)名方式,即任課教師手持學(xué)生點(diǎn)名名單對名單上的學(xué)生姓名點(diǎn)出,然后由學(xué)生答到再由教師對點(diǎn)名名單進(jìn)行手工的記錄出勤與否。如此教師每次給不同的班上課都要帶多份紙制名單很不方便,而且名單容易丟失。點(diǎn)名期間點(diǎn)錯后不易修改,且教師每次點(diǎn)名工作量大。有時(shí)由于課堂人多人聲嘈雜還會(huì )出現漏點(diǎn)、錯點(diǎn)和點(diǎn)名效率低下的情況。
二、對課堂點(diǎn)名軟件的分析
2.1 設計思想
2.1.1 系統的設計思想
        先進(jìn)性:采用先進(jìn)的計算機和數據庫技術(shù),選用具有良好發(fā)展前景的產(chǎn)品,為應用及開(kāi)發(fā)創(chuàng )造一個(gè)良好的環(huán)境,使系統具有先進(jìn)性,并在相當長(cháng)的時(shí)期內不失其先進(jìn)性。
        實(shí)用性:選用的產(chǎn)品技術(shù)先進(jìn)、成熟,支持軟件多、開(kāi)發(fā)工具豐富,價(jià)格合理,符合國際、國家或行業(yè)標準;用戶(hù)界面做到直觀(guān)、友好,業(yè)務(wù)人員只需經(jīng)過(guò)簡(jiǎn)單培訓即可操作。在歸納共性的基礎上充分考慮具體商業(yè)企業(yè)的個(gè)性,使之成為一個(gè)結構合理、功能齊全、界面友好、實(shí)用性強的系統。
        可靠性:采用良好的操作系統和數據庫,確保數據的一致性和完整性,并使系統免受病毒感染。提供完善的數據備份方案和系統崩潰后的恢復手段。
        可維護性:系統提供強有力的數據庫管理功能,能有效地進(jìn)行數據庫系統的管理、維護、監視;能方便地進(jìn)行系統的控制、重組和性能調整,使系統保持良好的性能。應用系統應有相應的管理、維護功能,提供用戶(hù)幫助功能以方便用戶(hù)的使用和維護。
        可擴充性:學(xué)生名單的增減不影響系統的運行;系統設備配置靈活方便,兼容性和開(kāi)放性好,便于升級;應用軟件實(shí)現模塊相互獨立,控制程序和執行程序相分離,具有高度的程序獨立性和數據獨立性,使機構和業(yè)務(wù)變化的影響減至最小,方便了擴充和修改。
2.1.2  系統的設計目標
操作界面簡(jiǎn)單,容易操作。
實(shí)現課堂全部點(diǎn)名的功能和指定某人點(diǎn)名。
實(shí)現按人數比例對學(xué)生進(jìn)行隨機抽點(diǎn)和根據歷史出勤情況進(jìn)行智能抽點(diǎn)。
實(shí)現課堂答題的隨機抽點(diǎn)功能。
實(shí)現語(yǔ)音化點(diǎn)名或無(wú)聲點(diǎn)名。
實(shí)現對點(diǎn)名數據的統計分析功能。
具有點(diǎn)名名單的擴充性和靈活性。
2.1.3  系統的基本框架
本系統采用C/S開(kāi)發(fā)模式;
C/S (Client/Server)結構,即大家熟知的客戶(hù)機和服務(wù)器結構。它是軟件系統體系結構,通過(guò)它可以充分利用兩端硬件環(huán)境的優(yōu)勢,將任務(wù)合理分配到Client端和Server端來(lái)實(shí)現,降低了系統的通訊開(kāi)銷(xiāo)。目前大多數應用軟件系統都是Client/Server形式的兩層結構。
C/S其結構分為兩層,數據層、應用層


2.1.3.1 總體模塊結構

2.1.3.2 子模塊結構
2.1.3.2.1  全體點(diǎn)名模塊

2.1.3.2.2  部分抽點(diǎn)模塊

2.1.3.2.3  答題點(diǎn)名模塊

2.1.3.2.4  出勤統計

2.1.4  系統的實(shí)現環(huán)境
應用系統與其所處的系統環(huán)境密切相關(guān),一個(gè)系統的功能及性能好壞,環(huán)境起著(zhù)十分顯著(zhù)的作用。
2.1.4.1 硬件環(huán)境
系統的硬件配置如下:
        PIII 800 CPU
        256M 內存
        15英寸顯示器
        30G 硬盤(pán)
2.1.4.2 軟件環(huán)境
課堂點(diǎn)名軟件要求安裝在Windows 2000以上的系統里,并要求安裝Microsoft .NET Framework 2.0。若要實(shí)現中文語(yǔ)音點(diǎn)名則還必須安裝Microsoft Speech SDK 5.1和Microsoft Speech SDK 5.1 Language Pack。
2.2開(kāi)發(fā)工具的選用及介紹
     開(kāi)發(fā)本軟件開(kāi)發(fā)工具主要用到了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 是一套完整的開(kāi)發(fā)工具,用于生成 ASP Web 應用程序、XML Web services、桌面應用程序和移動(dòng)應用程序。Visual Basic .NET、Visual C++ .NET、Visual C# .NET 和 Visual J# .NET 全都使用相同的集成開(kāi)發(fā)環(huán)境 (IDE),該環(huán)境允許它們共享工具并有助于創(chuàng )建混合語(yǔ)言解決方案。另外,這些語(yǔ)言利用了 .NET Framework 的功能,此框架提供對簡(jiǎn)化 ASP Web 應用程序和 XML Web services 開(kāi)發(fā)的關(guān)鍵技術(shù)的訪(fǎng)問(wèn)。
Windows 窗體
Windows 窗體是用于 Microsoft Windows 應用程序開(kāi)發(fā)的、基于 .NET Framework 的新平臺。此框架提供一個(gè)有條理的、面向對象的、可擴展的類(lèi)集,使您能夠開(kāi)發(fā)功能豐富的 Windows 應用程序。另外,Windows 窗體可作為多層分布式解決方案中的本地用戶(hù)界面。

.NET Framework 旨在實(shí)現下列目標:
提供一個(gè)一致的面向對象的編程環(huán)境,而無(wú)論對象代碼是在本地存儲和執行,還是在本地執行但在 Internet 上分布,或者是在遠程執行的。
提供一個(gè)將軟件部署和版本控制沖突最小化的代碼執行環(huán)境。
提供一個(gè)可提高代碼(包括由未知的或不完全受信任的第三方創(chuàng )建的代碼)執行安全性的代碼執行環(huán)境。
提供一個(gè)可消除腳本環(huán)境或解釋環(huán)境的性能問(wèn)題的代碼執行環(huán)境。
使開(kāi)發(fā)人員的經(jīng)驗在面對類(lèi)型大不相同的應用程序(如基于 Windows 的應用程序和基于 Web 的應用程序)時(shí)保持一致。
按照工業(yè)標準生成所有通信,以確; .NET Framework 的代碼可與任何其他代碼集成。
.NET Framework 具有兩個(gè)主要組件:公共語(yǔ)言運行庫和 .NET Framework 類(lèi)庫。公共語(yǔ)言運行庫是 .NET Framework 的基礎。您可以將運行庫看作一個(gè)在執行時(shí)管理代碼的代理,它提供內存管理、線(xiàn)程管理和遠程處理等核心服務(wù),并且還強制實(shí)施嚴格的類(lèi)型安全以及可提高安全性和可靠性的其他形式的代碼準確性。事實(shí)上,代碼管理的概念是運行庫的基本原則。以運行庫為目標的代碼稱(chēng)為托管代碼,而不以運行庫為目標的代碼稱(chēng)為非托管代碼。.NET Framework 的另一個(gè)主要組件是類(lèi)庫,它是一個(gè)綜合性的面向對象的可重用類(lèi)型集合,您可以使用它開(kāi)發(fā)多種應用程序,這些應用程序包括傳統的命令行或圖形用戶(hù)界面 (GUI) 應用程序,也包括基于 ASP.NET 所提供的最新創(chuàng )新的應用程序(如 Web 窗體和 XML Web services)。
.NET Framework 可由非托管組件承載,這些組件將公共語(yǔ)言運行庫加載到它們的進(jìn)程中并啟動(dòng)托管代碼的執行,從而創(chuàng )建一個(gè)可以同時(shí)利用托管和非托管功能的軟件環(huán)境。.NET Framework 不但提供若干個(gè)運行庫宿主,而且還支持第三方運行庫宿主的開(kāi)發(fā)。
.NET Framework 環(huán)境

()

SAPI SDK(Microsoft Speech SDK 5.1和Microsoft Speech SDK 5.1 Language Pack)
SAPI SDK是微軟公司免費提供的語(yǔ)音應用開(kāi)發(fā)工具包,這個(gè)SDK中包含了語(yǔ)音應用設計接口(SAPI)、微軟的連續語(yǔ)音識別引擎(MCSR)以及微軟的語(yǔ)音合成(TTS)引擎等等。目前的5.1版本一共可以支持3種語(yǔ)言的識別 (英語(yǔ),漢語(yǔ)和日語(yǔ))以及2種語(yǔ)言的合成(英語(yǔ)和漢語(yǔ))。SAPI中還包括對于低層控制和高度適應性的直接語(yǔ)音管理、訓練向導、事件、語(yǔ)法編譯、資源、語(yǔ)音識別(SR)管理以及TTS管理等強大的設計接口。其結構如圖(1):


圖(1)
語(yǔ)音引擎則通過(guò)DDI層(設備驅動(dòng)接口)和SAPI(SpeechAPI)進(jìn)行交互,應用程序通過(guò)API層和SAPI通信。通過(guò)使用這些API,用戶(hù)可以快速開(kāi)發(fā)在語(yǔ)音識別或語(yǔ)音合成方面應用程序。
()

三、課堂點(diǎn)名軟件的具體設計與實(shí)現
3.1數據表的設計與實(shí)現
   本系統使用Microsoft Office 2003 里的EXECL表作為數據庫。這主要是介于目前學(xué)校實(shí)際網(wǎng)絡(luò )情況而定的,如設計SQL Server 2000等數據庫實(shí)現全校統一管理則需要良好的網(wǎng)絡(luò )環(huán)境。通過(guò)實(shí)際了解本了教室的網(wǎng)絡(luò )情況得出以下不利因素:
1.網(wǎng)絡(luò )穩定性差
2.網(wǎng)絡(luò )病毒流行
3.很多教室網(wǎng)絡(luò )完全不通
為了能夠更好的保障本系統的使用。所以,選擇了基于本地數據庫的設計方法。
其次,從了解得知任課教師從教務(wù)處獲得的名單格式為Html的網(wǎng)頁(yè)格式。具體請見(jiàn)下圖:

名單為Html網(wǎng)頁(yè)格式。介于對Html網(wǎng)頁(yè)文件的操作安全性、數據存儲性和可操作行方面考慮,所以放棄了直接將Html網(wǎng)頁(yè)作數據庫的設計。從而選擇了操作更加簡(jiǎn)單,安全性更高的EXCEL表做數據庫。
EXECL點(diǎn)名數據庫的結構如下:
列  名 類(lèi)   型
序號 常   規
姓名 常   規
學(xué)號 常   規
第一次 常   規
… …
在本數據庫中用1和0表示出勤和缺勤的記錄,空值表示未點(diǎn)名。
任課教師可以方便的自行建立數據庫進(jìn)行點(diǎn)名。具體方法是:將原名單的Html文件打開(kāi),將其中表格內的所有行和所有列進(jìn)行復制,然后新建一個(gè)excel表,打開(kāi)新建的excel表,在excel表的第一個(gè)空點(diǎn)擊鼠標右鍵粘貼,然后保存退出即可。如此一個(gè)學(xué)生數據庫名單就建立成功,便可以方便的進(jìn)行點(diǎn)名操作了。
建立好的數據庫具體見(jiàn)下圖:

3.2 課堂點(diǎn)名軟件的軟件部分設計
本系統主要為實(shí)現:
操作界面簡(jiǎn)單,容易操作。
實(shí)現課堂全部點(diǎn)名的功能和指定某人點(diǎn)名。
實(shí)現按人數比例對學(xué)生進(jìn)行隨機抽點(diǎn)和根據歷史出勤情況進(jìn)行智能抽點(diǎn)。
實(shí)現課堂答題的隨機抽點(diǎn)功能。
實(shí)現語(yǔ)音化點(diǎn)名或無(wú)聲點(diǎn)名。
實(shí)現對點(diǎn)名數據的統計分析功能。
具有點(diǎn)名名單的擴充性和靈活性。
為實(shí)現上述點(diǎn)名功能本系統由兩個(gè)Winform窗體和四個(gè)的模塊組成。兩個(gè)Winform窗體分別為main主窗體和que答題點(diǎn)名窗體。main主窗體主要由全體點(diǎn)名模塊、部分抽點(diǎn)模塊和出勤統計模塊組成,而que答題點(diǎn)名窗體主要由課堂答題抽點(diǎn)模塊組成。具體架構如下所示:

3.2.1 全體點(diǎn)名模塊
1.1 設計方法
     本模塊用于對全體學(xué)生進(jìn)行點(diǎn)名,也可以指定對某人進(jìn)行點(diǎn)名。需要實(shí)現無(wú)聲點(diǎn)名和語(yǔ)音點(diǎn)名功能,并向數據庫記錄下點(diǎn)名記錄。主要工作流程見(jiàn)下圖:


1.2界面設計
    打開(kāi)Microsoft Visual Studio 2005,選擇【文件】|【項目】|【Visual C#】|【W(wǎng)indows應用程序】命令,然后就可以新建項目,如圖所示:


這時(shí)在窗口上會(huì )出現一個(gè)新窗體。向窗體中添加一個(gè)tabControl用于切換各個(gè)模塊的功能界面。如圖所示:

    然后向tabpage1上添加控件,分別為八個(gè)button,;再填加一個(gè)checkBox、trackBar、comboBox和dataGridView;最后添加五個(gè)Label。再給上述控件設定相應的參數,具體參數見(jiàn)下表:
類(lèi)型 Name Text
tabpage Tabpage1 全體點(diǎn)名
tabpage Tabpage2 部分點(diǎn)名
tabpage Tabpage3 答題點(diǎn)名
tabpage Tabpage4 出勤統計
button openfile 打開(kāi)
button top 第一個(gè)
button tail 最后一個(gè)
button back 上一個(gè)
button next 下一個(gè)
button appeare 開(kāi)始
button absent 缺勤
button red 重度
checkBox checkBox1 語(yǔ)音點(diǎn)名
trackBar trackBar1 
comboBox time 
dataGridView dataGridView1 
Label Label1 第
Label Label2 次
Label Label10 (注:1表示已到,0表示缺席。)
Label tato 
Label name 
(注:向comboBox1的Itmes屬性裝入30個(gè)點(diǎn)名次數。例如:1,2,3...。再對trackBar1的maximum和minmum賦值分別為100和0。)
這樣第一個(gè)功能模塊的界面就設計好了,如圖所示:

1.3主要程序說(shuō)明
   1 基本函數
//創(chuàng )建到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;
            }
        }

//聲明一個(gè)類(lèi),確定更改字段名。用于對數據的的修改添加。
        public string ReturnName(int i)
        {
            string[] AllName = new string[] { "序號", "姓 名", "學(xué) 號", "第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 "";
        }

         //打開(kāi)文件
        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("類(lèi)型不匹配或者主鍵不可更改");
                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();
                }
            }


點(diǎn)擊事件程序
首先編寫(xiě)了“打開(kāi)”按鍵下的點(diǎn)擊事件。用于選擇要打開(kāi)的excel數據庫文件。并將其顯示在dataGridView1、name和tato里面。dataGridView1用于顯示選定的整個(gè)數據庫的內容,name顯示當前點(diǎn)名學(xué)生的姓名,tato用于顯示數據庫名稱(chēng),一般可設為班級名稱(chēng)。
private void openfile_Click(object sender, EventArgs e)
        {
            if (ds != null) //將數據集清空,以備用。
            {
                ds.Dispose();
            }

            open();
            if (address != "")
            {
                i = 0; //數據的行控制
j = 1; //數據的列控制
hang = 0; //用于控制dataGridView1里面的光標移動(dòng)
                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 = "開(kāi)  始";
            tot = 0; //用于記錄點(diǎn)名總人數
sd = 0; //用于記錄實(shí)到人數
dy= 0; //用于控制語(yǔ)音朗讀
        }

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

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

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

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

“開(kāi)始”按鍵主要程序
本按鍵主要用于朗讀姓名和記錄出勤。記錄出勤主要調用到BindToView(1, i, int.Parse(time.Text) + 2)函數。
編寫(xiě)語(yǔ)音函數首先要安裝Microsoft Speech SDK 5.1和Microsoft Speech SDK 5.1 Language Pack。然后在Visual Studio 2005.NET程序里添加引用中的COM里引用Microsoft Speech Object Library。


語(yǔ)音朗讀部分程序:
Try  //用于將語(yǔ)音函數實(shí)例化和初始化
                        {
                            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 隨機抽點(diǎn)子模塊
在隨機抽點(diǎn)子模塊要做到的功能是從原始點(diǎn)名名單里隨機的抽出一部分人來(lái)生成一個(gè)隨機點(diǎn)名名單,然后對其進(jìn)行點(diǎn)名。
隨機抽點(diǎn)子模塊主要利用一個(gè)隨機函數來(lái)對DataSet數據集里面的學(xué)生所在行進(jìn)行隨機抽點(diǎn)。在DataSet數據集里面的數據是以二維表方式存放的,在這個(gè)二維表里面每一行代表一個(gè)學(xué)生及其出勤記錄。而行號就是確定學(xué)生姓名的關(guān)鍵字了。我的做法是首先得到總行數row,確定抽點(diǎn)人數比例用這個(gè)比例去乘以row得出抽點(diǎn)人數nummen,然后再從0-row中隨即抽取nummen個(gè)不相同的數字存放在數組arrNum中。這樣就確定了抽點(diǎn)名單了,再將名單顯是在dataGridView3里。點(diǎn)名時(shí)就只對arrNum數組里相對應行號的學(xué)生點(diǎn)名。
具體流程示意圖:

主要相應函數:

        //產(chǎn)生隨機數并裝入數組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;
            }

然后選擇是否需要語(yǔ)音點(diǎn)名,然后開(kāi)始點(diǎn)名。主要代碼如下:
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("語(yǔ)音庫不存在,請安裝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 設計方法
本功能模塊主要為實(shí)現對歷史出勤情況的一個(gè)統計匯總。主要分為學(xué)生個(gè)人出勤情況統計和班級出勤情況統計。主要工作流程見(jiàn)下圖:


1.2 界面設計
點(diǎn)擊tabControl1上的出勤統計選項卡,這時(shí)出現一個(gè)空白界面。然后向此界面上分別添加一個(gè)button按鈕、dataGridView、groupBox和六個(gè)label。再給上述控件設定相應的參數,具體參數見(jiàn)下表:
類(lèi)型 Name Text
button openfile_3 統計
dataGridView dataGridView4 
groupBox groupBox1 班級出勤情況:
label Label6 個(gè)人出勤情況:
label Label11 班  級:
label Label12 總人數:
label Label13 出勤總人次:
label Label14 缺席總人次:
label Label15 出 席 率:
這樣出勤統計模塊的界面就設計好了,如圖所示:


1.3 主要程序代碼說(shuō)明
主要用于計算并顯示統計結果。
算法示意:


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("點(diǎn)名總次數", 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["點(diǎn)名總次數"] = 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操作流程
只需點(diǎn)擊“統計”按鈕,便可生成通解結果。
四、系統的測試與運行
4.1   軟件測試
 盡管軟件質(zhì)量保證是貫穿軟件開(kāi)發(fā)全過(guò)程的活動(dòng),但最關(guān)鍵的步驟是軟件測試,軟件測試是對軟件規格說(shuō)明、軟件設計和編碼的最后復審,目的是在軟件產(chǎn)品交付之前盡可能發(fā)現軟件中潛伏的錯誤。大量統計表明,軟件測試工作量往往占軟件開(kāi)發(fā)總工作量的40%以上。
這個(gè)階段是用來(lái)測試程序,找出系統Bug并修改錯誤的過(guò)程。雖然在每個(gè)模塊開(kāi)發(fā)的過(guò)程中都進(jìn)行過(guò)階段性的測試,但是現場(chǎng)整體測試更接近將來(lái)系統投入使用的情況。
在查閱了資料后,了解到系統的整體測試方法主要有非漸增測試法和漸增測試法兩種。其中漸增測試法適用于模塊間數據流多、可以單獨測試各個(gè)模塊到測試多的模塊的情況。由于系統各部分之間有密切的關(guān)系,所以選擇漸增測試法作為測試的方法。
 測試時(shí)首先對各個(gè)模塊的功能進(jìn)行測試,對照需求分析逐個(gè)測試系統的功能;然后對照數據庫的內容察看各個(gè)查詢(xún)功能反饋的結果是否正確;最后整體運行系統,測試各個(gè)模塊之間的銜接是否會(huì )對系統的整體性能發(fā)生影響。為了測試程序的健壯性,還可以在測試過(guò)程中故意輸入一些錯誤的數據,保證系統能夠自行處理這些錯誤,使得系統在日常的使用中不會(huì )由于工作失誤而無(wú)法運行。

測試小結
在測試過(guò)程中,確實(shí)發(fā)現了很多的錯誤。一部分因為開(kāi)發(fā)環(huán)境與實(shí)際使用環(huán)境不同產(chǎn)生的,比如說(shuō)圖片的效果不對,或者控件的位置出現偏移等等;還有數據庫的連接問(wèn)題,在不同的計算機上因為計算機名的不同導致無(wú)法連接數據庫,這些問(wèn)題通過(guò)現場(chǎng)的調試基本得到了解決。
使用面向對象的開(kāi)發(fā)工具進(jìn)行系統開(kāi)發(fā)后,由于其獨有的特點(diǎn),所以調試時(shí)與傳統的程序開(kāi)發(fā)語(yǔ)言并不完全相同,就本次開(kāi)發(fā)過(guò)程中使用的Microsoft Visual Studio 2005來(lái)說(shuō),例如:在Microsoft Visual Studio 2005的定義當中,面向對象的設計方法使得很多模塊的變量封裝起來(lái),由此,對象的變量常常是不可見(jiàn)的,定義全局變量一定要在窗體之外的公用模塊中,而且要定義為公用。
另一部分錯誤卻出乎意料,比如說(shuō)有些控件數組的初始化問(wèn)題。因為要知道很多情況下程序的錯誤是連鎖性的,一個(gè)語(yǔ)句錯誤,其后相關(guān)語(yǔ)句也跟著(zhù)出錯,所以找出錯誤源是很重要,在程序中設置斷點(diǎn)或在調試模式下執行程序,可以快速發(fā)現和糾正錯誤,把無(wú)法初始化的控件元素單獨初始化后,問(wèn)題可以得到解決。
經(jīng)過(guò)測試的過(guò)程,認識到自己在程序的編寫(xiě)和思路方面都存在一定的問(wèn)題,相信經(jīng)過(guò)不斷的學(xué)習和經(jīng)驗積累,可以實(shí)現較大的改觀(guān)。

參考文獻
張忠國. Visual C#中隨機數使用實(shí)例
關(guān)于紅葉二級電站生產(chǎn)管理系統開(kāi)發(fā)要求. 紅葉二級電站生產(chǎn)管理系統 2008
配網(wǎng)管理系統---需求分析說(shuō)明書(shū). 紅葉二級電站生產(chǎn)管理系統 2008
商小千. 燕山大學(xué)里仁學(xué)院“兩課”社會(huì )調查報告 2006
白  春. POS系統在零售行業(yè)的應用  2005

c.SetVolume(Convert.ToUInt16(trackBar1.Value));
                            svc.SetRate(2);
                            svc.Voice = svc.GetVoices(string.Empty, string.Empty).Item(3);
                        }
                        catch
                        {
                            MessageBox.Show("語(yǔ)音庫不存在,請安裝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();
        }
//用于語(yǔ)音的朗讀
mythread = new Thread(Voice);
                        mythread.Start();


“缺席”按鍵主要程序
“缺席”按鍵主要程序和“開(kāi)始”類(lèi)似(略)。只是BindToView(0, i, int.Parse(time.Text) + 2)函數輸入為0。
2.1 操作流程

(注:如沒(méi)有安裝Microsoft Speech SDK 5.1和Microsoft Speech SDK 5.1 Language Pack的計算機則會(huì )提示:“語(yǔ)音庫不存在,請安裝Microsoft Speech SDK 5.1和Microsoft Speech SDK 5.1 Language Pack!” )
3.2.2 部分抽點(diǎn)模塊
1.1設計方法
  本功能模塊主要實(shí)現按總人數比例生成隨機抽點(diǎn)名單和更具歷史出勤情況生成抽點(diǎn)名單,然后根據生成的抽點(diǎn)名單進(jìn)行無(wú)聲或語(yǔ)音點(diǎn)名。并向數據庫記錄下點(diǎn)名記錄。主要工作流程見(jiàn)下圖:

1.2界面設計
   點(diǎn)擊tabControl1上的部分點(diǎn)名選項卡,這時(shí)出現一個(gè)空白界面。然后向此界面上分別添加八個(gè)button按鈕、一個(gè)checkBox、trackBar、兩個(gè)comboBox、兩個(gè)dataGridView和六個(gè)Label。再給上述控件設定相應的參數,具體參數見(jiàn)下表:
類(lèi)型 Name Text
button openfile_1 打開(kāi)
button back_1 上一個(gè)
Button next_1 下一個(gè)
Button appeare_1 開(kāi)始
Button absent_1 缺勤
Button random 隨機抽點(diǎn)
Button duty 出勤抽點(diǎn)
button re_1 重讀
checkBox checkBox2 隨機抽點(diǎn)
trackBar trackBar2 
comboBox percent 
comboBox time_1 
dataGridView dataGridView2 
dataGridView dataGridView3 
Label tato1 
Label name_1 
Label Label3 次
Label Label4 第
Label Label5 抽點(diǎn)比例
Label Label7 抽點(diǎn)名單:
Label Label9 (注:1表示已到,0表示缺席。)
(注:向time_1的Itmes屬性裝入30個(gè)點(diǎn)名次數。例如:1,2,3...。
向percent的Itmes屬性裝入百分比。例如:10%、20%、30%、40%、50%、60%、70%、80%再對trackBar2的maximum和minmum賦值分別為100和0。)
這樣部分抽點(diǎn)功能模塊的界面就設計好了,如圖所示:


1.3主要程序說(shuō)明
1 基本函數
//創(chuàng )建到excel數據庫的連接(同上,略)
//返回DataAdapter(同上,略)
//將數據裝入到DataSet里面(同上,略)
//聲明一個(gè)類(lèi),確定更改字段名。用于對數據的的修改添加。(同上,略)
//用于修改數據庫內的數據(同上,略)
//顯示文件到DataGridView2
顯示文件到DataGridView3
public void dt_1(DataGridView Dgv,int[] ax)//創(chuàng )建數據表格用于裝和顯示生成的名單
      {
                    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 隨機抽點(diǎn)子模塊
在隨機抽點(diǎn)子模塊要做到的功能是從原始點(diǎn)名名單里隨機的抽出一部分人來(lái)生成一個(gè)隨機點(diǎn)名名單,然后對其進(jìn)行點(diǎn)名。
隨機抽點(diǎn)子模塊主要利用一個(gè)隨機函數來(lái)對DataSet數據集里面的學(xué)生所在行進(jìn)行隨機抽點(diǎn)。在DataSet數據集里面的數據是以二維表方式存放的,在這個(gè)二維表里面每一行代表一個(gè)學(xué)生及其出勤記錄。而行號就是確定學(xué)生姓名的關(guān)鍵字了。我的做法是首先得到總行數row,確定抽點(diǎn)人數比例用這個(gè)比例去乘以row得出抽點(diǎn)人數nummen,然后再從0-row中隨即抽取nummen個(gè)不相同的數字存放在數組arrNum中。這樣就確定了抽點(diǎn)名單了,再將名單顯是在dataGridView3里。點(diǎn)名時(shí)就只對arrNum數組里相對應行號的學(xué)生點(diǎn)名。
具體流程示意圖:

主要相應函數:

        //產(chǎn)生隨機數并裝入數組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) //利用循環(huán)判斷是否有重復
                {
                    tmp = ra.Next(minValue, maxValue); //重新隨機獲取。
                    tmp = getNum(arrNum, tmp, minValue, maxValue, ra);//遞歸:如果取出來(lái)的數字和已取得的數字有重復就重新隨機獲取。
                }
                n++;
            }
            return tmp;
        }

3.2.2.2 出勤抽點(diǎn)子模塊
  出勤抽點(diǎn)子模塊要做到的功能主要是根據學(xué)生每個(gè)人的歷史出勤情況有針對性的按比例生成點(diǎn)名名單。也就是缺勤次數越多的學(xué)生被加入這個(gè)點(diǎn)名名單的幾率越大。
出勤抽點(diǎn)子模塊主要是利用兩個(gè)數組和一個(gè)隨機函數做到的。首先,獲取DataSet內的點(diǎn)名名單的行數row,然后根據選取的抽點(diǎn)人數百分比得出抽點(diǎn)人數nummen。將0-row行學(xué)生的行號裝入數組aa。之后對整個(gè)DataSet數據集里裝的每個(gè)學(xué)生的出勤情況進(jìn)行遍歷,如有缺勤記錄則向aa數組繼續裝入一次相應的行號(即同一個(gè)人出現幾次缺勤就裝幾次他的行號進(jìn)去增加被抽中的幾率)。在遍歷數據的同時(shí)記下所有人總的缺勤次數z。然后利用getRandomNum函數從0-row+z中隨機取出nummen個(gè)不相同的數字存入arrNum,F在就可以根據arrNum內存的數據確定aa的相應行號,通過(guò)aa又可以確定DataSet數據集里面裝得學(xué)生名單的行號了。實(shí)際上arrNum數組里面裝得就是生成的出勤名單了。
流程示意圖:


主要相應函數:
               將將0-row行學(xué)生的行號和缺勤記錄的行號裝入數組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]) //利用循環(huán)判斷是否有重復
                    {
                       tmp = ra.Next(minValue, maxValue); //重新隨機獲取。
                       tmp= getNum(arrNum, tmp, minValue, maxValue, ra);//遞歸:如果取出來(lái)的數字和已取得的數字有重復就重新隨機獲取。
                    }
                    n++;
                }
            return tmp;
        }
2.1 操作流程


3.2.3 課堂答題抽點(diǎn)模塊
1.1 設計方法
   由于大學(xué)課堂人數眾多,任課教師記不得很多學(xué)生的姓名。提供此功能主要免去了教師反復抽點(diǎn)某些認識的學(xué)生,使每個(gè)學(xué)生都有被抽到的機會(huì )。本功能模塊主要實(shí)現課堂教學(xué)過(guò)程中任課教師進(jìn)行的答題抽點(diǎn)功能,同時(shí)還提供小型浮動(dòng)窗口置頂顯示的功能方便教學(xué)時(shí)在PowerPoint、Word和其他一些演示功能的界面上進(jìn)行抽點(diǎn),這樣就不會(huì )影響教學(xué)。
主要工作流程見(jiàn)下圖:

 

1.2 界面設計
    點(diǎn)擊tabControl1上的答題點(diǎn)名選項卡,這時(shí)出現一個(gè)空白界面。在界面上添加一個(gè)button按鈕和一個(gè)Label。再給上述控件設定相應的參數,具體參數見(jiàn)下表:
類(lèi)型 Name Text
Label Label8 進(jìn)入課堂答題點(diǎn)名系統!
button Button1 進(jìn)   入
這樣答題點(diǎn)名功能模塊的部分界面就設計好了,如圖所示:


     現在開(kāi)始設計答題點(diǎn)名窗體首先在課堂點(diǎn)名解決方案中添加一個(gè)窗體命名為que。然后向窗體上添加五個(gè)button、一個(gè)checkBox和三個(gè)label。再給上述控件設定相應的參數,具體參數見(jiàn)下表:
類(lèi)型 Name Text
button openfile_3 選擇名單
button Random_1 點(diǎn)名
button Button1 關(guān)閉
button Button2 顯示置頂
button Button3 重讀
checkBox checkBox1 語(yǔ)音
label Label1 請
label Label2 答題!
label Label3 
這樣答題點(diǎn)名功能模塊的界面就設計好了,如圖所示:

1.3主要程序說(shuō)明
主窗體main部分:
   本段代碼主要用來(lái)進(jìn)入子船體que
   答題點(diǎn)名下的進(jìn)入que界面的的button按鍵的事件
private void button1_Click(object sender, EventArgs e)
        {  
this.Hide();
            qus qus = new qus();
            qus.ShowDialog();
            this.Close();
        }

子窗體que部分:
 本窗體主要用來(lái)進(jìn)行答題點(diǎn)名功能。
首先選擇點(diǎn)名名單利用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);
 

【課堂點(diǎn)名軟件(一)】相關(guān)文章:

自動(dòng)發(fā)油控制軟件設計(一)03-07

免費vc中國象棋軟件(一)03-07

機電一體化系統中的軟件03-14

論析軟件價(jià)值效用論與軟件資本流通03-19

新課程化學(xué)課堂導入初探(一)11-23

軟件無(wú)形性在軟件工程教育中的影響的論文12-08

一種基于網(wǎng)絡(luò )的監控軟件設計與實(shí)現11-20

論一種加強軟件項目管理的實(shí)踐模式03-19

淺論一種加強軟件項目管理的實(shí)踐模式03-13

激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频