简单行编辑器 数据结构 课程设计

合集下载

简单的行编辑器课程设计

简单的行编辑器课程设计

程序设计课程设计报告二00八年七月一号目录1……………………………………………设计目的2…………………………………………设计题目和要求3…………………………………………总体设计4…………………………………………详细设计5…………………………………………源程序清单和执行结果6…………………………………………总结1 设计目的设计一个简单的行编辑器,了解行编辑器的应用2 设计题目和要求题目:简单的行编辑器要求:1)设计一个简单的行编辑器,每行以回车结束2)数据以文件形式储存3)编辑器具有查找修改删除数据的功能3总体设计简单的行编辑器删除一行删除一行显示一行显示一行文件存盘文件存盘装入文件装入文件退出4 详细设计1)结构体的应用struct line{char text[81];int num; /*行号*/struct line *next; /*指向下一个输入项目的指针*/struct line *prior; /*指向前一个项目的指针*/};struct line *start; /*指向表中第一个项目的指针*/struct line *last; /*指向表中作后一个项目的指针*/struct line *find(int),*dls_store(struct line *);注:在结构体中分别声明项目指针及项目中的指针变量2)函数声明void patchup(int,int),delete_text(),list(),save(char *),load(char *);menu_select();enter(int linenum);注:在结构体外分别对输入、删除、显示等函数进行声明3)主函数和switch语句void main(int argc,char *argv[]){char s[80],choice,fname[80];// struct line *info;int linenum=1;start=NULL;last=NULL;if(argc==2) load(argv[1]);/*装入命令行上的文件*/do{choice=menu_select( );switch(choice){case 1:printf("\t行号:");gets(s);linenum=atoi(s);enter(linenum);break;case 2:delete_text();break;case 3:list();break;case 4:printf("\t文件名:");gets(fname);save(fname);break;case 5:printf("\t文件名:");gets(fname);load(fname);break;case 6:exit(0);}}while(1);}注:通过主函数分别对相应函数进行调用,利用switch选择语句来执行语句4)菜单函数menu_select(){char s[80];int c;printf("\t\t1.输入\n");printf("\t\t2.删除一行\n");printf("\t\t3.显示一行\n");printf("\t\t4.文件存盘\n");printf("\t\t5.装入文件\n");printf("\t\t6.退出\n");do{printf("\n\n\t\t请按数字选择:");gets(s);c=atoi(s);}while(c<0||c>6);return(c);}注:定义菜单显示内容,根据菜单要求运用程序5源程序和执行结果源程序:#include<iostream>#include "stdio.h"#include "stdlib.h"struct line{char text[81];int num; /*行号*/struct line *next; /*指向下一个输入项目的指针*/struct line *prior; /*指向前一个项目的指针*/};struct line *start; /*指向表中第一个项目的指针*/struct line *last; /*指向表中作后一个项目的指针*/struct line *find(int),*dls_store(struct line *);void patchup(int,int),delete_text(),list(),save(char *),load(char *); menu_select();enter(int linenum);void main(int argc,char *argv[]){char s[80],choice,fname[80];// struct line *info;int linenum=1;start=NULL;last=NULL;if(argc==2) load(argv[1]);/*装入命令行上的文件*/do{choice=menu_select( );switch(choice){case 1:printf("\t行号:");gets(s);linenum=atoi(s);enter(linenum);break;case 2:delete_text();break;case 3:list();break;case 4:printf("\t文件名:");gets(fname);save(fname);break;case 5:printf("\t文件名:");gets(fname);load(fname);break;case 6:exit(0);}}while(1);}/* 显示菜单,供用户选择*/menu_select(){char s[80];int c;printf("\t\t1.输入\n");printf("\t\t2.删除一行\n");printf("\t\t3.显示一行\n");printf("\t\t4.文件存盘\n");printf("\t\t5.装入文件\n");printf("\t\t6.退出\n");do{printf("\n\n\t\t请按数字选择:");gets(s);c=atoi(s);}while(c<0||c>6);return(c);}/*将文本插在指定行端部*/enter(int linenum){struct line *info;//char t[81];for(;;){/* */info=(struct line *)malloc(sizeof(struct line));if(!info){printf("\t! 内存不够!\n");return(NULL);}printf("%d:",linenum);gets(info->text);info->num=linenum;if(*info->text){if(find(linenum)) patchup(linenum,1);if(*info->text) start=dls_store(info);}else break;linenum++;}return(linenum);}/*当文本内容插在文件中间时其下面的内容的行号必须增加1,而*/ /*删除时,被删除的文本后面的行号必须减1 */void patchup(int n,int incr){struct line *i;i=find(n);while(i){i->num=i->num+incr;i=i->next;}}/*按行号排序后插入*/struct line *dls_store(struct line *i){struct line *old,*p;if(last==NULL){i->next=NULL;i->prior=NULL;last=i;return(i);}p=start;old=NULL;while(p){if(p->num){old=p;p=p->next;}else{if(p->prior){p->prior->next=i;i->next=p;p->prior=i;return start;}i->next=p;i->prior=NULL;p->prior=i;return(i);}}old->next=i;i->next=NULL;i->prior=old;last=i;return start;}/*删除一行*/void delete_text(){struct line *info;char s[80];int linenum;printf("\t行号:");gets(s);linenum=atoi(s);info=find(linenum);if(info){if(start==info){start=info->next;if(start) start->prior=NULL;else last=NULL;}else{info->prior->next=info->next;if(info!=last)info->next->prior=info->prior;else last=info->prior;}free(info);patchup(linenum+1,-1);}}/*查找一行文本*/struct line *find(int linenum){struct line *info;info=start;while(info){if(linenum==info->num) return(info);info=info->next;}return(NULL);}/*显示文本*/void list(){struct line *info;info=start;while(info){printf("%d:%s\n",info->num,info->text);info=info->next;}printf("\n\n");}/*存文件*/void save(char *fname){struct line *info;char *p;FILE *fp;if((fp=fopen("text.txt","w"))==NULL){printf("\t文件打不开!\n");exit(0);}printf("\t正在存入文件:\n");info=start;while(info){p=info->text;while(*p) putc(*p++,fp);//putc('\r',fp);putc('\n',fp);info=info->next;}fclose(fp);}/*装入文件*/void load(char *fname){struct line *info,*temp;char *p;FILE *fp;//int t,size,inct;int size,inct;if((fp=fopen("text.txt","r"))==NULL){printf("\t文件打不开!\n");exit(0);}while(start){temp=start;start=start->next;free(temp);}printf("\n\t正装入文件!\n");size=sizeof(struct line);start=(struct line*)malloc(size);if(!start){printf("\n\t内存已经用完!");return;}info=start;p=info->text;inct=1;while((*p=getc(fp))!=EOF){p++;while((*p=getc(fp))!='\n') p++;//getc(fp); /*丢掉'\n' */*p='\0';info->num=inct++;info->next=(struct line*)malloc(size);if(!info->next){printf("\n\t内存已经用完!");return;}info->prior=temp;temp=info;info=info->next;p=info->text;}temp->next=NULL;last=temp;free(info);start->prior=NULL;fclose(fp);}执行结果:6 总结我们所做的每一道程序设计题基本涵盖了我们一学年的课程知识,而我侧有些力不从心,很多地方生疏不知,大部分程序借鉴他人,这一点我还需改进,不过通过此次课程设计,我对程序设计这门课程又有了新的理解。

C++课程设计简单行编辑器

C++课程设计简单行编辑器

目录第一章课程设计的目的和要求 (1)1.1 课程设计的目的 (1)1.2 课程设计的要求 (1)第二章课程设计任务内容 (3)2.1 课程设计要求 (3)2.2 功能需求 (3)2.3 功能模块图 (4)第三章详细设计说明 (5)3.1 程序设计思路 (5)3.2 函数说明 (5)3.2.1 main()主函数 (5)3.2.2 menu_select菜单选择函数 (7)3.2.3 enter输入函数 (8)3.2.4 delete_text删除函数 (9)3.2.5 find函数 (10)3.2.6 list函数 (11)3.2.7 save函数 (12)3.2.8 load函数 (12)3.3 调试 (14)第四章软件使用说明 (15)第五章课程设计心得与体会 (18)附录1 参考文献 (19)附录2 程序清单 (20)简单的行编辑器第一章课程设计的目的和要求此章节详细介绍了课程设计的目的和要求。

1.1 课程设计的目的课程设计的目的是通过实践环节的训练,使学生进一步加深对C语言知识的综合理解,提高C语言应用技能,并结合专业特点培养学生计算机程序的应用能力。

结合计算机科学专业的特点是培养学生阅读本专业相关领域C语言程序的能力,分析并掌握程序的设计思想和方法。

通过课程设计,培养学生查阅C语言相关资料能力、分析和阅读程序的能力,应用C语言基本知识设计小型应用程序的能力。

其中,需要掌握C语言中的结构体,指针,函数(系统函数,自定义函数),文件操作等知识,通过对系统的分析和设计,进一步巩固C语言的学习,以提高对开发环境的进一步认识和综合编程能力。

在学习课程设计之前,要掌握好程序设计的基本概念、方法和思维方式。

开发程序的目的是为了解决问题,而解决问题首先需要找出合适的解决方案,然后用合适的语言把方案描述出来。

显然,该过程的关键是分析问题并找出解决方案,而不是描述方案。

因此,程序设计的首要目标,是培养解决问题的基本思维方式,其次才是语言知识。

简单的行编辑器

简单的行编辑器

计算机工程学院课程设计报告设计名称:数据结构课程设计选题名称:简单的行编辑器姓名:学号:专业班级:软件工程软件102 系(院):计算机工程学院设计时间:设计地点:软件工程实验室、教室<2>用户可从键盘上输入字符,以*结尾表示输入字符结束,界面上会输出用户输入的字符,以及行编辑的功能选择项。

(如输入如下字符beijing huan ying ni *)<3>输入选择1,则依次输出:字母个数:17数字个数:0空格个数:4字符总数:21是否继续使用(Y/N):<4.1>选择Y,则出现行编辑器的功能选择,<4.2>如果第三步结束选择N,则输出**********谢谢使用**********<,再次需要进行行编辑器功能选择:输入选择2;则输出“请输入要统计的某一字符”提示用户输入要查找的字符假如输入i;则输出:i在文章中出现次数为:4;是否继续使用(Y/N)<**********谢谢使用**********<则输出行编辑器的功能选择项目;选择3;输出“请输入要删除子串的起始位置和长度:”提示用户输入,如果输入0 7输出“删除某一子串后:”huan ying ni**********谢谢使用**********<5>其他字符测试;例如用户输入:beijing BEIJING 520*输出字母个数:14数字个数:3空格个数:2字符总数:19统计字符i出现次数为2;删除从8号位器长度为7的字串后输出字符为beijing 520五用户手册1.运行程序,首先出现主界面。

主界面首行显示“欢迎使用文本编辑器”,输出提示信息“请输入要编辑的字符”,然后界面显示用户输入的字符。

然后主界面文本编辑器的功能菜单,功能菜单包括三个选项:选项一:统计字数,选择该项可进字数统计,当用户输入字符结束后,选择功能选项一,主界面回自动统计各字符数,然后输出。

2;选项二:统计出现次数,选择该项可进行对文章中某一字符出现字数的统计,当用户选择功能二时,主界面回输出提示信息,提示用户输入要统计的字符,用户可从键盘任意输入字符,以回车键结束。

简单行编辑课程设计

简单行编辑课程设计

简单行编辑课程设计一、教学目标本课程的目标是让学生掌握简单文本编辑的基本知识和技能,培养他们独立进行文本编辑的能力,并提高他们对计算机操作的兴趣和信心。

具体目标如下:知识目标:使学生了解文本编辑的基本概念、原理和方法,包括文本的插入、删除、复制、粘贴等功能;掌握常用的文本编辑软件的使用方法,如Notepad、Word等。

技能目标:培养学生能够熟练运用文本编辑软件进行文本的编辑和排版,能够运用基本的查找和替换功能,掌握简单的代码编写和运行。

情感态度价值观目标:通过文本编辑的学习,使学生感受到计算机技术的实用性和趣味性,增强他们对计算机技术的热爱和探索精神,培养他们独立思考和解决问题的能力。

二、教学内容本课程的教学内容主要包括以下几个部分:1.文本编辑的基本概念和原理:介绍文本编辑的概念、原理和方法,使学生了解文本编辑在计算机应用中的重要性。

2.文本编辑软件的使用:详细讲解常用的文本编辑软件如Notepad、Word的使用方法,包括文本的插入、删除、复制、粘贴等功能。

3.文本的排版和格式设置:介绍如何进行文本的排版和格式设置,使学生能够熟练掌握文本编辑软件的排版功能。

4.代码编写和运行:讲解简单的代码编写和运行,使学生了解计算机编程的基本过程,培养他们的编程思维。

三、教学方法为了提高教学效果,我们将采用多种教学方法相结合的方式进行教学:1.讲授法:通过讲解文本编辑的基本概念、原理和方法,使学生了解文本编辑的基础知识。

2.案例分析法:通过分析实际案例,使学生掌握文本编辑软件的使用方法和技巧。

3.实验法:让学生亲自动手进行文本编辑的实践,培养他们独立进行文本编辑的能力。

4.讨论法:学生进行小组讨论,分享学习心得和经验,提高他们的合作能力和沟通能力。

四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选用适合学生程度的文本编辑教材,为学生提供系统的学习材料。

2.参考书:提供相关的参考书籍,丰富学生的学习资源。

简单行编辑器 数据结构 课程设计

简单行编辑器 数据结构 课程设计

简单行编辑器数据结构课程设计概述:本文旨在设计一种简单的行编辑器,以满足基本的文本编辑需求。

行编辑器是一种常见的文本编辑工具,它允许用户在文本中进行插入、删除、挪移光标等操作。

为了实现这一目标,我们将采用数据结构来管理文本的存储和操作。

1. 数据结构设计:1.1 文本存储:我们可以使用链表作为文本的基本数据结构,每一个节点存储一个字符。

链表的每一个节点包含一个字符和指向下一个节点的指针。

这样的设计可以方便地进行插入和删除操作,同时保持文本的顺序。

1.2 光标位置:光标的位置可以用一个指针指向链表中的某个节点。

这个指针可以指向一个字符之前、之后或者字符本身的位置。

通过挪移光标指针,用户可以在文本中进行插入、删除和挪移操作。

2. 功能实现:2.1 插入操作:用户可以在光标当前位置插入一个字符。

插入操作包括以下步骤:- 创建一个新节点,存储要插入的字符。

- 将新节点插入到光标所在节点的前面或者后面,更新链表的指针。

2.2 删除操作:用户可以删除光标当前位置的字符。

删除操作包括以下步骤:- 找到光标所在节点。

- 更新链表的指针,将光标所在节点从链表中移除。

2.3 光标挪移操作:用户可以通过挪移光标来改变插入和删除操作的位置。

光标挪移操作包括以下步骤:- 根据用户输入的指令,将光标指针向前或者向后挪移一个节点。

2.4 文本显示:用户可以查看当前编辑的文本内容。

通过遍历链表,将字符挨次输出即可。

3. 用户界面设计:为了方便用户操作,我们可以设计一个简单的用户界面,包括以下组件:- 文本显示区域:显示当前编辑的文本内容。

- 光标位置指示器:显示光标当前位置。

- 命令输入框:接收用户输入的命令。

4. 实例演示:假设用户输入以下命令序列:- 插入字符 'A':光标指向开头,文本变为 "A"。

- 插入字符 'B':光标指向 'A' 后面,文本变为 "AB"。

数据结构-课程设计--简易文本编辑器

数据结构-课程设计--简易文本编辑器

《数据结构》课程设计班级: 10计本2班姓名:邓寅森学号: 2010305202指导教师:杨老师完成日期: 2011年12月计算机科学与技术系课程设计评分表课程名称: 数据结构 简易文本编辑器教师签名:日期:一、需求分析1.1 问题描述传统的纸质文档已经不能满足大家的需求,有容易丢失、查找不方便等缺点。

计算机信息管理为人们的生活、工作提供了方便,提高了效率。

“简易文本编辑器”是为了帮助老师、同学或其他一些需要使用文本编辑的人员进行管理和分析的一种计算机应用程序。

1.2 基本任务通过用户调查分析及实际需求,系统需要实现如下基本任务:(1)输入数据信息建立文本;(2)查询文本中满足要求的信息;(3)插入新的信息到文本中;(4)删除不再需要的文本信息;(5) 查看所有的文本信息。

二、概要设计为了完成需求分析的基本任务,主要从以下3个方面进行设计:2.1 主界面设计为了实现简易文本编辑器的各项功能,设计了一个含有多个菜单项的主控菜单模块以操作系统的各项功能,以方便用户使用系统。

系统进入菜单运行界面如图所示:简易文本编辑器主菜单2.2 数据结构设计系统采用线性表的顺序存储结构表示和存储“简易文本编辑器”中的信息。

实现文本的输入,删除,插入,查找,显示功能。

2.3 系统功能设计运行程序,提示进入菜单,按“回车键”进入主菜单,再可以在主菜单上进行各项操作。

每次进入菜单,选择“1键”新建文本,然后才可以进行其他操作,或者按“0键”选择退出。

三、模块设计3.1 模块设计系统主要包含主程序模块和其它操作模块。

其调用关系如图所示。

模块调用示意图3.2 系统子模块及其功能设计本系统共设计了16个子模块,各程序的函数名及功能说明如下:1、/*由模式串nextval值*/void GetNextval(SqVString T,int nextval[])2、/*模式匹配KMP算法*/int KMPIndex(SqVString S,int pos,int next[],SqVString T)3、/*初始化串*/void InitString(SqVString *S,char *str)4、/*串插入*/int StrInsert(SqVString *S,int pos,SqVString T)5、/*串删除*/int StrDelete(SqVString *S,int pos,int len)6、/*求子串*/int SubStr(SqVString S,int pos,int len,SqVString *T)7、/*串连接*/int Concat(SqVString *S,SqVString T)8、/*串赋值*/int StrAssign(SqVString *S,char *value)9、void InputString() //新建10、void DeleteString()//删除11、void DeleteSubstring()//删除12、void InsertSubstring()//查找13、void DisplayString()//显示14、void cd()//进入界面15、void ts()//主菜单16、void tc()//退出3.3 系统模块之间的调用关系系统的16个子模块之间的主要调用关系所示:系统函数调用关系图四、详细设计4.1 数据结构设计系统采用线性表的顺序存储结构存储通讯录信息。

简单行编辑器 数据结构 课程设计

简单行编辑器 数据结构 课程设计

中国矿业大学徐海学院计算机系《软件认知实践》报告姓名:学号:专业:设计题目:简单行编辑器指导教师:2012年12月25目录第1章题目概述 (1)第1.1节题目要求 (1)第1.2节主要难点 (2)第2章系统流程图 (3)第3章数据结构和算法 (4)第4章核心代码分析 (6)第5章复杂度分析 (10)第6章总结 (11)参考文献 (13)第1章题目概述在这次课程设计中我选的题目是文本编辑,文本编辑几乎是每个使用电脑的人都会遇到的问题,特别是网络小说作家们。

在文本的编辑中,我们会时常遇到文本信息的统计问题、小型子串的查找问题、子串的查找和删除问题等。

如果靠人自己去观察和执行相关操作的话,不仅累人,而且很容易出错。

而使用计算机程序去实现的话,则会省力不少,而且相对来说非常精确。

本程序使用了较快速的查找算法,可以大大提高检索的效率,相信这可一极大的方便用户用电脑编辑文本文件。

第1.1节题目要求文章编辑功能:输入一页文字,程序可以统计出文字、数字、空格的个数。

静态存储一页文章,每行最多不超过80个字符,共N行;要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。

存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。

输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;实现功能(1)文章内容的输入:包括字母、标点符号、数字等;(2)文章内容的统计:包括文章中大写字母、小写字母、数字、标点符号、空格以及文章所有字数的个数的统计;(3)文章内容的处理:包括对文章内容的查找、删除以,其中在查找的过程中统计出该字符或字符串在文章中出现的次数;第1.2节主要难点本程序是对一段英文文章的内容进行处理,存储方式采用链式存储,没有文件操作,故本程序对其文本内容的所有操作都是在链表中进行的。

简易文本编辑器 数据结构课设

简易文本编辑器  数据结构课设

摘要当下C++语言是一门重要的课程学习,学会运用并结合其他的知识一起解题是一件值得我们重视的,数据结构是一门结合C++知识的重要课程,因此我们要学会将平时课本的知识运用到我们现实生活当中,这样才能让我们所学的知识更加深刻。

简易文本编辑器的问题就是一个例子,传统的纸质文档已经不能满足大家的需求,有容易丢失、查找不方便等缺点。

计算机信息管理为人们的生活、工作提供了方便,提高了效率。

“简易文本编辑器”就是为了帮助老师、同学或其他一些需要使用文本编辑的人员进行管理和分析的一种计算机应用程序.关键词:简易文本编辑器,数据结构,顺序表。

目录一、需求分析 (1)1.1问题描述 (1)1.2基本任务 (1)二、概要设计 (1)2。

1主界面设计 (1)2.2数据结构设计 (2)三、详细设计 (2)3.1清空内容模块 (2)3。

2打开文件模块 (2)3.3输入模块 (2)3.4插入模块 (2)3.5删除模块 (2)3。

6替换模块 (3)3。

7显示模块 (3)3。

8保存模块 (3)3。

9系统层次图 (3)四、测试结果 (3)4.1文本编辑器主界面 (3)4。

2系统功能 (4)五、调试分析 (8)六、心得体会 (8)七、参考文献 (9)八、程序源代码 (10)一、需求分析1.1问题描述传统的纸质文档已经不能满足大家的需求,有容易丢失、查找不方便等缺点。

计算机信息管理为人们的生活、工作提供了方便,提高了效率。

“简易文本编辑器”就是为了帮助老师、同学或其他一些需要使用文本编辑的人员进行管理和分析的一种计算机应用程序。

1。

2基本任务通过用户调查分析及实际需求,系统需要实现如下基本任务:(1)输入数据信息建立文本;(2)打开文本读取已保存的信息;(3)插入新的信息到文本中;(4)删除不再需要的文本信息;(5)替换不需要的文本信息;(6)显示所有的文本信息;(7)保存所输入、插入、替换过的文本信息;(8)清空文本信息.二、概要设计2。

简单行编辑

简单行编辑

电子信息工程学院
课程设计报告
设计名称:数据结构课程设计
简单行编辑程序
姓名:学号:
专业班级:电子信息工程学院
系(院):
设计时间:
设计地点:EDA实验室
要打开的文件内容显示出来。

3.在执行“5.Open the file”时,输入想要打开文件的正确路径,回车。

如果想要打开的文件不存在,则跳出运行。

4.在进行保存文件的操作时,在提示后输入想要保存的正确路径名,再按回车,文件即被保存。

六测试成果
图(1):
图(2):
图(3):
图(4):
七附录(源程序清单)
#include "stdio.h"
#include "stdlib.h" #include "string.h" struct line{。

简单型编辑程序课程设计

简单型编辑程序课程设计

简单型编辑程序课程设计一、课程目标知识目标:1. 学生能理解简单型编辑程序的基本概念和功能。

2. 学生能掌握简单型编辑程序的操作步骤和使用方法。

3. 学生能了解简单型编辑程序在日常生活和学习中的应用场景。

技能目标:1. 学生能运用简单型编辑程序进行文本的创建、编辑和保存。

2. 学生能通过简单型编辑程序实现文本格式的调整,如字体、字号、颜色等。

3. 学生能运用简单型编辑程序进行基本的文本排版,如对齐、缩进、行距等。

情感态度价值观目标:1. 学生培养对计算机编程的兴趣,增强学习编程的自信心。

2. 学生在学习过程中,养成合作、探究、解决问题的良好习惯。

3. 学生能意识到编程在生活中的重要作用,认识到编程对个人和社会的价值。

课程性质:本课程为信息技术课程,旨在培养学生的编程兴趣和基本技能。

学生特点:六年级学生具有一定的计算机操作基础,对新鲜事物充满好奇心,但注意力集中时间较短。

教学要求:结合学生特点,课程设计应注重实践性、趣味性和互动性,以激发学生的学习兴趣和积极性。

通过分解课程目标为具体的学习成果,使学生在实践中掌握简单型编辑程序的使用方法,提高编程素养。

同时,注重培养学生的合作精神、创新意识和解决问题的能力。

二、教学内容1. 简单型编辑程序概述- 了解编辑程序的定义及作用- 掌握简单型编辑程序的特点2. 编辑程序的基本操作- 文本创建、编辑和保存- 文本格式调整(字体、字号、颜色等)- 文本排版(对齐、缩进、行距等)3. 实践操作与案例分析- 使用简单型编辑程序进行文本编辑与排版- 分析实际案例,了解编辑程序在生活中的应用4. 课堂互动与讨论- 学生互相分享学习心得和操作技巧- 针对实际问题进行讨论,提高解决问题的能力5. 教学内容安排与进度- 第一课时:简单型编辑程序概述,了解编辑程序的基本功能- 第二课时:编辑程序的基本操作,学习文本编辑与排版方法- 第三课时:实践操作与案例分析,巩固所学知识,提高实际操作能力- 第四课时:课堂互动与讨论,分享经验,解决实际问题教材章节关联:本教学内容与教材中“简单型编辑程序”章节相关,涵盖了该章节的核心内容,包括编辑程序的基本概念、操作方法及实践应用等。

简单行编辑系统数据结构课程设计

简单行编辑系统数据结构课程设计

数据结构课程设计说明书2012 年 8月 30 日1. 概述 (1)1.1 设计目的 (1)1.2 设计目标及要求设计要求 (1)1.3 设计进度 (1)1.4 分工 (2)2. 需求分析及总体设计 (2)2.1 数据结构 (2)2.2 功能框架 (2)3.功能模块详细设计 (2)3.1设计流程 (3)3.2主要源代码 (3)4.功能模块详细设计 (5)4.1设计流程......................................................................... 错误!未定义书签。

4.2主要源代码 (5)1. 概述1.1 设计目的被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的作法既不经济,也不总能实现。

所以设计这一种以行为单位进行的编辑程序。

主要是逐段地编辑。

任何时刻只把待编辑文件的一段放在内存,称为活区。

需要用到的数据结构是链表。

1.2 设计目标及要求设计要求(1)行插入:格式: i<回车><行号><回车><文本><回车>功能:在指定行之后插入一行或几行。

(2)行删除:格式: d<回车><行号1>[<空格><行号2>]<回车>功能:在指定行之后插入一行或几行。

(3)行替换:格式: i<回车><行号><回车><文本><回车>功能:在指定行之后插入一行或几行。

(4)活区切换:格式: n<回车>功能:将活区写入文件,并从文件中读入下一段,作为新的活区。

(5)活区显示:格式: p<回车>功能:逐页地(每页20行)显示活区内容,每显示一页之后请用户决定是否继续显示以后备页(如果存在)。

印出的每一行要前置行号和一个空格符,行号固定占4位,增量为1。

简单的行编辑器课程设计报告--学弟学妹们不用这么辛苦找了

简单的行编辑器课程设计报告--学弟学妹们不用这么辛苦找了

长春工程学院C语言课程设计题目编号和名称简单的行编辑器教师姓名学生姓名学生学号学生班级所在院系日期2011 年 6 月日简单的行编辑器目录1.题目要求…………………………………………2.需求分析………………………………………....3.总体设计…………………………………………4.详细设计…………………………………………5.总结……………………………………………….1.【题目要求】设计一个简单的行编辑器【要求】(1)设置一个简单的行编辑器,每行以回车结束(2)数据以文件形式存储(3)编辑器具有查找、替换、修改数据的功能2.【需求分析】根据题目要求,行编辑器的数据以文本文件存放在文件中,故需要提供文件的输入、输出等操作;在程序运行过程中要实现查找、替换、修改数据的功能应提供查找、替换、修改数据等操作;另外还应提供键盘式选择菜单功能选择。

3.【总体设计】根据上面的需求分析,可以将这一系统的设计分为输入、查找、替换修改数据、退出等四个模块(系统功能模块如图1所示)图1 行编辑器功能模块图4.【详细设计】1. 主函数主函数的设计一般较简单,一般只提供输入、功能处理和输出部分的函数调用其中各功能模块用菜单方式选择。

主函数流程图如图1-1 程序如下 void main() { cout<<"\t\t\t 简单行编辑.\n"; Str s1; Str s2; Str ss; Str ss1; Str ss2; int n; s1.input_str(); int choice=-1;while(choice!=0) 图1-1 行编辑器主函数流程 { //system("cls");cout<<"\t\t\t *******简单行编辑******\n"; cout<<"\t\t\t ***********************\n";cout<<"\t\t\t 1: 打印字符串.\n";cout<<"\t\t\t 2: 插入字符串.\n"; cout<<"\t\t\t 3: 删除字符串.\n";cout<<"\t\t\t 4: 复制整个字符串.\n";cout<<"\t\t\t 5: 替换字符串.\n";cout<<"\t\t\t 6: 查找一个字符串的位置.\n"; cout<<"\t\t\t 7: 继续输入. \n"; cout<<"\t\t\t 0: 退出.\n";cout<<"\t\t\t ************************\n";cout<<"\t\t\t 请选择: ";cin>>choice;switch(choice){case 1: cout<<"\t\t\t1: 打印出字符串.\n";s1.print_str(s1);break;case 2: cout<<"\t\t\t2: 插入字符串.\n";s1.insert_str(s1,s2,ss);break;case 3: cout<<"\t\t\t3: 删除字符串.\n";s1.delete_str(s1,s2);break;case 4: cout<<"\t\t\t4: 复制整个字符串.\n";s1.copy_str(s1,s2);break;/*case 5: cout<<"\t\t\t5: 替换字符串.\n";s1.instead_str(s1,s2,ss1,ss2,n);break;*/case 6: cout<<"\t\t\t6: 查找一个字符串的位置.\n";s1.find_position(s1,ss,n);break;case 7: cout<<"\t\t\t7: 继续输入.\n";s1.go_on_input(s1);break;case 0: cout<<"\t\t\t0: 退出.\n";break;default:cout<<"\t\t\terror.\n";break;}}}2.各功能模块的设计(1)输入、打印模块该程序需要输入一段字符串作为其待处理数据,所以通过键盘输入字符串作为待处理数据,以回车进入主函数界面。

字符串实现一个简单的行编辑器(数据结构课程设计参考样本)

字符串实现一个简单的行编辑器(数据结构课程设计参考样本)

用字符串实现一个简单的行编辑器学生姓名:OOO 指导老师:XXX摘要:本课程设计主要解决在文本编辑中,对行编辑的问题,通过字符串完善对文本的编辑,实现对文本的查找、替换、和修改数据。

在本课程设计中,系统开发平台为Windows2000,程序设计语言为C语言,程序运行平台为Windws 98/2000/XP。

在程序设计中采用了字符串的方法实现对简单的行编辑器。

程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以应用在实际中解决问题。

关键词:程序设计;行编辑器;C语言;1 引言对于日常生活中的文本编辑来说,行编器是一个很重要的问题,文本的完善关系到文件做出的完美,决定了人们在编辑文本的时效率。

一个好的用字符串实现的行编辑可以大大的提高人们办公效率。

1.1 课题背景行编辑器是文本编辑器的一种,针对行进行编辑。

现在看来当然非常地老式,这种编辑器起源于操作员还使用电传打字机的年代,也就是一个打印机连着键盘,因为没有显示器,也就无法在文档中移动光标。

行编辑器只能从事最简单的输入输出。

输入、编辑、文档显示并不能同步地进行。

一般而言,用户无法直接输入文本,而只能在文本终端上通过简要的命令,对已有的文档进行添加或编写。

命令和文本,以及编辑器的相应输出,会根据他们的输入顺序,从底部开始逐一显示。

虽然命令一般会显示被修改的行,但如果要将行连同文档中的上下文显示,则需要另外单独的命令。

现在常见的编辑器,都是通过移动光标,来选取要编辑的文本段落,与此不同的是,行编辑只能对“当前行”进行编辑。

一般也可以在行内进行上下文匹配,或者选择特定行,以决定哪部分文档将被编辑或显示。

当然,这些编辑每次都只能针对一行。

行编辑器就只能一行一行的编辑,不能出错,一出错就得重来。

因此我们用字符串来定义,可以增强行编辑器的应用,增强可读性,加快人们的编辑文本的效率,从而推进社会的发展。

这就是其重要意义。

1.2 课程设计目的数据结构是在整个计算机科学与技术领域上广泛被使用的术语。

课程设计简单行编辑

课程设计简单行编辑

课程设计简单行编辑一、教学目标本课程旨在让学生掌握简单行编辑的基本知识和技能,包括文本的选择、复制、剪切、粘贴、撤销和红色o等。

通过本课程的学习,学生将能够熟练使用文本编辑软件,提高工作效率,培养良好的信息素养和职业道德。

同时,通过实际操作,让学生感受计算机技术的魅力,激发学生对计算机科学的兴趣,培养学生的创新精神和团队协作能力。

二、教学内容本课程的教学内容主要包括以下几个部分:1.简单行编辑的基本概念和术语,如文本、编辑器、选择、复制、剪切、粘贴等。

2.文本编辑软件的使用方法,如打开文件、保存文件、撤销操作等。

3.常用编辑命令的讲解和演示,如选择命令、复制命令、剪切命令、粘贴命令等。

4.行编辑技巧的讲解和练习,如快速定位、批量替换、查找和替换等。

5.综合练习,让学生运用所学知识解决实际问题。

三、教学方法为了提高教学效果,本课程将采用以下几种教学方法:1.讲授法:教师讲解基本概念、原理和方法,引导学生理解掌握。

2.演示法:教师现场演示操作步骤,学生跟随操作,加深理解和记忆。

3.练习法:学生独立完成练习题,巩固所学知识,提高操作技能。

4.小组讨论法:学生分组讨论问题,培养团队协作能力和沟通能力。

5.案例分析法:分析实际案例,让学生学会将理论知识应用于实际工作中。

四、教学资源为了支持教学,我们将准备以下教学资源:1.教材:选用权威、实用的教材,为学生提供学习参考。

2.参考书:提供相关领域的参考书籍,拓展学生的知识视野。

3.多媒体资料:制作精美的PPT、教学视频等,提高教学效果。

4.实验设备:准备计算机、投影仪等设备,保障课堂教学的正常进行。

5.网络资源:利用校园网,为学生提供在线学习资源,方便学生自主学习。

五、教学评估本课程的评估方式包括平时表现、作业、考试等多个方面,以全面、客观、公正地评价学生的学习成果。

1.平时表现:包括课堂参与度、提问回答、小组讨论等,占总评的20%。

2.作业:包括课后练习、小项目等,占总评的30%。

数据结构课程设计——简单行编辑程序

数据结构课程设计——简单行编辑程序

/*指向表中最后一个项目的指针 */
struct line *find(int),*dls_store(struct line *);
void patchup(int,int),delete_text(),list(),save(char *),load(char *);
menu_select(); enter(int linenum);
四 设计与调试分析
这个程序的源程序是我在图书馆资料上找的,当时不能运行,main 的界面也不是现在这样。 源程序里面也没有存文件和读取文件的功能,我先对源程序进行调试分析,把里面的错误一一 改正,编写出 mian 程序。然后在里面添加了存文件和打开文件的功能,使的程序更加完善。 本程序在运行时,必须选择“3.Display a line”才能将输入,删除或者打开后的文件显示出 来,这就有点浪费时间,使得操作有点复杂。
}
/* 显示菜单,供用户选择 */ menu_select() {
char s[80]; int c; printf("\t\t1.Enter\n"); printf("\t\t2.Delete a line\n"); printf("\t\t3.Display a line\n"); printf("\t\t4.Save the file\n"); printf("\t\t5.Read the file\n"); printf("\t\t6.Quit\n"); do{ printf("\n\n\t\t Please choice a num :"); gets(s); c=atoi(s); }while(c<0||c>6); return(c); }

数据结构课程设计:行编辑程序

数据结构课程设计:行编辑程序

一、需求分析由于被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的作法既不经济,也不总能实现。

而用行编辑把待编辑文件的一段放进内存,称为活区。

本行编辑程序是以每行不超过320个字符为前提的。

每次编辑会读入80行,活区每次只显示20行。

1.该程序要实现以下基本编辑命令和一些相关的命令:(1)行插入。

格式:i<回车><行号><回车><文本><回车>。

将<文本>插入活区第<行号>行之后。

(2)行删除。

格式:d<回车><行号1>,<行号2><回车>。

删除活区中第<行号1>行到第<行号2>行。

(3)活区切换。

格式:n<回车><页数><回车>。

由于每次从输入文件读入80行,而活区每页显示20行,而活区切换就是要切换到需编辑的页面上去。

(4)活区显示。

格式p<回车>。

显示当前要编辑的活区内容。

印出的每一行都有一个前置行号和一个空格符,行号固定为2位,增量为1。

(5)清屏。

格式:c<回车>。

(6)获得帮助。

格式:h<回车>。

(7)退出。

格式:e<回车>。

二、概要设计程序结构流程图:存储结构的定义如下:typedef struct text{char string[80];//存储每一行的元素struct text *next;//指向后一个节点的指针int flat;//确定此行是否被删除的标志}text,*textp;功能函数:Status Createlist(textp &head);功能:建立一个80个节点的链表,是整个活区的大小int del(textp head);功能:删除显示的活区的任意一行。

int display(textp &head);功能:按照每页20行的规格显示活区的内容。

C语言课程设计简单的行编辑器.

C语言课程设计简单的行编辑器.

语言程序设计报告姓名:班级:学号:指导教师:课题:简单的行编辑器简单的行编辑器题目要求1.设置一个简单的行编辑器,每行以回车结束。

2.数据以文件形式存储。

3.编辑器具有查找,替代,修改数据的功能。

需求分析根据题目要求,数据以文件的形式存储,所以应提供文件的输入,输出等操作;还需要文件具有查找,替换,修改数据的功能。

总体设计根据上面的需求分析,可以将这个系统的设计分为如下七大模块: 编辑,查找,修改,,删除,替换,保存,退出。

四.详细设计1.主函数为了各模块的独立性,主函数一般设计得比较简单,本系统主要用主函数打开上次保存的数据和进入主菜单函数流程图打开上次保存文件程序{FILE *pfiiepfile=fope n( "L in edit.txt","a+");readfile(l in es,pfile);fclose(pfile);menu (I in es);}int readfile(char (*lines)[MAXC],FILE*pfile) { int i=0;while(!feof(pfile)){fgets(li nes[i],MAXC,pfile); /*if(!strstr(li nes[i],"\n")) return 1;*/i++;} return 0;}2. 主菜单函数流程图程序void men u(char (*li nes)[MAXC]){ int selection;do{/************* main() ********************* z 主^函^数 ************************************ 进入主菜单函数system("cls");puts("\t\t***********************MUNU***************** puts("\t\t1.Edit new line");puts("\t\t2.Replace line");puts("\t\t3.Delete line"); puts("\t\t4.Searchline");puts("\t\t5.Modify data");puts("\t\t6.Save");puts("\t\t0.Exit");printf("Please select a number:[ ]\b\b"); do{scanf("%d",&selection);if(selection<0||selection>6) { printf("Invalidselection!Please try again "); printf("andselect a number:[]\b\b\n");}else break;}while(true);switch(selection){case 1:edit(lines);break;case 5:modify(lines);break;case 3:mydelete(lines);break;case 4:search(lines);break;case 2:replace(lines);break; case6:savetofile(lines);break;case 0:myexit(lines);}} while(true); }3. 各功能模块设计 (1) 编辑模块 流程图puts("\n\n\t\t ****************************************** **\n");mt 1=0,01^81=0清屏 clisciQ ; hnes[g(U]!=O经7二.八 iidBx++,pint 旷兀d:pmtfij "ynlnPlease type a new luteffliEhtstdin),i=0; ~「一-_ 晦[MT : /—辱 ts(liiue s[i) ,MAXC^tdii^cantiKiE,retEm;i++;程序void edit(char (*li nes)[MAXC]){int i,i ndex;/*system("cls");*/clrscr(); for(i=0,i ndex=O;i<MAXL;i++) if(li nes[i][0]!=0){in dex++;printf("%d: %s",index,lines[i]);}prin tf("\n\n Please type a new lin e:\n"); fflush(stdi n);for(i=0;i<MAXL;i++)/** ***************************编辑 ***********************************{if(li nes[i][O]=='\O'){ /*每行第一个字符作为标志位 fgets(li nes[i],MAXC,stdi n);return;}elsecon ti nue;}}(2) 替换模块niti; mtindEne,血tj,k,II1 clisci();i=0;k-H-: |〜 ------ _ k-=indliiw /输由騎选定行pmtf[ "Flease tj/pe youf new line :ln")memseXlinesljl.O^XC),fflush( stdin);堆tsOiite 即,MAXQ stdii^;breek ;程序void replace(char (*li nes)[MAXC]){空行可写入*/ /** **************************** 替换 ****************************************/ i<MAXL1卄scant 洛;jO,k=Q;int i;int indline;int j,k;do{/*system("cls"); */clrscr();/* 打印所有 */for(i=0;i<MAXL;i++)if(lines[i][0]!=0)printf("%d: %s",i+1,lines[i]);printf("\n\nWhich line do you prefer to replace?(To quit please input0)[ ]\b\b");scanf("%d",&indline);if(indline==0)return;else{for(j=0,k=0;j<MAXL;j++){if(lines[j][0]!=0) k++;if(k==indline){printf("\n\nThe line to be replaced is: \n%s",lines[j]);printf("Please type your new line:\n");memset(lines[j],0,MAXC);fflush(stdin);fgets(lines[j], MAXC, stdin);break;}}}}while(true);}(3) 删除模块流程图删除即在查找到某行的基础上再删掉,其具体流程图可参照查找的流程图do{/*system("cls");*/clrscr();for(i=0,i ndex=O;i<MAXL;i++)if(li nes[i][0]!=0){in dex++;printf("%d: %s",index,lines[i]);}prin tf("\n\nWhich line do you prefer to delete?(To quit please in put0)[ ]\b\b");scan f("%d",&in dli ne);if(i ndli ne==O)return;else for(j=0,k=0;j<MAXL;j++){if(lines[j][0]!=0) k++;if(k==in dli ne)查找行删除行程序/*******************************void mydelete(char (*l ines)[MAXC]) {int i,i ndex;int in dli ne;int j,k;删 *************************************{printf("The line to be deleted is: \n%s\n",lines[j]);memset(li nes[j],O,MAXC);system("pause");break;}}}while(true);}查^找 ****************************************/ void search(char (*lin es)[MAXC]) { irudjex++;pnntft^d : 丫鼎;ihAx, lines®);丄卄/************************** (4)查找模块流程图 程序int i,index; int indline; int j,k;do{/*system("cls");*/ clrscr();for(i=0,index=0;i<MAXL;i++)if(lines[i][0]!=0){index++;printf("%d: %s",index,lines[i]);}printf("\n\nWhich line do you want to search?(To quit please input0)[ ]\b\b");scanf("%d",&indline); if(indline==0)return; elsefor(j=0,k=0;j<MAXL;j++){if(lines[j][0]!=0) k++; if(k==indline){printf("The line to be searched is: \n%s\n",lines[j]);system("pause");break;}}}while(true);}(5)修改模块流程图删除模块的流程图也是在查找模块的基础上稍加改动,在此不再赘述其流程图可简单写为查找行修改行程序/******************************修尖^改 ********************************/* 在 sSrc 中用 sReplaceStr 替换 sMatchStr */int modifystr(char *sSrc,char *sMatchStr,char *sReplaceStr){int Strin gLe n;char caNewStri ng[MAXC];char *Fi ndPos = strstr(sSrc,sMatchStr);if((!Fi ndPos )|| (!sMatchStr))return -1;while(Fi ndPos){memset(caNewStri ng,0,sizeof(caNewStri ng));Strin gLe n=Fin dPos-sSrc;strn cpy(caNewStri ng,sSrc,Stri ngLe n); strcat(caNewString,sReplaceStr);strcat(caNewStri ng,Fi ndPos+strle n(sMatchStr)); strcpy(sSrc,caNewString);Fin dPos = strstr(sSrc,sMatchStr); }return 0;}void modify(char (*li nes)[MAXC]){int i,indline;char buf[MAXC];int k;int j;char* token=0;char search[MAXC],replace[MAXC];do{ /*system("cls"); */ clrscr();for(i=0;i<MAXL;i++) if(lines[i][0]!='\0') printf("%d: %s",i+1,lines[i]);printf("\n\nWhich line do you prefer to modify?(To quit please input 0)[ ]\b\b");scanf("%d",&indline); if(indline==0) return;else{ for(j=0,k=0;j<MAXL;j++){ if(lines[j][0]!=0) k++; if(k==indline){ printf("\n\nThe line to be replaced is: \n%s",lines[j]);printf("\n\nInput the search string and the replace ");printf("(To quitplease inputq):");memset(buf,0,MAXC); fflush(stdin);fgets(buf, MAXC, stdin); k= strlen(buf)-1;if(buf[k]=='\n') buf[k]='\0'; if(*buf=='q'&&*(buf+1)=='\0') return;memset(search,0,MAXC); memset(replace,0,MAXC);token =strtok(buf, " "); strcpy(search,token);token =strtok(NULL," ”); strcpy(replace,toke n);modifystr(l in es[j],search,replace); break;}}}}while(true);}(6)保存模块流程图FILE inti;i=0fclose(pfile)fpriiitf("^The lilies liasbeensave tUti');那协诚"pa use");程序void savetofile(char (*lin es)[MAXC]){FILE *pfile;int i;pfile=fope n("Li nedit.txt","w+");for(i=0;i<MAXL;i++)if(lines[i][O]!='\O') fputs(lines[i],pfile);fclose(pfile);prin tf("\nThe lines has bee n saved.' n"); system("pause"); }(7)退出模块流程图程序void myexit(char (*l in es)[MAXC]){char c;prin tf("Save the lines to the file?(y/n 门; fflush(stdi n);c=getchar();if(c=='n') exit(1);savetofile(l in es);exit(1);}五.上机操作1.主菜单函数邑C;\DOCUME-1 \ADMINI^ 1、梟面\TU EXE哄*JC JOCKNU 艮■ X;M 算J*X;M 耳図 8< JC 耳:M St X 耳>t1.Edit new line2.Kepiace line 』・Dftlete line4.Searcli line5-Modif y data6.S AUSB.ExitPlta^e seLeet a nunber:f_]2.编辑模块Which line do prefer to* replace? CTo quit please input 11 JThe line to be replaced is: 1234567B9Please type your neu lime: 555556789.3 •替换模块Mhiich line do you prefer to replace? CTa quit please input L ]吓C:\DOCUME-1 \ADMINI-1 '桌面\TCJE XE X 4查找模块.Which line do ^ou ifant to search?<To> quit please input 0> L^J5.修改模块區 匚:\DO ajMEellADMINL-l 、車面\TC*E5C£ Ulrich line do you pref er ta de leteYCTo quit please input U> 12 i Ths lina to be daletsd is:Press *ny keu to continue * ” * 7 •保存模块匡 C ;\DOCUME^l\ADMINI-vl \J£ 面\TUFXEiMXlIHiKJfIgSOCXMEKHJtJitJMIXXX 胃 HXXNIUNII X 赳 NKXJMIKXX 宾?CiMXWiMNXX1. Edit new line2. Replace line 3delete line 4.Search line 5■用odif y data来:K X Mi K 半耳壬 14 岳耳X Jt 胃 KIHt-ME MrSKHMX 胃 梵汪水胃■:・HM :M KN 来Please select 帚 number*(61 Tlie lines Ttas been saved.Press 凰ny key to continus ・- <H>125555567B99B8884321 6.SaveB.Exit6 •删除模块&退出模块。

简单行编辑程序

简单行编辑程序

计算机科学与技术专业数据结构课程设计任务书(11级)题目:简单行编辑程序学生姓名:学号:班级:题目类型:软件工程(R)指导教师:王连相一.题目简介被编辑的文本文件可能很大,全部读入内存的做法既不经济也不总能实现。

一种解决办法是逐行地编辑,任何时刻只把待编辑文件的一行放在内存,称为活区。

允许输入出错时发现错误并及时更正。

试按照这种方法实现一个简单的行编辑程序。

通过该题目的设计过程,可以加深理解线性表及栈的逻辑结构、存储结构,掌握线性表及栈上基本运算的实现,进一步理解和熟练掌握课本中所学的各种数据结构,学会如何把学到的知识用于解决实际问题,培养学生的动手能力。

二.主要任务第一部分:基本算法实现1、线性结构基本算法实现(指导老师根据题目指定);2、树型结构基本算法实现(指导老师根据题目指定);3、图型结构基本算法实现(指导老师根据题目指定);4、查找基本算法实现(指导老师根据题目指定);5、排序基本算法实现(指导老师根据题目指定);第二部分:指定题目的设计与实现1、查阅文献资料,一般在3篇以上;2、建立数据的逻辑结构和物理结构;3、完成相应算法的设计;4、完成测试工作;5、撰写设计说明书;6、做好答辩工作。

三.主要内容、功能及技术指标(1)用栈实现简单的行编辑程序,主要功能有:行插入(格式:i<行号><回车><文本><回车>,即将<文本>插入活区中的第<行号>行之后);行删除(格式:d<行号1>[ <行号2>]<回车>,删除活区中第<行号1>行(到第<行号2>行),两种格式的例子是:“d10 ”和“d10 14”);活页切换(格式:n<回车>,将活区写入输出文件,并从输入文件中读入下一段,作为新的活区);活区显示(格式:p<回车>,逐页地(每页20行)显示活区内容,每显示一页之后由用户决定是否继续显示以后各页(如果存在)。

数据结构课程设计--简易文本编辑器

数据结构课程设计--简易文本编辑器

课程设计说明书课程名称:数据结构课程设计专业:电子信息科学与技术班级:2012-1 设计人:山东科技大学2015年 7 月 11 日目录1需求分析说明 (2)1.1主函数模块 (2)1.2菜单显示及输出子模块 (2)1.3查找功能子模块 (2)1.4替换功能子模块 (2)1.5插入功能子模块 (3)1.6块移动功能模块 (3)1.7删除功能模块 (3)1.8读盘功能模块 (3)1.9存盘功能模块 (3)1.10测试数据 (3)2概要设计说明 (4)2.1设计思想 (4)2.2模块调用图 (4)2.3程序代码简介 (4)3详细设计说明 (7)3.1主函数模块 (7)3.2菜单显示及输出子模块 (7)3.3查找功能子模块 (7)3.4替换子模块 (9)3.5插入子模块 (10)3.6块移动模块 (11)3.7删除模块 (12)3.8读盘功能模块 (13)3.9存盘功能模块 (15)3.10流程图 (16)4调试分析 (17)4.1遇到的问题 (17)4.2测试结果 (18)5用户使用说明 (22)6课程设计总结 (24)1需求分析说明简易文本编辑器的总体目标:在Visual Studio的开发环境下,利用所学C 语言和数据结构的相关知识,开发一个具有良好人机界面的简易文本编辑器,实现对文本的简单修改,从而达到编辑文本以及查看文本信息的目的。

基本功能如下:(1)界面友好,易与操作。

采用菜单或其它人机对话方式进行选择。

(2)能正确打开所键入的文本路径,并能够读取相应文本信息。

(3)能对打开的文本进行文本信息显示、替换、查找、块移动、删除等基本操作。

(4)能够正确对修改后的文本内容存盘。

(5)正确显示文本总行数。

以下是各功能模块的功能描述:1.1主函数模块主函数模块的主要功能是初始化菜单界面,功能按键选择并调用相关模块,实现软件功能。

1.2菜单显示及输出子模块菜单显示模块的主要功能是将菜单进行显示,内容包括本设计的主要功能及相关代号。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

中国矿业大学徐海学院计算机系《软件认知实践》报告姓名:学号:专业:设计题目:简单行编辑器指导教师:2012年12月25目录第1章题目概述 (1)第1.1节题目要求 (1)第1.2节主要难点 (2)第2章系统流程图 (3)第3章数据结构和算法 (4)第4章核心代码分析 (6)第5章复杂度分析 (10)第6章总结 (11)参考文献 (13)第1章题目概述在这次课程设计中我选的题目是文本编辑,文本编辑几乎是每个使用电脑的人都会遇到的问题,特别是网络小说作家们。

在文本的编辑中,我们会时常遇到文本信息的统计问题、小型子串的查找问题、子串的查找和删除问题等。

如果靠人自己去观察和执行相关操作的话,不仅累人,而且很容易出错。

而使用计算机程序去实现的话,则会省力不少,而且相对来说非常精确。

本程序使用了较快速的查找算法,可以大大提高检索的效率,相信这可一极大的方便用户用电脑编辑文本文件。

第1.1节题目要求文章编辑功能:输入一页文字,程序可以统计出文字、数字、空格的个数。

静态存储一页文章,每行最多不超过80个字符,共N行;要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。

存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。

输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;实现功能(1)文章内容的输入:包括字母、标点符号、数字等;(2)文章内容的统计:包括文章中大写字母、小写字母、数字、标点符号、空格以及文章所有字数的个数的统计;(3)文章内容的处理:包括对文章内容的查找、删除以,其中在查找的过程中统计出该字符或字符串在文章中出现的次数;第1.2节主要难点本程序是对一段英文文章的内容进行处理,存储方式采用链式存储,没有文件操作,故本程序对其文本内容的所有操作都是在链表中进行的。

对于文本的输入,采用头插法将文本信息存储到链表已申请好的存储空间中,在此部分设计中最大的问题在于输入文章过程中输入的字符数大于80时如何换行;对于文本内容的统计,使用循环对已存储的文章进行匹配,大写字母数、小写字母数、空格数、数字数直接通过比较即可得到,标点符号通过ASCⅡ比较即可得到;对于文本内容的处理,查找部分仍是使用循环对已存储的文章进行匹配,判断需要查找的字符或者字符串是否与文章中某部分内容相同,如果存在相同的记录相同的个数及位置并输出个数及位置。

删除部分先使用程序的查找功能对文章中需要删除的字符或者字符串进行查找,然后对其进行删除。

文本编辑的基本内容为查看文本文件内容,统计内容基本信息,查找子串是否存在及其出现次数,查找并删除所有的相关子串并重新输出文本内容等等。

第2章系统流程图第3章数据结构和算法1、定义结构体 struct line,文本行采用顺序存储,行与行之间采用链式存储.2、主要函数:int FindString(LINE * &head,char *str) /*统计str在文章中出现的次数*/求在一行中Str出现的次数的流程图:①.查找第一个字符,如果有第一个字符即p->data[i]==str[0],设计数器k=0②.查找这个字符后面的字符与要查找的字符串是否匹配即p->data[i+j]==str[j],如果匹配k++③.重复第二步,如果k=len2,则查找到,count++;如果没查找到,重新进行第一步。

void delstringword(char *s,char *str) /*删除字符串*s 中的字符串*str*/实现思想:①.从字符串s 中寻找str 第一次出现的位置 *p=strstr(s,str);②.len=strlen(s);i=len-strlen(p)即前i 项恰好不含要删除的字符串,将前i 项复制到tmp 中③.j=i+strlen(str) 即要删除的字符串在i+1和j 之间,将j 之后的字符串复制到tmp 中④.将tmp 赋给串s ,返回s输入文章时,以Ctrl+E(^E)为结尾,当tmp[0]==5时,发现输入 ^E ,则退出输入。

输出时文章时,如果tmp[strlen(tmp)-1]==5即发现表示结束的字符^E ,用p->data[strlen(tmp)-1]='\0'除去最后一个控制符 ^E 。

stmp[count++]=s[m];tmp[count++]=s[n];tmp第4章核心代码分析1.typedef struct line{char *data;struct line *next;}LINE; /*创建一链表,同时向里面输入文本数据*/2./*统计字母数*/int CountLetter(LINE * &head){LINE *p=head;int count=0;do{int Len=strlen(p->data); /*计算当前 data 里的数据元素的个数*/for(int i=0;i<Len;i++)if((p->data[i]>='a'&&p->data[i]<='z')||(p->data[i]>='A'&&p->d ata[i]<='Z')) /*计算字母数*/count++;}while((p=p->next)!=NULL); /*遍历链表*/return count; /*返回文章的字母总数*/}/*统计数字数*/int CountNumber(LINE * &head){LINE *p=head;int count=0;do{int Len=strlen(p->data); /*计算当前 data 里的数据元素的个数*/for(int i=0;i<Len;i++)if(p->data[i]>=48 && p->data[i]<=57)count++;/*计算数字数,ASCII码*/}while((p=p->next)!=NULL); /*遍历链表*/return count;}/*统计空格数*/int CountSpace(LINE * &head){LINE *p=head;int count=0;do{int Len=strlen(p->data); /*计算当前 data 里的数据元素的个数*/for(int i=0;i<Len;i++)if(p->data[i]==32)count++; /*计算空格数,空格ASCII码为32*/ }while((p=p->next)!=NULL); /*遍历链表*/return count;}/*统计文章的总字数*/int CountAll(LINE * &head){LINE *p=head; /*保存链表的首地址*/int count=0;do /*计算总字符数*/{count+=strlen(p->data);}while((p=p->next)!=NULL); /*遍历链表*/return count;}/*统计str在文章中出现的次数*/int FindString(LINE * &head,char *str){LINE *p=head;int count=0;int h=0;int len1=0; /*保存当前行的总字符数*/ int len2=strlen(str); /*待统计字符串的长度*/ int i,j,k;do{len1=strlen(p->data); /*当前行的字符数*/for(i=0;i<len1;i++) /*字符匹配*/{if(p->data[i]==str[0]){k=0;for(j=0;j<len2;j++)if(p->data[i+j]==str[j]) k++;if(k==len2) {count++;i=i+k-1;}}}}while((p=p->next)!=NULL); /*遍历链表*/ return count;}第5章复杂度分析本算法的空间复杂度很低,空间复杂度为O(N)。

但是本算法的时间复杂度比较高,输出函数、查找函数算法时间复杂度均为O(N),但是删除函数算法的时间复杂度较高。

我暂时还问想到时间复杂度更小的算法,因此在这里我无法对该算法进行优化。

第6章总结为期一周的课程设计结束了,在这一周里我完成了编写文本编辑程序的任务。

任务书上要求是对输入的信息进行操作,自己开始是不知道该向什么方向去努力,自己应该如何去编写这个程序,后来通过对照着任务书上的要求和到网上查找相关资料,慢慢找到了感觉。

所以自己在整个课程设计的编写程序过程中遇到的困难及问题都通过查阅资料、向老师提问得以解决。

本次课程设计自己最大的体会就是不管写什么程序,自己首先得对这个问题要分析透彻,要知道自己要干什么,然后才能让自己干什么。

通过本次课程设计,我学到了很多:增强了查阅相关参考资料的能力,独立分析解决问题的能力;自己的上机动手的能力和对课程设计的理解,得到很多启示;课程设计为我们提供了一个即动手又动脑、独立实践的机会,将课本上的知识理论和实际有机的结合起来,锻炼了我们的分析解决实际问题的能力。

这次课程设计使我我对数据逻辑结构的特点和存储表示方式的有了更深的了解和认识,培养了我在具体应用中选择合适的数据结构和存储结构的能力,同时也使我认识到自己在学习编程方面还有很多的不足。

今后我要多读一些纺织方面的书籍,不能只拘泥于课本上的知识,并注重理论与实践的结合,多上机练习编写程序,提高自己的实际动手能力和独立思考的能力,不断充实自己,更好的掌握编程思想。

参考文献[1] 严蔚敏、吴伟民主编,《数据结构》(C语言版),清华大学出版社,2002。

[2] 殷人昆等著,《数据结构》(C++版),清华大学出版社,2001。

[3] 金远平著,《数据结构》(C++描述),清华大学出版社,2005。

[4] 许卓群等著,《数据结构与算法》,高等教育出版社,2004。

[5] Frank M.Carrano等著, 《数据结构与C++高级教程》,清华大学出版社,2004。

相关文档
最新文档