数据结构课设报告词频统计系统的设计Word格式.docx
- 文档编号:16778614
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:15
- 大小:175.32KB
数据结构课设报告词频统计系统的设计Word格式.docx
《数据结构课设报告词频统计系统的设计Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构课设报告词频统计系统的设计Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
2)系统利用C语言实现;
3)按照课程设计规范书写课程设计报告。
1.2总体结构
本程序主要分为五个模块:
主函数模块,读取单词函数模块,显示单词统计函数模块,单词统计函数模块,单词添加函数模块。
主函数模块:
先调用读取单词函数,然后根据用户输入的阈值调用显示单词统计函数输出结果。
读取单词函数模块:
打开用户输入的文件,调用单词统计函数,然后关闭文件。
显示单词统计函数模块:
将链表中频率大于a且小于b的单词输出在操作界面上。
单词统计函数模块:
用户输入的文章以字符的形式进行判断,如果该字符为字母(包括“’”),则添加到单词数组中,否则,调用单词添加函数添加一个新单词。
单词添加函数模块首先将要添加单词首字母改为小写,然后判断该单词在链表中是否存在,若存在,则出现频率加1,否则在链表中创建一个新的节点,将该单词信息放到该节点中。
图1.1总体结构示意图
第2章详细设计
2.1主函数模块
打开一篇英文文章,统计每个词在该文章中的出现频率,然后根据用户输入的两个阈值a和b,将词频大于a的和小于b的所有单词输出。
其中首先调用读取单词函数ReadWord()统计文章中的单词,然后由用户输入阈值a和b,通过调用显示单词统计函数ShowWord(inta,intb)将词频大于a小于b的所有单词输出。
图2.1主函数模块流程图
2.2读取单词函数模块
此函数主要作用是打开用户需要打开的英文文章,首先在界面上输出"
请输入要读取的单词文件名[如:
test.txt]:
"
,待用户输入一个文件名后,打开该文件,然后调用单词统计函数WordCount()对该英文文章进行单词统计,最后关闭文件。
图2.2读取单词函数模块流程图
2.3显示单词统计函数模块
此函数主要作用是根据用户输入的阈值a和b,把词频大于a和小于b的所有单词输出。
其中先定义一个链表指针p,让其指向头结点,判断其若为空,则结束,否则将该节点内单词频率与阈值比较,若满足要求,则输出该节点内单词,然后指向下一个节点,若不满足,则直接指向下一节点,继续判断节点是否为空,如此循环,直至结束。
N
Y
图2.3显示单词统计函数模块流程图
2.4单词统计函数模块
此函数主要作用是对该英文文章中每个单词出现频率的统计。
首先,该文章以字符的形式进行读取,判断每一个字符是否为字母,如果该字符为字母(包括“’”),则添加到单词数组中,否则,调用单词添加函数AddWord(char*ww)添加一个新单词。
图2.4单词统计函数模块流程图
2.5单词添加函数模块
此函数作用主要是添加单词。
首先将要添加单词首字母改为小写(若首字母为大写字母,则该字母ASCII码加32),然后判断该单词在链表中是否存在,若存在,则出现频率加1,否则在链表中创建一个新的节点,将该单词信息放到该节点中。
否
是
图2.5单词添加函数模块流程图
第3章调试分析
调试分析包括以下的几个方面:
(1).一开始拿到这个题目时无从下手,刚开始就在用树还是用链表上无法选择,后来发现这个题目的要求不是很复杂,用链表就可完成其数据的处理,最终选择用链表来处理这个题目。
(2).词频统计系统要首先打开一篇文章,因此我选择以一个一个字符的形式对文章进行处理,先判断字符是否为字母,然后对单词用链表进行处理,链表的每个节点代表一个单词,该节点中存储该单词的频率,通过单词频率与阈值的比较,把满足要求的单词筛选出来,最终输出到操作界面上,完成对整篇文章每个单词词频的统计。
(3).在程序的调试过程中,我也出现了一些问题,首先没有解决好单词的比较问题,后来通过书本找到了用于字符串比较的函数以及字符串复制的函数,大大的减轻了我编程的难度。
第4章使用说明
运行操作及结果:
进入主界面,输入所要操作文件名。
图4.1输入文件名菜单
输入阈值
图4.2输入阈值菜单
词频统计结果显示
图4.3最终结果显示
程序所操作原文件。
图4.4程序所操作的文件
参考文献
[1]严蔚敏,吴伟民.数据结构:
C语言版[M].北京:
清华大学出版社,2007
[2]王敬华,林萍.C语言程序设计教程[M].北京:
清华大学出版社,2009
[3]严蔚敏.数据结构习题集[M].北京:
附录(程序清单)
#include<
stdafx.h>
stdio.h>
string.h>
stdlib.h>
#defineFile_Name_Max30//文件名最大长度
#defineWord_Max_Size60//每个单词最大长度
typedefstructword//连表单词结构
{
charw[Word_Max_Size];
//单词
intcount;
//个数
structword*next;
}Link;
Link*head=NULL;
//连表头
FILE*fp;
//文件指针
intcount=0;
intIsNotWord(chara)//判断是否为字母
if(a<
='
z'
&
&
a>
a'
)
{
return0;
}
elseif(a<
Z'
A'
elseif(a=='
\'
'
else
return1;
}
voidAddWord(char*ww)//添加单词
Link*p1,*p2;
if(ww[0]<
ww[0]>
)//转成小写字母
ww[0]+=32;
for(p1=head;
p1!
=NULL;
p1=p1->
next)//判断单词在连表中是否存在
if(!
strcmp(p1->
w,ww))
{
p1->
count++;
//存在就个书加1
return;
}
//不存在添加新单词
p1=(structword*)malloc(sizeof(word));
strcpy(p1->
w,ww);
p1->
count=1;
next=NULL;
count++;
if(head==NULL)
head=p1;
for(p2=head;
p2->
next!
p2=p2->
next);
p2->
next=p1;
voidWordCount()//统计单词
inti=0,j=0;
charword[Word_Max_Size],c;
while(!
feof(fp))
fscanf(fp,"
%c"
&
c);
if(IsNotWord(c))
word[j]='
\0'
;
if(j>
0)
{
AddWord(word);
}
j=0;
else
word[j]=c;
j++;
i++;
voidReadWord()//读取文件中的单词
charname[File_Name_Max];
printf("
请出入要读取的单词文件名[如:
);
scanf("
%s"
name);
getchar();
fp=fopen(name,"
r"
WordCount();
fclose(fp);
voidShowWord(inta,intb)//显示单词统计情况
Link*p;
个数\t单词\n"
for(p=head;
p!
p=p->
next)
if((p->
count>
a)&
(p->
count<
b))
printf("
%d\t%s\n"
p->
count,p->
w);
intmain()
ReadWord();
inta,b;
请输入阈值a和b[如:
210]:
%d%d"
a,&
b);
ShowWord(a,b);
课程设计总结:
通过这次课程设计中对词频统计系统的设计,使我对文件以及链表有了新的了解和认识,让我受益匪浅。
也让我知道在数据结构的领域还有许多需要我去学习的地方。
在做这次课设之前,也学习了数据结构这门学科的初步知识,但是并不知怎样才能自己编写和更好的利用,但通过这次课设,经过查找资料,并且通过老师和同学的帮助终于能够完成这项任务,并且掌握了运用方法,使我增强了数据结构的兴趣,同时还增强了我的动手能力和逻辑思维,提高了自己的编程能力,让我受益良多,在遇到困难时我学会了查阅资料和讨论学习的方法,而查阅资料和讨论学习的方法也在这个过程中被我逐渐地掌握熟练。
我觉得课程设计对于我来说既是一项作业,也是一个新的学习的过程。
在这个过程中,我对数据结构以及程序设计的兴趣和潜能也被很大程度地激发了出来。
如今我认为,其实享受课程设计中的失败、成功以及学习的过程是一种很大的乐趣,而这种学习方式我也将在以后的学习过程中更好更多地利用到。
指导教师评语:
指导教师(签字):
年月日
课程设计成绩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 报告 词频 统计 系统 设计