github地址:https://github.com/WhaterverYouCall/rjcshomework
PSP2.1 | PSP阶段 | 预估耗时(分钟) | 实际耗时(分钟) |
Planing | 计划 | ||
Estimate | 估计任务所需时间 | 730 | 910 |
Development | 开发 | 40 | 40 |
Analysis | 需求分析 | 10 | 10 |
Design Spec | 生成设计文档 | 10 | 10 |
Design Review | 设计复审(和同事审核设计文档) | 10 | 10 |
Coding Standard | 代码规范(为目前的开发制定合适的规范) | 10 | 10 |
Design | 具体设计 | 60 | 60 |
Coding | 具体编码 | 360 | 480 |
Code Review | 代码复审 | 30 | 30 |
Test | 测试(自我测试、修改代码、提交修改) | 120 | 180 |
Reporting | 报告 | 20 | 20 |
Test Report | 测试报告 | 20 | 20 |
Size Measurement | 计算工作量 | 10 | 10 |
Postmortem&Process Improvement | 事后总结,并提出改进计划 | 30 | 30 |
合计 | 730 | 910 |
解题思路
按照老师所给的功能模块(基础、扩展、高级)由简到难对问题进行解决,使用较为熟悉的C++进行编程
程序实现过程
分析函数:读取文件第一个字符开始进行判断,并开始统计字符数等。
(1)字符数:读一次便将字符数参数加一。
(2)行数:出现\n则行数参数加一
(3)单词数:出现,或空格则单词参数加一
(4)注释行数:出现\则为注释行
(5)空行:开头为\n则为空行
最后在主函数中输入文件路径后,调用输出结果。
代码说明
文件内容分析:
analyse()
void analyse()
{
while((c=fgetc(file))!=EOF)
{
chars++;
if (((c<=‘z‘)&&(c>=‘a‘))||((c<=‘Z‘)&&(c>=‘A‘))||((c>=‘0‘)&&(c<=‘9‘)))
{
words++;
while((c=fgetc(file))!=EOF)
{
chars++;
if (((c<=‘z‘)&&(c>=‘a‘))||((c<=‘Z‘)&&(c>=‘A‘))||((c>=‘0‘)&&(c<=‘9‘)))
{
}
else if (c==‘\n‘)
{
s[lines]=3;
lines++;
break;
}
else if ((c==‘,‘)||(c==‘ ‘))
break;//判断单词,有空格或者逗号或者换行则停止
else
{
symbols++;
break;
}//判断运算符号,不是单词的即为符号
}
}
else if (c==‘/‘)
{
if ((c=fgetc(file))==‘/‘)
{
symbols+=2;
s[lines]=2;
fseek(file,-1L,SEEK_CUR);
}//判断注释行
}
else if (c==‘\n‘)
{
if (s[lines]!=2)
s[lines]=1;
lines++;
}
else if (c==‘ ‘)
{
}
else
symbols++;
}
if (s[lines]!=2)
s[lines]=1;
}//分析所有字符数、单词数、行数及行类的函数
主函数
{
char name[50];
int a,i,j;
int m=0,n=0,q=0;
cout<<"输入源文件名:";
for(;;)
{
cin>>name;
if((file=fopen(name,"r"))!=NULL)
break;
else
cout<<"文件路径错误!";
}
analyse();
fclose(file);
for (i=1;i<=lines;i++)
{
if (s[i]==1)
{
m++;
cout<<"第"<<i<<"行为代码行"<<endl;
}
else if (s[i]==2)
{
n++ ;
cout<<"第"<<i<<"行为注释行"<<endl;
}
else if(s[i]==3)
{
q++;
cout<<"第"<<i<<"行为空行"<<endl;
}
}
cout<<"字符数:"<<chars<<endl;
cout<<"单词数:"<<words<<endl;
cout<<"行数 :"<<lines<<endl;
cout<<"符号数:"<<symbols<<endl;
cout<<"代码行数:"<<m<<endl;
cout<<"注释行数:"<<n<<endl;
system("pause");
return 0;
}
其中使用了与文件调用相关的函数fopen()fgetc(file)等
注:由于时间水平有限,只能实现部分功能,如未能实现文件遍历、命令行命令批处理,还请老师谅解。