课程名称 | 2016级计算机科学与工程学院软件工程(西北师范大学) |
---|---|
作业要求 | 实验二 软件工程个人项目 |
课程目标 | 通过学习这门课程,深入了解软件开发的标准过程,从软件生命周期的8个阶段分析各个阶段的开发任务,摒弃以往开发软件的方法。 |
作业意义 | 此次作业能帮助我掌握软件项目个人开发流程和Github上发布软件项目的操作方法 |
需求分析
1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个。
2.程序需要很壮健,能读取容纳英文原版《哈利波特》10万词以上的文章。
3.指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图。
4.高频词统计功能:用户从键盘输入高频词输出的个数k,运行程序统计功能,可按文本中词频数降序显示前k个单词的词频及单词。
5.统计该文本所有单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt。
功能设计
1.可以读取指定的英文文本文件。
2.可以对指定文本进行单词词频统计。
3.对统计的单词及频数按字典字母顺序打印。
4.采用图形化界面方便操作。
设计实现
这个程序包含5个函数,包括1个主函数main函数和5个功能函数,分别是main函数、srwj函数、px函数、pv函数、dy函数、menu函数。其中main函数主要负责控制整个程序的运行,而剩下5个函数功能分别如下:
1.srwj函数用来读取指定文件,并将相关信息输入结构体变量wd中;
2.pv函数用来统计单词的频数;
3.px函数用来对已统计的单词进行英文字母顺序的排序;
4.dy函数用来输出单词的相关统计信息;
5.menu函数用来进行图形化界面操作;
测试运行
-
用户界面
-
程序运行界面
比较关键代码片段
- 主函数main代码
int main()
{
srwj();
px();
pv();
menu();
}
- pv函数代码
void pv(){
int m,n,flag=1;
for(m=0;m<cc;m++){
for(n=0;n<m;n++){
if(strcmp(wd[n].dc,wd[m].dc)==0){
flag=0;
break;
}
else flag=1;
}
while(flag){
for(n=m;n<cc;n++){
if(strcmp(wd[n].dc,wd[m].dc)==0){
wd[m].nn++;
}
flag=0;
}
}
}
}
- px函数代码
void px(){
int m,n,k;
char temp[20];
for(m=0;m<cc-1;m++){
k=m;
for(n=m+1;n<cc;n++){
if(strcmp(wd[k].dc,wd[n].dc)>0){
k=n;
}
if(k!=m){
// temp=wd[m].dc;
// wd[m].dc=wd[k].dc;
// wd[k].dc=temp;
strcpy(temp,wd[m].dc);
strcpy(wd[m].dc,wd[k].dc);
strcpy(wd[k].dc,temp);
}
}
}
}
- menu函数代码
int menu()
{
int ii;
printf("
");
printf(" *********************************************************
");
printf(" # #
");
printf(" # 词频统计 #
");
printf(" # #
");
printf(" *********************************************************
");
printf(" # 1.显示单词总数、全部单词及频数 #
");
// printf(" # 2. 显示高频词及频数 #
");
printf(" # #
");
printf(" # 3.退出系统 #
");
printf(" *********************************************************
");
printf(" 请选择您需要的操作序号(1-3)按回车确认:");
scanf("%d",&ii);
printf("
");
switch(ii)
{
case 1:dy();break;
// case 2:gpc();break;
case 3: break;
default:printf("请在1-3之间选择
");break;
}
}
总结
- 在这次项目中,我查阅了一些以前看过的c语言书籍,由于很长时间没用过c语言,所以编程颇为费力。
- 在编程过程中,用到了一些冒泡排序之类的算法,而且采用了文件相关的函数来做。
- 第一次编写这么大代码量的程序,有些手忙脚乱,不过总算把每个模块编写完毕。
- 程序编写过程中还有很多没有实现,比如说高频词的显示,由于对指针的运用还不熟练,所以相关的代码实现没有完成。
PSP
PSP2.1 | 任务内容 | 计划共完成需要 的时间(min) |
实际完成需要 的时间(min) |
---|---|---|---|
Planning | 计划 | 20 | 18 |
Estimate | 估计这个任务需要多少 时间,并规划大致工作步骤 |
半天 | 半天 |
Development | 开发 | 180 | 200 |
Analysis | 需求分析 (包括学习新技术) | 60 | 80 |
Design Spec | 生成设计文档 | 10 | 20 |
Design Review | 设计复审 (和同学审核设计文档) | 7 | 8 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 5 | 7 |
Design | 具体设计 | 30 | 60 |
Coding | 具体编码 | 120 | 240 |
Code Review | 代码复审 | 30 | 60 |
Test | 测试(自我测试,修改代码,提交修改) | 20 | 30 |
Reporting | 报告 | 10 | 10 |
Test Report | 测试报告 | 5 | 4 |
Size Measurement | 计算工作量 | 5 | 3 |
Postmortem & Process Improvement Plan | 事后总结 ,并提出过程改进计划 | 5 | 5 |