C語言題庫管理系統(tǒng)-畢業(yè)設(shè)計(論文)_第1頁
C語言題庫管理系統(tǒng)-畢業(yè)設(shè)計(論文)_第2頁
C語言題庫管理系統(tǒng)-畢業(yè)設(shè)計(論文)_第3頁
C語言題庫管理系統(tǒng)-畢業(yè)設(shè)計(論文)_第4頁
C語言題庫管理系統(tǒng)-畢業(yè)設(shè)計(論文)_第5頁
已閱讀5頁,還剩97頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

題庫管理系統(tǒng)摘要匯編語言試題庫管理系統(tǒng)是信息管理系統(tǒng),其開發(fā)的功能主要包括:通過計算機(jī)管理題庫檔案,過強(qiáng)大的查詢和索檢高效的索檢出數(shù)據(jù),提高辦事效率。使用MICROSOFT公司的ACCESS作為后臺數(shù)據(jù)庫,設(shè)計數(shù)據(jù)庫,使用MICROSOFT公司的VISUALC++6.0開發(fā)工具,利用其提供的各種面向?qū)ο蟮拈_發(fā)工具,使用ADO控件連接數(shù)據(jù)庫,開發(fā)出產(chǎn)品。關(guān)鍵字:題庫管理系統(tǒng),VISUALC++6.0,數(shù)據(jù)庫。AbstractAdatabasemanagementsystemistheinformationmanagementsystem,thefunctionthatitdevelopmainlyincludes:Passadatabaseofthecalculatormanagementfile,leadthestrongsearchandthechecksefficientlyofcheckingadata,raisetohandleaffairstheefficiency.TheACCESSthatusesthecompanyofMICROSOFTisthebackstagedatabase,thedesigndatabase,usetheVISUALC++6.0developmenttoolofthecompanyofMICROSOFT,makeuseofvariousdevelopmenttoolthatfacestotheobjectofwhatitprovide,usetheADOtocontrolaconjunctiondatabase,developtoproducethearticle.Keywords:Databasemanagementsystem,VISUALC++6.0,Database.目錄摘要 ……1Abstract *?,1目錄 2TOC\o"1-5"\h\z一、刖a 4\o"CurrentDocument"二、開發(fā)工具和相關(guān)知識簡介 4\o"CurrentDocument"2.1Vc++基礎(chǔ) 5\o"CurrentDocument"2.2SQL語言簡介 5\o"CurrentDocument"三、編譯原理試題庫系統(tǒng)的需求分析 6\o"CurrentDocument"系統(tǒng)的開發(fā)背景 6\o"CurrentDocument"系統(tǒng)的可行性研究 7\o"CurrentDocument"開發(fā)過程框圖 7\o"CurrentDocument"系統(tǒng)功能分析 85系統(tǒng)總體流程圖 9\o"CurrentDocument"四、系統(tǒng)總體設(shè)計 101系統(tǒng)功能模塊框圖 10\o"CurrentDocument"4.2數(shù)據(jù)庫設(shè)計 11\o"CurrentDocument"2.1數(shù)據(jù)庫需求分析 11\o"CurrentDocument"2.2數(shù)據(jù)庫結(jié)構(gòu)設(shè)計 12\o"CurrentDocument"五、編譯原理試題庫系統(tǒng)具體實現(xiàn) 14\o"CurrentDocument"1系統(tǒng)登錄 21\o"CurrentDocument"試題庫系統(tǒng)主界面 24\o"CurrentDocument"試題管理對話框 29\o"CurrentDocument"3.1填空題管理 29\o"CurrentDocument"3.2選擇題管理 37\o"CurrentDocument"用戶管理對話框 47\o"CurrentDocument"5.5成績管理頁面 55\o"CurrentDocument"5.6考試頁面 58\o"CurrentDocument"5.7生成試卷對話框 76\o"CurrentDocument"六、軟件測試 81結(jié)束語81致謝81\o"CurrentDocument"主要參考文獻(xiàn) 82一、前言我們已經(jīng)進(jìn)入了一個信息化的時代,計算機(jī)在我們的生活中有著不可取代的地位。人們可以利用計算機(jī)進(jìn)行各種活動,以減少人的大量的勞動。信息時代也帶來了教學(xué)的改革,現(xiàn)在越來越多的學(xué)校使用電子教學(xué)手段,不僅可以減少大量的繁雜的勞動,而且可以大大提高教學(xué)質(zhì)量。這種背景下,試題庫管理系統(tǒng)被提到了,也就是試題的集成,試卷生成,和無紙考試。該系統(tǒng)試題庫管理是對提交到數(shù)據(jù)庫中的,大量試題信息進(jìn)行管理。管理員可以瀏覽到整個數(shù)據(jù)庫中的試題信息,還可以按照所需的各種條件進(jìn)行查詢,同時具有對查詢到的信息數(shù)目的統(tǒng)計功能,并可對這些試題進(jìn)行修改和刪除。另外,還可以對用戶提交的試卷進(jìn)行管理,可以查看成績,可以刪除。還能夠添加用戶,可以更改用戶信息,刪除信息。該系統(tǒng)界面直觀,操作方便,具有很強(qiáng)的實用性。本次設(shè)計的軟件部分,涉及到的相關(guān)知識有:vc++6.0軟件設(shè)計,odbc數(shù)據(jù)庫連接機(jī)技術(shù),以及SQL語言。本論文共部分:二、開發(fā)工具和相關(guān)知識簡介本系統(tǒng)主要是以vc++6.0為開發(fā)工具,Access2003作為數(shù)據(jù)庫。2.1Vc++基礎(chǔ)VisualC++作為?種程序設(shè)計語言,它同時也是一個集成開發(fā)工具,提供了軟件代碼自動生成和可視化的資源編輯功能。在使用VisualC++開發(fā)應(yīng)用程序的過程中,系統(tǒng)為我們生成了大量的各種類型的文件。首先介紹,擴(kuò)展名為.dsw的文件類型,這種文件在vc中是級別最高的,稱為workspace文件。在vc中,應(yīng)用程序是以project的形式存在的,project文件的擴(kuò)展名為.dsp,在.dsw文件中可以包含多個.dsp的文件,由workspace文件對他們統(tǒng)一的管理。與dsw類型的文件相配合的一個重要的文件是.opt文件,這個文件保存的是和workspace中用到的有關(guān)本機(jī)的配置文件,所以不能在不同的計算機(jī)上共享。當(dāng)我們打開一個workspace文件時,如果系統(tǒng)找不到需要的opt文件,就會自動的創(chuàng)建一個與之配合的,包含本地的計算機(jī)的信息的opt文件。以clw為擴(kuò)展名的文件,是用來存放應(yīng)用程序中用到的類和資源的信息。這些信息是vc中的classwizard工具管理和使用類的信息來源。對應(yīng)每一個應(yīng)用程序,有一個readme.txt文件,這個文件中列出了,應(yīng)用程序中用到的,所有文件的信息,打開查看,就能對應(yīng)用程序的結(jié)構(gòu)有一個基本的認(rèn)識。在應(yīng)用程序中大量應(yīng)用的是以.h和.cpp為擴(kuò)展名的文件,以.h的是叫頭文件,.cpp的叫實現(xiàn)文件,一般來說,.h和.cpp文件是一一對應(yīng)的,在.h的文件中是對應(yīng)的類的定義,.cpp是主要的成員函數(shù)的實現(xiàn)代碼。在應(yīng)用程序中經(jīng)常要用到一些位圖、菜單之類的資源。Vc中以.rc為擴(kuò)展名的文件叫資源文件,其中包含應(yīng)用程序中用到的所有資源。2.2SQL語言簡介SQL是StructedQueryLanguage(結(jié)構(gòu)化查詢語言)的英文縮略語,也有人稱之為StandartQueryLanguage(標(biāo)準(zhǔn)化查詢語言)。SQL語言已經(jīng)成為國際標(biāo)準(zhǔn)語言。各數(shù)據(jù)庫廠商紛紛推出各自支持SQL的軟件以及SQL接口,它是關(guān)系數(shù)據(jù)庫無可爭議的主流語言。SQL語言之所以被廣泛接受和認(rèn)可,是因為他是一個綜合的,通用的,功能強(qiáng)大并且簡單易學(xué)的語言。它集成了數(shù)據(jù)定義語言(DateDefintionLanguage,DDL),數(shù)據(jù)操縱語言(DateManipulationLanguage,DML),數(shù)據(jù)控制語言(DateControlLanguage)于一身,具有強(qiáng)勁的數(shù)據(jù)查詢(DateQuery)功能。其語言風(fēng)格統(tǒng)一,簡潔凝練且獨立完整,并且有良好的可擴(kuò)充性。SQL既可以獨立使用,即獨立地在計算機(jī)上與數(shù)據(jù)交互,也可以內(nèi)含在其他高級語言(如C,BASIC等)中統(tǒng)?編程使用。SQL的核心命令只有9個動詞語句,其中屬于數(shù)據(jù)定義的有3個:create,drop和alter。屬于數(shù)據(jù)操縱的有3個:insert,updatefDdelete屬于數(shù)據(jù)查詢的有1個:select。屬于數(shù)據(jù)控制的有2個:grant和revote。SQL語言不區(qū)分大小寫,但對數(shù)據(jù),表名和字段名最好統(tǒng)一。三、編譯原理試題庫系統(tǒng)的需求分析系統(tǒng)的開發(fā)背景在當(dāng)前的信息環(huán)境下,隨著社會的進(jìn)步和技術(shù)的發(fā)展,知識正在發(fā)揮著越來越大的作用。企業(yè)、機(jī)關(guān)、學(xué)校等各單位想在激烈的競爭環(huán)境中立于不敗之地,就必須認(rèn)識到提高競爭力,安徽工業(yè)大學(xué)也不例外。為了適應(yīng)以后發(fā)展的要求,減輕教師的負(fù)擔(dān),讓老師從繁重的出試卷、改試卷,及管理試卷的勞動中解放出來,讓老師全身投入到教學(xué)工作中,從而提高教學(xué)質(zhì)量和教學(xué)效率。在這種環(huán)境下,提出了對試題庫系統(tǒng)的需求。系統(tǒng)的可行性研究現(xiàn)在的硬件、軟件,及數(shù)據(jù)庫技術(shù)已經(jīng)完全可以支持這樣的一個系統(tǒng)的所有需求的實現(xiàn)。在這里,我們選用普通的pc機(jī),編程工具使用vc++6.0,數(shù)據(jù)庫由Access2OO3支持。完全可以滿足用戶的需求。本系統(tǒng)開發(fā)的費用比較低,在交付使用之后,其實用性、方便性,會贏得廣大教師的認(rèn)同。所得的效益完全超過軟件的開發(fā)費用,此后也就會帶來相應(yīng)的經(jīng)濟(jì)效益。本系統(tǒng)具有美觀、友好的人機(jī)交互界面,采用了問答式與多功能菜單相結(jié)合的用戶參與方式,對各種輸入信息進(jìn)行提示和幫助。其中大部分的界面都是按照用戶的要求定制的,用戶操作簡便易行。開發(fā)過程框圖

系統(tǒng)功能分析本系統(tǒng)需要完成的功能主要有:教師登錄、考生登錄用戶管理(記錄的新建、修改、刪除和定位)題庫管理與維護(hù)(記錄的新建、修改、刪除和定位)從題庫中自動選擇定數(shù)量的試題(選擇和填空題),生成考盤(隨機(jī)產(chǎn)生題號,使各考生的題目順序不--樣)作為本次考試的學(xué)生考試庫答題(選擇和填空題),如果中途退出,可再次進(jìn)入答題環(huán)境答題結(jié)束退出時,系統(tǒng)可自動評分,評分后不能再進(jìn)入答題環(huán)境,評分時還向用提供答題的相關(guān)信息:每類題的得分,出錯的試題等管理員身份可以查看用戶的考試信息,得分等,能進(jìn)行維護(hù),可以刪除用戶的卷信息(已提交試卷)考試結(jié)束用戶可以查詢自己的考試成績,包括以往的考試(已提交的成績)四、系統(tǒng)總體設(shè)計系統(tǒng)功能模塊框圖

數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫在一個信息管理系統(tǒng)中占有非常重要的地位,數(shù)據(jù)庫設(shè)計的好壞將直接對應(yīng)用系統(tǒng)的效率以及實現(xiàn)的效果產(chǎn)生影響。合理的數(shù)據(jù)庫設(shè)計可以提高數(shù)據(jù)存儲的效率,保證數(shù)據(jù)的完整和一致。同時,合理的數(shù)據(jù)庫結(jié)構(gòu)也將有利于程序的實現(xiàn)。設(shè)計數(shù)據(jù)庫系統(tǒng)時應(yīng)該首先充分了解用戶各方面的需求,包括現(xiàn)有的以及將來可能增加的需求。數(shù)據(jù)庫需求分析用戶的需求具體體現(xiàn)在各種信息的提供、保存、更新和查詢統(tǒng)計,這就要求數(shù)據(jù)庫結(jié)構(gòu)能充分滿足各種信息的輸出和輸入。收集基本數(shù)據(jù)、數(shù)據(jù)結(jié)構(gòu)以及數(shù)據(jù)處理的流程,組成一份詳盡的數(shù)據(jù)字典,為后面的詳細(xì)設(shè)計打下基礎(chǔ)針對本系統(tǒng)要求,設(shè)計如下的數(shù)據(jù)項和數(shù)據(jù)結(jié)構(gòu):用戶信息表:包括的數(shù)據(jù)項有:用戶ID,用戶名,用戶密碼,用戶權(quán)限。課程章節(jié)信息表:包括的數(shù)據(jù)項有:章節(jié)ID,章節(jié)名。填空題信息表:包括的字段有:填空題ID,填空題目,填空題答案,所屬章節(jié),本題分值。選擇題信息表:包括字段:選擇題ID,選擇題題目,選擇題選項A,選擇題選項B,選擇題選項C,選擇題選項D,選擇題選項E,選擇題選項F,選擇題答案,所屬章節(jié),分值。試卷信息表:包括字段:試卷項ID,試卷名,試題號,試題類型,考生ID,考生答案。成績信息表:字段:成績編號(ID),考生ID,試卷名,考試成績,交卷標(biāo)識。數(shù)據(jù)庫結(jié)構(gòu)設(shè)計試題庫管理系統(tǒng)數(shù)據(jù)庫中各個表格的設(shè)計結(jié)果如下面的兒個表格所示。每個表格表示在數(shù)據(jù)庫中的一個表。1.用戶信息表:user_stu字段名數(shù)據(jù)類型字段大小主鍵stuid文本50是stuname文本8否stupwd文本20否user_admi數(shù)字長整型否表4.2.2.12.章節(jié)表:zhang_tab字段名數(shù)據(jù)類型字段大小主鍵zhangid數(shù)字長整型否

zhangname 文本 20 是表4.2.2.23.填空題信息表:tiank_tab字段名數(shù)據(jù)類型字段大小主鍵tiankid自動編號長整型是tiankbody文本255否tiankdaan文本100看zhangid文本20否tiankfen數(shù)字長整型春表4.2.234.選擇題信息表:xuanz_tab字段名數(shù)據(jù)類型字段大小主鍵Xuanzid自動編號長整型是Xuanzbody文本255否Xuanza文本50否Xuanzb文本50否Xuanzc文本50否Xuanzd文本50否Xuanze文本50否Xuanzf文本50否Zhangid文本20否Xuanzfen數(shù)字長整型否Xuanzdaan文本50否表4.2.2.45.試卷信息表:shij_tab字段名數(shù)據(jù)類型字段大小主鍵Shijid自動編號長整型是Shitid數(shù)字長整型否Shijname文本100否Stuid50否Shitidaan255否Shititype文本50否表4.2.2.56.成績信息表:chengj_tab字段名數(shù)據(jù)類型字段大小主鍵Chengjid自動編號長整型是StuidZ本50否Shijname文本100否Shijfen數(shù)字長整型否Handup文本10否表4.2.2.6五、編譯原理試題庫系統(tǒng)具體實現(xiàn)本系統(tǒng)是用VC6.0生成的單文檔結(jié)構(gòu)的應(yīng)用程序,首先由向?qū)梢粋€單文檔的應(yīng)用程序,然后在程序中添加相應(yīng)的對話框和,在對話框上添加不同的控件來實現(xiàn)不同的功能,產(chǎn)生實現(xiàn)對應(yīng)功能的外觀界面。VC++6.0是面向?qū)ο蟮某绦蛟O(shè)計語言,每一個功能可以做為一個對象來看待,把特定的功能放在一個對象里實現(xiàn),有助于簡化系統(tǒng)設(shè)計。還可以使系統(tǒng)更安全和便于實現(xiàn)。這里,我就把系統(tǒng)的各個功能放到了不同的類里面去實現(xiàn),還要完成與用戶的交互,所以把功能模塊用對話框類的派生類來實現(xiàn),具體由對話框來完成交互,類里的成員函數(shù)來完成后臺的數(shù)據(jù)處理。為了與數(shù)據(jù)庫交換數(shù)據(jù),要用到MFC數(shù)據(jù)庫訪問類,本程序是使用的ODBC來連接數(shù)據(jù)庫。數(shù)據(jù)庫訪問是封裝的MFC數(shù)據(jù)庫訪問類,設(shè)頂數(shù)據(jù)源和本系統(tǒng)用到的封裝類如下:在Access2003中,按照上節(jié)數(shù)據(jù)庫的設(shè)計表,建立數(shù)據(jù)庫,命名為shitiku.mdbo然后打開本機(jī)的控制面板,管理工具,數(shù)據(jù)源(ODBC),如下圖:

<1ODBC數(shù)據(jù)源管理盎用戶DSN|系統(tǒng)DSN|文件DSN|驅(qū)動程序I跟蹤|連接池|關(guān)于|用戶數(shù)據(jù)源QI):名稱驅(qū)動酢添加①)...dBASEFilesExcelFilesMSAccessDatabaseshitiku名稱驅(qū)動酢添加①)...dBASEFilesExcelFilesMSAccessDatabaseshitikuMicrosoftdBaseDriver(*.MicrosoftExcelDriver(*.MicrosoftAccessDriver(*MicrosoftAccessDriver(*lx.CJ\J,bb£sdd比1mmODBC用戶數(shù)據(jù)源存儲了如何與指定數(shù)據(jù)提供程序連接的信息.用戶數(shù)據(jù)源只對當(dāng)前用戶可見,而且只能用于當(dāng)前機(jī)器上.ODBC用戶數(shù)據(jù)源存儲了如何與指定數(shù)據(jù)提供程序連接的信息.用戶數(shù)據(jù)源只對當(dāng)前用戶可見,而且只能用于當(dāng)前機(jī)器上.確定取消確定取消反用IA幫助注冊好ODBC數(shù)據(jù)源后,就可以在程序中使用ODBC連接數(shù)據(jù)庫,可以動態(tài)的更新查詢數(shù)據(jù)庫。運行VC++6.0新建工程,命名為TESTING,在第一步選擇單文檔,其他保持默認(rèn)值。這樣就生成了一個工程,用于本系統(tǒng)的建立。在程序中使用了MFC的數(shù)據(jù)庫類進(jìn)行了封裝,以用于本系統(tǒng)的統(tǒng)一數(shù)據(jù)庫的操作,具體實現(xiàn)代碼如下:文件1//generaldef.h#ifndefGEN_DEFINE_HttdefineGEN_DEFINE_H#include"OdbcDB.h"externCOdbcDBg_odbcDB;externCStringUserid;externBOOLHavEx;#endif文件2//GeneralDef.cppttinclude"stdafx.h〃ttincludez,GeneralDef.h〃COdbcDBg_odbcDB;CStringUserid;BOOLHavEx;文件3//OdbcDB.h#ifndefODBC_DB_H#defineODBC_DB_Httinclude<afxdb.h>#include<vector>〃利用vector數(shù)組結(jié)構(gòu)構(gòu)造一維字符串?dāng)?shù)組typedef::std::vector<CString>CStrs;〃利用vector數(shù)組結(jié)構(gòu)構(gòu)造二維字符串?dāng)?shù)組typedef::std::vector<CStrs>CDStrs;classCOdbcDB{public:COdbcDB();virtual"COdbcDBO;public:〃數(shù)據(jù)庫連接HRESULTConnect(CStringstrDBSource,CStringstrDBUser,CStringstrDBPwd);〃數(shù)據(jù)庫關(guān)閉voidDisconnect();〃判斷數(shù)據(jù)庫是否處于打開狀態(tài)BOOLIsOpenO;〃執(zhí)行SQL語句HRESULTExecuteSQL(LPCSTRIpszSQL);〃根據(jù)SQL語句查詢數(shù)據(jù)庫,獲取的記錄集保存在二維字符串?dāng)?shù)組中voidExecuteQuery(LPCTSTRIpszSQL,CDStrs&Fields);〃根據(jù)SQL語句查詢數(shù)據(jù)庫,獲取一個字段值voidExecuteQueryValue(LPCTSTRIpszSQL,CString&value);protected:〃數(shù)據(jù)庫對象CDatabasem_db;BOOLm_IsDBOpen;〃數(shù)據(jù)庫是否打開CString m_strDBSource; 〃數(shù)據(jù)庫源CString m_strDBUser; 〃數(shù)據(jù)庫用戶名CString m_strDBPwd; 〃數(shù)據(jù)庫用戶密碼};#endif文件4//OdbcDB.cpp#include"stdafx.h"include“odbcDB.h"#defineDB_NOT_OPEN0x2001〃數(shù)據(jù)庫打開錯誤#defineDB_NO_RECORD0x2002〃沒有數(shù)據(jù)#defineDB_SAVE_EPG_ERR0x2003〃保存Epg失敗#defineDB_SET_BIGBLOK_ERR0x2004〃設(shè)置大數(shù)據(jù)錯誤#defineDB_NOT_NORMAL0x2005〃數(shù)據(jù)庫打開錯誤#defineMEMORY_EXCEPTION0x2006//Memory異常#defineMS_OTHER_EXCEPTION0x2007〃其他異常COdbcDB::COdbcDB()(m_strDBSource=_T(,n,);m_strDBUser=_T(,M,);m_strDBPwd=_T("");m_IsDBOpen=FALSE;}COdbcDB:>COdbcDB()BOOLCOdbcDB::lsOpen()(returnm_IsDBOpen;)HRESULTCOdbcDB::ExecuteSQL(LPCSTRIpszSQL)(ASSERT(lpszSQL);TRY(〃執(zhí)行SQL語句m_db.ExecuteSQL(lpszSQL);}〃異常處理CATCH(CDBException,pEx)returnpEx->m_nRetCode;)AND_CATCH(CException,pEx){returnMS_OTHER_EXCEPTION;}END_CATCHreturnS_OK;}HRESULTCOdbcDB::Connect(CStringstrDBSource,CStringstrDBUser,CStringstrDBPwd)(//InitDBparam,incasereconnectm_IsDBOpen=FALSE;m_db.Close();m_strDBSource=strDBSource;m_strDBUser=strDBUser;m_strDBPwd=strDBPwd;〃構(gòu)造連接字符串CStringstrDBOpen=_T(巧;strDBOpen.Format("DSN=%s;UID=%s;PWD=%s",strDBSource,strDBUser,strDBPwd);TRY{//連接數(shù)據(jù)庫m_db.OpenEx(strDBOpen,CDatabase::noOdbcDialog);}〃異常處理CATCH(CDBException,ex)(m_IsDBOpen=FALSE;returnDB_NOT_OPEN;)AND_CATCH(CMemoryException,pEx)(pEx->ReportError();m_IsDBOpen=FALSE;returnMEMORY_EXCEPTION;)AND_CATCH(CException,e)(m_IsDBOpen=FALSE;returnMS_OTHER_EXCEPTION;END_CATCHm_IsDBOpen=TRUE;returnS_OK;)voidCOdbcDB::DisConnect()(mJsDBOpen=FALSE;m_db.Close();}voidCOdbcDB::ExecuteQueryValue(LPCTSTRlpszSQL,CString&value)(if(!m_db.IsOpen()){return;}TRY{CRecordsetrs(&m_db);〃打開記錄集.rs.Open(CRecordset::dynaset,IpszSQL);if(!rs.IsEOF()){rs.GetFieldValue((short)0,value);)rs.Close();}〃異常處理CATCH(CDBException,ex)(AfxMessageBox(ex->m_strError);AfxMessageBox(ex->m_strStateNativeOrigin);)AND_CATCH(CMemoryException,pEx)(pEx->ReportError();AfxMessageBox("memoryexception");)AND_CATCH(CException,e)(TCHARszError[100];e->GetErrorMessage(szError,100);AfxMessageBox(szError);)END_CATCHvoidCOdbcDB::ExecuteQuery(LPCTSTRlpszSQL,CDStrs&Fields)(if(!m_db.IsOpen()){return;}TRY{CRecordsetrs(&m_db);〃打開所有的信息記錄.rs.Open(CRecordset::dynaset,IpszSQL);while(!rs.IsEOF()){CStrsstrs;CStringtemp;〃獲取一條記錄中的所有字段值保存到字符串?dāng)?shù)組strs中for(shorti=0;i<rs.m_nResultCols;i++){rs.GetFieldValue((short)i,temp);strs.push_back(temp);}〃保存一條記錄到二維字符串?dāng)?shù)組中Fields.push_back(strs);〃轉(zhuǎn)到下一條紀(jì)錄rs.MoveNext();)rs.Close();}〃異常處理CATCH(CDBException,ex)(AfxMessageBox(ex->m_strError);AfxMessageBox(ex->m_strStateNativeOrigin);)AND_CATCH(CMemoryException,pEx)(pEx->ReportError();AfxMessageBox("memoryexception");)AND_CATCH(CException,e)(TCHARszError[100];e->GetErrorMessage(szError,100);AfxMessageBox(szError);)END_CATCH以上是用于數(shù)據(jù)庫操作的封裝類,只要在本系統(tǒng)的工程中引入上面四個文件

generaldef.h,GeneralDef.cpp,OdbcDB.h,OdbcDB.cpp,然后在系統(tǒng)的stdafx.h文件中加上#include"GeneralDef.h〃就可以在本工程中的所有類中使用對象g_odbcDB進(jìn)行數(shù)據(jù)庫操作了。1系統(tǒng)登錄系統(tǒng)登錄,是系統(tǒng)安全的關(guān)口,可以限制沒有操作權(quán)限的用戶對系統(tǒng)的重要信息的更改,所以在登錄窗口中要對用戶的合法性進(jìn)行檢查,還要對用戶的權(quán)限進(jìn)行確定。所以要在用戶輸入用戶名和密碼后,查詢數(shù)據(jù)庫來確認(rèn)用戶合法性,和賦予用戶對應(yīng)的權(quán)限,關(guān)于用戶的權(quán)限和用戶信息都放在表:userstu:字段名數(shù)據(jù)類型字段大小主鍵stuid文本50是stuname文本8否stupwd文本20否user_admi數(shù)字長整型否用戶登錄界面要簡潔明了,其中的圖片是要從外部引入,效果如下:對應(yīng)的對話框要接受用戶名和密碼,然后查詢數(shù)據(jù)庫表,來進(jìn)行確認(rèn),并讀取usejadmi字段來設(shè)定用戶的權(quán)限。如果,沒有通過確認(rèn),則提示用戶:用戶名或密碼有錯。本對話框為了更容易操作,在登錄對話框的初始化中把用戶表中的用戶名讀取出來,放到用戶名欄(接受用戶名的控件是一個可以下拉的組合框);對應(yīng)對話框的的控件綁定的變量如下:IFCClassVizardMessageMapsMemberVariablesAutomation|ActiveXEvents|Project:Classname:testing二CLoginDIgD:\...Vesting\LoginDlg.h,D:\...Vesting\LoginDlg.cppControlIDs:Type MemberIlDCCOMBOCStrinq mstrllserIDC_COMBOIDC二EDITIDC-EDITCComboBox m_ctrlUserCString mstrPwdCEdit mstrlPwd給對話框的登錄按鈕添加消息響應(yīng)函數(shù):OnOk();為對話框添加初始化函數(shù):OnlnitDialogO;Memberfunctions:VDoDataExchangeWOnCancel ON_IDCANCEL:BN_CLICKEDOnlnitDialogON_WM_INITDIALOGWOnOK ON_IDOK:BN_CLICKEDDescription:Senttoadialogboxbeforethedialogboxisdisplayed實現(xiàn)代碼如下:BOOLCLoginDlg::OnInitDialog()(CDialog::OnInitDialog();CDStrsm_name;CStringstrSQL;UpdateData(TRUE);//strSQL.Format(""select*frompasswordwhereuser='%s'ANDpasswd=,%s'〃,m_strUser,m_strPass);strSQL="selectstuidfromuser_stu〃;g_odbcDB.ExecuteQuery(strSQL,m_name);for(inti=0;i<m_name.sizeO;i++){CStrsstrs=m_name[i];m_ctrlUser.AddString(strs[0]);//returnTRUEunlessyousetthefocustoacontrol//EXCEPTION:OCXPropertyPagesshouldreturnFALSE)//TODO:AddextrainitializationherereturnTRUE;//returnTRUEunlessyousetthefocustoacontrol//EXCEPTION:OCXPropertyPagesshouldreturnFALSEvoidCLoginDlg::0n0K()(//TODO:AddextravalidationhereCDStrsvalue;CStringstrSQL;CTestingApp*ptheApp=(CTestingApp*)AfxGetAppO;UpdateData(TRUE);〃檢查用戶名是否輸入if(m_strUser.IsEmpty())(AfxMessageBox(”請輸入用戶名!〃);m_ctrlUser.SetFocus();return;)if(m_strPwd.IsEmpty())(AfxMessageBox(“請輸入密碼!〃);m_strlPwd.SetFocus();return;)〃從用戶表中檢查用戶名密碼是否正確ANDstrSQL.Format(z,select*fromuser_stuwherestuid=,stupwd='%s'",m_strUser,m_strPwd);ANDg_odbcDB.ExecuteQuery(strSQL,value);if(value,size()==0)(〃密碼錯誤處理MessageBox(〃密碼錯誤,請重新輸入“);m_strPwd="〃;m_strlPwd.SetFocus();UpdateData(FALSE);)else(〃分配用戶權(quán)限if(value[0][3]=="z0,z)

ptheApp->m_bIsAdmin=FALSE;elseptheApp->m_bIsAdmin=TRUE;Userid=m_strUser;CStrsstrs;CDStrsstrShijName;strSQL.Format(zzselectshijnamefromchengj_tabwherestuid=,%s,andhandup=,no'",Userid);godbcDB.ExecuteQuery(strSQL,strShijName);if(strShijName.size()!=0)(HavEx=TRUE;)else(HavEx=FALSE;)CDialog::0n0K();試題庫系統(tǒng)主界面用戶登錄后,要出現(xiàn)一個主界面,用戶的所有操作都在這里實現(xiàn)。主界面包括了菜單的設(shè)計,和工具欄的設(shè)計:菜單如下:系統(tǒng)管理試題管理試卷管理成績管理系統(tǒng)管理試題管理試卷管理成績管理系統(tǒng)管理試題管理試卷管理成績管理系統(tǒng)管理試題管理試卷管理成績管理用尸言埋更改用戶系統(tǒng)管理試題管理試卷管理成績營理系統(tǒng)管理試題管理試卷管理成績管理用尸言埋更改用戶系統(tǒng)管理試題管理試卷管理成績營理系統(tǒng)管理試題管理試卷管理成績管理近岸題音理埴空題管理退出系統(tǒng)匚一 "■二二……1成績官?成績官?埋在菜單的設(shè)計中,給每一個菜單設(shè)定一個不同的ID,但是工具欄的設(shè)計中要用到菜單的ID,對應(yīng)特定的菜單的工具按鈕,是為了實現(xiàn)菜單功能的一個快捷途徑。所以工具欄按鈕的ID都對應(yīng)一個菜單項。西劭■⑥蟲理為心智工具欄設(shè)計:要使用數(shù)據(jù)庫中的表中的信息,要在程序運行前的初始化中連接數(shù)據(jù)庫,所以要在主程序的初始化函數(shù)BOOLCTestingApp::InitlnstanceO中添加如下語句:CStringa,b,c;a="shitiku”;g_odbcDB.Connect(a,b,c);AfxEnableControlContainer();要控制系統(tǒng)安全,必須使登錄界面早于主界面運行,所以要在主程序初始化函數(shù)中上面的語句后添加如下代碼:CLoginDlgloginDlg;ifdoginDlg.DoModal()!=IDOK)(returnFALSE;)并且在主程序的CTstingApp.cpp文件開始處添加#include"LoginDlg.h",聲明對CLoginDlg的對象的使用。要處理用戶對菜單和工具條按鈕的操作信息,要在主框架類CMainFrame的CPP文件中添加對應(yīng)按鈕和菜單的COMMAND消息響應(yīng)函數(shù):并且要在主程序中添加一個變量BOOLm_bIsAdmin用來標(biāo)識管理員用戶,在非管理員和管理員不能同時使用的功能,要給對應(yīng)的菜單添加UPDATECOMMACDUI類型的消息響應(yīng)函數(shù),并且在菜單的pCmdUI-〉Enable();函數(shù)中用主函數(shù)CTstingApp中的變量mbisAdmin作為pCmdUI->Enable();的參數(shù),就能限制非管理員用戶使用對應(yīng)的菜單。關(guān)于添加菜單響應(yīng)函數(shù),如下圖:1FCClassVizardMessageMapsMemberVariables|Automation|ActiveXEventsClassInfo|Project:Classname:Addtesting▼|CMainFramedD:\...\testing\MainFrm.h,D^...\testing\MainFrm.q)pAdiObjectIDs:Messages:DeleIDFILEPRINT■COMMANDIDFILESAVEUPDATECOMMANDUIEIDNEXTPANEID_PREV_PANEBlIDSYSBMANAG■IID_SYS_CHENGJ|IDSYS_CHOOSEMemberfunctions:皿OnSysChooseON_ID_SYS_CHOOSE:COMMAND■細(xì)WOnSysExamON_ID_SYS_EXAM:COMMANDWOnSysQuitON_ID_SYS_QUIT:COMMANDsiWOnSysReloadON_ID_SYS_RELOAD:COMMANDWOnSysTmanag0N_ID_SYS_TMANAG:COMMANDDescription:Handleacommand(frommenu,acceLcmdbutton)確定函數(shù)具體實現(xiàn)如下:voidCMainFrame::OnSysQuit(){//TODO:Addyourcommandhandlercodehereif(AfxMessageBox(,z您確定要退出系統(tǒng)嗎?”,MB_OKCANCEL)==IDCANCEL)(return;)CFrameWnd::0nClose();voidCMainFrame::OnSysReload()(//TODO:AddyourcommandhandlercodehereCLoginDlgDig;Dig.DoModal();voidCMainFrame::OnSysUser()//TODO:AddyourcommandhandlercodehereCUserDlgUserDlg;UserDlg.DoModal();)voidCMainFrame::OnUpdateSysUser(CCmdUI*pCmdUI){//TODO:AddyourcommandupdateUIhandlercodehereCTestingApp*ptheApp=(CTestingApp*)AfxGetAppO;pCmdUI->Enab1e(ptheApp->m_bIsAdmin);)voidCMainFrame::OnSysTmanag()(//TODO:AddyourcommandhandlercodehereCTmanagDlgTmanagDlg;TmanagDlg.DoModal();voidCMainFrame::0nClose(){//TODO:Addyourmessagehandlercodehereand/orcalldefaultif(AfxMessageBox(,z您確定要退出系統(tǒng)嗎?〃,MB_OKCANCEL)==IDCANCEL)(return;)CFrameWnd::0nClose();)voidCMainFrame::OnUpdateSysTmanag(CCmdUI*pCmdUI)(//TODO:AddyourcommandupdateUIhandlercodehereCTestingApp*ptheApp=(CTestingApp*)AfxGetAppO;pCmdUI->Enab1e(ptheApp->m_bIsAdmin);)voidCMainFrame::OnSysBmanag(){//TODO:AddyourcommandhandlercodehereCBManagD1gBmanagD1g;BmanagDlg.DoModal();voidCMainFrame::OnUpdateSysBmanag(CCmdUI*pCmdUI)(//TODO:AddyourcommandupdateUIhandlercodehereCTestingApp*ptheApp=(CTestingApp*)AfxGetAppO;pCmdUI->Enable(ptheApp->m_bIsAdmin);}voidCMainFrame::OnSysChoose()(//TODO:AddyourcommandhandlercodehereCChooseDlgChooseDlg;ChooseDlg.DoModal();)voidCMainFrame::OnSysExam()(//TODO:AddyourcommandhandlercodehereCExamDlgExamDlg;ExamDlg.DoModal();)voidCMainFrame::OnUpdateSysChoose(CCmdUI*pCmdUI)(//TODO:AddyourcommandupdateUIhandlercodeherepCmdUI->Enable(!HavEx);)voidCMainFrame::OnUpdateSysExam(CCmdUI*pCmdUI)(//TODO:AddyourcommandupdateUIhandlercodeherepCmdUI->Enable(HavEx);)voidCMainFrame::OnSysChengj()(//TODO:AddyourcommandhandlercodehereCChengJMChengjDlg;ChengjDlg.DoModal();voidCMainFrame::OnUpdateSysChengj(CCmdUI*pCmdUI)(//TODO:AddyourcommandupdateUIhandlercodehereCTestingApp*ptheApp=(CTestingApp*)AfxGetAppO;pCmdUI->Enable(ptheApp->m_bIsAdmin);)主框架類的包含文件如下:(需要手動輸入,放在MainFrm.cpp文件開始處)#include"ChooseDlg.h〃ttinclude"BManagDlg.h〃#include"LoginDlg.h〃#include"UserDlg.h〃#include"TmanagDlg.h"#include"ExamDlg.h〃#include"chengjm.h"試題管理對話框在這兩個對話框中可以進(jìn)行試題的添加、修改、刪除操作,另外還有查詢試題功能,可以很方便用戶的試題管理。用戶在進(jìn)行試題管理,還要能動態(tài)看到更改的結(jié)果,要在對話框的內(nèi)部給出操作代碼,只有這樣才能給用戶一個盡量友好的界面。在進(jìn)行數(shù)據(jù)庫操作時要小心數(shù)據(jù)庫字段名的拼寫;還要注意,用于數(shù)據(jù)庫操作的SQL語句的格式,在VC++6.0中SQL語句的格式化中,字符串要用單引號,還有條件格式也不盡相同。試題管理模塊,是管理員用戶對試題進(jìn)行維護(hù)的?個模塊,可提供試題的添加、刪除、修改。這里也要用數(shù)據(jù)庫管理類,本程序的公有變量g_0dbeDB的成員函數(shù)可以提供對數(shù)據(jù)庫表的添加、刪除、修改操作。這里要給對話框上的控件添加變量。選擇和填空不完全一樣,下面分別說明:填空題管理對話框界面效果如下圖:

給控件綁定變量,如下圖所示:ControlIDs:TypeMemberIDCBUTTONUPDATEIDC_COMBO_BCStringm_strZhangidIDC_COMBO_BCComboBoxmctrZhangidIDCEDITCOUNTintmintCountIDCEDITFENintmintFenIDC_EDIT1CStringm_strBBodyIDC_EDIT1CEditm_ctrBBodyIDCEDIT2CStringmstrBAnswerIDCEDIT2CEditmctrBAnswerIDCLISTBIDCListCtrlmListBidIDCANCEL竺給控件綁定變量要注意變量的類型,不要搞錯了,在綁定好類型后只要用對話框類的UPDATEDATA();函數(shù)就可以把控件的值傳給對應(yīng)的變量,UPDATEDATA(FALSE);就可以把變量的值傳給控件。這就是與用戶交互的手段之一,然后就可以由得到的信息對數(shù)據(jù)庫進(jìn)行操作了。為了能按用戶的操作完成響應(yīng)的功能,要在對話框中來完成,給新建、修改、刪除添加處理函數(shù)。還要給對話框添加初始化函數(shù)來完成一些必須的初始化工作:MessageMaps|MemberVariables|Automation|ActiveXEvents|ClassInfo|Project: Classname: A[testing [cBManagDIgD:\..Atesting\BManagDlg.h,D:\...\testing\BManagDlg.cpp ObjectiDs: Messages: DiID_SYS_CHOOSEid[sys[examID_SYS_QUITID_SYS_RELOADID_SYS_TMANAGIDSYSUSERBNCLICKEDBN_DOUBLECLICKEDIDC_BUTTON_CL EMemberfunctions:皿OnButtonCI ON_IDC_BUTTON_CL:BN_CLICKEDVWOnButtonDelet ONJDC_BUTTON_DELET:BN_CLICKEDWOnButtonUpdate ONJDC_BUTTON_UPDATE:BN_CLICKEDWOnClickListBid ONJDC_LIST_BID:NM_CLICKWOnlnitDialog ON_WM_INITDIALOG用來響應(yīng)用戶的操作,完成添加刪除等功能。具體的函數(shù)代碼如下:voidCBManagDIg::OnButtonCl()(//TODO:Addyourcontrolnotificationhandlercodeherem_strBBody=,,n;m_strBAnswerm_intFen=0;m_strZhangid="”;m__strUser=,M,;UpdateData(FALSE);)voidCBManagDIg::OnButtonDelet()//TODO:AddyourcontrolnotificationhandlercodehereCStringoutprint;UpdateData(TRUE);inti=m_ListBid.GetSelectionMark();m_strUser=m_ListBid.GetItemText(i,O);〃判斷是否指定用戶if(m_strUseu=""){MessageBox("請選擇一個試題!”);return;)outprint.Format(n您確定要刪除 %s試題%s???,,,m_strZhangid,m_strUser);if(AfxMessageBox(outprint,MB_OKCANCEL)==IDCANCEL){return;)CStringstrSQL;strSQL.Format(ndeletefromtiank_tabwheretiankid=%du,atoi(m_strUser));〃刪除該用戶g_odbcDB.ExecuteSQL(strSQL);〃刷新用戶列表RefreshData();m_strBBody=,M,;m__strBAnswer=M";m_intFen=0;UpdateData(FALSE);}voidCBManagDlg::OnButtonUpdate()(//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);CStringstrSQL;if(m_strUser=="H)MessageBox("請選擇一個試題!”);return;if(m_intFen<1Hm_intFen>10){MessageBox("請設(shè)置合適的試題分值(1?10)!!");return;)if(m_strBBody==""){MessageBox("請?zhí)顚懺囶}內(nèi)容??!");m_ctrBBody.SetFocus();return;)if(m_strBAnswer==""){MessageBox("請?zhí)顚懺囶}內(nèi)容??!");m_ctrBAnswer.SetFocus();return;}if(m_strZhangid=="全部試題”)(MessageBox("請選擇試題所在章節(jié)!!”);return;)CStringoutprint;outprint.Format(n您確定要修改 %s試題%s???n,m_strZhangid,m_strUser);if(AfxMessageBox(outprint,MB_OKCANCEL)==IDCANCEL)(return;}strSQL.Format(Hupdatetiank_tabsettiankbody=,%s,,tiankdaan=,%sH,",zhangid=*%s1,tiankfen=%dwheretiankid=%d",m_strBBody,m_strBAnswer,m_strZhangid,m_intFen,atoi(m_strUser));TRACE(strSQL);g_odbcDB.ExecuteSQL(strSQL);RefreshData();)voidCBManagDlg::OnSelchangeComboB()(//TODO:AddyourcontrolnotificationhandlercodehereUpdateData();RefreshData();}voidCBManagDlg::OnClickListBid(NMHDR*pNMHDR,LRESULT*pResult)(//TODO:AddyourcontrolnotificationhandlercodehereCDStrsuser_tab;CStringstrSQL;UpdateData(TRUE);〃從數(shù)據(jù)庫中獲取選擇用戶名的資料inti=m_ListBid.GetSelectionMark();m_strUser=m_ListBid.GetItemText(i,O);if(m-strUser!=,M,)(strSQL.Format("select*fromtiank_tabwheretiankid=%dn,atoi(m_strUser));g_odbcDB.ExecuteQuery(strSQL,user_tab);〃顯示用戶資料if(user_t<ib.size==O){return;)CStrsstrs=user_tab[O];m_strBBody=strs[l];m_strBAnswer=strs[2];m_strZhangid=strs[3];m_intFen=atoi(strs[4]);UpdateData(FALSE);*pResult=0;}voidCBManagDlg::OnOK()(//TODO:AddextravalidationhereUpdateData();if(m_strBBody==,M,llm_strBAnswer==n")(MessageBox("請?zhí)顚懺囶}內(nèi)容和答案??!”);m_ctrBBody.SetFocus();return;)if(m_strZhangid=="全部試題"){MessageBox("請選擇試題所在章節(jié)!!");return;}if(m_intFen<lHm_intFen>10){MessageBox("請設(shè)置合適的試題分值(1~10)!!");return;}if(AfxMessageBox("您確定要添力口試題?”,MB_OKCANCEL)==IDCANCEL)return;}CStringstrSQL;strSQL.Format("Insertintotiank_tab(tiankbody,tiankdaanH”,zhangid,tiankfen)”“values(",H%sV%sV%s\%d),;m__strBBody,m_strBAnswer,m_strZhangid,m_intFen);TRACE(strSQL);g_odbcDB.ExecuteSQL(strSQL);RefreshData();)BOOLCBManagDlg::OnInitDialog()(CDialog::OnInitDialog();m_strZhangid="全部試題”;m_ListBid.InsertColumn(OJ填空題號");m_ListBid.SetExtendedStyle(LVS_EX_FULLROWSELECTILVS_EX_GRIDLINES);m_ListBid.SetColumnWidth(0,120);CDStrsstuid;CStringstrSQL;〃打開記錄集strSQL.Format("selectzhangid,zhangnamefromzhang_taborderbyzhangid");g_odbcDB.ExecuteQuery(strSQL,stuid);m_ctrZhangid.InsertString(O,m_strZhangid);for(inti=O;i<stuid.size();i++)(CStrsstrs=stuid[i];m_ctrZhangid.InsertString(i+1,strs[l]);)RefreshData();//TODO:AddextrainitializationherereturnTRUE;//returnTRUEunlessyousetthefocustoacontrol//EXCEPTION:OCXPropertyPagesshouldreturnFALSE)voidCBManagDlg::RefreshData()(m_ListBid.SetFocus();〃清空用戶列表m_ListBid.DeleteAHItems();m_ListBid.SetRedraw(FALSE);CDStrsstuid;CStringstrSQL;strSQL.Format(Mselecttiankidfromtiank_tabwherezhangid=%s,orderbytiankidn,m_strZhangid);if(m_strZhangid=="全部試題”)(strSQL.Format('*selecttiankidfromtiank_taborderbytiankid'*);)g_odbcDB.ExecuteQuery(strSQL,stuid);for(inti=O;i<stuid.size();i++){CStrsstrs=stuid[i];m_ListBid.InsertItem(i,strs[O]);)m_intCount=i;UpdateData(FALSE);m_ListBid.SetRedraw(TRUE);}這里要說明一下,在上面的函數(shù)中有一個是voidCBManagDlg::RefreshData();它不是消息響應(yīng)函數(shù),它的作用就是更新對話框控件數(shù)據(jù),可以減少代碼量,所有的操作都要對數(shù)據(jù)庫進(jìn)行更新,更新后的結(jié)果要及時的反饋給用戶,所以這個函數(shù)的作用就是把更改的結(jié)果在對話框中顯示出來。在下面的選擇題管理中同樣有這個函數(shù),不過函數(shù)的實現(xiàn)代碼不同,但是功能是類似的。5.3.2選擇題管理選擇題管理的對話框外觀如下,利用它可以很好管理試題信息:

給控件綁定變量,如下圖所示:MessageMapsMemberVariablesAutomationActiveXEventsClassInfo|Project: Classname:AddAddDektesting 二]|CTmanagDlg ▼D:\...\testing\TmanagDlg.kD:\...\testing\TmanagDlg.cppControlIDs: Type MemberIDCCOMBO CComboBoxmCtrComZUpdzIDC_EDIT_COUNT int mJntCountIDCZeDITZfEN int mjntFenIDC_EDIT1 CString m_strXBodyIDC2EDITI CEdit mZctrXBodyIDC_EDIT2 CString m_strAnsAIDC_EDIT3 CString m_strAnsBIDC_EDIT5 CString m_strAnsCIDC_EDIT6 CString m_strAnsDIDC__EDIT7 CString m_strAnsEIDC_EDIT8 CString m__strAnsF ▼ID_SYS_RELOADID_SYS_TMANAGIDSYSUSER4IDCBUTT0N1IDC_BUTTON2IDC-BUTTON3ObjectiDs:BNDOUBLECLICKEDBNCLICKEDObjectiDs:BNDOUBLECLICKEDBNCLICKEDMessageMapsMemberVariablesAutomationActiveXEventsClassInfoProject: Classname: Md(testing 二| {CTmanagDIg 二]D:\...\testing\TmanagDlg.kD:\...\testing\TmanagDlg.cpp DeltMessages:具體的函數(shù)代碼如下:BOOLCTmanagDIg::OnInitDiaIog()(CDialog::OnInitDialog();//TODO:Addextrainitializationherem_strZhangid="全部試題”;m_ctrListTid.!nsertColumn(0,"選擇題號)m_ctrListTid.SetExtendedStyle(LVS_EX_FULLROWSELECTILVS_EX_GRIDLINES);m_ctrListTid.SetColumnWidth(0,120);CDStrsstuid;CStringstrSQL;〃打開記錄集strSQL.Format("selectzhangid,zhangnamefromzhang_taborderbyzhangid");g_odbcDB.ExecuteQuery(strSQL,stuid);m_CtrComZ.InsertString(0,m_strZhangid);for(inti=0;i<stuid.size();i4-+)(CStrsstrs=stuid[i];m_CtrComZ.InsertString(i+1,strs[1]);)RefreshData();returnTRUE;//returnTRUEunlessyousetthefocustoacontrol//EXCEPTION:OCXPropertyPagesshouldreturnFALSEvoidCTmanagDlg::OnClickListTid(NMHDR*pNMHDR,LRESUET*pResult)(//TODO:AddyourcontrolnotificationhandlercodehereCDStrsuser_tab;CStringstrSQL;UpdateData(TRUE);〃從數(shù)據(jù)庫中獲取選擇試題的資料inti=m_ctrListTid.GetSe!ectionMark();m_strUser=m_ctrListTid.GetItemText(i,O);if(m_strUser!=nn){strSQL.Format(nselect*fromxuanz_tabwherexuanzid=%dM,atoi(m_strUser));g_odbcDB.ExecuteQuery(strSQL,user_tab);〃顯示試題資料if(user_tab.size==O)(return;}CStrsstrs=user_tab[O];m_strXBody=strs[l];m_strAnsA=strs[2];m_strAnsB=strs[3];m__strAnsC=strs[4];m_strAnsD=strs[5];m_strAnsE=strs[6];m_strAnsF=strs[7];m_intFen=atoi(strs[9]);m_strZhangid=strs[8];m_strAnswer=strs[10];CharToInt();}UpdateData(FALSE);*pResult=0;}voidCTmanagDlg::RefreshData()(m_ctrListTid.SetFocus();〃清空試題列表m_ctrListTid.DeleteAHItems();m_ctrListTid.SetRedraw(FALSE);CDStrsstuid;CStringstrSQL;strSQL.Format(nselectxuanzidfromxuanz_tabwherezhangid='%s'orderbyxuanzid'\m_strZhangid);if(m_strZhangid=="全部試題”){strSQL.Format(nselectxuanzidfromxuanz_taborderbyxuanzid11);)g_odbcDB.ExecuteQuery(strSQL,stuid);for(inti=O;i<stuid.size();i++)(CStrsstrs=stuid[i];m_ctrListTid.InsertItem(i,strs[O]);}m_intCount=i;UpdateData(FALSE);m_ctrListTid.SetRedraw(TRUE);)voidCTmanagDlg::OnButton3()(//TODO:Addyourcontrolnotificationhandlercodehere//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);CStringoutprint;outprint.Format(H您確定要刪除 %s試題%s???n,m_strZhangid,m_strUser);inti=m_ctrListTid.GetSelectionMark();m_strUser=m_ctrListTid.GetItemText(i,O);〃判斷是否指定試題if(m_strUsei^=""){MessageBox("請選擇一個試題!");return;)if(AfxMessageBox(outprint,MB_OKCANCEL)==IDCANCEL){return;)CStringstrSQL;strSQL.Format("deletefromxuanz_tabwherexuanzid=%d",atoi(m_strUser));〃刪除該試題g_odbcDB.ExecuteSQL(strSQL);〃刷新試題列表RefreshData();m_strXBody="n;m__strAnsA=,M,;m_strAnsB=,M';m_strAnsC=,,n;m_strAnsD=,,n;m_strAnsE=un;m_strAnsF="H;m_intFen=0;UpdateData(FALSE);}voidCTmanagDlg::OnButtonQuXiao()(//TODO:Addyourcontrolnotificationhandlercodeherem_strXBody=,M,;m_strAnsA=,n,;mstrAnsB="”;m_strAnsC=tM,;m_strAnsD="H';m_strAnsE="n;m

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論