小型文本編輯器_第1頁
小型文本編輯器_第2頁
小型文本編輯器_第3頁
小型文本編輯器_第4頁
小型文本編輯器_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

目錄TOC\o"1-5"\h\z問題描述 3\o"CurrentDocument"題目內(nèi)容 3\o"CurrentDocument"基本要求 3需求分析 3\o"CurrentDocument"基本功能 3\o"CurrentDocument"輸入、輸出形式 3\o"CurrentDocument"測試數(shù)據(jù)要求 4總體設(shè)計 4\o"CurrentDocument"抽象數(shù)據(jù)類型 4主程序流程圖 4\o"CurrentDocument"模塊調(diào)用關(guān)系 5詳細(xì)設(shè)計 5數(shù)據(jù)類型 5主程序以及其它模塊的算法描述 6編碼與調(diào)試分析 11編碼 11調(diào)試分析 11使用說明 11測試結(jié)果 12課程設(shè)計心得體會 13一、 問題描述題目內(nèi)容:設(shè)計一小型文本編輯器,使其具有通常行編輯器(如Vi、Edlin)應(yīng)具備的基本功能。基本要求:該編輯器應(yīng)具備對文本文件的查找、插人、刪除、修改、字符串替換、統(tǒng)計字?jǐn)?shù),統(tǒng)計行數(shù)等功能,對于超過一屏的長文件,應(yīng)能夠分頁顯示,并支持通配符*或?設(shè)計用戶接口命令,實現(xiàn)對文本的編輯。二、 需求分析基本功能:、讀寫文件;、對文件的查找(包括單個字符的查找,使用通配符*和通配符?查找);、對文件的插入(包括插入單個字符,插入行);、對文件的刪除(包括刪除單個字符,刪除行);、字符的替換(修改);、統(tǒng)計功能(行數(shù),字符數(shù));、文件超過一屏的要分頁顯示;、設(shè)計接口命令,使用戶使用方便;、保存文件。輸入輸出形式:輸入:輸入文件名,可寫入文件內(nèi)容。文件和Debug在相同目錄下。輸出:(1)、輸出要編輯的文件內(nèi)容;、每次編輯后都輸出文件內(nèi)容;、輸出最終編輯的結(jié)果。測試數(shù)據(jù)要求:要求測試的數(shù)據(jù)為任意的文本文件,文件每行的字符數(shù)不得超過255。文件的數(shù)據(jù)只能包含52個英文字母和幾個常用的標(biāo)點(diǎn)符號以及空格,不包括特殊符號以及不常用的符號,不包括漢字。三、 總體設(shè)計抽象數(shù)據(jù)類型:該程序一個結(jié)構(gòu)體,一個類。Edit類用來存儲字文件的,以及對文件的一些操作,比如說增加、刪除、修改等等功能。結(jié)構(gòu)體EditNode中定義一個字符串,該字符串用來存儲52個英文字母、空格和一些常用的標(biāo)點(diǎn)符號。數(shù)據(jù)結(jié)構(gòu)使用雙鏈表。主程序流程:

開始結(jié)束編輯文件保存文件打開文件寫入文件刪除修改查開始結(jié)束編輯文件保存文件打開文件寫入文件刪除修改查找增加統(tǒng)計主流程圖模塊調(diào)用關(guān)系:主函數(shù)調(diào)用文件的讀寫,文件的編輯以及文件的保存,文件的編輯函數(shù)再調(diào)用增加、刪除、修改、統(tǒng)計、查找,增加包括單個字符的增加和行增加、刪除包括單個字符的刪除和行刪除、統(tǒng)計包括字符個數(shù)統(tǒng)計和行統(tǒng)計、查找支持單個字符的查找、使用通配符*和?的查找。四、詳細(xì)設(shè)計本程序數(shù)據(jù)結(jié)構(gòu)用的是雙鏈表,每一行作為一個結(jié)點(diǎn)。數(shù)據(jù)類型:結(jié)構(gòu)體的定義:EditNode里包括數(shù)據(jù)的存儲的定義,結(jié)點(diǎn)的定義,和行數(shù)以及每行的字符數(shù)的定義。structEditNode(stringstr; //存放數(shù)據(jù)

EditNode*front;EditNode*next;intLineNum;intStrNum;};//啟示結(jié)點(diǎn)//下一結(jié)點(diǎn)//啟示結(jié)點(diǎn)//下一結(jié)點(diǎn)//記錄行數(shù)//記錄每個結(jié)點(diǎn)的字符數(shù)classEdit(public:Edit();voidMenu();voidGotoxy(intx,inty);voidGet_File(char*FileName);voidPaging();voidInput(char*FileName);voidInsertChar();voidOutPut();voidInsertLine(intn);voidDeleChar();voidDeleLine(intLine);voidSearchStr(chara[]);voidCountLine();voidCountStr();voidModifychar();voidMainMenu();voidEditMenu();voidSave(char*FileName);voidWildcard(chars[]);voidWildCard(chars[]);private:EditNode*first;EditNode*end;};//構(gòu)造函數(shù)〃菜單函數(shù)//光標(biāo)定位//從文件中讀取函數(shù)//顯示內(nèi)容//寫入文件//增加一個字符//構(gòu)造函數(shù)〃菜單函數(shù)//光標(biāo)定位//從文件中讀取函數(shù)//顯示內(nèi)容//寫入文件//增加一個字符〃輸出〃增加行函數(shù)〃刪除字符〃刪除行函數(shù)//查找單個字符//統(tǒng)計行數(shù)〃統(tǒng)計字符數(shù)〃在指定位置修改字符位置//主菜單//編輯菜單〃保存文件//查找支持通配符*〃查找支持通配符?(1)、將文件中的內(nèi)容賦給結(jié)點(diǎn):從文件中讀取,沒找到一行就分配內(nèi)存空間,將該行數(shù)據(jù)賦給結(jié)點(diǎn),直到所有的內(nèi)容都讀取完畢,結(jié)束。voidEdit::Get_File(char*FileName)(intnumber;intj=1;inti=0;EditNode*pnew;stringstrs;ifstreaminfile(FileName,ios::in);if(!infile)(cerr<<"文件打開失敗!〃<<endl;system(〃pause〃);EditMenu();}while(getline(infile,strs,'\n'))(pnew=newEditNode;pnew->next=NULL;pnew->front=end;end->next=pnew;pnew->str=strs;while(strs[i]!='\0')(i++;}number=i;pnew->StrNum=number;pnew->LineNum=j;end=pnew;j++;first->StrNum++;}}分頁顯示算法描述:每頁顯示每頁不超過5行,這個行數(shù)是通過宏定義的可以改變一頁的行數(shù),用到while循環(huán),每找到5行就顯示在一頁,要顯示下一頁,先用清平函數(shù),這樣就可以達(dá)到分頁的效果。插入一個字符:該函數(shù)使用到光標(biāo),將光標(biāo)定位到某個位置,在該位置可以增加一個字符,增加一個字符時需要移動在增加的字符后面的字符位置,如果超過該行的最大字符個數(shù)(255)就會向下一行移動。具體算法:temp=p;if(p->StrNum==Maxsize)(while(p->StrNum==Maxsize)(p=p->next;}for(i=p->StrNum;i>=1;i--)(p->str[i]=p->str[i-1];}p->str[0]=p->front->str[Maxsize-1];p->StrNum++;p=p->front;while(p!=temp)(intj=Maxsize-1;while(j>=1)(p->str[j]=p->str[j-1];j--;}p->str[j]=p->front->str[Maxsize-1];p=p->front;}j=Maxsize-1;while(j>x)(p->str[j]=p->str[j-1];j--;}ch=getch();p->str[j]=ch;}else(for(i=n;i>x;i--)(p->str[i]=p->str[i-1];}ch=getch();p->str[i]=ch;p->StrNum++;}增加行函數(shù)算法分析:增加行即增加一個結(jié)點(diǎn),首先用while循環(huán)找到要增加的位置,然后再該位置分配內(nèi)存空間s,讓后將要插入的字符串賦給該結(jié)點(diǎn)。具體算法設(shè)計:while(p->LineNum!=n)(p=p->next;}s=newEditNode;q=p->front;s->front=q;s->next=q->next;q->next->front=s;q->next=s;刪除行函數(shù)的算法設(shè)計與分析:刪除行即刪除一個結(jié)點(diǎn),首先用一個for循環(huán)找到要刪除的結(jié)點(diǎn),然后將該空間釋放,從而刪除了該結(jié)點(diǎn)。具體算法設(shè)計:for(i=0;i<count;i++)(if(p->LineNum==Line)break;p=p->next;}temp=p->next;p->front->next=p->next;p->next->front=p->front;刪除單個字符:首先,光標(biāo)定位到要刪除的字符,然后刪除該字符,刪除后器字符后面的字符都要向前移動。具體算法設(shè)計:temp=p;for(i=x+1;i<p->StrNum;i++)(p->str[i-1]=p->str[i];}p->str[i-1]='\0';while(p->StrNum==Maxsize)(if(p->next)(p->str[Maxsize-1]=p->next->str[0];for(j=1;j<p->next->StrNum;j++)(p->next->str[j-1]=p->next->str[j];}p=p->next;}p->StrNum--;if(p->StrNum==0)((p->front)->next=p->next;(p->next)->front=p->front;first->StrNum--;}else(p->str[p->StrNum]='\0';}p=temp;修改函數(shù)算法分析與設(shè)計:首先,光標(biāo)定位在要修改的字符上,然后輸入修改后的字符,將該字符賦給光標(biāo)所在的位置。具體算法設(shè)計:ch=getch();p->str[x]=ch;Gotoxy(x,y);cout<<ch;查找單個字符:用了一個while循環(huán)一個for循環(huán),將該字符所在的所有位置都找到。具體的算法設(shè)計:for(k=0;k<count;k++)(j=0;i=0;while((p->str[i]!='\0')&&j<snum)(if(p->str[i]==a[j])(i++;j++;}else(i=i-j+1;j=0;}五、 編碼與調(diào)試分析編碼:在編碼過程中,可以說是困難重重。、剛開始增加刪除時,增加或刪除一行還好解決直接增加或刪除一個結(jié)點(diǎn)就可以了,但是增加或刪除單個字符比較困難,因為,如果增加或刪除一個字符需要移動字符,這樣整個結(jié)點(diǎn)需要改變并且要增加的位置很難確定,后來又查了些資料研究了一下插入時字符串的移動,最后解決了這個問題,并使用光標(biāo)移動解決了位置的確定。、在程序運(yùn)行時會一晃而過,看不到程序運(yùn)行的結(jié)果,再加上system("pause”)可以系統(tǒng)暫停程序運(yùn)行結(jié)果,在按任意鍵可以繼續(xù)運(yùn)行程序。、程序中還存在的問題:因為使用到光標(biāo),所以光標(biāo)移動時容易出錯,還有待于解決。調(diào)試:其實,編碼的時候,調(diào)試是十分重要的,因為一個大型的程序,你不可能一下就知道錯誤所在,只有通過調(diào)試,你才能慢慢的找到問題錯誤的原因,從而解決問題。就本程序來說,有很多地方在做的時候忽略了部分的異常處理,但是在調(diào)試過程中就會發(fā)現(xiàn)這些問題,從而改正。六、 使用說明首先打開的是首界面,可以選擇功能,創(chuàng)建新的文件,在創(chuàng)建新的文件時就要輸入文件名,值得一提的是輸入的文件名稱得包括后綴擴(kuò)展名。比如說,輸入一

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論