C语言课程设计简单的行编辑器.docx
- 文档编号:4680055
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:21
- 大小:383.47KB
C语言课程设计简单的行编辑器.docx
《C语言课程设计简单的行编辑器.docx》由会员分享,可在线阅读,更多相关《C语言课程设计简单的行编辑器.docx(21页珍藏版)》请在冰点文库上搜索。
C语言课程设计简单的行编辑器
语言程序设计报告
姓名:
班级:
学号:
指导教师:
课题:
简单的行编辑器
简单的行编辑器
题目要求
1.设置一个简单的行编辑器,每行以回车结束。
2.数据以文件形式存储。
3.
编辑器具有查找,替代,修改数据的功能。
根据题目要求,数据以文件的形式存储,所以应提供文件的输入,输出等操作;还需要文件
具有查找,替换,修改数据的功能。
根据上面的需求分析,可以将这个系统的设计分为如下七大模块:
编辑,查找,修改,,删除,替换,保存,退出。
四.详细设计
1.主函数
为了各模块的独立性,主函数一般设计得比较简单,本系统主要用主函数打开上次保存的数据和进入主菜单函数
流程图
打开上次保存文件
程序
/*************
main()
*********************
z主^函^数************************************进入主菜单函数
{FILE*pfiie
pfile=fopen("Linedit.txt","a+");readfile(lines,pfile);
fclose(pfile);
menu(Iines);
}
intreadfile(char(*lines)[MAXC],FILE*pfile){inti=0;
while(!
feof(pfile)){
fgets(lines[i],MAXC,pfile);
/*if(!
strstr(lines[i],"\n"))return1;*/
i++;
}return0;
}
2.主菜单函数
流程图
程序
voidmenu(char(*lines)[MAXC]){intselection;
do{
system("cls");
puts("\t\t***********************MUNU*****************puts("\t\t1.Editnewline");
puts("\t\t2.Replaceline");
puts("\t\t3.Deleteline");puts("\t\t4.Searchline");
puts("\t\t5.Modifydata");
puts("\t\t6.Save");
puts("\t\t0.Exit");
printf("Pleaseselectanumber:
[]\b\b");do{
scanf("%d",&selection);if(selection<0||selection>6){printf("Invalidselection!
Pleasetryagain");printf("andselectanumber:
[]\b\b\n");
}
elsebreak;
}while(true);
switch(selection)
{
case1:
edit(lines);break;
case5:
modify(lines);break;
case3:
mydelete(lines);break;
case4:
search(lines);break;
case2:
replace(lines);break;case6:
savetofile(lines);break;
case0:
myexit(lines);
}
}while(true);
}
3.各功能模块设计
(1)编辑模块流程图
mt1=0,01^81=0
清屏clisciQ;
i hnes[g(U]! =O 经7二.八 iidBx++, pint旷兀d: pmtfij"ynlnPleasetypeanewlute ffliEhtstdin), i=0; i^MAXL ~「一-_晦[MT: / — 辱ts(liiues[i),MAXC^tdii^ cantiKiE, retEm; i++; 程序 /** *************************** 编辑*********************************** voidedit(char(*lines)[MAXC]) { inti,index; /*system("cls");*/ clrscr(); for(i=0,index=O;i =0) { index++; printf("%d: %s",index,lines[i]); } printf("\n\nPleasetypeanewline: \n");fflush(stdin); for(i=0;i { if(lines[i][O]=='\O') 空行可写入*/ {/*每行第一个字符作为标志位 fgets(lines[i],MAXC,stdin); return; } else continue; } } (2)替换模块 流程图 niti;mtindEne,血tj,k, II 1 clisci(); i=0; j k-H-: | 〜_k-=indliiw/ 输由騎选定行 pmtf["Fleasetj/peyoufnewline: ln") memseXlinesljl.O^XC), fflush(stdin); 堆tsOiite即,MAXQstdii^; breek; 程序 voidreplace(char(*lines)[MAXC]) { inti; intindline; intj,k; do { /*system("cls");*/ clrscr(); /*打印所有*/ for(i=0;i if(lines[i][0]! =0) printf("%d: %s",i+1,lines[i]); printf("\n\nWhichlinedoyouprefertoreplace? (Toquitpleaseinput0)[]\b\b"); scanf("%d",&indline); if(indline==0) return; else { for(j=0,k=0;j { if(lines[j][0]! =0)k++; if(k==indline) { printf("\n\nThelinetobereplacedis: \n%s",lines[j]);printf("Pleasetypeyournewline: \n");memset(lines[j],0,MAXC); fflush(stdin); fgets(lines[j],MAXC,stdin); break; } } } }while(true); } (3)删除模块流程图删除即在查找到某行的基础上再删掉,其具体流程图可参照查找的流程图 查找行 删除行 do { /*system("cls");*/ clrscr(); for(i=0,index=O;i if(lines[i][0]! =0) { index++; printf("%d: %s",index,lines[i]); } printf("\n\nWhichlinedoyouprefertodelete? (Toquitpleaseinput0)[]\b\b"); scanf("%d",&indline); if(indline==O)return; elsefor(j=0,k=0;j { if(lines[j][0]! =0)k++; if(k==indline) { printf("Thelinetobedeletedis: \n%s\n",lines[j]);memset(lines[j],O,MAXC); system("pause"); break; } } }while(true); } (4)查找模块 流程图 查^找****************************************/ voidsearch(char(*lines)[MAXC]) { inti,index;intindline;intj,k; do { /*system("cls");*/clrscr(); for(i=0,index=0;i =0) { index++; printf("%d: %s",index,lines[i]); } printf("\n\nWhichlinedoyouwanttosearch? (Toquitpleaseinput0)[]\b\b"); scanf("%d",&indline);if(indline==0)return;else for(j=0,k=0;j { if(lines[j][0]! =0)k++;if(k==indline) { printf("Thelinetobesearchedis: \n%s\n",lines[j]);system("pause"); break; } } }while(true); } (5)修改模块 流程图删除模块的流程图也是在查找模块的基础上稍加改动,在此不再赘述其流程图可简单写为 查找行 修改行 程序 /******************************修尖^改******************************** /*在sSrc中用sReplaceStr替换sMatchStr*/ intmodifystr(char*sSrc,char*sMatchStr,char*sReplaceStr) { intStringLen; charcaNewString[MAXC]; 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);} return0; } voidmodify(char(*lines)[MAXC]) { inti,indline; charbuf[MAXC]; intk; intj; char*token=0; charsearch[MAXC],replace[MAXC]; do {/*system("cls");*/clrscr(); for(i=0;i ='\0')printf("%d: %s",i+1,lines[i]); printf("\n\nWhichlinedoyouprefertomodify? (Toquitpleaseinput0)[]\b\b"); scanf("%d",&indline);if(indline==0)return; else {for(j=0,k=0;j {if(lines[j][0]! =0)k++;if(k==indline) {printf("\n\nThelinetobereplacedis: \n%s",lines[j]); q): "); printf("\n\nInputthesearchstringandthereplace");printf("(Toquitpleaseinput memset(buf,0,MAXC);fflush(stdin); fgets(buf,MAXC,stdin);k=strlen(buf)-1; if(buf[k]=='\n')buf[k]='\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(lines[j],search,replace);break; } } } }while(true); } (6)保存模块 流程图 FILEinti; i=0 X fputsflines[i]Tpfile), fclose(pfile)f priiitf("^TheliliesliasbeensavetUti');那协诚"pause"); 程序 voidsavetofile(char(*lines)[MAXC]) { FILE*pfile; inti; pfile=fopen("Linedit.txt","w+"); for(i=0;i if(lines[i][O]! ='\O')fputs(lines[i],pfile); fclose(pfile); printf("\nThelineshasbeensaved.'n");system("pause"); } (7)退出模块 流程图 程序 voidmyexit(char(*lines)[MAXC]) { charc; printf("Savethelinestothefile? (y/n门;fflush(stdin); c=getchar(); if(c=='n')exit (1); savetofile(lines); exit (1); } 五.上机操作 1.主菜单函数 邑C;\DOCUME-1\ADMINI^1、梟面\TUEXE 哄*JCJOCKNU艮■X;M算J*X;M耳図8 MStX耳>t 1.Editnewline 2.Kepiaceline』・Dftleteline4.Searcliline 5-Modifydata 6.Saus B.Exit Plta^eseLeetanunber: f_] 2.编辑模块 3•替换模块 Mhiichlinedoyouprefertoreplace? CTaquitpleaseinputL] 吓C: \DOCUME-1\ADMINI-1'桌面\TCJEXE X 12 12 □ Whichlinedopreferto*replace? CToquitpleaseinput11J Thelinetobereplacedis: 1234567B9 Pleasetypeyourneulime: 555556789. 4查找模块. Whichlinedoyoupreferto*modjify? Tlaelinetobereplacedis 987654321 Inputthesearchstringandthereplace 8765 區匚: \DOajMEellADMINL-l、車面\TC*E5C£ 12 5555567B9 9B8884321 UlrichlinedoyouprefertadeleteYCToquitpleaseinputU>12iThslinatobedaletsdis: Press*nykeutocontinue*”* 7•保存模块 匡C;\DOCUME^l\ADMINI-vl\J£面\TUFXE iMXlIHiKJfIgSOCXMEKHJtJitJMIXXX胃HXXNIUNIIX赳NKXJMIKXX宾? CiMXWiMNXX 1.Editnewline 2. 6.Save B.Exit Replaceline3deleteline4.Searchline5■用odifydata 来: KXMiK半耳壬14岳耳XJt胃KIHt-MEMrSKHMX胃梵汪水胃■: ・HM: MKN来 Pleaseselect帚number*(61 TlielinesTtasbeensaved. Press凰nykeytocontinus・ - &退出模块
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 简单 编辑器