欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

软件工程第一次作业(WC)

程序员文章站 2022-12-25 17:26:42
Github项目地址:https://github.com/3116005131/3116005131.git PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 · Estimate · 估计这个任务需要多少时 ......

github项目地址:https://github.com/3116005131/3116005131.git

psp2.1

personal software process stages

预估耗时(分钟)

实际耗时(分钟)

planning

计划

20 15

· estimate

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

5 5

development

开发

660 1045

· analysis

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

300 660

· design spec

· 生成设计文档

100 120

· design review

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

20 15

· coding standard

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

10 30

· design

· 具体设计

60 20

· coding

· 具体编码

120 180

· code review

· 代码复审

20 10

· test

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

30 10

reporting

报告

100 120

· test report

· 测试报告

30 40

· size measurement

· 计算工作量

30 40

· postmortem & process improvement plan

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

40 40

total

合计

780 1180

解题思路统计文件的字符数量,首先我要学习用c#读取文件,因为之前只是做过处理基本数据类型的一些类和方法。所以估计在这方面的学习要花费大量的时间。学习的方法是先,上网查找,在其他人代码中,当需要调用文件的读写操作,他们是用什么函数,方法实现的。发现代码中出现filestream类,然后就查找书本---《c#程序设计教程》,系统的学习filestream类,以及与其一起使用的streamreader类。学习后发现。由于只翻阅了一本参考书籍就找到了需要学习的内容,并有详细的介绍,故能快速的掌握,节省了不少学习的时间。在开始编程时,又遇到了第二个问题,设计文档虽然写好,由于太久没使用c#语言编程,但是不断的出现语法错误。导致不得不停下来,把c#的面向对象编程部分开完,并开了一个新建的命令行窗口项目来练习c#的语法。编译成功后,完成了三个基本功能,打算做下一步的单元测试,可发现单元测试必须是公共类或公共方法,而我把代码全都写在了main函数中,为实现单元测试不得,把代码写到类wc中。

设计实现过程:由于统计字符器,还算是逻辑简单的程序,所以打算只用一个公共类完成功能,使用默认的创造函数,输入函数,处理函数,输出函数。为了使代码更简洁,加多了一个执行函数调用另外三个函数。使main函数中更简洁。由于逻辑都比较简单,基本都是使用if的二分支选择语句,所以没有画流程图。

代码说明

public class wc
        {
            string path;    //需统计文件的路径
            char[] types = { 'c', 'c', 'w', 'w', 'l', 'l' };    //目前所能统计的类型(字符,单词,行数)
            int n;  //统计结果
            char[] type;      //当前统计的类型
            public void ncount()    //统计方法
            {
                getmessage();
                count();
                show();
            }
            public void getmessage()    //输入信息
            {
            ......
            }   
            public void count()     //统计数量
            {
             ......   
            }
            public void show()      //输出结果
            {
            ......               
            }
        }            

输入函数

1             public void getmessage()    //输入信息
2             {
3                 console.write("wc.exe -");
4                 string message = console.readline();
5                 string[] categoryinfomation = message.split(' ');
6                 path = categoryinfomation[1];
7                 type = categoryinfomation[0].tochararray();
8             } 

处理函数

 1             public void count()     //统计数量
 2             {
 3                 int c=0, w=0, l=0;//字符数,单词数,行数
 4                 int wflag=0;        //单词标识符
 5                 filestream fs = null;
 6                 streamreader reader = null;
 7                 try
 8                 {
 9                     fs = new filestream(path, filemode.open, fileaccess.read);
10                     reader = new streamreader(fs);
11                     reader.basestream.seek(0, seekorigin.begin);
12                     int i = reader.read();
13                     while (i!=-1)
14                     {
15                         c++;
16                         if ((i<=90&&i>=65)||(i>=97&&i<=122))
17                         {
18                             if (wflag == 0)
19                             {
20                                 w++;
21                                 wflag = 1;
22                             }
23                            
24                         }
25                         else wflag = 0;
26                         char character = (char)i;
27                         if (character == '\n')
28                         {
29                             l++;
30                         }
31                         i = reader.read();
32                     }
33                 }
34                 catch (exception)        //path输入有误
35                 {
36                     console.writeline("输入的地址有误,找不到该文件");
37                 }
38                 finally
39                 {
40                     if(reader!=null)reader.close();
41                     if(fs!=null)fs.close();
42                 }
43                 if (type[0] == 'c' || type[0] == 'c')
44                 {
45                     n = c;
46                 }
47                 else if (type[0] == 'w' || type[0] == 'w')
48                 {
49                     n = w;
50                 }
51                 else if (type[0] == 'l' || type[0] == 'l')
52                 {
53                     n = l;
54                 }
55             }

 

 

输出函数

 1             public void show()      //输出结果
 2             {
 3                 if (type[0] == 'c' || type[0] == 'c')
 4                 {
 5                     console.writeline("字符数为{0}", n);
 6                 }
 7                 else if (type[0] == 'w' || type[0] == 'w')
 8                 {
 9                     console.writeline("单词数为{0}", n);
10                 }
11                 else if(type[0] == 'l' || type[0] == 'l')
12                 {
13                     console.writeline("行数为{0}", n);
14                 }
15                 else
16                 {
17                     console.writeline("word count does not support this type of statistics.");     //输入的参数有误,n=0
18                 }
19             }  

测试运行

软件工程第一次作业(WC)

项目小结:这次能成功完成作业,幸好因为wc需要实现的基本功能逻辑简单,只要掌握基本的语法就能完成。也多亏所有使用到的类的使用都能在一本书中全部找到,不然恐怕是完成不了项目。由于学习c#语法花费了太多时间,导致没有时间学习如何进行单元测试。完成项目后必须花费时间把单元测试做了,为下次的项目做充足的准备,不能在把绝大部分时间用来学习上了。