软件工程第一次作业(wc的c语言实现)

GitHub地址:https://github.com/N1Yoo/-


 

 

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

 20

 15

· Estimate

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

15

10

Development

开发

 400

300

· Analysis

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

70 

80

· Design Spec

· 生成设计文档

30 

30

· Design Review

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

30

30 

· Coding Standard

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

15 

15

· Design

· 具体设计

50 

40

· Coding

· 具体编码

60 

60

· Code Review

· 代码复审

30 

30 

· Test

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

30 

60 

Reporting

报告

50

50 

· Test Report

· 测试报告

30 

20 

· Size Measurement

· 计算工作量

10 

20 

· Postmortem & Process Improvement Plan

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

30 

10 

合计

 

870

770 

 


 

一.项目要求

 

  • wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。具体功能要求:

 

 

 

需求模式: wc.exe [parameter] [file_name]

 

 

 

  • 基本功能  (完成)

 

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

 

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

 

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

 

 

 

  • 扩展功能(未完成)

 

    -s   递归处理目录下符合条件的文件。        (未完成)

 

    -a   返回更复杂的数据(代码行 / 空行 / 注释行)。  (已完成)

 

  • 高级功能(未完成)

 

     -x 参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。

 

 

二.解题思路:

  1.采用c语言实现

       2.Charcount,将文件中的字符逐一提取,判断其ascii码是否在33~126中,是,则char+1

       3.Wordcount,当读取到字符为字母或者数字时,进入循环,直到读取到非字母和数字,打断循环,word+1

       4.Linecount,当读取到‘\n'时,代表换行,line+1

 

 

 

三.主要代码:

1.main函数,argc  argv  实现命令行编译,判断命令选择相应函数

 1 int main(int argc, char *argv[]) //主函数,选择功能            
 2 {
 3     FILE *fp;
 4     int c;
 5     int w;
 6     int l;
 7     
 8 
 9         
10     if( !strcmp (argv[1], "-c") ) 
11     {                     
12         c = CharCount(argv[2]);
13         printf("文件:%s     字符数:%d\n", argv[2], c );
14     }
15     
16     
17     else if( !strcmp (argv[1], "-w") )  
18     {  
19         w = WordCount(argv[2]);                
20         printf("文件:%s     词数:%d\n", argv[2], w );
21     }
22     
23                 
24     else if( !strcmp (argv[1], "-l") )  
25     {  
26         l = LineCount(argv[2]);     
27         printf("文件:%s     行数:%d\n", argv[2], l );
28     }
29     
30     else  printf("您的输入有误,请重新输入。");
31     return 0;
32 }

 

2.CharCount函数,统计字符,fgetc()逐一提取文件字符

int CharCount(char *file)//字符统计函数 
{
    FILE *fp;
    int i;
    int c=0;
    
    fp=fopen(file,"r");
    i=fgetc(fp);
    
    if (fp==NULL)
    {
    printf("文件不存在,请重新输入");
    exit(1); 
    }
    
    while(i!= EOF) 
    {
        if( i >= 33 && i <= 126 )
            c++;
        i=fgetc(fp);
    }      
    
    fclose(fp);
    return c;
}

3.WordCount函数,统计单词

int WordCount(char *file)//单词统计函数 
{
    FILE *fp;
    int i;
    int w=0;
    
    fp=fopen(file,"r");
    i=fgetc(fp);
    
    if (fp==NULL)
    {
    printf("文件不存在,请重新输入");
    exit(1); 
    }
    
    while(i!=EOF)
    {
        if( (i >= 'a' && i <= 'z') || (i >= 'A' && i<= 'Z') || (i >= '0' && i <= '9') ) 
        {
            
            while( (i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z') || (i >= '0' && i <= '9')  || i == '_' ) {
                i = fgetc(fp);
            }
                w++;
            
        }
    
         i=fgetc(fp);          
    }
    fclose(fp);
    return w;     
}

4.LineCount函数,统计行数

int LineCount(char *file)//行数统计函数 
{
    FILE *fp;
    int i;
    int l=0;
    
    fp=fopen(file,"r");
    i=fgetc(fp);
    
    if (fp==NULL)
    {
    printf("文件不存在,请重新输入");
    exit(1);
    }
    
    while(i!= EOF) 
    {
        if( i=='\n' )
            l++;
        i=fgetc(fp);
    }      
    
    fclose(fp);
    return l;
}

四、运行测试:

1.要检测的txt文本

2.运行结果

 

 

五、项目小结:

在本次的作业中,让我获益良多,我学会了github的使用,并且弄明白了c语言中对文件的输出与输入等操作但是由于很久没有运用c语言所以生疏了,忘记了很多知识,希望在接下来的学习中继续努力。

posted @ 2018-09-15 02:30  N1Yoo  阅读(108)  评论(0编辑  收藏  举报