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

正文內(nèi)容

c語言源程序的自動評判畢業(yè)設(shè)計論文-文庫吧

2025-07-21 00:48 本頁面


【正文】 表控件中添加入注冊表的信息。在每次循環(huán)開始前,都需要對test文件夾進行處理,刪除Debug文件夾,清空result、oute文件夾,這些問題同添加文件對話框問題中的初始化一樣,都需要自己編寫函數(shù)來清空文件夾和刪除非空文件夾。然后因為是將C源程序文件加入空白工程文件中編譯。之后通過Addin,控制整個Visual C++的開發(fā)環(huán)境,首先打開工作空間,然后載入工程,之后編譯鏈接,當然這些都是Visual C++自動完成的,相當于按下了Build按鈕,這也就是使用Addin方式的關(guān)鍵所在。編譯鏈接結(jié)束后,則視為編譯鏈接成功,且此時需要將此文件轉(zhuǎn)移出來,因為如不轉(zhuǎn)移。此函數(shù)的數(shù)據(jù)輸入是:列表控件中的項目總數(shù)和列表控件每個項目中C源程序文件的絕對路徑。此函數(shù)的數(shù)據(jù)輸出是:編譯鏈接成功后以學號命名的存至相同文件夾下的目標程序;編譯鏈接錯誤后以學號為區(qū)分信息的存至結(jié)果文件夾下的評判結(jié)果。 運行/評判對話框此對話框需要完成的功能及其解決辦法:1. 輸入數(shù)據(jù)、運行正確程序:彈出此對話框后,進入運行目標程序,評判階段,首先運行此題目正確程序編譯鏈接后生成的exe程序,如果需要輸入數(shù)據(jù)才能運行的,先輸入數(shù)據(jù),得到此題目正確的輸出。此功能通過“選擇正確程序”按鈕來選擇此題目正確程序生成的exe文件,通過一個編輯框顯示運行的正確exe文件路徑,通過另一個編輯框來實現(xiàn)數(shù)據(jù)輸入,通過第三個編輯框來得到運行正確exe文件后得到的數(shù)據(jù)輸出,即標準答案。在編譯鏈接結(jié)束后,進入運行/評判階段,首先需要運行正確的程序,這是老師之前通過編譯鏈接正確題目程序得到的正確的exe程序。如果程序需要輸入數(shù)據(jù)之后運行的,在“正確輸入”編輯框中輸入正確數(shù)據(jù)。通過編輯框的方式輸入數(shù)據(jù)方便直觀。因為這里是老師輸入正確程序的正確數(shù)據(jù)輸入,所以老師會確保輸入數(shù)據(jù)的正確性。而如果不需輸入數(shù)據(jù)即可得到輸出數(shù)據(jù)的話就不用輸入數(shù)據(jù)即可。之后通過CreateProcess()函數(shù)運行正確程序,這里通過重定向技術(shù)使用管道來完成自動的使用輸入數(shù)據(jù)運行程序并且自動的將輸出數(shù)據(jù)送入編輯框而不是在顯示屏顯示。在正確輸出編輯框中會顯示出正確的結(jié)果,這樣子也便于觀察。2. 選擇目標文件:輸入正確數(shù)據(jù),以此數(shù)據(jù)運行正確的exe文件后,得到正確輸出,即標準答案。選取暫存文件夾中所有C源程序文件編譯鏈接正確后生成的所有以學號命名的目標程序至列表控件,列表控件項目為選取的目標程序的絕對路徑。此功能通過一個“添加文件”完成選取所有目標程序,通過一個列表控件來完成添加所有目標文件。這里也是通過列表控件來完成選擇文件的工作,因為知道生成的所有目標程序在test文件夾下的result文件夾中,所以在打開文件時直接定位到此程序所在的文件夾。每個項目中同樣也是放的目標程序的絕對路徑(包括文件名),因為之后使用函數(shù)運行程序是需要使用程序的絕對路徑。3. 運行目標文件、進行評判:完成選取所有目標程序后,以列表控件的項目總數(shù)即目標程序總數(shù)設(shè)置循環(huán)。在每次循環(huán)中,以運行正確程序的exe文件時的數(shù)據(jù)輸入作為運行目標程序的數(shù)據(jù)輸入,即使用正確輸入編輯框中的輸入數(shù)據(jù),去運行目標程序,得到輸出數(shù)據(jù),將此輸出數(shù)據(jù)與正確輸出編輯框中的數(shù)據(jù)比較,這兩個數(shù)據(jù)都是CString類型的。如果比較結(jié)果相同,則視為運行正確,將此結(jié)果以學號信息為區(qū)別存至結(jié)果文件夾中作為評判結(jié)果;如果比較結(jié)果不同,則視為運行時錯誤,也將此結(jié)果以學號信息為區(qū)別存至結(jié)果文件夾作為評判結(jié)果。完成一個目標程序的運行、評判之后,循環(huán)繼續(xù),去運行、評判下一個C源程序。直到處理完所有的目標程序,至此運行、評判結(jié)束。此功能通過一個“開始”按鈕完成。在這里運行程序時的原理和運行正確程序時的一樣,正確的數(shù)據(jù)輸入就采用正確輸入編輯框中的數(shù)據(jù),這樣可以確保程序正確時得到的輸出與正確輸出相同,方便評判。一個問題是需要考慮到這里運行的是學生的程序而不是老師的正確程序,所以可能出現(xiàn)運行異常、死循環(huán)的進程不結(jié)束的問題,那么就會出現(xiàn)死機的情況,主程序運行不下去,所以這里需要設(shè)置進程運行超時的處理。因為是教學中的C源程序文件作業(yè),相對較為簡單,所以設(shè)置運行時間為4秒,如果進程運行超時還沒有自動結(jié)束,則強制結(jié)束,判為運行時錯誤。若果進程自動結(jié)束,則于正確結(jié)果比較得到評判結(jié)果。此對話框的數(shù)據(jù)輸入是:題目正確源程序生成的exe文件,正確的測試數(shù)據(jù)輸入,所有C源程序文件編譯鏈接正確后生成的目標程序。此對話框的數(shù)據(jù)輸出是:以輸入的正確測試數(shù)據(jù)運行正確程序后的正確數(shù)據(jù)輸出;比較運行目標程序后的數(shù)據(jù)輸出與正確數(shù)據(jù)輸出,結(jié)果相同后得到的以學號信息區(qū)別的存至結(jié)果文件夾的運行正確的評判結(jié)果;比較運行目標程序后的數(shù)據(jù)輸出與正確數(shù)據(jù)輸出,結(jié)果不同后得到的以學號信息區(qū)別的存至結(jié)果文件夾的運行錯誤的評判結(jié)果。3.2 系統(tǒng)模塊具體實現(xiàn)在這一節(jié)中,將會對各個模塊中系統(tǒng)那個實現(xiàn)的難點、遇到的問題、解決的方法、重點技術(shù)問題的給出詳細的說明。 準備工作在開始系統(tǒng)設(shè)計之前,在Visual C++中新建一個Win32空白工程,這里工程名為test,然后在此空白工程中新建一個C++文件。為防止編譯鏈接時編譯鏈接兩次,選擇組件配置,移除Win32 Release只保留Win32 Debug。在此空白工程文件夾test中,新建一個文件夾result用于保存編譯鏈接成功后生成的以學號命名的目標程序,新建一個文件夾oute用于存放最后的評判信息。在每次開始使用系統(tǒng)之前,進行的初始化操作就包括刪除Debug文件夾、清空result和oute文件夾。接著開始系統(tǒng)的具體功能實現(xiàn)階段。首先Visual C++中新建一個DevStudio Addin Wizard工程,工程名稱為Auto,并且在CCommandsICommands中自動添加一個函數(shù)AutoCommandMethod()。這個函數(shù)是系統(tǒng)的切入點。這時編譯鏈接工程之后,生成DLL文件,加載此文件后,工具欄會添加一個按鈕,此按鈕實現(xiàn)的是AutoCommandMethod()的函數(shù)功能。系統(tǒng)的使用從點擊這個按鈕開始。 實現(xiàn)添加文件對話框建立起DevStudio Addin Wizard工程后,在工作空間,右擊Auto Classes添加一個對話框類AddFile,即添加文件對話框。編輯此對話框,添加“初始化”、“添加文件”按鈕和一個列表控件,保留默認的“OK”、“Cancle”按鈕。1. “初始化”按鈕:此按鈕完成的功能是刪除Debug文件夾、清空result和oute文件夾。在Visual C++中可以通過庫函數(shù)DeleteFile()刪除一個文件。(1). 在此遇見的問題是在Visual C++中不能直接刪除一個不為空的文件夾以及沒有現(xiàn)成的庫函數(shù)來清空一個文件夾,因此自己添加兩個函數(shù)DeleteFolder和ClearFolder,分別用于刪除文件夾(不管其是否為空)和清空文件夾(清空其中的文件而保留文件夾),函數(shù)代碼如下:a. DeleteFolder函數(shù)void AddFile::DeleteFolder(CString sPath){ CFileFind ff。 BOOL bFound。 bFound = (sPath + \\*.*)。 while(bFound) { bFound = ()。 CString sFilePath = ()。 if(()) { if(!()) DeleteFolder(sFilePath)。 } else { if(()) { SetFileAttributes(sFilePath, FILE_ATTRIBUTE_NORMAL)。 } DeleteFile(sFilePath)。 } } ()。 SetFileAttributes(sPath, FILE_ATTRIBUTE_NORMAL)。 RemoveDirectory(sPath)。 }b. ClearFolder函數(shù)void AddFile::ClearFolder(CString sPath){ CFileFind ff。 BOOL bFound。 bFound = (sPath + \\*.*)。 while(bFound) { bFound = ()。 CString sFilePath = ()。 if(()) { if(!()) DeleteFolder(sFilePath)。 } else { if(()) { SetFileAttributes(sFilePath, FILE_ATTRIBUTE_NORMAL)。 } DeleteFile(sFilePath)。 } } ()。 SetFileAttributes(sPath, FILE_ATTRIBUTE_NORMAL)。 }(2). 完整的“初始化”按鈕代碼如下:{CString StrDestFile=D:\\test\\。DeleteFile(StrDestFile)。// CString DirectoryDebugName=D:\\test\\Debug。DeleteFolder(DirectoryDebugName)。//刪除DEBUG文件夾 CString DirectoryResultName=D:\\test\\result。ClearFolder(DirectoryResultName)。//清空result文件夾ClearFolder(D:\\test\\oute)。//清空oute文件夾 GetDlgItem(IDC_addfile_BUTTON)EnableWindow(true)。//設(shè)置“添加文件”按鈕禁用,點擊“初始化”后啟用GetDlgItem(IDOK)EnableWindow(true)。// 設(shè)置“OK”按鈕禁用,點擊“初始化”后啟用}2. “添加文件”按鈕:點擊之后彈出選擇文件對話框,完成選擇所有的C源程序文件,然后將所有的C源程序文件添加至對話框的列表控件中,列表控件的每一行項目為C源程序文件的絕對路徑。然后將列表控件中的項目總數(shù)和每個項目所指向的C源程序文件的絕對路徑存入注冊表,以備編譯鏈接時使用。(1). 列表控件的初始化工作需要首先設(shè)置列表控件的屬性屬性樣式查看報告,然后在AddFile類的Message中選擇WM_INITDIALOG添加函數(shù)OnInitDialog(),最后在此函數(shù)中添加代碼如下:(0,file,LVCFMT_CENTER,500,1)。(2). 點擊“添加文件”按鈕后彈出打開文件對話框,通過CFileDialog來實現(xiàn),設(shè)置過濾器以便只能選擇后綴名為*.c的C源程序文件,同時相關(guān)參數(shù)設(shè)置為能夠選擇多個文件,其代碼如下:CFileDialog Dlg(TRUE,*.c,NULL,OFN_FILEMUSTEXIST|OFN_ALLOWMULTISELECT,C文件(*.c)|*.c|,NULL)。(3). 對于選擇多個文件添加至列表控件中,需要設(shè)置指針,通過GetStartPosition()函數(shù)使指針指向選取的第一個文件開始,直至最后一個文件,然后通過GetNextPathName()函數(shù)來將選取的C源程序文件的絕對路徑添加入列表控件,代碼如下:POSITION pos=()。 while(pos!=NULL) { CString FileName=。 FileName = (pos)。 (0, , 0)。(0, 0, LVIF_TEXT, FileName,0, 0, 0, 0)。 }(4). 將選取的所有C源程序文件的絕對路徑存入列表控件后,通過AfxGetApp()WriteProfileInt將列表框項目總數(shù)寫入注冊表,然后以項目總數(shù)設(shè)置循環(huán),通過AfxGetApp()WriteProfileString依次將每個C源程序文件的絕對路徑寫入注冊表,以備編譯鏈接時使用,其代碼如下:AfxGetApp()WriteProfileInt(Configure, count,())。for (int i = 0 。 i () 。 i++){ char szRegKey[50]。 wsprintf(szRegKey, %d, i)。 AfxGetApp()WriteProfileString(Configure, szRegKey, (i, 0))。}(5). 完整的“添加文件”按鈕代碼如下:{ CFileDialog Dlg(TRUE,*.c,NULL,OFN_FILEMUSTEXIST|OFN_ALLOWMULTISELECT,C文件(*.c)|*.c|,NULL)。 if(()==IDOK) { POSITION pos=()。 while(pos!=NULL) { CString FileName=。 FileName = (pos)。 (0, , 0)。 (0, 0, LVIF_TEXT, FileName,0, 0, 0, 0)。 } AfxGetApp()WriteProfileInt
點擊復制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1