《行编辑器——C语言》由会员分享,可在线阅读,更多相关《行编辑器——C语言(20页珍藏版)》请在金锄头文库上搜索。
1、简单的行编辑器1.1题目要求1设置一个简单的行编辑器,每行以回车完毕。2数据以文件形式存储。3编辑器具有查找,替代,修改数据的功能。 提示把一行字符调入数组处理。1.2需求分析根据题目要求,数据以文件的形式存储,所以应提供文件的输入,输出等操作。 还需要具有查找,替换,修改数据的功能。1.3总体设计根据上面的需求分析,可以将这个系统的设计分为如下七大模块: 编辑,查找,修改,删除,替换,保存,退出。图1.3系统功能模块图1.4详细设计1.4.1主函数为了各模块的独立性,主函数一般设计得比拟简单,本系统主要用主函数翻开上次 保存的数据和进入主菜单函数流程图:翻开上次保存文件进入主菜单函数程序:/
2、*主函数* *mai n() FILE *pfile;p(Li nedit.txt,a+); read);fclose(pfile);menu (li nes);in t read (*l in es)MAXC,FILE *pfile) int i=0;while(!feof(pfile) fgets(li nesi,MAXC,pfile);/*if(!strstr(li nesi,n) return 1;*/ i+;return 0;1 主菜单函数流程图:程序void menu(char (*lines)MAXC) int selection;do system(cls);puts(tt*M
3、UNU*nn);puts(tt1.Edit new line); puts(tt2.Replace line); puts(tt3.Delete line);puts(tt4.Search line); puts(tt5.Modify data); puts(tt6.Save); puts(tt0.Exit);puts(nntt*n);printf(Please select a number: bb); doscanf(%d,&selection); if(selection6) printf(Invalid selection!Please try again ); printf(and
4、select a number:bbn);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;case 6:saveto);break;case 0:myexit(lines); while(true);2各功能模块设计1) 编辑模块 流程图:ixt i=0泌 炖 冏弭 cLracif);存MAXL
5、7 讪农HOT/iiidei-H-;piydKXd.: siiudeiTsH);ptin珥WtiPlease tyje a, iielinc ;ri) ”fflus 岭 tdi讥0;靱就 kne 取conintf;i+;程序/*编辑 *void edit(char (*l in es)MAXC)int i,i ndex;/*system(cls);*/clrscr();for(i=0,i ndex=0;iMAXL;i+) if(li nesi0!=0)in dex+;printf(%d: %s,index,linesi);prin tf(nnPlease type a new lin e:n)
6、; fflush(stdi n);for(i=0;iMAXL;i+)/*每行第一个字符作为标志位 if(li nesiO=O)行可写入*/fgets(li nesi,MAXC,stdi n); return;elsecon ti nue;2)替换模块 流程图int it mtindhiwecliscrO, IO;jrinlfr片d:捲:卄口血亚1);i+Kidded rtodline);j=:MhXL:Ires OlU 1=0;k+:I-_k=indhi /爾出所遼足行pmtH Pleue韓in堆悼 1 血:lti)meins elines|j ?0 ,MAXC);fliEKstdii),唇域
7、lines 血 TvIAXC? wtdi 事break;i卄程序/*替换 */void replace(char (*lines)MAXC) int i;int indline;int j,k;do/*system(cls); */ clrscr();/* 打印所有 */for(i=0;iMAXL;i+) if(linesi0!=0)printf(%d: %s,i+1,linesi);printf(nnWhich line do you prefer to replace?(To quit please input 0) bb);scanf(%d,&indline);if(indline=0)
8、return;elsefor(j=0,k=0;jMAXL;j+)if(linesj0!=0) k+;if(k=indline)printf(nnThe line to be replaced is: n%s,linesj); printf(Please type your new line:n); memset(linesj,0,MAXC);fflush(stdin);fgets(linesj, MAXC, stdin);break;while(true);(3)删除模块流程图:删除即在查找到某行的根底上再删掉,其具体流程图可参照查找的流程图程序/*/void mydelete(char (*
9、li nes)MAXC) int i,i ndex;int in dli ne;int j,k;do/*system(cls);*/clrscr();for(i=0,i ndex=O;iMAXL;i+)if(li nesi0!=0)in dex+;printf(%d: %s,index,linesi);printf(nnWhich line do you prefer to delete?(To quit please input 0) bb);scan f(%d,&in dli ne);if(i ndli ne=0)return;elsefor(j=0,k=0;jMAXL;j+)if(li
10、nesj0!=0) k+;if(k=i ndli ne)prin tf(The line to be deleted is: n%sn,li nesj); memset(li nesj,0,MAXC);system(pause);break;while(true);(4)查找模块流程图:hi毗也0”/indfifi-H-,程序/*查找 */void search(char (*lines)MAXC) int i,index;int indline;int j,k;do/*system(cls);*/clrscr();for(i=0,index=0;iMAXL;i+)if(linesi0!=0)
11、index+;printf(%d: %s,index,linesi);printf(nnWhich line do you want to search?(To quit please input 0) bb);scanf(%d,&indline);if(indline=0)return;else for(j=0,k=0;jMAXL;j+) if(linesj0!=0) k+; if(k=indline)printf(The line to be searched is: n%sn,linesj); system(pause);break; while(true);( 5) 修改模块流程图:删除模块的流程图也是在查找模块的根底上稍加改动,在此不再赘述 其流程图可简单写为查找行修改行程序/*修尖改 */* 在 sSrc 中用 sReplaceStr替换 sMatchStr */int modifystr(char *sSrc,char *sMatchStr,char *sReplaceStr) int Stri ngLe n;char caNewStri ngMAXC;char *Fi ndPos = strstr(sSrc,sMatchStr);if(!Fi ndPos)|(!sMatchStr)return -1;w