第二次作业重交

一、项目简介

1、Gitee项目地址:https://gitee.com/xnsy/WC

2、开发语言:C#语言

3、解题思路

刚看完作业要求后,只知道这个程序要完成对文件的统计工作,但是对于程序设计仍然是一头雾水,而后百度了怎么编写wordcount程序后,发现有很多优秀的博客和文章,都详细地写了程序的相关设计包括具体的代码和项目完成截图,因为并没有接触过Java编程,所以我选择了用C#。
题目分析:
1.从程序的流程看,是一个控制台程序
2.要求对文件进行统计字数,涉及到文件读写
3.文件的扩展功能
通过各个方面查资料后我设计了以下四个功能函数
public string Operator(string[] sParameter, string sFilename)//基本功能实现
private void BaseCount(string filename)// 统计基本信息:字符数 单词数 行数
private void SuperCount(string filename) //统计高级信息:空行数 代码行数 注释行数
private string Display()//展示信息

二、设计实现

代码整体主要分为三个类:Main,功能,统计信息,展示

1、Main

主要负责基本功能的实现,在基本功能中,用户通过输入命令行的方式与程序实现交互。

static void Main(string[] args){string message = ""; // 存储用户命令while (message != "exit"){Console.Write("wc.exe ");// 得到输入命令message = Console.ReadLine();message = message.Trim(' ');message = message.Trim('\t');if (message != "-x"){// 分割命令string[] arrMessSplit = message.Split(' ');int iMessLength = arrMessSplit.Length;string[] sParameter = new string[iMessLength - 1];// 获取命令参数for (int i = 0; i < iMessLength - 1; i++){sParameter[i] = arrMessSplit[i];}// 获取文件名string sFilename = arrMessSplit[iMessLength - 1];// 新建处理类WC newwc = new WC();newwc.Operator(sParameter, sFilename);}else{string[] sParameter = new string[1];sParameter[0] = message;WC newwc = new WC();newwc.Operator(sParameter, "");}}

2、统计

在Operator()方法中,捕捉 "-c"、"-w"、"-l" 命令,通过参数素组的设置调用不同的类方法进行处理;

public string Operator(string[] sParameter, string sFilename){this.sParameter = sParameter;this.sFilename = sFilename;string retrun_str = "";foreach (string s in sParameter){if (s == "-x"){string resultFile = "";OpenFileDialog fd = new OpenFileDialog();fd.InitialDirectory = "D:\\Patch";fd.Filter = "All files (*.*)|*.*|txt files (*.txt)|*.txt";fd.FilterIndex = 2;fd.RestoreDirectory = true;if (fd.ShowDialog() == DialogResult.OK){resultFile = fd.FileName;//Console.WriteLine("文件名:{0}", resultFile);SuperCount(resultFile);BaseCount(resultFile);retrun_str = DisplayAll();}break;}// 遍历文件else if (s == "-s"){try{string[] arrPaths = sFilename.Split('\\');int pathsLength = arrPaths.Length;string path = "";// 获取输入路径for (int i = 0; i < pathsLength - 1; i++){arrPaths[i] = arrPaths[i] + '\\';path += arrPaths[i];}// 获取通配符string filename = arrPaths[pathsLength - 1];//  获取符合条件的文件名string[] files = Directory.GetFiles(path, filename);foreach (string file in files){//Console.WriteLine("文件名:{0}", file);SuperCount(file);BaseCount(file);retrun_str = Display();}break;}catch (IOException ex){//Console.WriteLine(ex.Message);return "";}}// 高级选项else if (s == "-a"){//Console.WriteLine("文件名:{0}", sFilename);SuperCount(sFilename);BaseCount(sFilename);retrun_str = Display();break;}//  基本功能else if (s == "-c" || s == "-w" || s == "-l"){//Console.WriteLine("文件名:{0}", sFilename);BaseCount(sFilename);retrun_str = Display();break;}else{//Console.WriteLine("参数 {0} 不存在", s);break;}}Console.WriteLine("{0}", retrun_str);return retrun_str;}

BaseCount() 方法用以统计指定文件的字符数、单词数以及总行数;

 private void BaseCount(string filename){try{// 打开文件FileStream file = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);StreamReader sr = new StreamReader(file);int nChar;int charcount = 0;int wordcount = 0;int linecount = 0;//定义一个字符数组char[] symbol = { ' ', ',', '.', '?', '!', ':', ';', '\'', '\"', '\t', '{', '}', '(', ')', '+' ,'-','*', '='};while ((nChar = sr.Read()) != -1){charcount++;     // 统计字符数foreach (char c in symbol){if (nChar == (int)c){wordcount++; // 统计单词数}}if (nChar == '\n'){linecount++; // 统计行数}}iCharcount = charcount;iWordcount = wordcount + 1;iLinecount = linecount + 1;sr.Close();}catch (IOException ex){Console.WriteLine(ex.Message);return;}}

Display()方法用来打印输出信息;

 private string Display(){string return_str = "";foreach (string s in sParameter){if (s == "-c"){//Console.WriteLine("字 符 数:{0}", iCharcount);return_str += "字符数:" + iCharcount.ToString();}else if (s == "-w"){//Console.WriteLine("单 词 数:{0}", iWordcount);return_str += "单词数:" + iWordcount.ToString();}else if (s == "-l"){//Console.WriteLine("总 行 数:{0}", iLinecount);return_str += "总行数:" + iLinecount.ToString();}else if (s == "-a"){return_str += "空行数:" + iNullLinecount.ToString();return_str += "代码行数:" + iCodeLinecount.ToString();return_str += "注释行数:" + iNoteLinecount.ToString();}}//Console.WriteLine();return return_str;}

3、展示统计完成的信息

private string DisplayAll(){string return_str = "";foreach (string s in sParameter){//Console.WriteLine("字 符 数:{0}", iCharcount);//Console.WriteLine("单 词 数:{0}", iWordcount);//Console.WriteLine("总 行 数:{0}", iLinecount);//Console.WriteLine("空 行 数:{0}", iNullLinecount);//Console.WriteLine("代码行数:{0}", iCodeLinecount);//Console.WriteLine("注释行数:{0}", iNoteLinecount);return_str += "字符数:" + iCharcount.ToString();return_str += "单词数:" + iWordcount.ToString();return_str += "总行数:" + iLinecount.ToString();return_str += "空行数:" + iNullLinecount.ToString();return_str += "代码行数:" + iCodeLinecount.ToString();return_str += "注释行数:" + iNoteLinecount.ToString();}//Console.WriteLine();return return_str;}

三、单元测试

1、黑盒测试

1085706-20180929174713876-322381655.png

(1) 对单词数进行统计

1085706-20180929174804793-864277017.png

(2) 对行数进行统计

1085706-20180929174813385-258392885.png

(3) 对字符进行统计

1085706-20180929174822801-1124822329.png

(4) 对扩展功能的测试

1085706-20180929174833223-1906288594.png

(5) 总测试

1085706-20180929174849327-1287923733.png

void WCTest()对程序进行单元测试

(1)通过字符数:94进行正确测试

1085706-20180929174900386-1697092701.png

(2)通过字符数:100等错误信息测试看测试是否通过

1085706-20180929174910989-1876252087.png

四、总结

刚拿到这个项目的时候其实一头雾水,无从下手,编写代码的过程中也遇到很多的问题,出现无法预料的错误。经常在一个地方卡住卡很久。不过通过这次个人项目,我也收获了很多,比如程序的设计实现需要先设计再去实现,设计和编译一样重要,完成任何一个程序,需要实现设计方案,避免后面的错误和程序不完善等问题。同时,代码的测试也占有相当的比例,通过各方面的测试避免程序出现错误和对用户体验度的完善。最后,完成一个完整的程序的时候,一定的代码功底就显得尤为重要,这是需要不停积累y与练习的。

转载于:https://www.cnblogs.com/longlin123/p/9724989.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2021/1/18

在家宅了两天&#xff0c;寒假立的flag不能就这样倒了&#xff0c;今天开始学数据结构和算法还有前端开发&#xff0c;不然我连寒假作业都写不完QAQ。

java学习(4):第一个java程序

1第一个java文件 编写一个.java后缀的文件 public class helloworld{ public static void main(String[] args){ System.out.println(“helloworld”); } } 2cmd 编译java javac helloworld 生成class文件使用 Java helloworld 输出helloworld结束 个人练习 public class test…

python单元测试的应用_单元测试pythongui应用程序的推荐方法是什么?

我目前愚蠢到试图为Python桌面应用程序维护两个并行代码基&#xff0c;一个使用PyGObject introspection for GTK 3&#xff0c;另一个使用PyGTK for GTK 2。我主要在PyGObject分支上工作&#xff0c;然后将变更移植到PyGTK分支上。由于这些实现之间的所有细微差异&#xff0c;…

洛谷P2480 [SDOI2010]古代猪文(卢卡斯定理+中国剩余定理)

传送门 好吧我数学差的好像不是一点半点…… 题目求的是$G^{\sum_{d|n}C^d_n}mod\ 999911659$ 我们可以利用费马小定理$a^{k}\equiv a^{k\ mod\ (p-1)}(mod\ p)$ 然后组合数可以直接用Lucas搞 那么就做完啦 然而$p-1$并不是质数orz&#xff0c;费马小定理不能用 那么我们考虑把…

java学习(5):全局变量和局部变量

public class qulitity{ static int num125; public static void main(String[] args){ System.out.println(“全局变量的值为”num1); int num212; System.out.println(num2); Test(); } public static void Test(){ int num21000; System.out.println(num2); } }

C语言知识点笔记完全整理

这个大长篇相当于是自己对于c语言学习的一个总结&#xff0c;会持续更新完善。 后续会在寒假整理一些经典的例题附带题解&#xff0c;当然希望我学到的东西、总结的经验&#xff0c;能够给后来者提供一个更好的学习途径&#xff0c;从入门到精通而不再是放弃。 也欢迎读者提出…

ajax 微信code获取_获取链接的参数,判断是否是微信打开,ajax获取数据

//获取链接参数function GetQueryString(name) {var reg new RegExp("(^|&)" name "([^&]*)(&|$)");var r window.location.search.substr(1).match(reg);if (r ! null) return unescape(r[2]); return null;}function is_weixin() {var u…

[HAOI2016]食物链

题目描述 如图所示为某生态系统的食物网示意图&#xff0c;据图回答第1小题现在给你n个物种和m条能量流动关系&#xff0c;求其中的食物链条数。物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3......am-1 bm-1am bm其中ai bi表示能量从物种ai流向物种bi,注意单独的…

java学习(6):数据类型

public class Shortdata{ public static void main(String[] args){ byte by 45; short sho 32767; System.out.println(“sho的值是”sho); //获取最大值 System.out.println(Byte.MAX_VALUE); System.out.println(Short.MAX_VALUE); //获取最小值System.out.println(Byte.M…

Xcode添加pch文件

1.打开Xcode工程. 在Supporting Files目录下,选择 File > New > File > iOS > Other > PCH File 然后点击下一步&#xff1b; 2.如果项目名称为Demo, PCH 文件的名字为Test.pch,然后创建&#xff1b;3.选择 PCH 文件创建Test.pch文件4.找到 Project > Build …

共轭方式怎么判断_怎样判断共轭双烯

本章重点共轭二烯烃的结构,共轭二烯烃的性质及制法,共轭 效应及其相对强弱。 本章难点共轭二烯烃的结构和性质,共轭效应及其相对强弱,周 环反应及共振论的概念。 ...第六章 烯烃 共轭二烯烃 1 分类 命名 6.1.1二烯烃的分类 二烯烃包括...6-3 共轭二烯烃 一. 二烯烃的分类、命名…

java学习(7):巩固练习

//任务1 //使用记事本或其他文本编辑器编写一个java控制台程序&#xff0c;定义一个包含main方法的java类&#xff0c;在main方法中使用合适的数据类型定义如下局部变量&#xff0c;标识符要严格遵守java规范。 //学生姓名&#xff1b;学生年龄&#xff1b;学生身高&#xff0c…

js fn无法访问,不报错

GD_List.prototype.test function(){}无法访问&#xff0c;浏览器console不报错。 附带条件&#xff1a; 1.其它某些fn能访问。 2.test是放在某些fn中的。 错误原因&#xff1a;fn命名冲突&#xff08;存放test&#xff09;&#xff0c;js调用了另外一个同名fn&#xff08;没存…

unionall mysql_5分钟了解MySQL5.7union all用法的黑科技

wKiom1f8bNajxqWNAAA4eVx2Dz8965.jpgwKioL1f8bNbCZ-bgAAA4pG6yXEQ597.jpgMySQL5.7union all用法的黑科技union all在MySQL5.6下的表现Part1:MySQL5.6.25[rootHE1 ~]# mysql -uroot -pEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL conn…

java学习(8):巩固练习

//任务2 编写控制台程序将以下给定的整数常量用合适的变量接收并将其10进制值与二进制表示形式分别输出打印在控制台界面 //55&#xff1b;666&#xff1b;1080&#xff1b;2500&#xff1b;78451&#xff1b; public class test02{ public static void main(String[] args){ /…

微信公众号开发经验总结

微信公众号开发经验总结 1. 快捷访问 1.1 测试公众号注册&#xff1a; http://mp.weixin.qq.com/debug/cgi-bin/sandbox?tsandbox/login 1.2 微信公众号开发指南&#xff1a; https://mp.weixin.qq.com/wiki?tresource/res_main&idmp1445241432 1.3 …

java学习(9):巩固练习

/** 任务 3 根据视频教学编写一个java控制台程序使用正确方式定义 #静态变量或静态常量存储以下描述的数据并在控制台界面打印这些数据&#xff0c; #并书写标准文档&#xff0c;方法&#xff0c;及相关注释&#xff1a; #一年之中季节有几个&#xff1b; #一个星期有几天&…

mysql 分页算法_MySQL高效的分页算法

PERCONA PERFORMANCE CONFERENCE 2009上&#xff0c;来自雅虎的几位工程师带来了一篇”Efficient Pagination Using MySQL“的报告&#xff0c;有很多亮点&#xff0c;本文是在原文基础上的进一步延伸。首先看一下分页的基本原理&#xff1a;mysql> explain SELECT * FROM m…

java学习(10):数据类型

对于java的数据类型&#xff0c;既熟悉又陌生&#xff0c;于是整理了这篇文档。 最近的面试让我开始注意细节&#xff0c;细节真的很重要。 首先&#xff0c;我们知道在JAVA中一共有八种基本数据类型&#xff0c;他们分别是 byte、short、int、long、float、double、char、bool…

wordpress安装_WordPress第三课:使用SOFTACULOUS安装WORDPRESS

在精简的过程中&#xff0c;你会发现你更加明确想要什么&#xff01;目标变得明确&#xff0c;生活也将变得清晰。安装WordPress最简单的方法是使用自动安装程序&#xff0c;这是一个特殊的工具&#xff0c;可以在你的网站上安装程序。大多数虚拟主机都会提供一个自动安装程序作…