简单的行编辑器课程设计报告

合集下载

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

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

扬州大学编译原理课程设计报告题目简单的编译器班级计科0802班学号081202427姓名张俊指导教师姜卯生成绩扬州大学信息工程学院2011年6月10日一、课程设计题目实现一个简单的编译器二、课程设计目的通过编译原理课程设计,加深对课堂中所讲授的内容的理解,设计一个具有词法分析、语法、语义分析、错误处理的综合程序。

进一步掌握编译程序常用实现的方法和技术,使学生初步具有研究、设计、编制和调试编译程序的能力。

三、课程设计要求1.实现一个C语言子集或Pascal语言子集的编译器,工具任选。

2.要求实现的功能:翻译 +,-,*, / 四则运算表达式及布尔表达式,翻译包含if语句,while语句及do-while语句及相互间的嵌套。

四、课程设计语言及选用工具选用语言:Java工具 Eclipse五、课程设计方法设计过程中用到的数据结构://关键字数组public static List<Eryuanshi> keyWord= new ArrayList<Eryuanshi>();//自定义符号串数组p ublic static Eryuanshi[] valueAndClass = new Eryuanshi[100];//目标代码数组public static List<Siyuanshi> siyuanshi= new ArrayList<Siyuanshi>();//目标代码类,存放四元式的另外一种形式class Siyuanshi{String op;String str1;String str2;}//二元式类,存放词法分析后的标志符,关键字及其类号class Eryuanshi{String word;int classID;}Stack<Integer> stateStack = new Stack<Integer>(); //状态栈Stack<String> symStack = new Stack<String>(); //符号栈Stack<String> semanticStack = new Stack<String>(); //语义栈编译器主要分为两个模块:(1)词法分析程序:主要功能是从文件逐个单词读取源程序,进行次词法分析,并输出源程序的二元式列表,二元式列表保存在keyWord对象数组中。

简单的行编辑器课程设计

简单的行编辑器课程设计

程序设计课程设计报告二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 总结我们所做的每一道程序设计题基本涵盖了我们一学年的课程知识,而我侧有些力不从心,很多地方生疏不知,大部分程序借鉴他人,这一点我还需改进,不过通过此次课程设计,我对程序设计这门课程又有了新的理解。

简单的行编辑器

简单的行编辑器

计算机工程学院课程设计报告设计名称:数据结构课程设计选题名称:简单的行编辑器姓名:学号:专业班级:软件工程软件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"。

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

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

中国矿业大学徐海学院计算机系《软件认知实践》报告姓名:学号:专业:设计题目:简单行编辑器指导教师: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节主要难点本程序是对一段英文文章的内容进行处理,存储方式采用链式存储,没有文件操作,故本程序对其文本内容的所有操作都是在链表中进行的。

行编辑程序课程设计

行编辑程序课程设计

行编辑程序课程设计一、课程目标知识目标:1. 学生能理解行编辑程序的基本概念,掌握其功能和用途。

2. 学生能掌握行编辑程序的基本操作,如插入、删除、替换和查找。

3. 学生了解行编辑程序与文本处理软件(如记事本、Word等)的区别和联系。

技能目标:1. 学生能够独立使用行编辑程序进行文本编辑和操作。

2. 学生能够运用行编辑程序解决实际问题,如修改代码、配置文件等。

3. 学生通过行编辑程序的学习,培养逻辑思维和问题解决能力。

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

2. 学生培养良好的编程习惯,注重代码规范和团队协作。

3. 学生认识到行编辑程序在实际应用中的价值,激发学习计算机科学的热情。

分析课程性质、学生特点和教学要求:1. 课程性质:本课程为信息技术学科,以实践操作为主,理论讲解为辅。

2. 学生特点:六年级学生具备一定的计算机操作基础,思维活跃,好奇心强。

3. 教学要求:结合学生实际,注重实践操作,提高学生的动手能力和解决问题的能力。

二、教学内容1. 行编辑程序基本概念:介绍行编辑程序的定义、功能和用途,结合课本第二章第一节内容,让学生了解行编辑程序在计算机编程中的重要性。

2. 行编辑程序基本操作:详细讲解插入、删除、替换和查找等操作,对应课本第二章第二节,通过实例演示和练习,使学生熟练掌握操作方法。

3. 行编辑程序与文本处理软件的对比:分析行编辑程序与文本处理软件的异同,以课本第二章第三节为例,让学生明白两者在实际应用中的适用场景。

4. 实践操作:安排学生进行行编辑程序的操作练习,结合课本第二章练习题,巩固所学知识,提高实际操作能力。

5. 行编辑程序在实际应用中的案例:介绍行编辑程序在编程、配置文件等领域的应用,参照课本第二章案例分析,激发学生学习兴趣,培养实际应用能力。

6. 编程习惯与规范:讲解编程过程中应注意的规范和习惯,结合课本相关内容,培养学生良好的编程素养。

简单行编辑程序——课程设计

简单行编辑程序——课程设计

简单行编辑程序题目:简单行编辑程序班级:计算机科学与技术(非师范)姓名:学号:完成日期:2010-6-251.需求分析以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?并明确规定:文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、删除等修改操作。

限制这些操作以行为单位进行的编辑程序称为行编辑程序。

(1) 输入的形式和输入值的范围;无范围(2) 输出的形式;字符串(3) 程序所能达到的功能;实现以下4条基本编辑命令:(1)行插入。

格式:i<行号><回车><文本><回车>将<文本>插入活区中第<行号>行之后(2)行删除。

格式:d<行号1>[□<行号2>]<回车>删除活区中第<行号1>行(到第<行号2>行)。

两种格式的例子是:“d10↙”和“d10□14↙”(3)活区切换。

格式:n<回车>将活区写入输出文件,并从输入文件中读入下一段,作为新的活区。

(4)活区显示。

格式:p<回车>(4) 测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。

2.概要设计说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。

typedef struct text{char string[80];//存储每一行的元素struct text *next;//指向后一个节点的指针struct text *pre;//指向前一个节点的指针int num;//每一行元素的长度int flat;//确定此行是否被删除的标志}text;FILE *fp,*out;//fp是执行被打开的文件,out指向被写入的文件text *head;//链表的头指针int n=0,sum,delnum,xiugai=0,page=0;//file://修改用来指示文件是否被修改过,如果修改过才回存盘。

简单型编辑程序课程设计

简单型编辑程序课程设计

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

长春工程学院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)输入、打印模块该程序需要输入一段字符串作为其待处理数据,所以通过键盘输入字符串作为待处理数据,以回车进入主函数界面。

简单行编辑程序实验报告

简单行编辑程序实验报告

简单行编辑程序课程设计一.设计要求1.问题描述文本编辑程序是利用计算机进展文字加工的根本软件工具,实现对文本文件的插入、删除等修改操作。

限制这些操作以行为单位进展的编辑程序称为行编辑程序。

被编辑的文本文件可能很大,全部读入编辑程序的数据空间〔内存〕的做法即不经济,又不总能实现。

一种解决方法是逐段的编辑。

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

试按这种方法实现一个简单的行编辑程序,设文件每行不超过320个字符,很少超过80个字符。

2.需求分析该程序要实现以下4条根本的编辑命令:(1)行插入。

格式:i<行号><回车><文本>. <回车>将<文本>插入活区中第<行号>行之后。

(2)行删除。

格式:d<行号1>[<空格><行号2>.]<回车>例如删除活区中第<行号1>行〔到第<行号2>行〕。

(3)活区切换。

格式:n<回车>将活区写入输出文件,并从输入文件中读入下一段,作为新的活区。

(4)活区显示。

格式:p<回车>;逐页地〔每页20行〕显示活区内容,在每显示的一页之后请用户决定是否继续显示以后各页〔如果存在〕。

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

各条命令中的行号均须在活区中各行号*围之内,只有插入命令的行号可以等于活区第一行行号减一,表示插入当前的屏幕中第一行之前,否则命令参数非法。

二.概要设计1.主界面设计为了实现简单行编辑程序,设计一个含有多个菜单项的主控菜单子程序以系统的各项子功能。

主控菜单运行如下:2.存储构造设计该系统采用串的顺序存储构造。

3.系统功能设计(1)行插入(2)行删除(3)文本显示(4)保存文件(5)读取文件(6)退出系统三.模块设计1.模块设计本程序包含主程序模块、菜单项选择择模块和串操作模块。

c课程设计行编辑器

c课程设计行编辑器

c课程设计行编辑器一、教学目标本章节的教学目标是使学生掌握C语言的基本语法,能够运用C语言进行简单的程序设计。

具体分解为以下三个目标:1.知识目标:使学生了解C语言的基本数据类型、运算符、控制结构、函数等语法知识。

2.技能目标:培养学生能够使用C语言编写并调试程序的能力,使学生能够运用C语言解决实际问题。

3.情感态度价值观目标:培养学生对计算机科学的兴趣,提高学生主动学习的积极性,使学生认识到计算机编程在现代社会的重要性。

二、教学内容本章节的教学内容主要包括C语言的基本语法,具体包括以下几个部分:1.数据类型和运算符:整型、浮点型、字符型数据,算术运算符、关系运算符、逻辑运算符等。

2.控制结构:顺序结构、选择结构(if-else)、循环结构(for、while)等。

3.函数:函数的定义、声明和调用,return语句,函数的参数传递等。

4.数组和字符串:一维数组、多维数组,字符串的基本操作等。

5.指针:指针的概念、指针的运算、指针与数组、指针与函数等。

6.结构体和文件:结构体的定义和使用,文件的打开、读写、关闭等操作。

三、教学方法为了达到本章节的教学目标,将采用以下几种教学方法:1.讲授法:对C语言的基本语法进行系统的讲解,使学生掌握基本的编程知识。

2.案例分析法:通过分析典型的程序案例,使学生了解如何运用C语言解决实际问题。

3.实验法:安排上机实验,让学生亲自动手编写程序,培养学生的编程能力和调试能力。

4.讨论法:学生进行小组讨论,分享学习心得,互相解答疑问,提高学习效果。

四、教学资源为了支持本章节的教学,将准备以下教学资源:1.教材:《C程序设计语言》(K&R)或《C Primer Plus》。

2.参考书:《C语言编程思想》、《C语言实例教程》等。

3.多媒体资料:教学PPT、视频教程、在线编程练习等。

4.实验设备:计算机、编程软件(如Visual Studio、Code::Blocks等)。

课程设计简单行编辑

课程设计简单行编辑

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

简单文本编辑器-设计报告

简单文本编辑器-设计报告

简易文本编辑器●需求分析该简易文本编辑器具有图形菜单界面,包括打开,查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除,显示文本信息,保存文本信息等等功能并可正确存盘、取盘,正确显示总行数。

●概要设计为实现数据的有序存储,该编辑器用字符数组来存储输入的信息。

数组是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。

其特点为:在顺序表上逻辑关系相邻的俩个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。

在编辑器的主界面中应有如下提示信息(包括功能的完成的基本思想):1) 清空以前的文本信息:将用数组存的数据内容全部置为0;2) 显示当前文本信息:遍历用数组存入的信息,并输入到外部显示器上;3) 编辑信息:通过对数组的直接输入操作得到字符数组,这要求数组有绝对大的空间,而且每一次的输入完毕必须有相应的数组下表地址的记录,应此建立一个全局变量ntext记录;4) 查找信息:通过循环在数组中找到所需要的信息;5) 替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的信息内容,否则提示未找到要被替换的信息;6) 插入文本信息:首先在数组中查找要插入点,如果找到该插入点,提示输入插入信息,确认插入信息后,提示选择向前插入信息还是向后插入信息,如果未找到插入点,显示未找到要插入的位置;7) 移动文本信息:首先在数组中查找要移动的信息,如果找到该信息,提示是进行列移动还是进行行移动,否则提示未找到要移动的信息;8) 删除文本信息:首先在数组中查找要删除的信息,如果找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息;9) 退出编辑器:通过确认是否保存安全退出。

10)程序中主要的函数为:子串查找在朱串的位置,程序如下:int strindex(char text[],char t[],int i2,int l) //查找要操作的数据的位置(模式匹配){int i1=l,j=0;while (i1<ntext&&j<i2){if (text[i1]==t[j]) //继续匹配下一个字符{j++;i1++;//主串和子串依次匹配下一个字符}else //主串、子串指针回溯重新开始下一次匹配{i1=i1-j+1; //主串从下一个位置开始匹配j=0;//子串从头开始匹配}}if (j>=i2){return(i1-i2);} //返回匹配的第一个字符的下标elsereturn(-1); //模式匹配不成功}详细设计1.包括的头文件#include "stdafx.h"#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>#define MAX 10000#define _CRT_SECURE_NO_DEPRECATE //在vs中取消warning的警告2.相关函数原型void menu();void shuru(char text[]);void bc(char text[]);void dakai(char text[]);void dayin(char text[]);void chazhao(char text[],int l);void tihan(char text[],int l);int strindex(char text[],char t[],int i2,int l);void shanchu(char p[],int l);void cs(char text[]);void charu(char text[],int l);void tuichu(int status);char text[MAX]=""; //文本编辑域char name[20]=""; //文件保存的位置int status=0; //显示是否保存过的状态int ntext; //文本编辑的位置3./*打开文件模块*/void dakai(char text[]){system("cls");FILE *fp;char pd,ch;char name[30];int i=0;printf("输入A:确定打开文件(未保存的数据将会丢失) M:返回主菜单");fflush(stdin);pd=getchar();if (pd=='A'||pd=='a'){printf("请输入要打开文件名字(例如c:\\a.txt)");scanf("%s",name);while ((fp=fopen(name,"r"))==NULL){printf("\n打开文件失败,请重新输入要打开的文件名:");scanf("%s",name);}cs(text);while(!feof(fp)){ch=fgetc(fp);text[i]=ch;i++;}text[i]='\0';ntext=i;fclose(fp);printf("\n文件读取成功\n文件内容为\n");dayin(text);}if (pd=='M'||pd=='m')menu();}4./*保存模块*/void bc(char text[]){system("cls");FILE *fp;char pd;char tmp;int i;printf("\n输入【A】保存;任意键返回主菜单不保存\n");fflush(stdin);pd=getchar();if (!(pd=='A'||pd=='a')){menu();}else{if(name[20]==NULL){printf("\n请输入保存文件名(例如: c:\\a.txt):");scanf("%s",name);}while ((fp=fopen(name,"w+"))==NULL){printf("文件不存在,请重新输入文件名:");scanf("%s",name);}printf("\nA:确定;B:取消:");while(scanf("%c",&tmp)!=EOF){if (tmp=='A' || tmp=='a'){for(i=0;i<ntext;i++)fprintf(fp,"%c",text[i]);fclose(fp);status=1;printf("\n文件保存成功\n");break;}if (tmp=='B' || tmp=='b'){break;}}}}5./*初始化模块*/void cs(char text[]){int i;for (i=0;i<ntext;i++){text[i]='\0';}ntext=0;status=0;}int strindex(char text[],char t[],int i2,int l) //查找要操作的数据的位置(模式匹配) {int i1=l,j=0;while (i1<ntext&&j<i2){if (text[i1]==t[j]) //继续匹配下一个字符{j++;i1++;//主串和子串依次匹配下一个字符}else //主串、子串指针回溯重新开始下一次匹配{i1=i1-j+1; //主串从下一个位置开始匹配j=0;//子串从头开始匹配}}if (j>=i2){return(i1-i2);} //返回匹配的第一个字符的下标elsereturn(-1); //模式匹配不成功}6./*菜单显示模块*/void menu(){system("cls");time_t timep;time (&timep);printf("%s",ctime(&timep));printf("\n\n\n\n\n\n\n\n\n\t\t\tWelcom to use our TXT edition system!\n");printf("\n\n\t\t\t 欢迎您使用文本编辑器软件!\n");printf("\n\n\n\n\n\n\n\n\npress Enter to continue...\n");getchar();loop:system("cls");printf("\n\n\n\n\t\t******************简易文本编辑器*****************\n\n");printf("\t\t\t\t----0.清空内容--\n");printf("\t\t\t\t----1.打开文件--\n");if (ntext==0){printf("\t\t\t\t----2.输入内容--\n");}else {printf("\t\t\t\t----2.继续输入--\n");}printf("\t\t\t\t----3.查找------\n");printf("\t\t\t\t----4.插入------\n");printf("\t\t\t\t----5.删除------\n");printf("\t\t\t\t----6.替换------\n");printf("\t\t\t\t----7.显示内容--\n");printf("\t\t\t\t----8.保存------\n");printf("\t\t\t\t----9.退出------\n");printf("\n\t\t*********************选项************************\n");printf("\n\t\t\t\t输入选项0-9:");char n;fflush(stdin);n=getchar();if(n>='0'&&n<='9'){switch (n){case '0': cs(text);break;case '1': dakai(text);break;case '2': shuru(text);break;case '3': chazhao(text,0);break;case '4': charu(text,1);break;case '5': shanchu(text,0);break;case '6': tihan(text,0);break;case '7': dayin(text);break;case '8': bc(text);break;case '9': tuichu(status);default : break;}}else{printf("\n输入有误,请重新输入:");fflush(stdin);n=getchar();}system("pause");goto loop;}7./*查找*/void chazhao(char text[],int l){system("cls");int i,t,a=-1;char pattern[20],bd,pd;printf("原文为:\n");dayin(text);printf("请输入您要查找的内容");scanf("%s",pattern);printf("您查找的内容是:%s\n",pattern);t=strlen(pattern);loop:a=strindex(text,pattern,t,l);if (a!=-1){l=a+t;}int hs=1,ls=0;for (i=0;i<=a;i++){ls++;if (text[i]=='\n'){hs++;ls=0;}}if (a==-1){printf("查找到结尾没有找到\n输入【R】将重头查找;任意键返回主菜单");l=0;fflush(stdin);pd=getchar();}else{printf("已经找到在第%d行第%d列,输入【R】继续查找下一处;任意键返回主菜单",hs,ls);fflush(stdin);bd=getchar();if (bd=='R'||bd=='r')goto loop;}if (pd=='R'||pd=='r'){l=0;chazhao(text,l);}}8./*显示模块*/void dayin(char text[]){system("cls");printf("现在文本的内容为:\n");printf("%s\n",text);int hs=1,i;for (i=0;i<ntext;i++){if (text[i]=='\n'){hs++;}}printf("\n文本共有%d行\n",hs);}9./*输入模块*/void shuru(char text[]){system("cls");printf("请输入内容(输入@结束输入并返回主菜单):\n");printf("%s",text);char c;int i=ntext,j=ntext;fflush(stdin);while ((c=getchar())!='@'){text[i]=c;i++;ntext=i;continue;}int cout=0,zf=0,h=1,hs=1,zfs=0;for(;cout<ntext;cout++){zf++;if(text[cout]=='\n'){h++;zf--;}if(text[cout]==' ')zf--;}for(cout=j;cout<ntext;cout++){zfs++;if(text[cout]=='\n'){hs++;zfs--;}if(text[cout]==' ')zfs--;}printf("统计:文本一共有%d个字符,%d行,本次输入了%d个字符,%d行\n",zf,h,zfs,hs);}10./*删除*/void shanchu(char p[],int l){int i,a=-1,t2=0;char x[20],px,pd,pdx,c;system("cls");printf("%s",p);printf("\n输入【A】执行查找删除内容;任意键返回主菜单:");fflush(stdin);px=getchar();if (px=='a'||px=='A'){printf("\n输入您要删除的内容,以@结束:");fflush(stdin);while ((c=getchar())!='@'){if (c=='@'){break;}else{x[t2]=c;t2++;continue;}}loop:a=strindex(p,x,t2,l);int hs=1,ls=0;for (i=0;i<=a;i++){ls++;if (p[i]=='\n'){hs++; ls=0;}}if (a==-1){printf("已查找结束,您要删除的内容不存在\n输入【R】重新输入要删除的内容;其他键将返回主菜单:");l=0;fflush(stdin);pdx=getchar();}else{printf("你要删除的内容在第%d行第%d列\n 输入【A】确定删除;输入【B】寻找下个词;其他键将返回主菜单:",hs,ls);fflush(stdin);pd=getchar();l=t2+a;if (pd=='a'||pd=='A'){for(i=a;i<ntext;i++){p[i]=p[i+t2];}ntext=ntext-t2;printf("删除成功,删除后的内容为:\n%s\n",text);}else if (pd=='b'||pd=='B')goto loop;}if(pdx=='r'||pdx=='R')shanchu(text,l);}}11./*插入*/void charu(char text[],int l) //向文本中插入内容{system("cls");int i=0,t=0,t2=0,a=-1,b;char cr[20]="",pd,x[500],c,d;printf("\n当前文本信息为:\n");printf("%s",text);printf("\n输入您要在哪个内容前插入,以@结束:");fflush(stdin);while ((c=getchar())!='@') //用一个数组接收要插入在哪个内容之前{if (c=='@'){break;}else{cr[t]=c;t++;continue;}}loop:a=strindex(text,cr,t,l); //查找并返回要插入的位置点int hs=1,ls=0;for (b=0;b<a;b++){ls++;if (text[b]=='\n'){hs++;ls=0;}}if (a==-1){printf("\n查找到结尾没有找到插入点,输入【R】查找其他;按其他键返回菜单:\n");l=0;fflush(stdin);d=getchar();fflush(stdin);}else{printf("\n您要插入的位置是第%d行,第%d列之前\n【A】.不是此位置向后继续找插入点\n【B】.在此位置插入\n按其他键返回菜单\n请选择:",hs,ls+1);fflush(stdin);pd=getchar();if (pd=='a'||pd=='A'){l=a+t;goto loop;}else if (pd=='b'||pd=='B'){printf("\n\n输入您要插入的内容,以@结束:");fflush(stdin);while ((c=getchar())!='@'){if (c=='@'){break;}else{x[t2]=c;t2++;continue;}}for (i=ntext;i>=a;i--){text[i+t2]=text[i];}for (i=0;i<t2;i++){text[i+a]=x[i];}ntext=ntext+t2;printf("\n当前文本信息为:\n");for (i=0;i<=ntext-1;i++)printf("%c",text[i]);printf("\n文本插入成功\n");fflush(stdin);getchar();}}if (d=='r'||d=='R'){l=0;charu(text,l);}status=0;}12./*替换*/void tihan(char p[],int l) //内容替换{int t=0,t1=0,i,a,b;char c,th[20],d,d1,bth[20];int i2;system("cls");printf("\n当前文本信息为:\n");for (i2=0;i2<=ntext-1;i2++)printf("%c",p[i2]);printf("\n输入要被替换的内容,以@结束:");fflush(stdin);while ((c=getchar())!='@') //t指替换前内容的长度{if (c=='@'){break;}else{bth[t]=c;t++;continue;}}loop:a=strindex(p,bth,t,l); //查找要被替换的内容的位置int hs=1,ls=0;for (b=0;b<a;b++){ls++;if (p[b]=='\n'){hs++;ls=0;}}if (a==-1){printf("\n查找到结尾没有找到要被替换的内容\n输入【R】查找其他内容,按其他键返回主菜单键\n");l=0;d=getchar();fflush(stdin);}else{printf("\n\n已经找到要查找的数据在第%d行第%d列\n输入【A】继续向后查找相同内容\n输入其他键将进行替换操作\n请选择:",hs,ls+1);fflush(stdin);l=t+a;char pd;pd=getchar();if (pd!='a'&&pd!='A'){printf("\n是否要替换该内容?\nA:替换给内容;其他键返回主菜单\n请选择:");fflush(stdin);d1=getchar();if (d1=='a'||d1=='A'){printf("\n输入要替换的内容,以@结束:");fflush(stdin);while ((c=getchar())!='@') //t1指替换后的内容长度{if (c=='@'){break;}else{th[t1]=c;t1++;continue;}}if (t==t1) //将要被替换的内容和替换后的内容进行长度比较{for (i=0;i<t1;i++)p[i+a]=th[i];}else{if (t>t1){for (i=0;i<t1;i++){p[i+a]=th[i];}for (i=a+t1;i<ntext;i++){p[i]=p[i+t-t1];}ntext=ntext+t1-t;}else{for (i=ntext;i>=a;i--){p[i+t1-t]=p[i];}for (i=0;i<t1;i++){p[i+a]=th[i];}ntext=ntext+t1-t;}}printf("替换成功");printf("\n当前文本信息为:\n");for (i2=0;i2<=ntext-1;i2++)printf("%c",p[i2]);getchar();status=0;}}elsegoto loop;}if(d=='r'||d=='R')tihan(text,l);}13./*退出*/void tuichu(int status){char pd;if(status)exit(0);elseprintf("还未保存文件,确定退出?(Q.直接退出;Y.保存后退出");fflush(stdin);pd=getchar();if(!(pd=='Q'||pd=='q'))bc(text);exit(0);}int main(){menu();return (0);}调试分析1.界面设计2.界面设计2主界面的设计如图,比较单调。

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语言的学习,以提高对开发环境的进一步认识和综合编程能力。

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

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

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

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

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

数据结构-课程设计-简单行编辑程序
将活区写入输出文件,并从输入文件中读入下一段,作为新的活区。
(4)活区显示。格式:p<回车>
逐页地(每页20行)显示活区内容,每显示一页之后请用户决定是否继续显示以后各页(如果存在)。印出的每一行要前置以行号和一个空格符,行号固定占4位,增量为1。
各条命令中的行号均须在活区中各行行号范围之内,只有插入命令的行号可以等于活区第一行行号减1,表示插入当前屏幕中第一行之前,否则命令参数非法。
六、关键源程序清单和执行结果
#include<iostream>
#include<string>
#include<iomanip>
#include<fstream>
const int activeMaxLen=50; //活区最大行数
const int pageRowNum=10; //每页的行数
using namespace std;
学号
数据结构课程设计
设计说明书
简单行编辑程序
起止日期:2011年12月12日至2011年12月16日
学生姓名
班级
成绩
指导教师(签字)
电子与信息工程系
2011年12月16日
天津城市建设学院
课程设计任务书
2011—2012学年第1学期
电子与信息工程系软件工程专业班级
课程设计名称:数据结构课程设计
设计题目:简单行编辑程序
完成期限:自2011年12月12日至2011年12月16日共1周
设计依据、要求及主要内容(可另加附页):
一、设计目的
熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。
二、设计要求

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

这就是其重要意义。

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

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

中国地质大学C语言课程设计题目编号和名称16 简单的行编辑器教师姓名学生姓名学生学号学生班级所在院系日期2010 年7 月16 日简单的行编辑器目录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)输入、打印模块该程序需要输入一段字符串作为其待处理数据,所以通过键盘输入字符串作为待处理数据,以回车进入主函数界面。

选择菜单1打印出该段字符串。

其程序如下,程序运行截图如图2-1 2-2void Str::input_str(){cout<<"\t\t\t 请输入字符串以#结束:";int k;k=0;ch[k]='x';while( cin>>ch[k],ch[k]!='#' ) k++;ch[k]='#';len=k;}//下面的程序为:显示整个字符串。

void Str::print_str(Str &s1){cout<<"\n\t\t\t整个字符串为:";for(int k=0;s1.ch[k]!='#';k++)cout<<ch[k];cout<<"\n\n";}图2-1图2-2(2)数据修改模块该功能可通过数据插入与数据修改两部分完成对数据的修改。

1】插入完成插入操作时须先输入要插入的位置,然后输入所要插入的字符串,以‘#’结束,回车完成插入其程序如下,运行截图如图2-3void Str::insert_str(Str &s,Str s2,Str ss){cout<<"\t\t\t输入你要插入的位置:";int i;cin>>i;i--;if(i>s.len)cout<<"\t\t\t 插入位置不存在.\n";else {cout<<"\t\t\t 输入你要插入的字符串以#结束:";int r;r=0;ss.ch[r]='x';while( cin>>ss.ch[r],ss.ch[r]!='#' ) r++;ss.ch[r]='#';ss.len=r;if(ss.len>MaxSize|| ( s.len +ss.len )>MaxSize)cout<<"\t\t\t插入字符串大于最大值无法插入.\n";else {int p=0;for (int k=0; k<=i; k++){s2.ch[p]=s.ch[k];p++;}for(k=0;k<ss.len;k++){s2.ch[p]=ss.ch[k];p++;}for(k=i+1;k<s.len;k++){s2.ch[p]=s.ch[k];p++;}s2.len=p; cout<<"\t\t\t 新字符串的长度为"<<s2.len;s2.ch[p]='#';for(int q=0; s2.ch[q]!='#'; q++)s.ch[q]=s2.ch[q];s.ch[q]='#';s.len=s2.len ;cout <<"插入成功.\n";print_str(s);}}}图2-32】删除删除操作是作为修改模块的一部分,同插入操作共同完成修改数据的功能。

进行删除操作时,输入想从字符串上开始删除的位置,再输入删除的字符串长度。

回车即可完成删除。

其程序如下,运行截图如图2-4void Str::delete_str(Str &s1,Str s){cout<<"\t\t\t 输入你要开始删除的位置:";int i;cin>>i;if(i>s1.len) cout<<"\t\t\t 太大无法删除.\n";else{cout<<"\t\t\t 输入你要删除的长度:";int j;cin>>j;if(i+j>s1.len)cout<<"\t\t\t 删除的太长无法删除.\n";else {int p=0;for (int k=0;k<i;k++){s.ch[p]=s1.ch[k];p++;}for (k=i+j;k<s1.len;k++){s.ch[p]=s1.ch[k];p++;}s.len=p+1;s.ch[p+1]='#';for(int q=0; s.ch[q]!='#'; q++)s1.ch[q]=s.ch[q];s1.ch[q-1]='#';s1.len=s.len-1;cout<<"\t\t\t 删除成功.\n";s1.print_str(s1);}}}图2-4(3)查找模块在字符串内寻找你想要的一段字符串,显示找到的位置。

选择查找功能的菜单,通过键盘输入所要查找字符串,回车即可找出其所在位置。

程序如下,运行截图如图2-5void Str::find_position(Str &s,Str &ss,int &n){cout<<"\t\t\t 输入字符串:";ss.input_str();int y=0;for(int i=0;i<s.len;i++){for(int j=i,k=0; s.ch[j]==ss.ch[k]; j++,k++){if(k==ss.len-1){ cout<<"\t\t\t 位置是"<<i+1<< " .\n";position[y]=i+1;y++;}}}if(!y){cout<<"\t\t\t 没有找到要字符\n";position[y]=-1;}n=y; //n}图2-5(4)替换模块在字符串内,把某些小段字符串替换为你想要的字符串。

相关文档
最新文档