行编辑器——C语言.doc_第1页
行编辑器——C语言.doc_第2页
行编辑器——C语言.doc_第3页
行编辑器——C语言.doc_第4页
行编辑器——C语言.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

简单的行编辑器 1.1题目要求 ()设置一个简单的行编辑器,每行以回车结束。()数据以文件形式存储。()编辑器具有查找,替代,修改数据的功能。提示把一行字符调入数组处理。1.2需求分析根据题目要求,数据以文件的形式存储,所以应提供文件的输入,输出等操作。还需要具有查找,替换,修改数据的功能。1.3总体设计根据上面的需求分析,可以将这个系统的设计分为如下七大模块:编辑,查找,修改,删除,替换,保存,退出。图1.3 系统功能模块图简单的行编辑器系统编辑替换删除修改保存退出查找1.4详细设计1.4.1 主函数 为了各模块的独立性,主函数一般设计得比较简单,本系统主要用主函数打开上次保存的数据和进入主菜单函数打开上次保存文件流程图:进入主菜单函数程序:/*主函数*/main() FILE *pfile; pfile=fopen(Linedit.txt,a+); readfile(lines,pfile); fclose(pfile); menu(lines);int readfile(char (*lines)MAXC,FILE *pfile) int i=0;while(!feof(pfile)fgets(linesi,MAXC,pfile); /*if(!strstr(linesi,n) return 1;*/i+;return 0;1 主菜单函数流程图:显示一系列功能选项输入n,判断n是否是0-6根据n的值调用各功能模块函数是否程序void menu(char (*lines)MAXC)int selection;dosystem(cls);puts(tt*MUNU*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 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:savetofile(lines);break;case 0:myexit(lines); while(true);2 各功能模块设计(1) 编辑模块流程图:程序/*编辑*/void edit(char (*lines)MAXC) int i,index; /*system(cls);*/ clrscr(); for(i=0,index=0;iMAXL;i+) if(linesi0!=0) index+; printf(%d: %s,index,linesi); printf(nnPlease type a new line:n); fflush(stdin); for(i=0;iMAXL;i+) if(linesi0=0) /*每行第一个字符作为标志位 空行可写入*/ fgets(linesi,MAXC,stdin); return; else continue; (2) 替换模块流程图程序/*替换*/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) return; else for(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 (*lines)MAXC) int i,index; int indline; int j,k; do /*system(cls);*/ clrscr(); for(i=0,index=0;iMAXL;i+) if(linesi0!=0) index+; printf(%d: %s,index,linesi); printf(nnWhich line do you prefer to delete?(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 deleted is: n%sn,linesj); memset(linesj,0,MAXC); system(pause); break; while(true);(4) 查找模块流程图:程序/*查找*/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) 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 StringLen; char caNewStringMAXC; 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); return 0;void modify(char (*lines)MAXC) int i,indline; char bufMAXC; int k; int j; char* token=0; char searchMAXC,replaceMAXC; 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 modify?(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(nnThe line to be replaced is: n%s,linesj); printf(nnInput the search string and the replace );printf(To quit please input q):); memset(buf,0,MAXC); fflush(stdin); fgets(buf, MAXC, stdin); k= strlen(buf)-1; if(bufk=n) bufk=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(linesj,search,replace); break; while(true); (6) 保存模块流程图:程序void savetofile(char (*lines)MAXC) FILE *pfile; int i; pfile=fopen(Linedit.txt,w+); for(i=0;iMAXL;i+) if(linesi0!=0) fputs(linesi,pfile); fclose(pfile); printf(nThe lines has been saved.n); system(pause);(7) 退出模块流程图:提示是否保存是否保存保存退出是否程序void myexit(char (*lines)MAXC) char c; printf(Save the lines to the file?(y/n); fflush(stdin); c=getchar(); if(c=n) exit(1); savetofile(lines); exit(1);1.5 上机操作1. 主菜单函数1 编辑模块3替换模块4查找模块5修改模块6删除模块7保存模块8退出模块1.6 个人心得 总结:经过一周的C语言程序设计实习我有了很深刻的认识和了解。上个学期,我们学习了C语言程序设计知识,初步了解了一些计算机语言方面的知识。借这次上机实习之际我又把上学期的课程重新复

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论