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

下載本文檔

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

文檔簡(jiǎn)介

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

開(kāi)始結(jié)束編輯文件保存文件打開(kāi)文件寫(xiě)入文件刪除修改查開(kāi)始結(jié)束編輯文件保存文件打開(kāi)文件寫(xiě)入文件刪除修改查找增加統(tǒng)計(jì)主流程圖模塊調(diào)用關(guān)系:主函數(shù)調(diào)用文件的讀寫(xiě),文件的編輯以及文件的保存,文件的編輯函數(shù)再調(diào)用增加、刪除、修改、統(tǒng)計(jì)、查找,增加包括單個(gè)字符的增加和行增加、刪除包括單個(gè)字符的刪除和行刪除、統(tǒng)計(jì)包括字符個(gè)數(shù)統(tǒng)計(jì)和行統(tǒng)計(jì)、查找支持單個(gè)字符的查找、使用通配符*和?的查找。四、詳細(xì)設(shè)計(jì)本程序數(shù)據(jù)結(jié)構(gòu)用的是雙鏈表,每一行作為一個(gè)結(jié)點(diǎn)。數(shù)據(jù)類型:結(jié)構(gòu)體的定義:EditNode里包括數(shù)據(jù)的存儲(chǔ)的定義,結(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ù)//記錄每個(gè)結(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)容//寫(xiě)入文件//增加一個(gè)字符//構(gòu)造函數(shù)〃菜單函數(shù)//光標(biāo)定位//從文件中讀取函數(shù)//顯示內(nèi)容//寫(xiě)入文件//增加一個(gè)字符〃輸出〃增加行函數(shù)〃刪除字符〃刪除行函數(shù)//查找單個(gè)字符//統(tǒng)計(jì)行數(shù)〃統(tǒng)計(jì)字符數(shù)〃在指定位置修改字符位置//主菜單//編輯菜單〃保存文件//查找支持通配符*〃查找支持通配符?(1)、將文件中的內(nèi)容賦給結(jié)點(diǎn):從文件中讀取,沒(méi)找到一行就分配內(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<<"文件打開(kāi)失敗!〃<<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++;}}分頁(yè)顯示算法描述:每頁(yè)顯示每頁(yè)不超過(guò)5行,這個(gè)行數(shù)是通過(guò)宏定義的可以改變一頁(yè)的行數(shù),用到while循環(huán),每找到5行就顯示在一頁(yè),要顯示下一頁(yè),先用清平函數(shù),這樣就可以達(dá)到分頁(yè)的效果。插入一個(gè)字符:該函數(shù)使用到光標(biāo),將光標(biāo)定位到某個(gè)位置,在該位置可以增加一個(gè)字符,增加一個(gè)字符時(shí)需要移動(dòng)在增加的字符后面的字符位置,如果超過(guò)該行的最大字符個(gè)數(shù)(255)就會(huì)向下一行移動(dòng)。具體算法: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ù)算法分析:增加行即增加一個(gè)結(jié)點(diǎn),首先用while循環(huán)找到要增加的位置,然后再該位置分配內(nèi)存空間s,讓后將要插入的字符串賦給該結(jié)點(diǎn)。具體算法設(shè)計(jì):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è)計(jì)與分析:刪除行即刪除一個(gè)結(jié)點(diǎn),首先用一個(gè)for循環(huán)找到要?jiǎng)h除的結(jié)點(diǎn),然后將該空間釋放,從而刪除了該結(jié)點(diǎn)。具體算法設(shè)計(jì):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;刪除單個(gè)字符:首先,光標(biāo)定位到要?jiǎng)h除的字符,然后刪除該字符,刪除后器字符后面的字符都要向前移動(dòng)。具體算法設(shè)計(jì):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è)計(jì):首先,光標(biāo)定位在要修改的字符上,然后輸入修改后的字符,將該字符賦給光標(biāo)所在的位置。具體算法設(shè)計(jì):ch=getch();p->str[x]=ch;Gotoxy(x,y);cout<<ch;查找單個(gè)字符:用了一個(gè)while循環(huán)一個(gè)for循環(huán),將該字符所在的所有位置都找到。具體的算法設(shè)計(jì):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)試分析編碼:在編碼過(guò)程中,可以說(shuō)是困難重重。、剛開(kāi)始增加刪除時(shí),增加或刪除一行還好解決直接增加或刪除一個(gè)結(jié)點(diǎn)就可以了,但是增加或刪除單個(gè)字符比較困難,因?yàn)?,如果增加或刪除一個(gè)字符需要移動(dòng)字符,這樣整個(gè)結(jié)點(diǎn)需要改變并且要增加的位置很難確定,后來(lái)又查了些資料研究了一下插入時(shí)字符串的移動(dòng),最后解決了這個(gè)問(wèn)題,并使用光標(biāo)移動(dòng)解決了位置的確定。、在程序運(yùn)行時(shí)會(huì)一晃而過(guò),看不到程序運(yùn)行的結(jié)果,再加上system("pause”)可以系統(tǒng)暫停程序運(yùn)行結(jié)果,在按任意鍵可以繼續(xù)運(yùn)行程序。、程序中還存在的問(wèn)題:因?yàn)槭褂玫焦鈽?biāo),所以光標(biāo)移動(dòng)時(shí)容易出錯(cuò),還有待于解決。調(diào)試:其實(shí),編碼的時(shí)候,調(diào)試是十分重要的,因?yàn)橐粋€(gè)大型的程序,你不可能一下就知道錯(cuò)誤所在,只有通過(guò)調(diào)試,你才能慢慢的找到問(wèn)題錯(cuò)誤的原因,從而解決問(wèn)題。就本程序來(lái)說(shuō),有很多地方在做的時(shí)候忽略了部分的異常處理,但是在調(diào)試過(guò)程中就會(huì)發(fā)現(xiàn)這些問(wèn)題,從而改正。六、 使用說(shuō)明首先打開(kāi)的是首界面,可以選擇功能,創(chuàng)建新的文件,在創(chuàng)建新的文件時(shí)就要輸入文件名,值得一提的是輸入的文件名稱得包括后綴擴(kuò)展名。比如說(shuō),輸入一

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論