邮件地址提取程序C语言课程设计.docx
《邮件地址提取程序C语言课程设计.docx》由会员分享,可在线阅读,更多相关《邮件地址提取程序C语言课程设计.docx(16页珍藏版)》请在冰豆网上搜索。
邮件地址提取程序C语言课程设计
沈阳航空航天大学
课程设计报告
课程设计名称:
C语言课程设计
课程设计题目:
邮件地址提取程序
院(系):
计算机学院
专业:
计算机科学与技术
班级:
学号:
姓名:
指导教师:
完成日期:
2011年03月18日
目录
第1章概要设计2
1.1题目的内容与要求2
1.2总体结构2
第2章详细设计3
2.1主模块3
2.2分析模块4
2.3提取保存模块4
第3章调试分析7
第4章使用说明8
参考文献10
附录(程序清单)11
第1章概要设计
1.1题目的内容与要求
内容:
设计一个简单的程序,把指定HTML文件中的电子邮件地址提取出来,并保存到文件中。
要求:
1)读入一个HTML文件,分析文件格式,把文件中的电子邮件地址提取出来,并保存到指定文件中;
2)符合user@格式的字符串为电子邮件地址,@和.是必不可少的,要注意二者的位置;
3)保存时首行为HTML文件名,随后为原电子邮件地址在HTML文件中的行号,然后是邮件地址;
4)采用VC环境进行调试运行。
1.2总体结构
本程序主要分为三个模块:
分析模块、提取保存模块、主模块。
分析模块是进行判断文件是否存在、文件格式以及文件是否为空,提取保存模块是将文件中的电子邮件地址进行提取并保存到指定文件中,主模块为使用系统菜单调用前两个模块来运行程序。
功能模块图如图1.1所示
:
图1.1功能模块图
第2章详细设计
2.1主模块
控制整个程序的运行,将菜单操作用于一个循环中,用户需根据提示选择要进行的操作,用户输入1后进行调用分析模块和提取保存模块,输入2后推出循环并结束程序运行,若输入其他字符将提示用户输入有误并请用户重新输入。
流程如图2.1所示。
图2.1主模块流程图
2.2分析模块
需要用户输入要打开的文本文件名,系统将会判断文件是否存在并判断文件中是否为空,如果文件存在并不为空将继续运行程序,否则系统将提示“输入有误,请重新输入”。
流程图如2.2所示:
图2.2显示模块流程图
2.3提取保存模块
系统将提示用户再次输入要打开的文本文件名,然后提示用户输入要保存电子邮件地址的文件名,然后系统将会把每一行中的字符串输入到字符串数组中,系统将先判断这个字符串数组中是否有@,如果有@将继续判断整个字符串数组是否由数字、小写字母、@和.组成。
如果是由这些组成将继续判断@前是否是数字、小写字母并且判断.是在@后面且二者不相邻。
以上都满足时系统将会把用户打开的文件名、邮件地址在原文件中的行号以及这个满足条件的字符串数组保存到用户输入的指定的文件中。
若以上的判断条件不能都满足时系统将自动进行对下一行的字符串进行判断,直到文件为空时将会停止判断并关闭用户所打开的文件且此模块的功能也结束了。
流程图如2.3所示:
图2.3提取保存模块流程图
第3章调试分析
(1)问题1
问题描述:
字符串无法输入到数组中
问题分析:
由于未将数组定义为字符串数组,导致类型不同无法输入。
解决方法:
将数组定义为字符串数组后,使用fgetc循环读入每一行的字母输到字符串数组中。
(2)问题2
问题描述:
无法将提取出的电子邮件地址保存到另一个文件中
问题分析:
由于使用了goto语句,没有执行关闭文件这一语句就返回继续判断下一行是否为电子邮件地址,没有及时保存。
解决方法:
先执行关闭语句,然后再执行goto语句继续判断下一行是否为电子邮件地址。
(3)问题3
问题描述:
第二次保存时的行号无法正确写入文件中,在第一次基础上累加了。
问题分析:
定义的行号计数的整型变量为全局变量,导致程序第二次运行继续累加。
解决方法:
将全局变量改变为局域变量,并且在判断每一行结束时都进行加加。
(4)问题4
问题描述:
分析文件的函数结束不能继续进行提取函数中对文件中字符串的提取
问题分析:
不能重复使用分析函数中的文件指针去进行提取函数的操作,导致程序无法执行。
解决方法:
在提取函数中再次进行“输入你要打开的文件名”,然后进行提取。
第4章使用说明
运行操作及结果:
1.开始运行程序时,在屏幕上将出现如图4.1所示:
图4.1菜单图
2.若选择1,在屏幕上将出现如图4.2所示
图4.2执行1操作图
3.若继续,在屏幕上将出现如图4.3所示:
图4.3提取出的邮件地址图
4.若继续,在屏幕上将出现如图4.4所示页面:
图4.6菜单图
5.若选择2,在屏幕上将出现如图4.5所示页面:
图4.5执行2操作图
参考文献
[1]张长海.C语言程设计[M].北京:
高等教育出版社,2006
[2]谭浩强.C语言程序设计[M].北京:
清华大学出版社,2005
[3]王敬华林萍张清国.C语言程序设计教程[M].北京:
清华大学出版社,2005
[4]冼镜光.C语言名题精选百则技巧篇[M].北京:
机械工业出版社,2005
[5]武雅丽王永玲解亚丽.C语言程设计[M].北京:
清华大学出版社,2007
附录(程序清单)
#include
#include
voidfenxi()
{
FILE*fa;
chara[50];
jx:
printf("\n\t\t请输入您要打开的文件:
");
scanf("%s",a);
fa=fopen(a,"r");
if(fa==NULL)
{
printf("\t\t\t此文件不存在");
gotojx;
}
getchar();
}
voidtiqu()
{
FILE*fa,*fb;
charch;inti=0,j,k=0,l=1;
charstr[200]="",c[200]="",a[50],b[50];
printf("\t\t请再次输入您要打开的文件:
");
scanf("%s",a);
fa=fopen(a,"r");
printf("\n\t\t您要保存邮件地址的文件:
");
scanf("%s",b);
fb=fopen(b,"w");
if(fb==NULL)
{
printf("Thefilecannotopen");
exit(0);
}
printf("HTML文件名行号电子邮件地址\n");
fprintf(fb,"HTML文件名行号电子邮件地址\n");
while(!
feof(fa))
{
fh:
ch=fgetc(fa);
if(!
feof(fa))
{
str[i]=ch;
if(str[i]!
='\n')
i++;
else
break;
}
}
str[i]='\0';
for(j=i-1;j>0;j--)
{
for(;k
if(str[k]!
='@')
k++;
elsebreak;
if(str[k]!
='@')
{
i=k=0;
l++;
gotofh;
}
else
{for(j=0;j
{
if(str[j]>='a'&&str[j]<='z'||str[j]>='0'&&str[j]<='9'||str[j]=='@'||str[j]=='.')
c[j]=str[j];
else
{i=k=0;
l++;
gotofh;
}
}
c[j]='\0';
if(c[0]!
='@'&&c[i-4]=='.'&&c[i-1]=='m'&&c[i-2]=='o'&&c[i-3]=='c'&&c[i-5]!
='@'||c[i-1]=='n'&&c[i-2]=='c'&&c[i-3]=='.'&&c[i-4]=='m'&&c[i-5]=='o'&&c[i-6]=='c'&&c[i-7]=='.'&&c[i-8]!
='@'&&c[0]!
='@')
{
fputs(a,fb);
fprintf(fb,"");
printf("%s",a);
fprintf(fb,"%d",l);
printf("%d",l);
fputs(c,fb);
printf("%s\n",c);
fprintf(fb,"\n");
l++;
if(feof(fa))
{
gotoend;
}
else
i=k=0;
gotofh;
}
else
{
i=k=0;
l++;
gotofh;
}
}
}
end:
fclose(fb);
fclose(fa);
getchar();
}
voidmain()
{
charc;
while
(1)
{
to:
printf("\n\n\n\n\n\t\t\t\t电子邮件地址提取主菜单\t\t\t\t\n");
printf("\t\t****************************************************\n");
printf("\t\t\t------------输入1运行程序------\n");
printf("\t\t\t------------输入2退出程序------\n");
printf("\t\t****************************************************\n");
printf("\t\t请输入您要执行的操作:
");
go:
scanf("%c",&c);
switch(c)
{
case'1':
fenxi();tiqu();
getchar();
system("cls");
gototo;
case'2':
exit(0);
default:
printf("\t\t您输入有误,请重新输入:
");
scanf("%c",&c);
gotogo;
}
}
}
课程设计总结:
通过此次C语言课程设计,让我知道原来我们身边许多东西离我们并不遥远,有很多东西是我们是靠我们不断探索创造出来的。
我们生活的进步,是靠使用知识不断来改变的。
只有我们努力的学习科学文化知识,才能创造出高度文明的社会。
然而,以前并没有意识到这些,导致知识没有学习的十分扎实。
使得此次C语言课程设计遇到了一些麻烦,但是,在指导老师和同学的帮助下,此次课设完成了。
以前并没有做过这类东西,所以刚发下任务书时以为它很难,是不能完成的,但在随后的慢慢理解中发现其实并不是想像中的那么那么难。
只要自己努力的分析问题就会发现一些突破点,这样在入手去做就会简单一些。
上学期的学习中并没有编写过这么长的程序代码,也没有这么多的要求,通常做的都是一些简单程序,没有意识到自己有这么多的不足。
通过这次课程设计让我知道自己在哪些面还缺少很多知识,要进快的补上。
使自己的C语言知识增多,以后再遇到问题可以自己独立的解决。
这次得课设让我把上学期一不扎实的知识弄懂了,而且还复习了一遍上学期C语言课本,使我对一些代码有了新的认识,知道了它们的使用方法。
总之,这次课程设计给了我很大帮助,让我学到了一些新的东西,也体会到了如何独立完任务。
指导教师评语:
指导教师(签字):
年月日
课程设计成绩