1、c语言实习报告 简单的行编辑器系统简单的行编辑器一题目要求1设置一个简单的行编辑器,每行以回车结束。2数据以文件形式存储。3编辑器具有查找,替代,修改数据的功能。二需求分析根据题目要求,数据以文件的形式存储,所以应提供文件的输入,输出等操作;还需要文件具有查找,替换,修改数据的功能。三总体设计根据上面的需求分析,可以将这个系统的设计分为如下七大模块:编辑,查找,修改,删除,替换,保存,退出。四详细设计1主函数为了各模块的独立性,主函数一般设计得比较简单,本系统主要用主函数打开上次保存的数据和进入主菜单函数流程图程序/*主函数*/main() FILE *pfile; pfile=fopen(L
2、inedit.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;2主菜单函数流程图程序void menu(char (*lines)MAXC)int selection;dosystem(cls);puts(tt*MUNU*nn);puts(tt1
3、.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);els
4、e 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);3各功能模块设计(1)编辑模块流程图程序/*编辑*/void edit(char (*lines)MAXC) int i,
5、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(ch
6、ar (*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(linesj
7、0!=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 ind
8、line; 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) pr
9、intf(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); print
10、f(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)修改模块流程图删除模块的流程图也是在查找模块的基础上稍加改动,在此不再赘述其流程图可简单写为
11、程序/*修改*/*在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; strn
12、cpy(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; d
13、o /*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 i
14、s: 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, ); str
15、cpy(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主菜单函数2编辑模块3替换模块4查找模块5修改模块6删除模块7保存模块8退出模块
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1