《C语言课程设计简单的行编辑器.pdf》由会员分享,可在线阅读,更多相关《C语言课程设计简单的行编辑器.pdf(19页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、-语言程序设计报告 姓名:班级:学号:指导教师:课题:简单的行编辑器 -简单的行编辑器 一 题目要求 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 主菜单函数 流程图 程序 void menu(cha
3、r(*lines)MAXC)int selection;do 显示一系列功能选项 输入 n,判断 n 是否是 0-6 根据 n 的值调用各功能模块函数 是 否 进入主菜单函数-system(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 numb
4、er:bb);do scanf(%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
5、 6:savetofile(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+)-if(line
6、si0=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 ple
7、ase 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)删除模块 流程图 删除即在查找到某行的基础上再
8、删掉,其具体流程图可参照查找的流程图-程序/*删除*/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)retur
9、n;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+
10、)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)修改模块
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(caNewS
12、tring);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;cha
13、r 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
14、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
15、,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退出模块
限制150内