您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > C语言课程设计--简单的行编辑器
语言程序设计报告姓名:班级:学号:指导教师:课题:简单的行编辑器简单的行编辑器一.题目要求1.设置一个简单的行编辑器,每行以回车结束。2.数据以文件形式存储。3.编辑器具有查找,替代,修改数据的功能。二.需求分析根据题目要求,数据以文件的形式存储,所以应提供文件的输入,输出等操作;还需要文件具有查找,替换,修改数据的功能。三.总体设计根据上面的需求分析,可以将这个系统的设计分为如下七大模块:编辑,查找,修改,,删除,替换,保存,退出。四.详细设计1.主函数为了各模块的独立性,主函数一般设计得比较简单,本系统主要用主函数打开上次保存的数据和进入主菜单函数流程图简单的行编辑器系统编辑替换删除修改保存退出查找打开上次保存文件程序/*********************************主函数**************************************/main(){FILE*pfile;pfile=fopen(Linedit.txt,a+);readfile(lines,pfile);fclose(pfile);menu(lines);}intreadfile(char(*lines)[MAXC],FILE*pfile){inti=0;while(!feof(pfile)){fgets(lines[i],MAXC,pfile);/*if(!strstr(lines[i],\n))return1;*/i++;}return0;}2.主菜单函数流程图程序voidmenu(char(*lines)[MAXC]){intselection;do{显示一系列功能选项输入n,判断n是否是0-6根据n的值调用各功能模块函数是否进入主菜单函数system(cls);puts(\t\t***********************MUNU******************\n\n);puts(\t\t1.Editnewline);puts(\t\t2.Replaceline);puts(\t\t3.Deleteline);puts(\t\t4.Searchline);puts(\t\t5.Modifydata);puts(\t\t6.Save);puts(\t\t0.Exit);puts(\n\n\t\t********************************************\n);printf(Pleaseselectanumber:[]\b\b);do{scanf(%d,&selection);if(selection0||selection6){printf(Invalidselection!Pleasetryagain);printf(andselectanumber:[]\b\b\n);}elsebreak;}while(true);switch(selection){case1:edit(lines);break;case5:modify(lines);break;case3:mydelete(lines);break;case4:search(lines);break;case2:replace(lines);break;case6:savetofile(lines);break;case0:myexit(lines);}}while(true);}3.各功能模块设计(1)编辑模块流程图程序/*****************************编辑*************************************/voidedit(char(*lines)[MAXC]){inti,index;/*system(cls);*/clrscr();for(i=0,index=0;iMAXL;i++)if(lines[i][0]!=0){index++;printf(%d:%s,index,lines[i]);}printf(\n\nPleasetypeanewline:\n);fflush(stdin);for(i=0;iMAXL;i++){if(lines[i][0]=='\0'){/*每行第一个字符作为标志位空行可写入*/fgets(lines[i],MAXC,stdin);return;}elsecontinue;}}(2)替换模块流程图程序/******************************替换****************************************/voidreplace(char(*lines)[MAXC]){inti;intindline;intj,k;do{/*system(cls);*/clrscr();/*打印所有*/for(i=0;iMAXL;i++)if(lines[i][0]!=0)printf(%d:%s,i+1,lines[i]);printf(\n\nWhichlinedoyouprefertoreplace?(Toquitpleaseinput0)[]\b\b);scanf(%d,&indline);if(indline==0)return;else{for(j=0,k=0;jMAXL;j++){if(lines[j][0]!=0)k++;if(k==indline){printf(\n\nThelinetobereplacedis:\n%s,lines[j]);printf(Pleasetypeyournewline:\n);memset(lines[j],0,MAXC);fflush(stdin);fgets(lines[j],MAXC,stdin);break;}}}}while(true);}(3)删除模块流程图删除即在查找到某行的基础上再删掉,其具体流程图可参照查找的流程图程序/*******************************删除***************************************/voidmydelete(char(*lines)[MAXC]){inti,index;intindline;intj,k;do{/*system(cls);*/clrscr();for(i=0,index=0;iMAXL;i++)if(lines[i][0]!=0){index++;printf(%d:%s,index,lines[i]);}printf(\n\nWhichlinedoyouprefertodelete?(Toquitpleaseinput0)[]\b\b);scanf(%d,&indline);if(indline==0)return;elsefor(j=0,k=0;jMAXL;j++){if(lines[j][0]!=0)k++;if(k==indline)查找行删除行{printf(Thelinetobedeletedis:\n%s\n,lines[j]);memset(lines[j],0,MAXC);system(pause);break;}}}while(true);}(4)查找模块流程图程序/**************************查找****************************************/voidsearch(char(*lines)[MAXC]){inti,index;intindline;intj,k;do{/*system(cls);*/clrscr();for(i=0,index=0;iMAXL;i++)if(lines[i][0]!=0){index++;printf(%d:%s,index,lines[i]);}printf(\n\nWhichlinedoyouwanttosearch?(Toquitpleaseinput0)[]\b\b);scanf(%d,&indline);if(indline==0)return;elsefor(j=0,k=0;jMAXL;j++){if(lines[j][0]!=0)k++;if(k==indline){printf(Thelinetobesearchedis:\n%s\n,lines[j]);system(pause);break;}}}while(true);}(5)修改模块流程图删除模块的流程图也是在查找模块的基础上稍加改动,在此不再赘述其流程图可简单写为程序/******************************修改**********************************//*在sSrc中用sReplaceStr替换sMatchStr*/intmodifystr(char*sSrc,char*sMatchStr,char*sReplaceStr){intStringLen;charcaNewString[MAXC];char*FindPos=strstr(sSrc,sMatchStr);if((!FindPos)||(!sMatchStr))return-1;while(FindPos){memset(caNewString,0,sizeof(caNewString));StringLen=FindPos-sSrc;strncpy(caNewString,sSrc,StringLen);strcat(caNewString,sReplaceStr);strcat(caNewString,FindPos+strlen(sMatchStr));strcpy(sSrc,caNewString);FindPos=strstr(sSrc,sMatchStr);}return0;}voidmodify(char(*lines)[MAXC]){查找行修改行inti,indline;charbuf[MAXC];intk;intj;char*token=0;charsearch[MAXC],replace[MAXC];do{/*system(cls);*/clrscr();for(i=0;iMAXL;i++)if(lines[i][0]!='\0')printf(%d:%s,i+1,lines[i]);printf(\n\nWhichlinedoyouprefertomodify?(Toquitpleaseinput0)[]\b\b);scanf(%d,&indline);if(indline==0)return;else{for(j=0,k=0;jMAXL;j++){if(lines[j][0]!=0)k++;if(k==indline){printf(\n\nThelinetobereplacedis:\n%s,lines[j]);printf(\n\nInputthesearchstringandthereplace);printf((Toquitpleaseinputq):);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,token);modifystr(lines[j],search,replace);break;}}}}while(true);}(6)保存模块流程图程序voidsavetofile(char(*lines)[MAXC]){FILE*pfile;inti;pfile=fopen(Linedit.txt,w+);for(i=0;iMAXL
本文标题:C语言课程设计--简单的行编辑器
链接地址:https://www.777doc.com/doc-4030798 .html