当前位置:文档之家› 简单的行编辑器课程设计报告

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

中国地质大学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)替换模块在字符串内,把某些小段字符串替换为你想要的字符串。

相关主题