C语言课程设计简单的行编辑器.docx
《C语言课程设计简单的行编辑器.docx》由会员分享,可在线阅读,更多相关《C语言课程设计简单的行编辑器.docx(21页珍藏版)》请在冰豆网上搜索。
![C语言课程设计简单的行编辑器.docx](https://file1.bdocx.com/fileroot1/2023-2/23/301e6437-8c7a-436e-84a4-47d34bca9031/301e6437-8c7a-436e-84a4-47d34bca90311.gif)
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;
ihnes[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;
jk-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;iif(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;iif(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;iif(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耳図8MStX耳>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
Inputthesearchstringandthereplace8765
區匚:
\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・
-
&退出模块