附件二116755043.doc【学生用】西北农林科技大学信息工程学院数据结构与C语言综合训练实习报告题目:文本编辑器学号2011013228姓名马跃专业班级电子商务112指导教师景旭实践日期2010年7月5日-7月16日目录一、综合训练目的与要求 (1)二、综合训练任务 (1)三、总体设计 (1)四、详细设计说明 (2)五、调试与测试 (9)六、实习日志 (14)七、实习总结 (15)八、附录:核心代码清单 (15)一、综合训练目的与要求正文本综合训练是计算机科学与技术、信息管理与信息系统、软件工程专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》、《数据结构》课程后进行的一次全面的综合练习。
本课综合训练的目的和任务:1 巩固和加深学生对C语言、数据结构课程的基本知识的理解和掌握2 掌握C语言编程和程序调试的基本技能3利用C语言进行基本的软件设计4 掌握书写程序设计说明文档的能力5提高运用C语言、数据结构解决实际问题的能力二、综合训练任务本综合训练是计算机科学与技术、信息管理与信息系统、软件工程专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》、《数据结构》课程后进行的一次全面的综合练习。
本课综合训练的目的和任务:1巩固和加深学生对C语言、数据结构课程的基本知识的理解和掌握2掌握C语言编程和程序调试的基本技能3利用C语言进行基本的软件设计4掌握书写程序设计说明文档的能力5提高运用C语言、数据结构解决实际问题的能力三、总体设计1.设计题目------文本编辑系统2.已知技术参数和设计要求1分别统计出其中英文字母数和空格数及整篇文章总字数;2统计某一字符串在文章中出现的次数,并输出该次数;(采用模式匹配算法)3删除某一子串,并将后面的字符前移;4实现某一个字符的替换;5实现某一个字符串的替换;四、详细设计说明 1. 程序框架图1 简单的文本编辑器主框架**************************************************** **** 欢迎使用简单的文本编辑器 **** **************************************************** **** 主菜单 **** **************************************************** **** 1、输入文本内容 **** **** 2、显示当前文本内容 **** **** 3、文本内容统计菜单 **** **** 4、文本内容处理菜单 **** **** 5、关于 **** **** 6、退出本系统 **** **************************************************** **** 注:第一次使用本系统时请选择1号功能 **** ****************************************************判断1 2 3 4 5 6文本内容的输入,CreatWord(),将文本内容输入到已申请的存储空间中显示函数, List,将当前文本中内容显示出来文章内容统计菜单, CountWord(),以菜单形式显示给用户,对文章的内容进行各种方式的统计文章内容处理菜单,Bmenu(),这部分为一子菜单,使用了包括Search 、Delete Insert 等多个函数,对文章内容进行处理一个类似与作者信息的代码,AboutWor d(),显示作者信息退出系统两个子菜单:如选择上图中功能3,则有:图2 简单的文本编辑器----文本内容统计菜单********************************************** **** 文章内容统计菜单 **** ********************************************* **** 1、文章中大写字母的个数 **** **** 2、文章中小写字母的个数 **** **** 3、文章中数字的个数 **** **** 4、文章中标点符号的个数 **** **** 5、文章中空格的个数 **** **** 6、文章中所有字数 **** **** 7、退出返回主菜单 **** **** 8、直接退出本系统 **** *********************************************判断统计文本中大写字母个数1 统计文本中小写字母个数2 统计文本中数字的个数3 统计文本中标点符号的个数4 统计文本中空格的个数5 统计文本所有字数6 返回到主菜单7 直接退出系统8如选择功能4,则有:图3 简单的文本编辑器-----文本内容处理菜单2. 模块功能说明1. 主要函数组成1.Hollow() 标题函数主菜单函数,其结果为图1所显示部分,将1、2、3、4、8、9等函数合。
2. Edit() 文本输入函数,实现上图1菜单功能1,对文本的内容进行输入; 3. List() 当前文本内容输出函数,实现上图1菜单功能2以及图3中功当 4.前存储在链表中的文本内容输出;********************************************** **** 文章内容处理菜单 **** ********************************************* **** 1、查找文章中的字符或者字符串 **** **** 2、删除文章中的字符或者字符串 **** **** 3、向文章中插入字符或者字符串 **** **** 4、复制字符或者字符串 **** **** 5、修改行内容 **** **** 6、替换字符或者字符串 **** **** 7、返回主菜单 ****判断1 2 3 4 5 6使用子函数 Search (),对存储在链表中的文本进行字符或者字符串查找使用子函数 Delete (),对存储在链表中文本进行字符或者字符串的删除使用子函数 Insert (),对存储在链表中的文本进行字符或者字符串的插入使用函数Copy () 复制字符或者字符串使用函数Modify() 修改行内容使用函数Replace() 替换字符或者字符串5.CountWord() 文章内容统计函数,实现上图1菜单功能3,对存储在链表中进行统计,包括对文本内容中的大写字母、小写字母、数字、标点符号、空格以及所字6.Replace() 文章内容替换函数,实现上图3菜单功能替换部分7.Search() 文章内容查找函数,实现上图3菜单功能1中查找部分8.Copy() 文章内容复制函数,实现上图3菜单复制部分9.Delete() 文章内容删除函数,实现上图3菜单功能2中删除部分10.Save() 文章内容保存函数,实现上图3菜单保存部分11.Insert() 文章内容插入函数,实现上图3菜单功能3中插入部分12.Bmenu() 第二子菜单函数,实现上图1菜单功能4,图3是此函数实现的结果它将5、6、7各子函数集合在此函数中13.About() 显示作者信息的函数,实现上图1菜单功能514.main()主函数2.其余函数详解1.Status StrAssign(HString &T,char *chars) 生成一个其值等于串常量chars的串T2.Status StrCopy(HString &T,HString S)初始条件: 串S存在。
操作结果: 由串S复制得串T3.Status StrEmpty(HString S) 初始条件: 串S存在。
操作结果: 若S为空串,则返回TRUE,否则返回FALSE4.int StrCompare(HString S,HString T) 若S>T,则返回值>0;若S=T,则返回值=0;若S<T,则返回值<05.int StrLength(HString S) 返回S的元素个数,称为串的长度6.Status ClearString(HString &S)将S清为空串7.Status Concat(HString &T,HString S1,HString S2)用T返回由S1和S2联接而成的新串8.Status SubString(HString &Sub, HString S,int pos,int len) 用Sub返回串S的第pos个字符起长度为len的子串。
其中,1≤pos≤StrLength(S)且0≤len≤StrLength(S)-pos+19.void InitString(HString &T)10.int Index(HString S,HString T,int pos)算法4.1 T为非空串。
若主串S中第pos个字符之后存在与T相等的子串,则返回第一个这样的子串在S中的位置,否则返回011.Status StrInsert(HString &S,int pos,HString T) 1≤pos≤StrLength(S)+1。
在串S的第pos个字符之前插入串T12.Status StrDelete(HString &S,int pos,int len)从串S中删除第pos个字符起长度为len的子串13.Status Replace(HString &S,HString T,HString V)初始条件: 串S,T和V存在,T是非空串(此函数与串的存储结构无关)操作结果: 用V替换主串S中出现的所有与T相等的不重叠的子串14.void DestroyString() 堆分配类型的字符串无法销毁15.void StrPrint(HString T) 输出T字符串。
3.程序函数细节1Creat()文本内容输入函数1.1.1具体创建过程如下:1.2定义文件变量*sfp: FILE*sfp;1.3打开文件:if((sfp=fopen("d://0.txt","a+"))==NULL)1.4{1.4.1printf("打开文件失败");1.4.2exit(0);}1.5使用循环操作进行输入操作:while(c!=EOF)1.6{fputc(c,sfp);c=getchar();}1.7fclose(sfp);2List()当前文本输出函数2.1.1本子函数功能为将当前存储在链表中的文本信息输出在屏幕上,具体伪码算法如下:2.2定义文本行数变量n,每行字符数i:int i,j;2.3利用循环输出信息:2.3.1for(i=0;i<n;i++)2.3.2{2.3.2.1printf("%d: ",i+1);2.3.2.2StrPrint(T[i]);2.3.3}2.3.4getchar();文本输出函数到此结束。