摘要 在軟件設(shè)計相關(guān)的課程教學中,學生一般是以源代碼且壓縮文件的方式提交作業(yè),若是教師逐個解壓、閱讀文件,則是一件很繁重的工作。本文根據(jù)這一需求,使用C#編程語言實現(xiàn)該軟件功能,采用遞歸調(diào)用技術(shù)實現(xiàn)學生提交作業(yè)情況查詢功能,使用.NET下開源的壓縮文件操作組件SharpCompress實現(xiàn)解壓文件功能,使用StreamReader類的相關(guān)方法實現(xiàn)查閱源文件功能。
【關(guān)鍵詞】軟件設(shè)計 SharpCompress 作業(yè)查詢 C#語言 StreamReader 遞歸調(diào)用
在如C語言程序設(shè)計、單片機與嵌入式應(yīng)用等與軟件設(shè)計相關(guān)的課程教學中,由于實現(xiàn)每個項目的代碼量比較大,學生一般是以源代碼且壓縮包的形式提交作業(yè),若教師將所有學生的壓縮包文件解壓并查閱具體內(nèi)容,這是一件非常工作量很大的工作。
C#是一種簡單、先進、面向?qū)ο蠛皖愋桶踩木幊陶Z言,在NET平臺下的一種重要的編程語言,在每多方面都有著廣泛的應(yīng)用,本文從項目需求出發(fā),使用C#編程語言設(shè)計一個作業(yè)檢查軟件實現(xiàn)相關(guān)功能。
1 功能實現(xiàn)原理
本軟件需要實現(xiàn)的主要功能有:
(1)統(tǒng)計學生提交作業(yè)的情況;
(2)可以在一個目錄及所有子目錄中解壓所有壓縮文件。
(3)查看指定的源代碼文件。
1.1 統(tǒng)計學生提交作業(yè)情況
實現(xiàn)該功能的原理是:使用StreamReader類的ReadLine0方法將指定的學生名單文本中的學生姓名提取出來,使用Directory類的GetFiles0的方法列出指定目錄下的所有壓縮文件,按姓名順序在文件列表中逐個查找文件名中是否包含該學生的姓名,若存在,則統(tǒng)計提交作業(yè)次數(shù),否則顯示沒有提交作業(yè)。
統(tǒng)計學生提交作業(yè)情況的軟件流程圖如圖1所示。
1.2 解壓解壓包文件
目前用得比較多的壓縮格式有rar、zip和7z,對于不同的格式壓縮包有不同的解壓方法。
(1)對于針對rar格式的壓縮包文件,當計算機上安裝了wmrar后,程序中可以在C#程序中調(diào)用rar.的命令行程序?qū)崿F(xiàn)解壓縮功能,因為wmrar軟件提供基于命令行的解壓縮方式。
(2) zip是一種免費開源的壓縮格式,可以使用C#庫SharpZipLib解壓縮zip、gzip和tar格式的文件。在使用這種方法時,先下載SharpZipLib包解壓后,在項目中引用ICSharpCode. SharpZLib.dll程序集并調(diào)用相關(guān)方法即可實現(xiàn)zip和7z格式的文件解壓功能。
(3)使用一個名為SharpCompress的c#框架集在的相關(guān)類,實現(xiàn)文件壓縮解壓功能,SharpCompress支持有:rar, 7zip,zip,tar,tzip和bzip2格式的壓縮和解壓。
本文使用SharpCompress中在相關(guān)類實現(xiàn)解壓文件功能。
2 軟件具體實現(xiàn)
2.1 統(tǒng)計學生提交作業(yè)情況
使用Directory類的靜態(tài)方法GetFiles0得到指定目錄下的所有文件,使用StreamReader類的實例方法ReadLine0從學生名單文本文件中讀取學生姓名,并在壓縮包文件數(shù)組中逐個查找該學生的名字是否存在,若存在,則累計提交次數(shù),所有文件對比結(jié)束后,再統(tǒng)計下一個學生,以此類推,直到最后一個學生,具體代碼如下:
Private void CheckHomeWork(stringstuFile,filesPath){
string studentName, str;
string[] files - Directory.GetFiles(filesPath);
StreamReader sr - new StreamReader(_stuFile,System.Text
Encoding.Default);studentName -sr.ReadLine0;
while (studentName !_null){int count -O:
foreach (string file in files){
if (file.lndexOf(studentName)!=-1){str+=file+”YrYn”;count++;))}
str - studentName+”提 交了:+count+次作業(yè)\r\n+ str;
txtContent.AppendText(str+”\r\n\r\n”);
studentName - sr.ReadLineO;str -…;}sr.Close0;}
若作業(yè)提交在多個目錄或多個子目錄中,則使用遞歸調(diào)用技術(shù)遍歷指定目錄及所有子目錄下的文件。具體源代碼如下:
void CheckAIIFiles(string stuFile, stringfilesPath){
CheckHomeWork(stLlFile,filesPafh);
string[]subDi r s=Dire cto ryGetDirectories(fi1esPatll);
fo reach(string str ln subDir s){CheckA11Files(stLlFile,str);})
2.2 解壓文件
SharpCompress是NET下開源的壓縮文件操作組件,可以支持的格式如RAR,ZIP,Tar,Zip等等,通過不同的類對不同類型的壓縮文件進行解壓操作。
2.2.1 對RAR類型的壓縮包進行解壓操作
SharpCompress組件使用ArchiveFactory類的靜態(tài)方法Open()得到一個RAR壓縮包里的所有資源,再使用IArchive類型的實例對象的WmeToDircctory()進行解壓。
2.2.2 對ZIP類型的壓縮包進行解壓操作
SharpCompress組件使用ReaderFactory
類的靜態(tài)方法Open0打開壓縮包里的資源,并使用IReader類型的實例的WriteEntryToDirectory0對壓縮文件進行解壓。
2.2.3 對7z類型的壓縮包進行解壓操作
SharpCompress組件使用SevenZipArchive類open0方法獲取壓縮包中的資源,并使用SevenZipArchiveEntry類的實例方法WriteToDirectory0方法對壓縮文件進行解壓。
解壓文件的程序流程圖如圖2所示。
2.3 閱讀源代碼文件
在與軟件設(shè)計相關(guān)的課程教學中,主要的文件格式有由.c文件、h文件、java、.cpp、.cs文件等,這些文件屬于文本文件的范疇,C#語言使用StreamReader類的實例方法ReadLine0或ReadToEnd0方法讀取內(nèi)容,將內(nèi)容放在文本框中進行顯示。具體源碼如下:
Private void ReadSourceFileContent(void){
ofdOpenFile.Filter -ava filesl*j ava”;
if (ofdOpenFile.ShowDialog()==DialogResult. OK){
string fileName - ofdOpenFile.FileName;
StreamReader sr - newStreamReader(filename,System.Text
Encoding.Default);
txtContent.Text-sr.ReadToEnd();sr.Close0;}}
3 測試與總結(jié)
將文件拷貝到測試目錄下,分別做統(tǒng)計學生交作業(yè)情況、解壓文件及閱讀源代碼文件這三個方面的測試。
3.1 統(tǒng)計學生提交作業(yè)情況測試
統(tǒng)計學生提交作業(yè)情況測試模塊主要是根據(jù)壓縮包文件名中是否包含學生姓名,軟件運行結(jié)果如圖3所示。
3.2 解壓文件功能測試
解壓文件功能測試模塊主要使用SharpCompress壓縮文件操作組件中的相關(guān)類對不同類型文件進行解壓操作,可以實現(xiàn)單個文件解壓、多個文件解壓及全部文件解壓三種操作,測試結(jié)果如圖4所示。
3.3 閱讀源代碼文件功能測試
閱讀源代碼文件功能測試模塊使用StreamReader類的相關(guān)方法讀文件中的內(nèi)容,本模塊可以查看.c文件、h文件、j ava、cpp、.cs文件等與文本文件相關(guān)的源代碼文件,測試結(jié)果如圖5所示。
從整體測試結(jié)果來看,本軟件可以將教師從繁重的作業(yè)批閱工作中解脫出來,提高了辦公效率。
參考文獻
[1]譚浩強.C程序設(shè)計第五版[M].清華大學出版社,2017 (08).
[2] SharpCompres s-a fully na tiveC# library for RAR, 72ip, Zip,Tar, GZip, B2ip2.
Avaliableat https: //archive. codeplex.com/?p-sharpcompres s.
[3]李從宏.C#程序設(shè)計及應(yīng)用教程[M].北京:機械工業(yè)出版社,2017.
[4]龐燕芳,基于C#.NET的學校車輛門禁系統(tǒng)的設(shè)計[J].電子技術(shù)與軟件工程,2008 (33):125-126.
[5]楊利娟,朱杉杉,基于C#的高校排課系統(tǒng)[J].電子技術(shù)與軟件工程,電腦編程技術(shù)與維,2018,10: 23-27.
[6]郭博,舒娟,史曉鳳等,基于C#的學生成績管理系統(tǒng)的設(shè)計與實現(xiàn)[J].隴東學院學報,2018,29(05);13-15.