WordCount基本功能

项目的gitee地址:https://gitee.com/ITtoto/WordCount

 

开发语言:C语言

PSP2.1表格

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

20

 16

· Estimate

· 估计这个任务需要多少时间

 30

 27

Development

开发

 120

 160

· Analysis

· 需求分析 (包括学习新技术)

 20

 18

· Design Spec

· 生成设计文档

 20

 0

· Design Review

· 设计复审 (和同事审核设计文档)

 30

 0

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

 20

 0

· Design

· 具体设计

 30

 50

· Coding

· 具体编码

 100

 150

· Code Review

· 代码复审

 20

 0

· Test

· 测试(自我测试,修改代码,提交修改)

 10

 20

Reporting

报告

 20

 13

· Test Report

· 测试报告

 10

 2

· Size Measurement

· 计算工作量

 20

 5

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

 10

15

 

合计

 480

 476

 

WordCount需求说明

  WordCount的需求可以概括为:对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。

可执行程序命名为: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参数。 

 

参数及其约定如下:

参数名字

参数意义

用法示例

-c[必选]

文件的字符数

示例:wc.exe -c file.c [表示返回文件file.c的字符数,并存储在result.txt中]

-w[必选]

文件单词总数

示例:wc.exe -w file.c [表示返回文件file.c的单词数,并存储在result.txt中]

-l[必选]

文件行数

示例:wc.exe -l file.c [表示返回文件file.c的总行数,并存储在result.txt中]

-o[必选]

输出文件名

示例:wc.exe –c file.c -o outfile.txt [表示返回文件file.c的字符数,并存储在outfile.txt中]

 

 

基本思路

  根据C语言写的小程序,三个功能,分别输出文件的字符数、行数和单词数,每个功能写一个函数,在总函数中具体写输出格式,在具体函数中进行具体编码。代码中肯定要进行文件流的一些具体方法,fopen和fwrite等函数也会用到。在做这个的时候,我不想什么炫技的方法,指向一步一步的简单的做下来,所以if else就是一个很好的分类方法了,只要肯分,所有的命令肯定都规规矩矩的一个一个的都能实现,关键就是要看细节代码的部分了,不过对于分拣刘的操作,其实说到底就是那几部,没什么难的。。

 

详细设计 :

  本次实现使用C语言,使用vs2013进行开发。

  设置基础功能有三个类charcount、wordcount和linecount三个类分别对应的事字符数、单词数和行数的统计,最后一个main类收尾,代码如下:

 

 

字符数类:

 1 int charcount(char file[]){
 2 FILE *fp= NULL;
 3 int ccount = 0;
 4 char c;
 5 if (fopen_s(&fp, file, "r")){
 6 printf("找不到文件\n");
 7 exit(-1);
 8 }
 9 c = fgetc(fp);
10 while (c != EOF){
11 c = fgetc(fp);
12 ccount++;
13 }
14 fclose(fp);
15 return ccount;
16 }

 

 

单词数类:

 1 int wordcount(char file[]){
 2 FILE *fp = NULL;
 3 int wcount = 0;
 4 char c;
 5 if (fopen_s(&fp, file, "r")){
 6 printf("找不到文件\n");
 7 exit(-1);
 8 }
 9 c = fgetc(fp);
10 while (c != EOF){
11 if (c >= 'a'&&c <= 'z' || c >= 'A'&&c <= 'Z' || c >= '0'&&c <= '9'){
12 while (c >= 'a'&&c <= 'z' || c >= 'A'&&c <= 'Z' || c >= '0'&&c <= '9' || c == '_'){
13 c = fgetc(fp);
14 }
15 wcount++;
16 c = fgetc(fp);
17 }
18 c = fgetc(fp);
19 }
20 fclose(fp);
21 return wcount;
22 }

 

 

行数类:

 1 int linecount(char file[]){
 2 FILE *fp = NULL;
 3 int lcount = 0;
 4 char c;
 5 if (fopen_s(&fp, file, "r")){
 6 printf("找不到文件\n");
 7 exit(-1);
 8 }
 9 c = fgetc(fp);
10 while (c != EOF){
11 if (c == '\n'){
12 lcount++;
13 c = fgetc(fp);
14 }
15 else
16 {
17 c = fgetc(fp);
18 }
19 }
20 fclose(fp);
21 return lcount+1;
22 }

 

 

main类:

 1 int main(){
 2 char order[100], file[100];
 3 printf("输入命令:c:字符数 l:行数 w:单词数 q:退出 \n");
 4 while (1){
 5 printf("请输入用户命令: wc.exe -");
 6 scanf_s("%s", &order,100);
 7 if (order[0] == 'c'){
 8 printf("请输入文件名: ");
 9 scanf_s("%s", &file,100);
10 printf("文件的字符数为: %d\n", charcount(file));
11 continue;
12 }
13 if (order[0] == 'w'){
14 printf("请输入文件名: ");
15 scanf_s("%s", &file, 100);
16 printf("文件的单词数为: %d\n", wordcount(file));
17 continue;
18 }
19 if (order[0] == 'l'){
20 printf("请输入文件名: ");
21 scanf_s("%s", &file, 100);
22 printf("文件的行数为: %d\n", linecount(file));
23 continue;
24 }
25 if (order[0] == 'q'){
26 break;
27 }
28 }
29 return 0;
30 }

 

 

测试设计:

 

 

总结:

  刚拿到作业题的时候感觉头皮发麻,完全不知道从哪里下手,又要从文件流入手,又要兼顾命令,还要将结果输出到1个新文件中,还有写博客和一些乱七八糟的东西。无法下手,不过将老师的作业要求全部读了一遍之后,更让人迷糊了,所以干脆都不管了,只是将代码方面的设计下来之后,感觉剩下来的东西也就不是那么让人感到恐惧了,慢慢的也就熟悉上了,编码方面的问题虽然有时候会卡一会,不过通过查找网上的资料和询问同学之后也就搞定了都。感觉这次的作业让我适应了将来工作的一个流程,还有和网上程序员打交道的途径,提前将基础都打好很有利于我们将来的社会工作,我认为这次作业很有意义!

posted @ 2018-09-24 21:49  ITtoto  阅读(2345)  评论(0编辑  收藏  举报