大數(shù)據(jù)結(jié)構(gòu)簡易文本編輯器
《大數(shù)據(jù)結(jié)構(gòu)簡易文本編輯器》由會員分享,可在線閱讀,更多相關(guān)《大數(shù)據(jù)結(jié)構(gòu)簡易文本編輯器(24頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、word 題目: 【2】.簡易文本編輯器 要求: 1) 具有圖形菜單界面; 2) 查找,替換〔等長,不等長〕,插入〔插串,文本塊的插入〕、塊移動〔行塊,列塊移動〕,刪除 3) 可正確存盤、取盤; 4) 正確顯示總行數(shù)。 1需求分析 一個簡易文本編輯器應(yīng)該具有圖形菜單界面,包括查找,替換〔等長,不等長〕,插入〔插串,文本塊的插入〕、塊移動〔行塊,列塊移動〕,刪除文本信息等功能并可正確存盤、取盤,正確顯示總行數(shù)。 2概要設(shè)計 為實(shí)現(xiàn)數(shù)據(jù)的有序存儲,該編輯器應(yīng)該用順序表來存儲輸入的信息。順序表是數(shù)據(jù)結(jié)構(gòu)中線性表的一種,它是用一塊地址連續(xù)的存儲空間依次存儲線性表的元
2、素。其特點(diǎn)為:在順序表上邏輯關(guān)系相鄰的倆個元素在物理位置上也相鄰;在順序表上可以隨即存取表中的元素。在編輯器的主界面中應(yīng)有如下提示信息: ⑴ 清空以前的文本信息:將用數(shù)組存的數(shù)據(jù)內(nèi)容全部置為0; ⑵ 顯示當(dāng)前文本信息:遍歷用數(shù)組存入的信息,并輸入到外部顯示器上; ⑶ 編輯信息:定義一個結(jié)構(gòu)體,并在結(jié)構(gòu)體中定義一個字符型的一維數(shù)組和一個整型變量,這個整型變量用于記錄一維數(shù)組中存入數(shù)據(jù)的個數(shù); ⑷ 替換文本信息:首先在數(shù)組中查找要被替換的信息,如果找到該信息,提示輸入要替換的信息內(nèi)容,否如此提示未找到要被替換的信息; ⑸ 插入文本信息:首先在數(shù)組中查找要插入點(diǎn),如果找到該插入點(diǎn),提示輸入
3、插入信息,確認(rèn)插入信息后,提示選擇向前插入信息還是向后插入信息,如果未找到插入點(diǎn),顯示未找到要插入的位置; ⑹ 移動文本信息:首先在數(shù)組中查找要移動的信息,如果找到該信息,提示是進(jìn)展列移動還是進(jìn)展行移動,否如此提示未找到要移動的信息; ⑺ 刪除文本信息:首先在數(shù)組中查找要刪除的信息,如果找到該信息,提示是否確認(rèn)刪除該信息,通過確認(rèn)來刪除信息,如果未找到要刪除的信息,提示未找到該信息; ⑻ 退出編輯器:顯示感謝使用該軟件并退出。 3 詳細(xì)設(shè)計 void menu(); void shuru(char text[]); void bc(char text[]);
4、 void dakai(char text[]); void dayin(char text[]); void chazhao(char text[],int l); void tihan(char text[],int l); int strindex(char text[],char t[],int i2,int l); void shanchu(char p[],int l); void cs(char text[]); void charu(char text[],int l); void tuichu(int status); char text[MAX]="";/
5、/文本編輯域 char name[20]="";//文件保存的位置 int status=0;//顯示是否保存過的狀態(tài) int ntext;//文本編輯的位置 4用戶使用說明 ⑴ 清空以前的文本信息:將用數(shù)組存的數(shù)據(jù)內(nèi)容全部置為0; ⑵ 顯示當(dāng)前文本信息:遍歷用數(shù)組存入的信息,并輸入到外部顯示器上; ⑶ 編輯信息:定義一個結(jié)構(gòu)體,并在結(jié)構(gòu)體中定義一個字符型的一維數(shù)組和一個整型變量,這個整型變量用于記錄一維數(shù)組中存入數(shù)據(jù)的個數(shù); ⑷ 替換文本信息:首先在數(shù)組中查找要被替換的信息,如果找到該信息,提示輸入要替換的信息內(nèi)容,否如此提示未找到要被替換的信息; ⑸ 插入文本信息
6、:首先在數(shù)組中查找要插入點(diǎn),如果找到該插入點(diǎn),提示輸入插入信息,確認(rèn)插入信息后,提示選擇向前插入信息還是向后插入信息,如果未找到插入點(diǎn),顯示未找到要插入的位置; ⑹ 移動文本信息:首先在數(shù)組中查找要移動的信息,如果找到該信息,提示是進(jìn)展列移動還是進(jìn)展行移動,否如此提示未找到要移動的信息; ⑺ 刪除文本信息:首先在數(shù)組中查找要刪除的信息,如果找到該信息,提示是否確認(rèn)刪除該信息,通過確認(rèn)來刪除信息,如果未找到要刪除的信息,提示未找到該信息; ⑻ 退出編輯器:顯示感謝使用該軟件并退出。 5調(diào)試分析 /測試結(jié)果 文本編輯器主界面 主界面功能,如圖2—2所示。 圖2—2 文
7、本編輯器主界面 系統(tǒng)功能 ⑴ 輸入文本信息功能,如圖2—3所示。 圖2—3 輸入界面 ⑵ 查找文本信息,如圖2—4所示。 圖2—4查到功能界面 ⑶ 顯示文本信息,如圖2—5。 圖2—5 {4}刪除操作,如圖2--6 圖2—6 〔刪除123〕功能 {5}插入操作 如圖2—7所示。
8、 圖2—7 〔在789前插入123〕界面 {6}替換文本內(nèi)容,如圖2—8所示。 圖2—8 〔替換456為abc〕的內(nèi)容 14 / 24 6心得體會 程序的運(yùn)行結(jié)果與理論推導(dǎo)結(jié)果完全吻合,即該算法與程序設(shè)計滿足課程設(shè)計要求。該程序的主要優(yōu)點(diǎn)是簡單易懂,不存在理解上的障礙,也很自然地能想到這種解法。 通過數(shù)據(jù)結(jié)構(gòu)的課程設(shè)計使我們對所學(xué)知識有了更好的理解,也增強(qiáng)了大家的動手能力。同時也發(fā)現(xiàn)了自己的很多不足之處,對知識的應(yīng)用能力很是欠缺,應(yīng)用軟件的能力與編程水平與課程要求更是存在很大的差距。
9、
7程序
#include
10、[],int l); void tihan(char text[],int l); int strindex(char text[],char t[],int i2,int l); void shanchu(char p[],int l); void cs(char text[]); void charu(char text[],int l); void tuichu(int status); char text[MAX]="";//文本編輯域 char name[20]="";//文件保存的位置 int status=0;//顯示是否保存過的狀態(tài) int ntext;//
11、文本編輯的位置 void dakai(char text[]) { system("cls"); FILE *fp; char pd,ch; char name[30]; int i=0; printf("輸入A:確定打開文件(未保存的數(shù)據(jù)將會丟失) M:返回主菜單"); fflush(stdin); pd=getchar(); if (pd=='A'||pd=='a') { printf("請輸入要打開文件名字〔例如c:\\a.txt〕"); scanf("%s",name); while ((fp=fopen(name,"r"))==NULL) {
12、 printf("\n打開文件失敗,請重新輸入要打開的文件名:"); scanf("%s",name); } cs(text); while(!feof(fp)) { ch=fgetc(fp); text[i]=ch; i++; } text[i]='\0'; ntext=i; fclose(fp); printf("\n文件讀取成功\n文件內(nèi)容為\n"); dayin(text); } if (pd=='M'||pd=='m') menu(); } void bc(char text[]) { system("c
13、ls"); FILE *fp; char pd; char tmp; int i; printf("\n輸入【A】保存;任意鍵返回主菜單不保存\n"); fflush(stdin); pd=getchar(); if (!(pd=='A'||pd=='a')) { menu(); } else { if(name[20]==NULL) { printf("\n請輸入保存文件名(例如: c:\\a.txt):"); scanf("%s",name); } while ((fp=fopen(name,"w+"))==NULL) { printf(
14、"文件不存在,請重新輸入文件名:");
scanf("%s",name);
}
printf("\nA:確定;B:取消:");
while(scanf("%c",&tmp)!=EOF)
{
if (tmp=='A' || tmp=='a')
{
for(i=0;i 15、
}
void cs(char text[])
{
int i;
for (i=0;i 16、 //主串、子串指針回溯重新開始下一次匹配
{
i1=i1-j+1; //主串從下一個位置開始匹配
j=0;
//子串從頭開始匹配
}
}
if (j>=i2)
{
return(i1-i2);
} //返回匹配的第一個字符的下標(biāo)
else
return(-1); //模式匹配不成功
}
void menu()
{
system("cls");
time_t timep;
time (&timep);
printf("%s",ctime(&timep));
prin 17、tf("\n\n\n\n\n\n\n\n\n\t\t\tWel to use our TXT edition system!\n");
printf("\n\n\t\t\t 歡迎您使用文本編輯器軟件!\n");
printf("\n\n\n\n\n\n\n\n\npress Enter to continue...\n");
getchar();
loop:
system("cls");
printf("\n\n\n\n\t\t******************簡易文本編輯器*****************\n\n");
printf("\t\t\t\t----0.清空內(nèi) 18、容--\n");
printf("\t\t\t\t----1.打開文件--\n");
if (ntext==0){
printf("\t\t\t\t----2.輸入內(nèi)容--\n");
}
else {
printf("\t\t\t\t----2.繼續(xù)輸入--\n");
}
printf("\t\t\t\t----3.查找------\n");
printf("\t\t\t\t----4.插入------\n");
printf("\t\t\t\t----5.刪除------\n");
printf("\t\t\t\t----6.替換------\n");
pri 19、ntf("\t\t\t\t----7.顯示內(nèi)容--\n");
printf("\t\t\t\t----8.保存------\n");
printf("\t\t\t\t----9.退出------\n");
printf("\n\t\t*********************選項(xiàng)************************\n");
printf("\n\t\t\t\t輸入選項(xiàng)0-9:");
char n;
fflush(stdin);
n=getchar();
if(n>='0'&&n<='9')
{
switch (n)
{
case '0': cs(tex 20、t);break;
case '1': dakai(text);break;
case '2': shuru(text);break;
case '3': chazhao(text,0);break;
case '4': charu(text,1);break;
case '5': shanchu(text,0);break;
case '6': tihan(text,0);break;
case '7': dayin(text);break;
case '8': bc(text);break;
case '9': tuichu(status);
default : bre 21、ak;
}
}
else
{
printf("\n輸入有誤,請重新輸入:");
fflush(stdin);
n=getchar();
}
system("pause");
goto loop;
}
void chazhao(char text[],int l)
{
system("cls");
int i,t,a=-1;
char pattern[20],bd,pd;
printf("原文為:\n");
dayin(text);
printf("請輸入您要查找的內(nèi)容");
scanf("%s",pattern);
printf("您查找的內(nèi)容 22、是:%s\n",pattern);
t=strlen(pattern);
loop:
a=strindex(text,pattern,t,l);
if (a!=-1)
{
l=a+t;
}
int hs=1,ls=0;
for (i=0;i<=a;i++)
{
ls++;
if (text[i]=='\n')
{
hs++;ls=0;
}
}
if (a==-1)
{
printf("查找到結(jié)尾沒有找到\n輸入【R】將重頭查找;任意鍵返回主菜單");
l=0;
fflush(stdin);
pd=getchar();
}
else
23、{
printf("已經(jīng)找到在第%d行第%d列,輸入【R】繼續(xù)查找下一處;任意鍵返回主菜單",hs,ls);
fflush(stdin);
bd=getchar();
if (bd=='R'||bd=='r')
goto loop;
}
if (pd=='R'||pd=='r')
{l=0;chazhao(text,l);}
}
void dayin(char text[])
{
system("cls");
printf("現(xiàn)在文本的內(nèi)容為:\n");
printf("%s\n",text);
int hs=1,i;
for (i=0;i 24、 25、;
}
int cout=0,zf=0,h=1,hs=1,zfs=0;
for(;cout 26、h,zfs,hs);
}
void shanchu(char p[],int l)
{
int i,a=-1,t2=0;
char x[20],px,pd,pdx,c;
system("cls");
printf("%s",p);
printf("\n輸入【A】執(zhí)行查找刪除內(nèi)容;任意鍵返回主菜單:");
fflush(stdin);
px=getchar();
if (px=='a'||px=='A')
{
printf("\n輸入您要刪除的內(nèi)容,以完畢:");
fflush(stdin);
while ((c=getchar())!='')
{
if 27、 (c=='')
{
break;
}
else
{
x[t2]=c;
t2++;
continue;
}
}
loop:
a=strindex(p,x,t2,l);
int hs=1,ls=0;
for (i=0;i<=a;i++)
{
ls++;
if (p[i]=='\n')
{
hs++; ls=0;
}
}
if (a==-1)
{
printf("已查找完畢,您要刪除的內(nèi)容不存在\n輸入【R】重新輸入要刪除的內(nèi)容;其他鍵將返回主菜單:");
l=0;
fflush(stdin);
pdx=getchar();
}
28、
else
{
printf("你要刪除的內(nèi)容在第%d行第%d列\(zhòng)n 輸入【A】確定刪除;輸入【B】尋找下個詞;其他鍵將返回主菜單:",hs,ls);
fflush(stdin);
pd=getchar();
l=t2+a;
if (pd=='a'||pd=='A')
{
for(i=a;i 29、||pdx=='R')
shanchu(text,l);
}
}
void charu(char text[],int l) //向文本中插入內(nèi)容
{
system("cls");
int i=0,t=0,t2=0,a=-1,b;
char cr[20]="",pd,x[500],c,d;
printf("\n當(dāng)前文本信息為:\n");
printf("%s",text);
printf("\n輸入您要在哪個內(nèi)容前插入,以完畢:");
fflush(stdin);
while ((c=getchar())!='') 30、 //用一個數(shù)組接收要插入在哪個內(nèi)容之前
{
if (c=='')
{
break;
}
else
{
cr[t]=c;
t++;
continue;
}
}
loop:
a=strindex(text,cr,t,l); //查找并返回要插入的位置點(diǎn)
int hs=1,ls=0;
for (b=0;b
31、其他鍵返回菜單:\n");
l=0;
fflush(stdin);
d=getchar();
fflush(stdin);
}
else
{
printf("\n您要插入的位置是第%d行,第%d列之前\n【A】.不是此位置向后繼續(xù)找插入點(diǎn)\n【B】.在此位置插入\n按其他鍵返回菜單\n請選擇:",hs,ls+1);
fflush(stdin);
pd=getchar();
if (pd=='a'||pd=='A')
{
l=a+t;
goto loop;
}
else if (pd=='b'||pd=='B')
{
printf("\n\n輸入您要插入 32、的內(nèi)容,以完畢:");
fflush(stdin);
while ((c=getchar())!='')
{
if (c=='')
{
break;
}
else
{
x[t2]=c;
t2++;
continue;
}
}
for (i=ntext;i>=a;i--)
{
text[i+t2]=text[i];
}
for (i=0;i 33、("%c",text[i]);
printf("\n文本插入成功\n");
fflush(stdin);
getchar();
}
}
if (d=='r'||d=='R')
{
l=0;
charu(text,l);
}
status=0;
}
void tihan(char p[],int l) //內(nèi)容替換
{
int t=0,t1=0,i,a,b;
char c,th[20],d,d1,bth[20];
int i2;
system("cls");
printf("\n當(dāng)前文本信息為:\n");
for (i2 34、=0;i2<=ntext-1;i2++)
printf("%c",p[i2]);
printf("\n輸入要被替換的內(nèi)容,以完畢:");
fflush(stdin);
while ((c=getchar())!='') //t指替換前內(nèi)容的長度
{
if (c=='')
{
break;
}
else
{
bth[t]=c;
t++;
continue;
}
}
loop:
a=strindex(p,bth,t,l); //查找要被替換的內(nèi)容的位置
int hs=1,ls=0;
for
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案