【正文】
how(m_RecordsetPtr)。 對于同一考試日期內,一個教室只能提供一次考試的情況,我們通過在選擇未安排過的某個班級的某個課程之后,選擇教室編號,然后通過對班級專業(yè)課程表進行查詢,查詢該班級該課程的考試時間,然后查詢該考試時間下是否有與用戶輸入的教室編號相同的,如果相同那么將輸入錯誤提示:“該教室該天已經(jīng)安排考試,請輸入不同的數(shù)據(jù)!”。 開始分配考試教室,取出所有的教室名,查找自動生成表,如果在本考試時間內沒有安排就選擇它。%s39。 圖 半自動考場安排 Form1 25 圖 半自動考場安排 Form2 4. 3. 3 考場安排基本條件 1)同一監(jiān)考教師不可能在同一時間在兩個不同的地方進行監(jiān)考。為了直接避免這種情況的發(fā)生我們在數(shù)據(jù)庫專業(yè)課程表中直接考慮課程與時間上的對應,這樣就使得這種情況不會發(fā)生 3)同一教室在同一時間不可能提供兩門不同的課程的考試。 26 5)由于存在大小班之分,所以必須根據(jù)學生人數(shù)數(shù)量安排教室的大小。但是還有種情況就是同名同姓的兩個不同老師,雖然在數(shù)據(jù)庫表中我們可以通過主鍵來區(qū)分,但是在界面顯示中還是不大會分清楚,所以對于這種情況我們可以采用姓名之后加編號的方法,比如“王五 1”、“王五 2”等,這樣就可以在直觀 上分清是哪位監(jiān)考教師參加監(jiān)考??紤]到這一點的原因是大教室的數(shù)量遠遠比小教室要少,因此考慮完小教室情況之后然后根據(jù)實際要求使用大教室 。但目前由于算法上的原因我們的系統(tǒng)還未滿足此項需求。進入主程序窗體之后我們首先需要錄入考場安排所需要的數(shù)據(jù)。由一列表顯示已經(jīng)輸入數(shù)據(jù)庫的信息。這個過程是一個取平均值的過程,通過對總的班級課程數(shù)目除以考試天數(shù),然后得到平均值,并通過數(shù)學方法或者運籌學的方法得到最優(yōu)方案,避免了某天的考場安排時由于安排班級過多而導致教室的不足。 2)同一專業(yè)的班級必須在同一天參加同一門考試。在上面的教師資料管理中我們還需要注意一個問題,就是如果教師重名的情況,對于這種情況我們需要在錄入的時候做好標記, 能夠明顯地區(qū)分兩者或者更多重名。當記錄中包含了所有班級與課程的數(shù)據(jù)集之后,那么一個考場編排基本成型,這 個時候為了優(yōu)化考場編排,我們可以對記錄再進行調整。 圖 半自動生成考場安排表 點擊“手動調整”按鈕我們可以進入半自動考場安排表手動調整界面對數(shù)據(jù)進行相關操作(如圖 ),在這里主要是針對已生成的考試安排數(shù)據(jù)表,在授權用戶進行插入、刪除、修改32 等數(shù)據(jù)庫操作時 ,根據(jù)考試安排的的基本條件(下文將詳細講述)拒絕執(zhí)行不合法的操作,并給出提示給用戶。要用 C++來開發(fā) Windows和 Web上的高性能應用33 程序, Visual C++是效率最高的首選工具。 Visual Studio C++ 采用一種非常巧妙的方法將原本非常復雜的 Windows 編程步驟封裝起來,使編程人員可以輕松容易地編寫 Windows應用程序。 (2) Visual C++ MFC類,開發(fā)者只需要做少量的工作就可以得到功能齊全的Windows應用程序。 ( 4)調試方便:在程序調試時,在遇到編譯錯誤時,會在輸出窗口顯示出錯誤類型、行號及錯誤提示等信息。ADO 基于 COM,提供編程語言可利用的對象,它不僅面向 Visual C++,同時還提供面向其他開發(fā)工具的應用,如 Visual Basic、 VJ 等,甚至還提供面向諸如 VBScript、 JavaScript等腳本語言的應用。 2) ADO的結構 34 ADO模型包含了 7個對象和 4個集合, ADO的結構圖如圖所示。在系統(tǒng)設計中我們著重描述我們在開發(fā)系統(tǒng)功能前如何合理布局,系統(tǒng)功能創(chuàng)建中著重闡述了如何 去開發(fā)整個系統(tǒng),系統(tǒng)功能實現(xiàn)中闡述了系統(tǒng)該如何操作,數(shù)據(jù)庫設計中詳細地闡述了數(shù)據(jù)庫表之間的關聯(lián)。 在考場安排系統(tǒng)中現(xiàn)今有關蟻群算法的應用,雖然由于對于蟻群算法如何應用于考場安排系統(tǒng)還為能理解,并且也沒應用到考場安排系統(tǒng)中,但是蟻群算法對于考場安排的優(yōu)化確是相當好的,如果能夠應用該算法來進行考場編排將使我們的系統(tǒng)具有更好的健壯性。 //{{AFX_DATA_MAP(CZDAP) DDX_Control(pDX, IDC_LIST1, m_list)。 //從成員詳 細表讀出字段名稱到列表控件中; CString strSQL,FieldName。jm_RecordsetPtrGetFields()GetCount()。 (j, FieldName, LVCFMT_CENTER, 150)。 (delete from 自動安排 )。 m_RecordsetPtrMoveFirst()。 //到這里為止取出了一組對應的班級 課程名 考試時間,缺少教師 1 教師 2 考場分配 //,取出所有的教室名,查找自動生成表,如果在本考試時間內沒有安排就選擇它 (select 教室編號 from 教室 where 教室編號 not in (select 教室編號 from 自動安排 where 考試日期 =39。 m_RecordsetPtr1MoveFirst()。 ) and 教師姓名 not in (select 教師二 from 自動安排 where 考試日期 =39。 m_RecordsetPtr2MoveFirst()。 // m_RecordsetPtrMoveNext()。%s39。%s39。%s39。 m_RecordsetPtr=(strSQL)。 int nCount = ()。 while(!rstadoEOF) { (nCount,_T())。 n nRecordCount。 i rstGetFields()GetCount()。 (n,i,CellText)。 (strSQL)。t wait. And the air currents were fabulous. I had a little red sail plane I used to go sky surfing in, every couple of days. It was the good life. I played drums till all hours in a basement spot up the river where the walls sweated almost as much as the customers and the smoke used to wash around the lights like streams of milk. When I was done playing I39。m good and I39。t know. The Jac k said, Random. Then its face blurred and it said, Help me. I began getting a feel of the per。t admit even to himse lf that there were some things other people could do better. If you kept beating him at anything you had to be cheating. He started a nasty argument over it one nightcould have gotten seriousbut Gerard and Caine broke it up. G ive Caine that. He took my part that time. Poor guy . . . Hell of a way to go, you know? His throat . . . Well, anyhow, there I was in Texorami, making music and women, winning at cards and jockeying around the sky. Palm trees and nightblooming wallflowers. Lots of good port smellsspices, coffee, tar, saltyou know. Gentlefolk, merchants, and peons the same straights as in most other places. Sailors and assorted travelers passing in and out. Guys like me living around the edges of things. I spent a little over two years in Texorami, happy. Really. Not much contact with the others. Sort of postcard like hellos via the Trumps every now and then, and that was about it. Amber was pretty much off my mind. All this changed one night when I was sitting there with a full house and the guy ac ross from me was trying to make up his mind whether or not I was bluffing. The Jack of Diamonds began talking to me. Yes, that is how it started. I was in a weird frame of mind anyway. I had just finished a couple very hot sets and was still kind of high. A lso, I was physically strung out from a long day39。s about the only thing I wouldn39。 ()。 ()。 ()。 rstMove(n)。 nRecordCount++。//記錄數(shù); ()。 } void CZDAP::show(_RecordsetPtr rst) { CString CellText。 (strSQL)。%s39。%s39。%s39。 m_RecordsetPtr2MoveNext()。 ),strKSSJ,strKSSJ)。 // (select 教師姓名 from 監(jiān)考教師 where 教師姓名 not in (select 教師一 from 自動安排 where 考試日期 =39。),strKSSJ)。 strBJMC=(char*)(_bstr_t)m_RecordsetPtrGetCollect(班級名稱 )。 (select 班級 .班級名稱 ,專業(yè)課程 .課程名稱 ,專業(yè)課程 .考試時間 from 班級 ,專業(yè)課程 where 班級 .專業(yè)編號 =專業(yè)課程 .專業(yè)編號 )。 return TRUE。 ()。 m_RecordsetPtr=(strSQL)。 // TODO: Add extra initialization here (0L,LVS_SHOWSELALWAYS)。 endif extern CMyApp theApp。數(shù)據(jù)庫設計時主要考慮了數(shù)據(jù)的關聯(lián),在實際中本系統(tǒng)還存在許多有待解決的問題,比如當數(shù)據(jù)量增大的過程中,系統(tǒng)的錯誤率也隨著增大,以及一些算法的研究來對系統(tǒng)做全面優(yōu)化等等,這些希望能在日后的研究中得到解決。然后我們再利用前面用來進行手動安排考場系統(tǒng)的信息進行半自動考場安排,在測試 5次重新安連接對象 (Connection) 錯誤集合 (Errors) 錯誤對象 (Error) 屬性集合(Properties) 屬性對象 (Property) 命令對象 (Command) 參數(shù)集合(Parameters) 參數(shù)對象 (Parameter) 屬性集合(Properties) ) 屬性對象 (Property) 記錄集對象 (Recordset) 域集合 (Fields) 域對象 (Field) 屬性集合(Properties) 屬性對象 (Property) 35 排之后發(fā)現(xiàn)考場安排表基本能夠達到應用的目的,但是還是需要手動進行調整,有些因素未完全考慮進去。ADO對 OLE DB的包裝是相當成功的, 相對于 OLE DB中眾多的接口來說, ADO對象模型簡明扼要,沒有一點多余的東西,并且其功能還要比 DAO強大的多。 Visual C++支持斷點調試,同時也可以在調試窗口觀察有關變量的值,以方便查找出有關的邏輯錯誤。 (3) Visual C++,使得在開發(fā)應用程序的全過程中都保證了較高的效率。它有如下的特點: (1) Visual C++ Windows環(huán)境下的應用程序和簡捷、快速的開發(fā)環(huán)境。除了