第三次作业

学号:201631062520  201631062203

队友博客链接:

http://www.cnblogs.com/rickeyqi/p/9826132.html

一、项目简介

  源代码地址:https://gitee.com/rickeyqi/WordCount.git

       项目需求:对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,可执行程序命名为:wc.exe。

       该程序处理用户需求的模式为:wc.exe [parameter] [input_file_name],存储统计结果的文件默认为result.txt,放在与wc.exe相同的目录下。

       wc.exe -c file.c     //返回文件 file.c 的字符数

 

       wc.exe -w file.c     //返回文件 file.c 的单词总数

 

       wc.exe -l file.c     //返回文件 file.c 的总行数

 

       wc.exe -o outputFile.txt     //将结果输出到指定文件outputFile.txt

       注:  空格,水平制表符,换行符,均算字符。

                由空格或逗号分割开的都视为单词,且不做单词的有效性校验,例如:thi#,that视为用逗号隔开的2个单词。

                -c, -w, -l参数可以共用同一个输入文件,形如:wc.exe –w –c file.c 。

                -o 必须与文件名同时使用,且输出文件必须紧跟在-o参数后面,不允许单独使用-o参数。 

       解题思路:该需求主要是对文件进行操作,包括文件的读取、写入、创建等,所以需要熟知文件的基本操作,查阅相关资料也应向文件操作方面靠拢。

                         数据统计和处理等作为数据基本操作不需要过多的查阅和修改。

       代码思路:要实现上述四个功能,则需要四个独立的方法来分别实现,主函数根据用户输入内容,识别用户操作类型和文件名称,再分别对各个操作进行处理。

                         -o操作不能独立输入,必须有处理结果才能执行,因此用户输入一条命令之后,程序不能立即结束。

二、项目实现

  针对四个功能需求,设计了以下四个方法:

 

复制代码
//返回文件字符数
        public static int CodeCount(string FileName)
        {
            int count = 0;
            char[] Code = { ' ', ',', '%', '~', '!', '#', '^', '*', '(', ')', '\t' };

            //读取文件
            string[] s = File.ReadAllLines(@"..\Debug\" + FileName, Encoding.Default);
            foreach (string line in s)     //行数
            {
                foreach (Char a in line)   //每行字符数
                {
                    foreach (char b in Code)
                    {
                        if (a == b)
                            count++;
                    }
                }

            }

            return count;
        }
复制代码

 

复制代码
//返回文件单词数
        public static int WordCount(string FileName)
        {
            int sum = 0;

            //读取文件
            string[] s = File.ReadAllLines(@"..\Debug\" + FileName, Encoding.Default);
            foreach (string line in s)
            {
                if (line != null)
                {
                    foreach (Char a in line)
                    {
                        if (a == ' ' || a == ',')
                            sum++;
                    }
                    sum++;
                }
            }
            return sum;
        }
复制代码
复制代码
//返回文件总行数
        public static int LineCount(string FileName)
        {
            //读取文件
            string[] s = File.ReadAllLines(@"..\Debug\" + FileName, Encoding.Default);

            return s.Length;

        }
复制代码
复制代码
 //将结果输出到指定文件
        public static void OutPut(string ParmeterResult, string FileName)
        {
            string[] parResult = { ParmeterResult };

            if (!File.Exists(@"..\Debug\" + FileName))
            {
                //如果文件不存在,则先新建文件
                FileStream fs = new FileStream(@"..\Debug\" + FileName, FileMode.Create, FileAccess.Write);
                StreamWriter sw = new StreamWriter(fs);
                sw.WriteLine(parResult);
                sw.Close();
            }
            else
            {
                FileStream fs = new FileStream(@"..\Debug\" + FileName, FileMode.Append, FileAccess.Write);
                StreamWriter sw = new StreamWriter(fs);
                sw.WriteLine(parResult);
                sw.Close();
            }

        }
复制代码

  注:为方便查看程序处理结果,将数据写入文件时,采用的是向后添加的写入方式,而不是覆盖写入方式

 

  Main函数调用:

复制代码
static void Main(string[] args)
        {
            string FileName;      //文件名称
            string UserWrite;     //用户输入内容
            string[] ParName = new string[5];       //操作名称
            int[] ParmeterResult = new int[5];   //文件操作的返回结果

            UserWrite = Console.ReadLine();

            string[] AllFileName = new string[50]; //存储所有输入过的文件名
            string[] AllParName = new string[50];  //存储所有操作名
            int i = 0;

            while (UserWrite != "###")
            {
                string[] Parameter = UserWrite.Split(' ');   //文件执行操作类型

                FileName = Parameter[Parameter.Length - 1];
                AllFileName[i] = FileName;

                for (int j = 0; j < Parameter.Length - 1; j++)
                {

                    if (Parameter[j] == "-c")       //得到字符总数
                    {
                        ParmeterResult[j] = CodeCount(FileName);
                        ParName[j] = "字符数";
                    }
                    else if (Parameter[j] == "-w")     //得到单词总数
                    {
                        ParmeterResult[j] = WordCount(FileName);
                        ParName[j] = "单词数";
                    }
                    else if (Parameter[j] == "-l")     //得到总行数
                    {
                        ParmeterResult[j] = LineCount(FileName);
                        ParName[j] = "行数";
                    }
                    else if (Parameter[j] == "-o")     //将结果写入文件
                    {
                        for(int k=0;k<=Parameter.Length-1;k++)
                        {
                            OutPut(AllFileName[i-1] + "," + ParName[k] + ":" + ParmeterResult[k], AllFileName[i]);
                            Console.WriteLine(AllFileName[i-1] + "," + ParName[k] + ":" + ParmeterResult[k]);
                        }
                        continue;
                    }
                    Console.WriteLine(FileName + "," + ParName[j] + ":" + ParmeterResult[j]);
                }
                UserWrite = Console.ReadLine();
                i++;
            }

        }
复制代码

三、项目测试

  目标文件内容:

  

测试1:

 

 

测试2:

测试3:

 

测试4:

测试5:

测试6:

测试7:

测试8:

 

 

 

四、项目总结

     第一次两个团队合作,在合作初期因为分工等发生过分歧,但项目的完美结束,需要一个团结奋进的队伍,后期两人合作没有太大问题,基本要求功能已经完成,多种输入处理方法还不全面。

posted @ 2018-10-21 21:54  黄大雪1  阅读(180)  评论(1编辑  收藏  举报