freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

編程考試機器評卷系統(tǒng)—畢業(yè)設計論文-文庫吧

2024-11-11 16:27 本頁面


【正文】 析。這就需要實現(xiàn)幾個核心的算法,例如語法分析、詞法分析、類型匹配等等。同時要實現(xiàn)評分的智能化、人性化,僅僅檢查出語法、詞法上存在錯誤是不夠的。還需準確地獲取錯誤的具體情況,根據(jù)不同的情況進行打分。 因此本系統(tǒng)模擬 VC++ 編輯器,實現(xiàn)對 C語言源程序的解析,并輸出錯誤類型。為了方便用戶的使用,在系統(tǒng)主界面中還添加一些類 VC++編輯器的輔助功能,例如關鍵字高亮、錯誤行數(shù)提示等。在完成評分 后,為了方便成績的管理,系統(tǒng)添加數(shù)據(jù)庫功能,用數(shù)據(jù)庫存儲考試成績,以方便管理與維護。 本系統(tǒng)用 VC開發(fā),連接數(shù)據(jù)庫采用 ADO方式與 Access 進行連接。4. 詳細設計 數(shù)據(jù)庫的創(chuàng)建 本系統(tǒng)采用 Access 數(shù)據(jù)庫來存儲相關信息,建立數(shù)據(jù)庫的過程如下: 在工程所在目錄下點擊鼠標郵件,在彈出的快捷菜單中將鼠標移到“新建”,再在彈出的字菜單中點擊“新建 Microsoft Office Access 應用程序”。到此數(shù)據(jù)庫就建立好了,將改 Access 文件改名 C語言考試評分成績 .mdb。 數(shù)據(jù)庫表格的建立: 本系統(tǒng)中數(shù)據(jù)庫是用于存儲考試成績信息。本系統(tǒng)建立一張表:成績表。 成績表只包含三個字段:題目、分數(shù)、評語,設計如表 所示。 表 成績表 字段含義 字段名 數(shù)據(jù)類型 C 語言源程序標題 題目 Text 程序得分 分數(shù) Int 評語 評語 Text MFC 連接數(shù)據(jù)庫 本系統(tǒng)在進行數(shù)據(jù)庫連接時采用的是 ADO 方式進行連接。 ADO(ActiveX Data Object)是 Microsoft 數(shù)據(jù)庫應用程序開發(fā)的新接口,是建立在 OLE DB 之上的高層數(shù)據(jù)庫訪問技術,即使你對 OLE DB, COM 不了解也能輕松對付 ADO,因為它非常簡單易用,甚至比你以往所接觸的 ODBC API、 DAO、 RDO 都要容易使用,并不失靈活性。 ADO 數(shù)據(jù)庫開發(fā)的基本流程 , 它的基本步驟如下: 1)初始化 COM 庫,引入 ADO 庫定義文件 2)用 Connection 對象連接數(shù)據(jù)庫 3)利用建立好的連接,通過 Connection、 Command 對象執(zhí)行 SQL 命令,或利用 Recordset 對象取得結果記錄集進行查詢、處理。 4)使用完畢后關閉連接釋放對象。 接下來詳細介紹連接過程: COM 庫的初始化 我 們 可以 使 用 AfxOleInit() 來初 始 化 COM 庫, 這 項工 作通 常 在CWinApp::InitInstance()的重載函數(shù)中完成, 代碼: BOOL CADOTest1App::InitInstance() { AfxOleInit()。 ...... } 2) 用 import 指令引入 ADO 類型庫 為了引入 ADO 類型庫,需要在項目的 文件中加入如下語句: import c:\program files\mon files\system\ado\ no_namespace rename(EOF,adoEOF)這一語句的 作用同我們已經(jīng)十分熟悉的include 類似,編譯的時候系統(tǒng)會為我們生成 , 兩個 C++頭文件來定義 ADO 庫。 開發(fā)環(huán)境中 不一定在這個目錄下, 要 按實際情況修改;在編譯的時候可能會出現(xiàn)如下警告,對此微軟在 MSDN 中作了說明,并建議我們不要理會這個警告: (405) : warning C4146: unary minus operator applied to unsigned type, result still unsigned。 3) 創(chuàng)建 Connection 對象并連接數(shù)據(jù)庫 為了首先我們需要添加一個指向 Connection 對象的指針 _ConnectionPtr m_pConnection,下面的代碼演示了如何創(chuàng)建 Connection 對象實例及如何連接數(shù)據(jù)庫并進行異常 捕捉 : BOOL CADOTest1Dlg::OnInitDialog() { CDialog::OnInitDialog()。 HRESULT hr。 Try { hr = ()。///創(chuàng)建Connection 對象 if(SUCCEEDED(hr)) { hr = m_pConnectionOpen(Provider=。 Data Source=,adModeUnknown)。///連接數(shù)據(jù)庫 //上面一句中連接字串中的 Provider 是針對 ACCESS2021 環(huán)境的,對于 ACCESS97, //需要改為: Provider=。 } } catch(__error e)///捕捉異常 { CString errormessage。 ( 連 接數(shù)據(jù)庫失敗 !\r\n 錯誤信息 :%s,())。 AfxMessageBox(errormessage)。///顯示錯誤信息 } 在這段代碼中我們是通過 Connection 對象的 Open 方法來進行連接數(shù)據(jù)庫的 。 4) 執(zhí)行 SQL命令并取得結果記錄集 為了取得 結果記錄 集,我們 定義一個 指向 Recordset 對 象的指針 :_RecordsetPtr m_pRecordset。 并為其創(chuàng)建 Recordset 對 象 的 實 例 : (), SQL命令的執(zhí)行可以采用多 種 形 式 , 本 文 采 用 了 Recordset 對 象 進 行 查 詢 取 得 記 錄 集 。m_pRecordsetOpen(SQL 語句 ,_variant_t((IDispatch *)m_pConnection,true), adOpenStatic,adLockOptimistic,adCmdText)。 插入操作采用的是 Connection 對象的 Execute 方法執(zhí)行 SQL 命令 。 Execute()方法的原型如下所示: RecordsetPtr Connection15::Execute ( _bstr_t CommandText, VARIANT * RecordsAffected, long Options ) 其中 CommandText是命令字串,通常是 SQL 命令。參數(shù) RecordsAffected 是操作完成后所影響的行數(shù) , 參數(shù) Options表示 CommandText中內(nèi)容的類型, Options可以取如下值之一:adCmdText 表明 CommandText 是文本命令; adCmdTable 表明 CommandText 是一個表名; adCmdProc 表明 CommandText 是一個存儲過程; adCmdUnknown 表明CommandText 內(nèi)容未知。 Execute()函數(shù)執(zhí)行完后返回一個指向記錄集的指針 。 5) 關閉記錄集與連接 記錄集或連接都可以用 Close()方法來關閉: m_pRecordsetClose()。///關閉記錄集 m_pConnectionClose()。///關閉連接 本系統(tǒng)在設計對 Access 進行操作時為了方便將上 述操作寫成了一個類。 源程序運行檢測算法的描述 源程序運行檢測算的程序流程圖如下所示: 開始讀入源程序文件并按字符串格式存儲查找文件字符串中的指定字符串加以標注按照 C 語言的詞法類型把程序翻譯成一個個的 t o k e n 字符是否存在非法的字符串定位非法字符位置 , 給出非法類型查找各個 t o k e n 字符的對應關系按照 C 語言語法將t o k e n 字符依次入棧是否發(fā)生匹配錯誤定位錯誤 , 給出匹配錯誤類型定義 C 語言語法樹結構根據(jù)語法詞法分析結果生成關于源程序的語法樹數(shù)據(jù)結構按程序中各個對象遍歷語法樹數(shù)據(jù)結構檢查各個對象的創(chuàng)建 , 引用 , 結束 。是否發(fā)生錯誤給出出錯的對象名稱與出錯的位置程序運行通過結束 圖 上圖中描述了本系統(tǒng)程序運行主算法的數(shù)據(jù)流程。其中包括了詳細了, C語言源程序文件導入后的基本處理、詞法分析的數(shù)據(jù)流程與具體方式、語法分析的數(shù)據(jù)流程、語法樹的定義與生成、類型匹配的檢測方式等等。在這一章中,本章中將重點從全局的角度對本系統(tǒng)主算法進行一個分析與實現(xiàn)的說明。由于涉及到的內(nèi)容過多,與代碼有關的設計與實現(xiàn)在 下面的章節(jié)將詳細的給出。 首先,系統(tǒng)需要獲取 C 語言源程序的代碼信息。程序?qū)崿F(xiàn)中通過 MFC 的 CFILE 類導入一個 C 語言的源程序文件 .C 文件。存儲到 MFC 為文件提供的專用 BUFFER 中,注意這個時候文件的存儲是以一個一個字符的形式存儲的。系統(tǒng)需要進行一些簡單的處理把其翻譯成一個一個的字符串。 完成第一步之后,系統(tǒng)已經(jīng)得到了一個關于 C 語言源程序的字符串存儲結構。下面進入到的是 C 語言的詞法分析階段。詞法分析大致分為兩個部分: C 語言保留字的查找特殊字符的查找與翻譯 (翻譯成 token 字符 ),變量、函數(shù)等程序?qū)ο蟮脑~ 法檢測。 在這里首先需要解釋一下的是為什么要把所有的東西都翻譯成 token字符?因為本系統(tǒng)是使用 VC++去分析檢查 C語言程序, C++與 C 語言中的關鍵字有非常多的重復,如果不加翻譯的話 C++語言進行時會發(fā)生語法的錯誤。例如,在 C 語言源程序中存在 /n 字符,如果在本系統(tǒng)中直接將 /n 不進行分析進行下述語法樹建立操作時,語法樹的生出讀到 /n 會自動換行,產(chǎn)生錯誤。 關于構詞法的算法,按照 C 語言構詞法的所有要求上文中已經(jīng)提到過,在這里就不再重復說明了。在完成上述查找翻譯詞法檢測之后,在這個部分還有一個特殊的功能。按照每一個 token 的類型(關鍵字、變量、函數(shù)等等)給出不同顏色的提示。具體算法為查找到 token的類型返回不同的顏色,在輸出界面中顯示出來。該功能能夠幫助評卷人更好地認識與識別程序中的錯誤。在這里如果檢測到構詞法的錯誤,則記錄該錯誤的位置 token,并通過給出錯誤的輸出。 在完成上述步驟之后,系統(tǒng)進入到語法分析的階段。語法分析較之詞法分析更為復雜因為僅從局部無法完全準確的進行判斷。語法分析算法的核心是建立一個關于 C 語言源程序的語法樹。 語法樹結構的定義是本步驟的重點。在本程序中采用嵌套遞歸的設計思路,來設計語法 樹的結構。首先,將每一個語法元素看做是一個基本的樹對象。 (例如, if 語句整個是一個基本樹對象而 if 語句中的表達式也是一個基本樹對象,兩者之間是一個嵌套的關系 ) 源程序的導入與解析 C 語言原程序的解析是本系統(tǒng)的重點,是系統(tǒng)其他部分執(zhí)行的基礎。編譯原理的基礎知識在本文的第二部分已做了介紹,這里就不再重復。根據(jù)本文中第三部分的設計,本模塊的總體框架如圖 所示,本模塊大致分為以下 4個功能模塊實現(xiàn):詞法分析、語法分析、建立文檔符號表、類型匹配檢測。下文將針對每一個具體功能模塊進行詳細講述 。 詞法 分析: C 語言的構詞法規(guī)則為 :由字母、數(shù)字和下劃線組成。標識符必須以字母或下劃線開頭。大、小寫的字母分別認為是兩個不同的字符。不同的系統(tǒng)對標識符的字符數(shù)有不同的規(guī)定,一般允許 7 個字符。 同時 C語言中擁有大量的保留字,在定義變量時不能與這些關鍵字重復。在本程序中也同樣建立了一個關于 C語言關鍵字的對應表 詞法分析功能主要由以下兩個類來完成: ? Class CTokenizer: 這個類的主要作用為:從一個字符串中(這里把一個文件看作是一個字符串, MFC中CFileCstring 獲取用戶調(diào)入 的 C 語言源程序)分離出一個一個 token 來,配上簡單的類型再通過 NextToken()獲取返回值。 返回值與其宏定義如下: CODE define TT_EOL 39。\n39。 define TT_EOF 1 define TT_INTEGER 2 define TT_REAL 3 define TT_WORD 4 define TT_STRING 39。39。 define TT_CHAR 39。\39。39。 ? Class CScaner: 這個類 的作用為:獲取 C語言源程序中具體具體的的 token 類型。 Token類型的定義必須與 C 語言關鍵字相對應用于詞法的檢測。 C 語言關鍵字如下表: auto double int struct break else long switch case enum register typedef char extern return union Const float short unsigned Continue for signed void Default goto sizeof volatile Do if static while 表 1 C 關鍵字表 Token 類型的定義分為以下 5 類與 C 語言相對應。 CODE: enum TokenType { 程序關鍵字定義 _AUTO, _DOUBLE, _INT, _STRUCT, _BREAK
點擊復制文檔內(nèi)容
公司管理相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1