文本信息处理.docx
《文本信息处理.docx》由会员分享,可在线阅读,更多相关《文本信息处理.docx(13页珍藏版)》请在冰豆网上搜索。
![文本信息处理.docx](https://file1.bdocx.com/fileroot1/2022-12/15/4ba36f75-d697-4d35-9d96-99ac47b08f6c/4ba36f75-d697-4d35-9d96-99ac47b08f6c1.gif)
文本信息处理
课程设计
班级
学号
姓名
指导教师
年月日
课程设计任务书
一、课程设计题目:
文本信息处理
二、课程设计工作自2007年7月9日起至2007年7月14日止
三、课程设计内容:
运用所学的C语言知识,编制和调试程序,具有如下功能:
(1)对存储在chapter.dat文件中的英文文章进行下面的处理操作,文章的具体内容自己输入。
(2)统计各个单词的数量,并将单词排序,排序结果输出到out.dat中,格式如下:
单词名数量
(3)输入某一单词,判断该单词是否存在于该文章中,若存在,指出其在文章中出现的次数。
四、课程设计要求:
1、采用模块化程序设计方法;在程序界面,以菜单的形式调用各功能函数;程序可读性强,界面友好;输出形式尽量美观。
2、用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。
3、用户界面中的菜单至少应包括“排序显示”、“查询单词”、“退出”3项。
4、代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:
课程结束后,上交课程设计说明书和源程序。
课程设计说明书的内容如下:
●课程设计任务书
●程序设计题目
●需求分析(分析题目的要求)
●程序框图(总体框图和各功能模块框图,使用传统流程图或N-S框图)
●核心技术的实现方法及程序源代码及注释
●个人总结
●[参考资料]
指导教师:
____________________学生签名:
____________________
目录
一、程序设计题目1
二、需求分析1
三、程序流程图2
四、核心技术的实现方法、程序段及注释7
五、个人总结10
六、参考文献11
七、源程序11
一、程序设计题目
文本信息处理,具体要求如下:
1、打开文档(chapter.dat)
2、输入查找单词,并显示单词在文章中出现的次数
3、显示文章的内容
4、对chapter文档中的文章进行单词排序
5、退出程序
注:
用户界面中的菜单至少应包括“排序显示”、“查询单词”、“退出”3项。
将单词排序,排序结果输出到out.dat中。
二、需求分析
经过对程序设计题目的分析,整个程序大致分为四个模块,其中每一个模块对应一个函数,他们的功能分别是菜单函数(menu),查找函数(find),显示全文函数(show),排序函数(paixu),
1、菜单函数主要实现程序的菜单功能,将程序所包含的各种功能作输出显示;
2、查找函数主要实现的功能是实现判断单词是否存在于chapter.dat的文章中,若存在,并统计其数量。
3、显示全文函数主要实现的功能是显示储存在chapter.dat的文章的全文。
4、排序函数实现的功能是对chapter.dat中的文章的单词进行排序,并统计单词的数量,格式如下:
单词名数量
除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
三、程序流程图
1、程序总体结构图
对a进行赋值
真a=1?
假
打开文件
真a=2?
假
find(fp)
真a=3?
假
Show(fp)
真a=4?
假
paixu(fp)
真a=5?
假
break
error
图1程序总体结构图
2、具体功能框图
(1)查找函数:
图2查找函数
(2)显示全文函数:
变量ch
ch=fgetc(fp)
ch!
=EOF
putchar(ch)
ch=fgetc(fp)
全文结束
rewind(fp)
图3显示全文函数
(3)排序函数
图4排序函数
四、核心技术的实现方法、程序段及注释
本程序主要由四个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。
在这些函数当中,查找函数,显示全文函数,排序函数是程序中较为核心的部分,下面分别进行说明。
1、查找函数
输入查找单词,对于已储存在chapter.dat文档中的文章,输入一个单词查看其是否在文章中,若是存在输出其个数.其判断方法是以单词是否为空判断单词开头,并使其从文章的开头循环到末尾,在这过程中,比较输入的单词和文章中的单词是否相同,有一个相同的,其结果就加一,具体的程序段如下:
voidfind(FILE*fp)/*查找单词*/申明形态变量
{
FILE*fp;
inti,j,m=0,n,t=0;
charwant[10],now[40],b[10];
printf("Pleaseenterthewordyouwant\n");
scanf("%s",want);
if((fp=fopen("D:
\\chapter.dat","a"))==NULL)
{
printf("cannotopenthisfile\n");
exit(0);
}
fread(now,sizeof(now),1,fp);
for(i=0;now[i]!
='\0';i++)
if(now[i]==want[0])
{
n=i;
for(j=0;j<=m;j++)
b[j]=now[n++];
}
if(strcmp(want,b)!
=0)
t++;
printf("thequatityofthewordsis%d",t);
return;
}
2、显示全文函数
该函数的核心内容是显示储存在chapter.dat文档中的英文文章,ch=fgetc(fp)调用文档内容,直到ch!
=EOF结束,最后输出文章的内容,具体程序段如下:
voidshow(FILE*fp)
{
charch;
printf("全文内容如下:
");
ch=fgetc(fp);/*调用文档内容*/
while(ch!
=EOF)
{
putchar(ch);/*输出文章内容*/
ch=fgetc(fp);
}
printf("全文结束!
!
!
!
");
printf("\n");
rewind(fp);
}
3、排序函数
该函数是把储存在chapter.dat文档中的文章的单词,按首字母的大小进行排序,并通过比较法比较每个单词,看是否有相同的,若存在,在数量上加1,最后统计总数量,然后以只写的方式打开文档out.dat,把结果输入到该文档中,具体的程序段如下:
voidpaixu(FILE*fp)
{FILE*fp1;(定义文件类型指针)
inti,j,k,l,ge;
chara[50][10],c[10],bb;
char*p,*p1;
fp1=fopen("D:
\\out.dat","w");
bb=fgetc(fp);j=0;
rewind(fp);
i=1;
for(j=0;j<=9;j++)
{
a[i][j]=fgetc(fp);
if(a[i][j]<'a'||a[i][j]>'z')
{a[i][j]='\0';i=i+1;j=-1;}
if(feof(fp)!
=0)break;
}
rewind(fp1);
for(l=0;l<=i-3;l++)
{for(k=i-l-1;k>=2;k--)
{
p=a[k-1];
p1=a[k];
if(strcmp(a[k-1],a[k])<0)
{strcpy(c,a[k-1]);
strcpy(a[k-1],a[k]);
strcpy(a[k],c);
}
}
}
ge=0;
fprintf(fp1,"\\按首个字母大小排列\\");
fprintf(fp1,"单词名(个数):
");
for(k=1;k<=i-2;k++)
{ge=0;
for(l=1;l<=i-1;l++){if(strcmp(a[k],a[l])==0)ge++;}
fprintf(fp1,"%s(%d)",&a[k][0],ge);
}
fclose(fp1);
}
五、个人总结
通过这几天的C语言程序设计,使我对C语言编程有了更深刻的了解,也认识了自己在C语言方面的不足,而且通过这次C语言学习也给了我很大的帮助。
虽然时间只有一周,但我知道了很多以前不知道的编程知识,加深了对C语言编程的了解。
虽然大一时学了C语言,但只是学了些程序的片段,并没有完完整整地编写一段应用程序,通过这次C语言课设,让我们能够自己写出一段完整的程序,是很大程度上的进步,这对今后的学习都有很大的帮助。
六、参考文献
1谭浩强.C程序设计.北京:
清华大学出版社,2005
2刘成等.C语言程序设计实验指导与习题集.北京:
中国铁道出版社,2006
七、源程序
#include
#include
#include
voidmenu()/*功能菜单*/
{
printf("\n**************WELCOME****************\n\n");
printf("1------------------------------打开文档(chapter.dat).\n\n");
printf("2---------------------------------------------------------查询.\n\n");
printf("3---------------------------------------------------显示全文.\n\n");
printf("4---------------------------------------------------------排序.\n\n");
printf("5---------------------------------------------------------退出.\n\n");
printf("*********************END********************\n");
}
voidfind(FILE*fp)/*查询函数*/
{
FILE*fp;
inti,j,m=0,n,t=0;
charwant[10],now[40],b[10];
printf("Pleaseenterthewordyouwant\n");
scanf("%s",want);
if((fp=fopen("D:
\\chapter.dat","a"))==NULL)
{
printf("cannotopenthisfile\n");
exit(0);
}
fread(now,sizeof(now),1,fp);
for(i=0;now[i]!
='\0';i++)
if(now[i]==want[0])
{
n=i;
for(j=0;j<=m;j++)
b[j]=now[n++];
}
if(strcmp(want,b)!
=0)
t++;
printf("thequatityofthewordsis%d",t);
return;
}
voidpaixu(FILE*fp)/*排序函数*/
{FILE*fp1;
inti,j,k,l,ge;
chara[50][10],c[10],bb;
char*p,*p1;
fp1=fopen("D:
\\out.dat","w");
bb=fgetc(fp);j=0;
rewind(fp);
i=1;
for(j=0;j<=9;j++)
{
a[i][j]=fgetc(fp);
if(a[i][j]<'a'||a[i][j]>'z')
{a[i][j]='\0';i=i+1;j=-1;}
if(feof(fp)!
=0)break;
}
rewind(fp1);
for(l=0;l<=i-3;l++)
{for(k=i-l-1;k>=2;k--)
{
p=a[k-1];
p1=a[k];
if(strcmp(a[k-1],a[k])<0)
{strcpy(c,a[k-1]);
strcpy(a[k-1],a[k]);
strcpy(a[k],c);
}
}
}
ge=0;
fprintf(fp1,"\\按首个字母大小排列\\");
fprintf(fp1,"单词名(个数):
");
for(k=1;k<=i-2;k++)
{ge=0;
for(l=1;l<=i-1;l++){if(strcmp(a[k],a[l])==0)ge++;}
fprintf(fp1,"%s(%d)",&a[k][0],ge);
}
fclose(fp1);
}
voidmain()/*主函数*/
{FILE*fp;
inta,word=0,num,i;
charch;
printf("\n请先建立D:
\\chapter.dat文档.\n然后按回车,进入后按提示进行操作.\n");
scanf("%c",&ch);
menu();/*调用提示函数*/
for(i=0;i<2;)/*单词判断*/
{
printf("请输入命令:
");
scanf("%d",&a);/*输入选项*/
switch(a)/*判断选项*/
{
case1:
if((fp=fopen("D:
\\chapter.dat","r"))==NULL)
printf("error!
请检查chapter.dat是否存在!
\n");
else
{
printf("OPEN\n");
}
break;
case2:
find(fp);break;/*查找单词*/
case3:
show(fp);break;/*显示全文*/
case4:
paixu(fp);break;
case5:
exit(0);break;
default:
printf("error:
");
}
if(a==5)
break;
}
fclose(fp);
}