文字查找 c语言 课程设计 报告.docx
《文字查找 c语言 课程设计 报告.docx》由会员分享,可在线阅读,更多相关《文字查找 c语言 课程设计 报告.docx(11页珍藏版)》请在冰豆网上搜索。
文字查找c语言课程设计报告
沈阳航空工业学院
课程设计
学号200604021108
班级6402104
姓名田帅
指导教师刘成
2007年9月16日
沈阳航空工业学院
课程设计任务书
院系:
电子工程系专业:
电子信息工程班级:
6402104
学号:
200604021108题目:
文字查找
一、课程设计时间
2007年9月10日至2007年9月14日,共计1周,20学时。
二、课程设计内容
用C语言编写软件完成以下任务:
在文本文件中查找用户所指定的英文单词,并确定此单词在文件中出现的次数。
用户应该先产生文本文件(文件名为myfile.txt),然后才可以进行单词查找。
三、课程设计要求
1.程序质量:
✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括“生成文件”、“输入单词并查找”、“显示文件全部内容”、“退出”4项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2.课程设计说明书:
课程结束后,上交课程设计说明书和源程序。
课程设计说明书的格式和内容参见提供的模板。
四、指导教师和学生签字
指导教师:
________学生签名:
________
五、成绩:
六、教师评语:
目录
一、需求分析1
二、程序流程图2
三、核心技术的实现说明及相应程序段6
四、个人总结12
五、参考文献12
六、源程序12
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为四个步骤,其中每一步骤对应一个函数,其的功能分别是:
生成源文件(creat),输入文件内容(input),输入单词并查找(search),显示原文(show)。
1、生成源文件其功能是在D盘中生成一个名为myfile.txt的文本文件;
2、输入文件功能是把原文输入到文本文件中;
3、输入单词并查找输入一个单词,并在已生成的文本文件中查找,确定单词出现的次数后输出;
4、显示原文把文本文件中的内容输出到屏幕上;
除上面的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
每次输入的文件都保存在d:
\\myfile.txt中,并且覆盖上一次输入的内容。
二、程序流程图
1、程序总体结构图
图1程序总体结构图
2、具体功能框图
(1)生成文件函数creat
图2生成文件函数
(2)输入文件内容函数input
图3输入文件内容函数
(3)单词查找函数search
图4单词查找函数
(4)显示全文函数show
图5显示全文函数
三、核心技术的实现说明及相应程序段
本程序主要由五个自定义函数和一个主函数组成,其中主函数调用菜单函数显示菜单,用switch结构的调用其他函数来实现要求的所有功能。
在这些函数当中,输入文件内容函数、单词查找函数和显示全文函数是程序中较为核心的部分,下面分别对其进行说明。
1、输入文件内容函数
输入文件函数,用只写的方式打开已经生成的d盘myfile.txt文件,根据提示,从键盘输入原文件的内容,以“#”结束。
说明:
每次输入的文本内容都回覆盖上一次输入的内容。
因此,myfile.txt文件中的内容为最后一次输入的文件内容为准。
具体程序如下:
voidinput()
{
FILE*fp;/*定义文件指针*/
charch,myfile;
if((fp=fopen("d:
\\myfile.txt","w"))==NULL)/*打开文件*/
{printf("cannotopenfile\n");/*错误提示*/
exit(0);}
printf("Pleaseinputthefile,endwith'#'\n");/*输入提示:
*/
ch=getchar();
ch=getchar();/*录入内容*/
while(ch!
='#')
{fputc(ch,fp);putchar(ch);/*循环输入到myfile.txt中*/
ch=getchar();
}
printf("\n");
fclose(fp);/*关闭文件*/
}
2、单词查找函数
该函数的核心内容是查找用户所指定的英文单词,并确定此单词在文件中出现的次数。
首先从键盘输入一个字符串,存在字符数组str中。
打开已经生成的d:
\\myfile.txt文件,用循环一次,读取一个字符的方式把文本文件中的字符一个一个的读入字符变量c中,并判断字符的ASCII码来确定字符是否为字母,是就循环输入到字符串b[j]中,直至c不为字母时,把字符串结束标志’\0’赋值给b[j],然后,用字符串比较函数strcmp()把字符串b和str比较,如果相同,scount做自增运算;如果不相同,则继续循环,直至遇到文件的结束标志后跳出循环,并输出scount的值,scount的值就是输入的单词str在myfile.txt中出现的次数。
具体程序如下:
voidsearch()
{
FILE*fp;
intflag,j=0,scount=0;/*定义变量*/
charb[30];/*定义字符数组用于存放文件中的单词*/
charc;
charstr[81];
printf("Pleaseentertheword:
");
scanf("%s",str);/*输入所需查找的单词*/
if((fp=fopen("d:
\\myfile.txt","rb"))==NULL)/*打开文件*/
{printf("Cannotopenthwfile!
");
return;
}
while((c=fgetc(fp))!
=EOF)/*循环读入文件中的字符*/
{
if((c>=65&&c<=90)||(c>=97&&c<=122))/*判断字符是否为字母的语句*/
{flag=0;
if(flag==0)
{
b[j]=c;/*把字母赋值到b中*/
j++;continue;}}
else
b[j]='\0';/*把字符串结束标志赋值给b[j]*/
if(strcmp(str,b)==0)/*字符串b和str进行比较*/
scount++;/*scount自增运算*/
j=0;/*j归零,用于下一次循环*/
flag=1;
}
printf("thereare%dwordsinthefile.",scount);/*输出scount的值*/
printf("\n");
}
3、显示全文内容函数
对于显示全文内容函数,采用while循环,把文件中的字符一个一个的依次输出。
具体程序段如下:
voidshow()
{
FILE*fp;
charch;
if((fp=fopen("d:
\\myfile.txt","r"))==NULL)/*打开文件*/
{printf("Cannotopenthefile!
\n");
exit(0);
}printf("***********************************************\n");
while((ch=fgetc(fp))!
=EOF)/*循环输出文件内容*/
printf("%c",ch);
printf("\n***********************************************\n");
fclose(fp);/*关闭文件*/
}
四、个人总结
在这一周的课程设计过程中,我了解了如何把我们在课堂上所学习的知识运用到实际中去。
虽然也遇到了不少的困难,在老师和同学的帮助下解决了。
在这次课程设计的过程中,我也学习到了很多新的知识。
对于这次的课程设计的任务,大致完成了,也基本都实现了任务书中的要求。
五、参考文献
1谭浩强.C程序设计.北京:
清华大学出版社,2005
2刘成等.C语言程序设计实验指导与习题集.北京:
中国铁道出版社,2006
六、源程序
#include
#include
#include
voidmenu()/*菜单函数*/
{printf("**************************search**************************");
printf("\n1creatthefile");
printf("\n2inputthefile");
printf("\n3inputthewordandsearch");
printf("\n4showall");
printf("\n5exit");
}
intcreat()/*生成文件函数*/
{
FILE*fp;
charch;
if((fp=fopen("d:
\\myfile.txt","w"))==NULL)/*d盘建立myfile.txt的文本文档*/
{
printf("Cannotopenthefile!
\n");/*错误提示*/
exit(0);
}
printf("\n");
while((ch=getchar())!
='\n')
fputc(ch,fp);
}
voidinput()/*输入文件内容函数*/
{
FILE*fp;
charch,myfile;
if((fp=fopen("d:
\\myfile.txt","w"))==NULL)/*打开文件*/
{printf("cannotopenfile\n");
exit(0);}
printf("Pleaseinputthefile,endwith'#'\n");/*输入提示语句,输入内容以”#”结束*/
ch=getchar();
ch=getchar();
while(ch!
='#')
{fputc(ch,fp);putchar(ch);/*循环录入*/
ch=getchar();
}
printf("\n");
fclose(fp);/*关闭文件*/
}
voidsearch()/*单词查找函数*/
{
FILE*fp;
intflag,j=0,scount=0;/*定义变量*/
charb[30];/*定义字符数组用于存放文件中的单词*/
charc;
charstr[81];
printf("Pleaseentertheword:
");
scanf("%s",str);/*输入所需查找的单词*/
if((fp=fopen("d:
\\myfile.txt","rb"))==NULL)/*打开文件*/
{printf("Cannotopenthwfile!
");
return;
}
while((c=fgetc(fp))!
=EOF)/*循环读入文件中的字符*/
{
if((c>=65&&c<=90)||(c>=97&&c<=122))/*判断字符是否为字母的语句*/
{flag=0;
if(flag==0)
{
b[j]=c;/*把字母赋值到b中*/
j++;continue;}}
else
b[j]='\0';/*把字符串结束标志赋值给b[j]*/
if(strcmp(str,b)==0)/*字符串b和str进行比较*/
scount++;/*scount自增运算*/
j=0;/*j归零,用于下一次循环*/
flag=1;
}
printf("thereare%dwordsinthefile.",scount);/*输出scount的值*/
printf("\n");
}
voidshow()
{
FILE*fp;
charch;
if((fp=fopen("d:
\\myfile.txt","r"))==NULL)/*打开文件*/
{printf("Cannotopenthefile!
\n");
exit(0);
}printf("***********************************************\n");
while((ch=fgetc(fp))!
=EOF)/*循环输出文件内容*/
printf("%c",ch);
printf("\n***********************************************\n");
fclose(fp);/*关闭文件*/
}
voidmain()
{
intn;
while
(1)/*无限循环菜单*/
{
menu();/*调用菜单函数*/
printf("\npleasechoosethenumber,pressenter:
");
scanf("%d",&n);
switch(n)
{case1:
creat();break;/*调用文件生成函数*/
case2:
input();break;/*调用输入文件内容函数*/
case3:
search();break;/*调用单词查找函数*/
case4:
show();break;/*调用显示全文内容函数*/
case5:
exit(0);/*退出,跳出循环*/
default:
printf("error!
\n");
}
}
}