1、C语言课程设计 简单的行编辑器语言程序设计报告姓名: 班级:学号:指导教师: 课题:简单的行编辑器 简单的行编辑器一 题目要求1 设置一个简单的行编辑器,每行以回车结束。2 数据以文件形式存储。3 编辑器具有查找,替代,修改数据的功能。二 需求分析根据题目要求,数据以文件的形式存储,所以应提供文件的输入,输出等操作;还需要文件具有查找,替换,修改数据的功能。三 总体设计根据上面的需求分析,可以将这个系统的设计分为如下七大模块:编辑,查找,修改,删除,替换,保存,退出。简单的行编辑器系统编辑替换删除修改保存退出查找四 详细设计1 主函数为了各模块的独立性,主函数一般设计得比较简单,本系统主要用主
2、函数打开上次保存的数据和进入主菜单函数流程图打开上次保存文件进入主菜单函数程序/*主函数*/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;2 主菜单函数流程图显示一
3、系列功能选项输入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)
4、;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:s
5、avetofile(lines);break;case 0:myexit(lines); while(true);3 各功能模块设计(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+)
6、 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 prefe
7、r 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); br
8、eak; 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 q
9、uit 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 in
10、dline; 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) pri
11、ntf(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(sSr
12、c,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,sMat
13、chStr); 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);
14、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=
15、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)MAX
16、C) 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