WordCount(结对编程)

 结队学号:

  201631062215、201631062116

     项目地址:https://gitee.com/nasi96/codes/0oh63ispudrec8zf49tnq63

    一  项目介绍

         本次是在滴一次WordCount的基础上,采取结对编程方式进行扩展功能的编写。 

    二  项目要求

  

   wc.exe -s            //递归处理目录下符合条件的文件

 

    wc.exe -a file.c     //返回更复杂的数据(代码行 / 空行 / 注释行)

 

    wc.exe -e stopList.txt  // 停用词表,统计文件单词总数时,不统计该表中的单词

 

   [file_name]: 文件或目录名,可以处理一般通配符。

 

其中,

 

   代码行:本行包括多于一个字符的代码。

 

   空   行:本行全部是空格或格式控制字符,如果包括代码,则只有不超过一个可显示的字符,例如“{”。

 

   注释行:本行不是代码行,并且本行包括注释。一个有趣的例子是有些程序员会在单字符后面加注释:

 

}//注释

 

在这种情况下,这一行属于注释行。

 

    三    编程情况

  1  命名方式不规范

   2 代码注释过少,少于百分之20

   3  代码格式不规范。

   4 代码可读性较差。

四 编程情况与说明

 

  本次为了完成扩展功能重新添加了两个类分别是LineOfCode类与DirectoryList类

 1 public class DirectoryList
 2     {
 3         private static ArrayList directorysList = new ArrayList();
 4         public static ArrayList DirectorysList
 5         {
 6             get { return DirectoryList.directorysList; }
 7             set
 8             {
 9                 DirectoryList.directorysList = value;
10             }
11         }
12         private static ArrayList fileList = new ArrayList();
13         public static ArrayList FileList
14         {
15             get { return DirectoryList.fileList; }
16             set { DirectoryList.fileList = value; }
17         }
18         public static void GetDirectory(string sourcePath)
19         {
20             if (Directory.Exists(sourcePath))
21 
22             {
23                 string[] tmp = Directory.GetFileSystemEntries(sourcePath);
24                 for (int i = 0; i < tmp.Length; i++)
25                 {
26                     if (File.Exists(tmp[i]))
27                     {
28                         FileList.Add(tmp[i]);
29                     }
30                     else
31                     {
32                         if (Directory.GetDirectories(tmp[i]).Length == 0)
33                         {
34                             DirectorysList.Add(tmp[i]);
35                         }
36                     }
37                     GetDirectory(tmp[i]);
38                 }
39             }
40         }
DirectoryList

  递归处理目录下适合条件的文件

  1  public  class LineOfCode
  2     {
  3         public static bool isLine = false;  //一行中拥有有效字符时为true,该行可记入代码行数
  4         public static bool isCommitLf = false; //注释/*...*/中出现至少一个折行时为true
  5         public static int nuines;
  6         public static int notlines;
  7         public static int LinesOfCode(string filename)
  8         {
  9             int lines = 0;
 10             int nulines=0;
 11             int notelines = 0;
 12             System.IO.StreamReader sr = System.IO.File.OpenText(filename);
 13             string s = sr.ReadToEnd();
 14             sr.Close();
 15 
 16             for (int i = 0; i < s.Length; i++)
 17             {
 18                 //无效字符
 19                 if (s[i] == ' ' || s[i] == '\r' || s[i] == '\t')
 20                 {
 21                     continue;
 22                 }
 23                 //搜索到换行,若该行有有效字符
 24                 if (s[i] == '\n')
 25                 {
 26                     if (isLine)
 27                     {
 28                         lines++;
 29                         isLine = false;
 30                     }
 31                     else if(!isLine)
 32                            nulines++;
 33 
 34 
 35                     continue;
 36                 }
 37                 //字符串,占多少行按多少行算
 38                 if (s[i] == '\"')
 39                 {
 40                     while (true)
 41                     {
 42                         i++;
 43                         //如果文件遍历完毕则强行中止
 44                         if (i >= s.Length)
 45                         {
 46                             break;
 47                         }
 48                         //再次遇到字符'"'且前方没有或有偶数个'//'时,中止循环并退出
 49                         if (s[i] == '\"')
 50                         {
 51                             int sign = 0, counter = 0;
 52                             while (true)
 53                             {
 54                                 sign++;
 55                                 if (i - sign < 0)
 56                                 {
 57                                     break;
 58                                 }
 59                                 else if (s[i - sign] == '\\')
 60                                 {
 61                                     counter++;
 62                                 }
 63                                 else
 64                                 {
 65                                     break;
 66                                 }
 67                             }
 68                             if (counter % 2 == 0)
 69                             {
 70                                 break;
 71                             }
 72                         }
 73                         //字符串中的换行,直接算作一行代码
 74                         if (s[i] == '\n')
 75                         {
 76                             lines++;
 77                             isLine = true;
 78                         }
 79                     }
 80                     isLine = true;
 81                     continue;
 82                 }
 83                 //遇到形如 /*...*/ 的注释
 84                 if (s[i] == '/' && i < s.Length - 1)
 85                 {
 86                     if (s[i + 1] == '*')
 87                     {
 88                         i++;
 89                         while (true)
 90                         {
 91                             i++;
 92                             //如果文件遍历完毕则强行中止
 93                             if (i >= s.Length)
 94                             {
 95                                 break;
 96                             }
 97                             if (s[i] == '\n')
 98                             { 
 99                                     notelines++;
100                                 if (isCommitLf == false)
101                                 {
102                                     if (isLine == true)
103                                     {
104                                         lines++;
105                                         isLine = false;
106                                     }
107                                     isCommitLf = true;
108                                 }
109                             }
110                             if (s[i] == '*' && i < s.Length - 1)
111                             {
112                                 notelines--;
113                                 if (s[i + 1] == '/')
114                                 {
115                                     i++;
116                                     break;
117                                 }
118                             }
119                         }
120                         isCommitLf = false;
121                         continue;
122                     }
123                 }
124                 //遇到形如 // 的注释
125                 if (s[i] == '/' && i < s.Length - 1 && s[i + 1] == '/')
126                 {
127                     notelines++;
128                     if (isLine == true)
129                     {
130                         lines++;
131                         isLine = false;
132                     }
133                     while (true)
134                     {
135                         i++;
136                         if (i >= s.Length || s[i] == '\n')
137                         {
138                             break;
139                         }
140                     }
141                     continue;
142                 }
143                 //该行有了有效字符,算作一行
144                 isLine = true;
145             }
146             //最后一行可能没有字符'\n'结尾
147             if (isLine)
148             {
149                 lines++;
150             }
151             //return lines;
152             nuines = nulines;
153             notlines = notelines;
154             return lines;
155             
156         }
157     }
158 }
LineOfCode

 统计文件中的代码行 ,空行,注释行

  五 测试情况

此次主要对DirectoryList类进行了单元测试

        测试用例达到了语句覆盖

    

    

 

  六 总结

通过此次项目的结对编程,充分体会到了团队的好处,可以使代码更加完善,可读性还有其他方面更加优秀,并且在结对的过程中通过不断学习可以使我们的一些能力也得到提高.

参考文献:

  www.baidu.com

  C# 语言的规范:简版, 讨论版

 

posted @ 2018-10-21 19:39  qaqxxx  阅读(156)  评论(0编辑  收藏  举报