999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

源代碼匯總工具的設計與實現

2018-02-14 12:49:08劉潔李青元石元會
數字技術與應用 2018年10期

劉潔 李青元 石元會

摘要:源代碼匯總在軟件項目的項目管理、測試、驗收等環節都可發揮重要的作用。本文提出開發一個軟件源代碼匯總工具的必要性,給出了軟件的設計思路、模塊劃分、用C++實現的關鍵語句,以及輸出成WORD格式文檔的顯示效果。

關鍵詞:源代碼匯總;軟件項目管理;C++;軟件實現;WORD格式

中圖分類號:TP311.53? ? 文獻標識碼:A? ? ?文章編號:1007-9416(2018)09-0000-00

1 引言

一個軟件項目的源文件一般都在某一目錄及其子目錄下。源代碼匯總是指對一個軟件項目所涉及到的所有源代碼文件的文件名稱、字節數、日期進行匯總統計,并將源代碼的文件內容匯總到一個文件的處理過程。源代碼匯總在軟件開發的項目管理、測試、驗收等環節都可發揮重要的作用。該功能稍加擴展還可實現對用戶個人的信息管理與查找,例如可據某一關鍵字如以收索某一目錄下的所有文件看看它在哪些文件中出現過。

目前市場上源代碼統計工具較為代表性的軟件有Boom Works公司開發的source counter軟件,但是其也具有一定的局限性,下幾點:

(1)只有文件信息的清單以及對代碼的分析,無法將所有的源代碼文件以一定的格式匯總到一個文件中,例如如圖1所示。

(2)所有的輸出只支持excel、HTML兩種格式;

(3)部分功能較為冗余,例如其中對代碼工作量的分析在實際中很少用到,而且其參考價值也不大。

另外還有其他一些統計工具,功能與source counter類似,也都沒法匯總源代碼文件到一個文件中,也更無法輸出到word中[1-2],所以筆者認為寫一款既能統計文件清單又能匯總源代碼的源代碼匯總工具很有必要。

2 設計思路

源代碼匯總工具軟件的設計理念是小巧、精悍、界面簡潔,讓用戶可以在很短的時間內學會使用,軟件的設計目標有兩個,分別是:以word表格的形式輸出任意個文件夾下所有文件的文件清單,清單中的文件基本信息包括文件序號、所在目錄、文件名、文件大小、修改日期,其中前兩項可以選擇輸出;另外一個目標是以word形式匯總所有源代碼并輸出,并要求以文件名生成目錄,也可以選擇是否輸出序號、所在目錄。

3 軟件的系統設計

該源代碼管理工具采用C++語言、visual studio 2013為開發平臺開發,主要是針對以文本格式編寫的任何源文件進行統計、匯總,支持ANSI、UTF-8、UTF-16三種編碼格式的源文件,對源文件的后綴名稱不做區分,只要編碼方式滿足要求即可。系統的設計流程圖如圖2所示。

4 技術要點

軟件的設計中主要有四大關鍵要點,分別是:不同編碼方式的源文件讀取、文件夾中子文件夾遞歸讀取、word文件輸出、數據存儲處理;下面分開介紹這四方面。

4.1不同編碼方式的源文件讀取

軟件的源代碼以文本形式存儲,文本的存儲主要分為ANSI、UTF-8、UTF-16這三種編碼風格,因此在軟件中讀取的過程中就首先需要判斷源文件的編碼風格,判斷方法主要是通過源文件中開頭的BOM標志,沒有BOM標志時即為ANSI編碼,無需轉換。

UTF-8 BOM標志為0xEF、0xBB、0xBF,而且UTF-8不需要BOM來表明字節順序,無需對CPU的大端、小端情況區別對待;UTF-16 BOM標志區分大端、小端情況,大端為0xFE、0xFF,小端則相反。

當檢測到為UTF-8、UTF-16編碼風格的源代碼文件時需要將讀取到的字符串轉換為ANSI風格的字符串,筆者采用的方法是通過Windows API函數:WideCharToMultiByte、MultiByteToWideChar完成UTF風格字符轉為ANSI風格字符串[3]。

4.2文件夾中子文件夾遞歸讀取

軟件需要做到對目標文件夾下的所有文件的統計、匯總,包括目標文件夾下的子文件夾中文件,所以在讀取到文件夾中的子文件夾時,就需要考慮對子文件夾中的文件讀取。

筆者采用的解決方案為:使用MFC中的CFileFind類對文件進行操作,當遍歷到目標文件夾下的文件時,進行讀取、存儲操作,若當前文件為子文件夾時,則對子文件夾時對其進行遞歸調用。另外需要注意在Dos系統下,每個目錄下都有兩個缺省的目錄,分別為“.”與“..”,它們各自代表本層目錄與上一層目錄,所以在遍歷文件夾中文件時需要將這兩者過濾掉[4-9]。

4.3 word文件輸出

Word文件的輸出最為重要,對于操作word筆者采用OLE/COM技術, OLE全稱為Object Linking and Embedding,這項技術是由微軟提出的一種面向對象的技術,通過它可以開發可重復使用的組件,本程序就是利用微軟留下的這些接口實現對word進行操作。

首先確保MFC程序創建支持自動化,然后打開Office的安裝目錄,找到MSWORD.OLD文件,導入Office中的類庫,即可自動生成與word操作所對應的類與文件,此處需要將每個頭文件中的#import "E:\\TTMv8\\Debug\\MSWORD.OLB" no_namespace部分注釋掉,之后利用vs生成的類將word的操作封裝為一個WordClass類,實現創建文檔、保存文檔、輸出文字、輸出標題、輸出頁數、創建表格、在表格中輸出指定文字功能,在使用時直接由WordClass的類對象直接調用即可。其中關鍵性代碼如下:

(1)創建服務器連接(BOOL CreateAPP())

m_app.CreateDispatch(_T("Word.Application"));

(2)創建word文檔(BOOL CreateDocument())

m_docs = m_app.get_Documents();

COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

m_doc = m_docs.Add(vOpt, vOpt, vOpt, vOpt);

m_sel = m_app.get_Selection();

(3)保存文檔(BOOL SaveAs(CString FileName, int SaveType = 0))

m_doc.SaveAs(&cFileName,&FileFormat,&vFalse,COleVariant(_T("")), &vTrue,COleVariant(_T("")), &vFalse, &vFalse, &vFalse, &vFalse, &vFalse, &vOpt, &vOpt, &vOpt, &vOpt, &vOpt);

其中FileName參數為保存文件的路徑。

(4)創建表格(void CreateTable(int Row, int Column))

CComVariant DefaultBehavior(1), AutoFitBehavior(2);

m_tabs.Add(m_sel.get_Range(), Row, Column, &DefaultBehavior, &AutoFitBehavior);

創建Row行Column列的表格。

(5)在表格中輸出(void WriteCellText(int Row, int Column, CString Text))

CCell c = m_tab.Cell(Row, Column);

c.Select();

m_sel.TypeText(Text);

在第Row行第Column列輸出Text。

(6)輸出標題(void WriteTile(CString title, CString fontName = _T("微軟雅黑"), int fontSize = 16, unsigned int level = 2))

m_sel.TypeText(title);

m_sel.HomeKey(COleVariant((short)5), COleVariant((short)1));

m_sel.put_Style(COleVariant((short)-level));

設置title為標題,其中level:為1時輸出正文,為2輸出一級標題,為3輸出二級標題,并以此類推。

(7)輸出正文(void WriteText(CString Text))

m_sel.TypeText(Text);

(8)設置頁碼(void WritePageNum())

m_sel.get_ParagraphFormat().put_Alignment(1);? ? 設置對齊方式為居中;

m_sel.TypeText(_T("/"));

m_sel.MoveLeft(COleVariant((short)1),COleVariant((short)1), &covZero);

CFields fields = m_sel.get_Fields();

fields.Add(m_sel.get_Range(),COleVariant((short)33),COleVariant(_T("PAGE? ")), &covTrue);

輸出當前頁碼;

m_sel.MoveRight(COleVariant((short)1),COleVariant((short)1), &covZero);

fields.Add(m_sel.get_Range(), COleVariant((short)26), COleVariant(_T("NUMPAGES? ")), &covTrue);

輸出總頁碼數;

oView.put_SeekView(0);

關閉頁眉頁腳。

4.4數據存儲處理

讀取文件筆者是通過MFC CFile類方法實現。

獲取文件信息用GetStatus()函數可獲取文件日期信息,GetLength()函數用來獲取文件大小信息。對于文件基本信息的存儲,用一個結構體FileInformation來存放,FileInformation結構體代碼如下:

struct _fileInformation

{

public:

unsigned int m_Num;

CString m_Name;

CString m_Path;

float m_Size;

unsigned int m_RowNum;

CString m_Function;

CString m_Data;

public:

_fileInformation();

~_fileInformation();

};

在用一個容器存放FileInformation的指針,用以存放每個文件的基本信息;

對于源代碼統計信息,獲取完文件基本信息之后,開始正式讀取源文件的內容,通過調用WordClass的WriteText方法將源代碼的每一行保存到WordClass對象中,讀取該文件后,直接調用SaveAs輸出。

在完成匯總輸出源代碼統計之后,再調用CreateDocument創建一個新的word,隨后創建表格,將文件基本信息按照格式輸出到表格中,最后輸出即可。

5 輸出效果

圖3為源代碼的文件統計清單效果圖,圖4為源代碼的統計匯總效果圖。

6結語

本軟件雖然達到了設計目標,但是距離稱為一款完善的源代碼統計軟件還有一定距離,例如對于源代碼文件中的注釋行統計、輸出其他格式的文件等,這仍需要進一步的改進和提升。

參考文獻

[1] 鄭文嬋.應用于軟件測試的代碼統計系統的設計與實現[D].成都:《西華大學碩士論文》,2014年.

[2] 舒濤.基于COM技術的實體卡系統試卷生成技術研究[J].赤峰學院學報(自然科學版),2013,29(8):14-16.

[3] Jeffrey Richter, Christophe Nasarre著.Windows核心編程(第5版)[M].葛子昂,北京.清華大學出版社,2008.

[4] 侯俊杰. 深入淺出MFC(第2版) [M].武漢.華中科技大學出版社,2001.

[5] 孫鑫.VC++深入講解(修訂版)[M].北京.電子工業出版社,2006.

[6] Stephen Prata著.C++ Primer Plus[M].張海龍等譯,北京:人民郵電出版社,2012.

[7] 嚴蔚敏,吳偉民.數據結構(C 語言版)[M].北京.清華大學出版社,2011.

[8] 程杰.大話數據結構[M].北京.清華大學出版社,2011.

[9] 程杰.大話設計模型[M].北京.清華大學出版社,2010.

Design and implementation of source code summary tool

LIU Jie1,LI Qing-yuan1,2,SHI Yuan-hui3

(1.College of Geoscience and Surveying Engineering, China University of Mining and Technology (Beijing), Beijing 100083;

2.Key Laboratory of Geo-Informatics, Chinese Academy of Surveying and Mapping, Beijing 100830;

3.Logging Corp., Sinopec Jianghan Petroleum Engineering Company,Qianjiang, Hubei 433123)

Abstract: The source code summary software plays an important role in the management, testing, and acceptance of software projects. This paper proposes the necessity of developing a software source code summary tool, and gives the software design ideas, module division, key statements implemented in C++, and the display effect of the output as a WORD format document.

Keywords: source code summary, software project management, C++, software implementation, WORD format

主站蜘蛛池模板: 欧美激情第一欧美在线| 亚洲国产成人超福利久久精品| 色AV色 综合网站| 国产精品视频a| 在线观看国产一区二区三区99| 久久综合丝袜日本网| 欧日韩在线不卡视频| 伊人久久青草青青综合| 囯产av无码片毛片一级| 欧美三级自拍| 华人在线亚洲欧美精品| 国产精品网拍在线| 亚洲第一av网站| 国产福利观看| 2021国产精品自产拍在线| 亚洲成aⅴ人片在线影院八| 国产亚洲精久久久久久无码AV| 丁香六月激情综合| 911亚洲精品| 全色黄大色大片免费久久老太| 九九热精品视频在线| 三上悠亚精品二区在线观看| 中文字幕乱码中文乱码51精品| 99re在线免费视频| 国产精品久久久久久久久久久久| 亚洲日韩在线满18点击进入| 女人18毛片一级毛片在线| 免费激情网址| 日韩无码真实干出血视频| 久久久久国产精品熟女影院| 一级看片免费视频| 1级黄色毛片| 欧美自慰一级看片免费| 3D动漫精品啪啪一区二区下载| 99re这里只有国产中文精品国产精品| 日本一区二区三区精品视频| 国产成人8x视频一区二区| a级毛片网| 嫩草影院在线观看精品视频| 国产91成人| 99久久精品免费观看国产| 三区在线视频| 久久精品国产91久久综合麻豆自制| 国产网站一区二区三区| 国产sm重味一区二区三区| 国产高潮视频在线观看| 久久综合色视频| 免费一极毛片| 日本免费a视频| 91日本在线观看亚洲精品| 国内精品视频区在线2021| 在线色国产| 无码一区18禁| 久无码久无码av无码| 国产一区二区三区免费观看| 在线毛片免费| 国产精品美乳| 亚洲成人一区二区三区| 成年看免费观看视频拍拍| 久久国语对白| 69精品在线观看| 色婷婷在线影院| 日韩国产黄色网站| 免费国产高清视频| 91九色最新地址| 免费A级毛片无码免费视频| 无码福利日韩神码福利片| 国产精品尤物在线| 免费亚洲成人| 青青久视频| 免费观看国产小粉嫩喷水| 亚洲精品另类| 色综合综合网| 不卡网亚洲无码| 国产免费网址| 欧美伦理一区| 激情综合婷婷丁香五月尤物 | 国产视频你懂得| 国产成人精品午夜视频'| 激情成人综合网| 一级爆乳无码av| 国产一区二区免费播放|