程序設計-文本編輯器的設計與實現35頁_第1頁
程序設計-文本編輯器的設計與實現35頁_第2頁
程序設計-文本編輯器的設計與實現35頁_第3頁
程序設計-文本編輯器的設計與實現35頁_第4頁
程序設計-文本編輯器的設計與實現35頁_第5頁
已閱讀5頁,還剩30頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 程序設計報告(2014/2015學年 第一學期)題 目:文檔編輯器的設計與實現 專 業 組長 學號姓名 組員 學號姓名 指 導 教 師 指 導 單 位 日 期 成 員 分 工 組 長()對文件操作功能(查找,刪除,插入)的代碼編寫,報告中概要設計與代碼調試問題部分的撰寫 組 員()統計功能代碼的編寫,翻閱書籍查找資料,報告中課程設計總結及需求分析部分的撰寫 組 員()可操作的主菜單及主函數部分代碼的編寫,報告整體的撰寫及測試數據及其結果分析,制圖等 評 分 細 則 評分項優秀優優秀 優秀 優秀 優秀 良好 及格 差 遵守機房規章制度 上機時的表現 學習態度 程序準備情況 程序設計能力 團隊合

2、作精神 課題功能實現情況 算法設計合理性 用戶界面設計 報告書寫認真程度 內容詳實程度 文字表達熟練程度 回答問題準確度 簡 單 評 語 教師簽名 年 月 日 評 分 等 級 備注評分等級分為五種:優秀,良好,中等,及格,不及格文檔編輯器的設計與實現一 課題內容與要求 文檔編輯器系統是對一個文本內容進行各種常規操作,例如:插入、刪除、查找、替換等功能。通過此課題,熟練掌握文本文件的操作及用字符數組來實現字符串操作的功能。 基本要求: (1)首先文件標準化處理:如果句子有前導空格和后導空格,則刪除這些空格,單詞與單詞之間只保留一個空格。 (2)統計功能:可方便地統計出文檔中所有出現次數最多和最少

3、的字符串。 (3)查找與替換功能:能夠查找任意一個字符串在文檔中出現的次數,并可以選擇全部或有選擇地將其替換為另一個字符串。 (4)顯示功能:編輯完成后可以顯示編輯后的文檔。(5)抽取功能:根據要求將文件中的某一類字符抽取,并存入另外的文件,如抽取所有的數字、抽取所有的字母等。 編輯 退出 統計 主菜單 輸入繼續上次輸入重新輸入大寫字母個數小寫字母個數數字的個數標點符號個數空格的個數所有字數查找字符串刪除字符串插入字符串顯示當前內容二 需求分析圖一:文檔編輯器系統的功能框架圖(1)提供可操作的主菜單:輸出個菜單,用于顯示若干個可選的功能選項。根據輸入的選項來運行不同的功能,運行不同的函數。(2

4、)進行文本信息的載入:選擇輸入方式,輸入文本內容,提供可操作文本。(3)統計數據功能:輸出第二子菜單,用于顯示若干個可選的功能選項。根據輸入的選項來運行不同的功能,運行不同的函數。(4)編輯數據功能:輸出個菜單,用于顯示若干個可選的功能選項。根據輸入的選項來運行查找、刪除、插入、顯示當前文本等不同的功能,運行不同的函數。(5)退出程序:退出當前程序。三 概要設計本程序共有11個函數1、HeadWord() 標題函數,即一個輸出標題,永遠出現在程序的最頂端。 2、CreatWord() 文本輸入函數,實現對文本的內容進行輸入;3、PrintWord() 當前文本內容輸出函數,實現文本內容輸出;

5、4、CountWord() 文章內容統計函數,文本內容進 行統計,包括對文本內容中的大寫字母、小寫字母、數字、標點符號、空格以及文章所有字 數的個數的統計;5、SearchWord() 文章內容查找函數,實現查找部分;6、DeleteWord() 文章內容刪除函數,實現刪除部分;7、InsertWord() 文章內容插入函數,實現插入部分; 8、Bmenu() 第二子菜單函數,實現子菜單功能; 9、AboutWord() 顯示作者信息的函數;10、menu() 主菜單函數,實現可操作菜單;11、main()主函數。(1)查找功能: 開始 申請訪問輸入要查找的字符判斷是否存在記錄位置 輸出 結束

6、 否是圖二:查找功能圖(2)插入功能 開始 創建空間輸入要插入的字符或字符串輸入要插入的位置計算出插入字符串的長度n將要插入位置之后的字符串向后移n位插入要插入的字符或者字符串 結束圖三:插入功能圖 開始輸入字符串查找所輸入字符串所在的位置能否找到將其后字符串向前移動覆蓋之 結束否是(3)刪除功能圖四:刪除功能圖開始申請訪問輸入要統計的內容查找符合條件的字符字符統計個數輸出統計個數 結束(4)統計功能圖五:統計功能圖四 源程序代碼#include#include#include#include#include#include#includeusing namespace std;#define

7、 Link_Size 100int NUM,C,N;typedef struct list char data80; int length; struct list *next; struct list *pre; int row; LinkList;LinkList *head;void HeadWord()/system(cls); couttt*n;couttt* 歡迎使用簡單的文本編輯器 *n;coutnext=(LinkList *)malloc(sizeof(LinkList); head-pre=NULL; temp=head-next; temp-pre=NULL; temp-

8、length=0; for(i=0;idatai=0;cout繼續上次輸入(輸入#號結束):n;for(j=0;jLink_Size;j+) for(i=0;idatai=ch; temp-length+; if(ch=#) NUM=j; break; if(ch=#) temp-length=i; temp-next=NULL; break; temp-next=(LinkList *)malloc(sizeof(LinkList) ; temp-next-pre=temp; temp=temp-next; for(i=0;idatai=0;ofstream ocout;ocout.open

9、(f:/text.txt,ios:app);ocoutdata;ocout.close(); LinkList *temp; char ch; temp-row=NUM+1;system(cls);return temp;LinkList *CreatWord() int i,j; head-next=(LinkList *)malloc(sizeof(LinkList); head-pre=NULL; temp=head-next; temp-pre=NULL; temp-length=0; for(i=0;idatai=0;cout開始創建文本,請輸入文章(輸入#號結束):n;for(j=

10、0;jLink_Size;j+) for(i=0;idatai=ch; temp-length+; if(ch=#) NUM=j; break; if(ch=#) temp-length=i; temp-next=NULL; break; temp-next=(LinkList *)malloc(sizeof(LinkList) ; temp-next-pre=temp; temp=temp-next; for(i=0;idatai=0;ofstream ocout;ocout.open(f:/text.txt);ocoutdata;ocout.close();temp-row=NUM+1;s

11、ystem(cls);return temp;void PrintWord()ifstream icin;icin.open(f:/text.txt);char tt100=0;icin.getline(tt,100,0);coutttnext; for(j=0;j=NUM;j+) for(i=0;(idatai)!=#;i+) ch=temp-datai; if(ch=A)&(ch=a)&(ch=0)&(ch=9) num+; else if(ch= ) space+; else if(ch=33|ch=34|ch=39|ch=44|ch=46|ch=58|ch=59|ch=63) punc

12、t+; sum=WORD+word+num; while(1) coutn; HeadWord(); couttt*n; couttt* 文章內容統計菜單 *n; couttt*n; couttt* 1、文章中大寫字母的個數 *n; couttt* 2、文章中小寫字母的個數 *n; couttt* 3、文章中數字的個數 *n; couttt* 4、文章中標點符號的個數 *n; couttt* 5、文章中空格的個數 *n; couttt* 6、文章中所有字數 *n; couttt* 7、退出返回主菜單 *n; couttt* 8、直接退出本系統 *n; couttt*n; coutt; swit

13、ch(t) case 1: system(cls); HeadWord(); cout文章中大寫字母的個數:WORDendl; cout按回車鍵繼續;getchar();getchar();system(cls); break; case 2: system(cls); HeadWord(); cout文章中小寫字母的個數:wordendl; cout按回車鍵繼續;getchar();getchar();system(cls);break; case 3: system(cls); HeadWord(); cout文章中數字的個數:numendl; cout按回車鍵繼續;getchar();g

14、etchar();system(cls);break; case 4: system(cls); HeadWord(); cout文章中標點符號的個數:punctendl; cout按回車鍵繼續;getchar();getchar();system(cls); break; case 5: system(cls); HeadWord(); cout文章中空格的個數:spaceendl; cout按回車鍵繼續;getchar();getchar();system(cls); break; case 6: system(cls); HeadWord(); cout文章中所有字數:sumendl;

15、coutnext; strcpy(Data,str1); for(i=0;i=NUM;i+) for(j=0;jdataj)=Datak) k+; else if(Datak!=0)j=j-k;k=0; if(Datak=0) sum+;j=j-k+1;coutttt第l次出現在第i+1行第j+1next; coutttt字符串總共出現次數為:sumendl; C=sum;N=i*80+j; void DeleteWord(char *str2) char Data20; LinkList *temp,*term; int i,j,k,m,y,num; strcpy(Data,str2); f

16、or(y=0;yC;y+) num=80;k=0,m=0; temp=head; for(i=0;inext; for(j=0;jdataj)=Datak) k+; else if(Datak!=0) j=j-k;k=0; if(Datak=0) num=j;break; if(num80) break; for(;i=NUM;i+) for(;j80;j+) if(j+1data80-k+num=temp-dataj+1; elsetemp-dataj-k+1=temp-dataj+1; term=temp; temp=temp-next; j=0; LinkList * InsertWor

17、d(LinkList *temp) char Data20; int h,l; couttt請輸入要插入的字符或字符串:row;int j;if(insertRow=row)for(m=temp-length-1;m=(i%80)&n0;m-)temp-datam+n=temp-datam;for(m=(i%80),j=0;mdatam=Dataj; elseint r=0;for(int p=insertRow; plength-1-r;m=0&n0;m-)temp-datam+n=temp-datam;a=temp;temp = temp-pre;temp-length = 80;for(

18、m = temp-length-n,j=0;mlength;m+,j+)a-dataj=temp-datam;for(m=temp-length-n-1;m=(i%80);m-) temp-datam+n=temp-datam;for(m=(i%80),j=0;mdatam =Dataj;return temp;void Bmenu(LinkList *temp) char str120;char str220;int a;doHeadWord();coutntt*n;couttt* 文章內容處理菜單 *n;couttt*n;couttt* 1、查找文章中的字符或者字符串 *n;couttt*

19、 2、刪除文章中的字符或者字符串 *n;couttt* 3、向文章中插入字符或者字符串 *n;couttt* 4、顯示當前文章內容 *n;couttt* 5、返回主菜單 *n;couttt* 6、直接退出系統 *n;couttt*n;couta;switch(a)case 1: system(cls); HeadWord(); coutttt請輸入您需要查找的字符或字符串:; getchar(); gets(str1); SearchWord(str1,temp); cout按回車鍵繼續;getchar();getchar();system(cls); break;case 2: system

20、(cls); HeadWord(); coutttt請輸入您需要刪除的字符或字符串:; getchar(); gets(str2); SearchWord(str2,temp); DeleteWord(str2); coutttt刪除 %s 后的文章為:str2endl; PrintWord(); cout按回車鍵繼續;getchar();getchar();system(cls); break;case 3: system(cls); HeadWord(); InsertWord(temp); coutttt插入字符或字符串后文章為:; PrintWord(); cout按回車鍵繼續;get

21、char();getchar();system(cls); break;case 4: system(cls); HeadWord(); PrintWord(); cout按回車鍵繼續;getchar();getchar();system(cls); break;if(a=5) system(cls); break;if(a=6) exit(0); while(1); void AboutWord() coutnntt 關 于 n; couttt*n;couttt* 謝謝使用 *n; couttt*n;coutn;void menu(LinkList *temp)int t;doHeadWor

22、d();printf(n);couttt*n;couttt* 主菜單 *n;couttt*n;couttt* 1、文章內容輸入 *n;couttt* 2、顯示當前文章內容 *n;couttt* 3、進入文章內容統計菜單 *n;couttt* 4、進入文章內容處理菜單 *n;couttt* 5、關于 *n;couttt* 6、退出文本編輯器 *n;couttt*n;couttt* 注:第一次運行本程序時請選擇1號功能 *n;couttt*n;coutt;if(t6)&(t1) cout對不起,無此功能,請輸入正確的功能序號!n;elseswitch(t) case 1: system(cls);

23、 couttt*繼續上次輸入還是重新輸入?*endl; couts; switch(s) case 1:HeadWord();temp=LoadWord(); break; case 2:HeadWord();temp=CreatWord(); break; case 2: system(cls); PrintWord(); printf(n); cout按回車鍵繼續; getchar(); getchar(); system(cls); break;case 3: system(cls); CountWord(); break; case 4: system(cls); Bmenu(temp

24、); break;case 5: system(cls); HeadWord(); AboutWord();cout按回車鍵繼續;getchar();getchar();system(cls);break;if(t=6) break;while(1);int main()head=(LinkList *)malloc(sizeof(LinkList);LinkList *temp;menu(temp);return 0;五 測試結果及數據分析運行程序后,主菜單如圖所示:圖2 主菜單欲輸入文本,輸入1,按Enter鍵,出現下圖:圖3 選擇輸入方式:1:繼續輸入;2:重新輸入輸入2,按Enter鍵

25、,出現下圖:圖4 創建文本輸入文章內容,以#號鍵結束,按Enter鍵,出現下圖:圖5 主菜單輸入3,按Enter鍵,進入文章內容統計菜單,如下圖:圖6 文章內容統計菜單輸入1,按Enter鍵,出現下圖:圖7 輸出文章中大寫字母個數按Enter鍵繼續,輸入2出現下圖:圖8輸出文章中小寫字母個數按Enter鍵繼續,出現下圖:圖9 輸入3,按Enter鍵繼續,出現下圖:圖10 輸出文章中數字個數按Enter鍵繼續,出現下圖:圖11 輸入4,按Enter鍵繼續,出現下圖:圖12 輸出文章中標點符號的個數按Enter鍵繼續,出現下圖:圖13 輸入5,按Enter鍵繼續,出現下圖:圖14 輸出文章中空格個

26、數按Enter鍵繼續,輸入6,出現下圖:圖15 輸出文章中所有字數按Enter鍵繼續,出現下圖:圖16主菜單,輸入4按Enter鍵繼續,進入文章內容處理菜單,出現下圖:圖17 輸入1,按Enter鍵繼續,出現下圖:圖18 輸入o,按Enter鍵繼續,進行查找,出現下圖:圖19 輸出查找結果按Enter鍵繼續,出現下圖:圖20 輸入2 按Enter鍵繼續,出現下圖:圖21 輸入要刪除的字符或字符串按Enter鍵繼續,出現下圖:圖22 輸出刪除結果按Enter鍵繼續,出現下圖:圖23 輸入要插入的字符或字符串按Enter鍵繼續,出現下圖:圖24 輸入所要插入的位置按Enter鍵繼續,出現下圖:圖2

27、5 輸出插入結果六 調試過程中問題(1) 輸入輸出問題:由于要將數據存到文件中,輸入輸出就不同于直接輸入輸出,c+的輸出讀到空格便會停止,用getline函數解決;(2) 追加輸入問題:用ocout.open(f:/text.txt)輸入會覆蓋掉以前的內容,如果不想覆蓋以前內容,通過加參數實現,即ocout.open(f:/text.txt,ios:app),在兩個功能設子菜單供選擇;(3) 循環結束問題:break與exit(0)功能在某些情況下相似,某些情況下卻只能選其一,否則運行就有問題;(4) 選擇問題:當選擇要操作的功能時,若選擇數字超過列表范圍,就會出現未知錯誤,需增設超出范圍就返回的功能,例如用switch語句可以較容易解決;(5) 數組空間問題:若預設空間

溫馨提示

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

評論

0/150

提交評論