沈阳航空航天大学
课 程 设 计 报 告
课程设计名称: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 提取保存模块流程图
调试分析
(1)问题1
问题描述:字符串无法输入到数组中
问题分析:由于未将数组定义为字符串数组,导致类型不同无法输入。
解决方法:将数组定义为字符串数组后,使用fgetc循环读入每一行的字母输到字符串数组中。
(2)问题2
问题描述:无法将提取出的电子邮件地址保存到另一个文件中
问题分析:由于使用了goto语句,没有执行关闭文件这一语句就返回继续判断下一行是否为电子邮件地址,没有及时保存。
解决方法:先执行关闭语句,然后再执行goto语句继续判断下一行是否为电子邮件地址。
(3)问题3
问题描述:第二次保存时的行号无法正确写入文件中,在第一次基础上累加了。
问题分析:定义的行号计数的整型变量为全局变量,导致程序第二次运行继续累加。
解决方法:将全局变量改变为局域变量,并且在判断每一行结束时都进行加加。
(4)问题4
问题描述:分析文件的函数结束不能继续进行提取函数中对文件中字符串的提取
问题分析:不能重复使用分析函数中的文件指针去进行提取函数的操作,导致程序无法执行。
解决方法:在提取函数中再次进行“输入你要打开的文件名”,然后进行提取。
使用说明
运行操作及结果:
开始运行程序时,在屏幕上将出现如图4.1所示:
图4.1菜单图
若选择1,在屏幕上将出现如图4.2所示
图4.2执行1操作图
若继续,在屏幕上将出现如图4.3所示:
图4.3 提取出的邮件地址图
若继续,在屏幕上将出现如图4.4所示页面:
图4.6 菜单图
若选择2,在屏幕上将出现如图4.5所示页面:
图4.5