數(shù)據(jù)結(jié)構(gòu)課程設(shè)計文章編輯器報告_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計文章編輯器報告_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計文章編輯器報告_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計文章編輯器報告_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計文章編輯器報告_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

學(xué)號數(shù)據(jù)結(jié)構(gòu)課程設(shè)計設(shè)計說明書文章編輯起止日期:2012年1月2日至2012年1月6日學(xué)生姓名班級09計算機一班成績指導(dǎo)教師(簽字)電子與信息工程系2012年1月6日

天津城市建設(shè)學(xué)院課程設(shè)計任務(wù)書2011—2012學(xué)年第1學(xué)期電子與信息工程系計算機科學(xué)與技術(shù)專業(yè)09級1班級課程設(shè)計名稱:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計設(shè)計題目:文章編輯完成期限:自2012年1月2日至2012年1月6日共1周設(shè)計依據(jù)、要求及主要內(nèi)容〔可另加附頁〕:一、設(shè)計目的熟悉各種數(shù)據(jù)結(jié)構(gòu)和運算,會使用數(shù)據(jù)結(jié)構(gòu)的根本操作解決一些實際問題。二、設(shè)計要求〔1〕重視課程設(shè)計環(huán)節(jié),用嚴(yán)謹(jǐn)、科學(xué)和踏實的工作態(tài)度對待課程設(shè)計的每一項任務(wù);〔2〕按照課程設(shè)計的題目要求,獨立地完成各項任務(wù),嚴(yán)禁抄襲;凡發(fā)現(xiàn)抄襲,抄襲者與被抄襲者皆以零分計入本課程設(shè)計成績。凡發(fā)現(xiàn)實驗報告或源程序雷同,涉及的全部人員皆以零分計入本課程設(shè)計成績;〔3〕學(xué)生在接受設(shè)計任務(wù)后,首先要按設(shè)計任務(wù)書的要求編寫設(shè)計進(jìn)程表;〔4〕認(rèn)真編寫課程設(shè)計報告。三、設(shè)計內(nèi)容文章編輯程序靜態(tài)存儲一頁文章,每行最多不超過80個字符,共N行,要求:〔1〕分別統(tǒng)計出其中英文字母數(shù)和空格數(shù)及整篇文章總字?jǐn)?shù);〔2〕統(tǒng)計某一字符串在文章中出現(xiàn)的次數(shù),并輸出該次數(shù);〔3〕刪除某一子串,并將后面的字符前移。目錄一、需求分析 3二、總體設(shè)計 3三、詳細(xì)設(shè)計 4四、調(diào)試與測試 7五、源程序及運行結(jié)果 10六、心得體會 19七、參考文獻(xiàn) 19文章編輯程序一、需求分析文章編輯,顧名思義就是對文章進(jìn)行讀寫、統(tǒng)計、修改等操作。首先我們需要通過函數(shù)讀取或者錄入文章,然后設(shè)計模塊統(tǒng)計需要分類統(tǒng)計各類字符的個數(shù),當(dāng)然有時候我們也需要查詢某個字符或者字符串在文章中出現(xiàn)的次數(shù),對于某個字符或者字符串,后來經(jīng)過改良需要刪除,就要設(shè)計函數(shù)實現(xiàn),并且為了保證文本的頁面一致性,我們需要實現(xiàn)分行輸出,并且在刪除子串以后后續(xù)字符前移。為此,我設(shè)計了文章編輯程序。二、總體設(shè)計程序組成框圖程序流程圖三、詳細(xì)設(shè)計程序主要包括六個模塊第一個模塊是是文本獲取模塊,由三個函數(shù)組成,getdata分別調(diào)用getdata1、getdata2,實現(xiàn)讀取文件和鍵盤輸入兩種文本獲取方式函數(shù)偽代碼如下Voidgetdata(){Case1:getadata1();Case2:getdata2();}Voidgetdata1(){f1=fopen(filename,"r");//以文件名翻開文件while((a=getc(f1))!=EOF) {if(j==79){s[i++][j]='\n';j=0;} if(a!='\n'){s[i][j++]=a;} elses[i++][j]=a; }}Voidgetdata2(){while((a=getchar())!='#')//鍵盤輸入文本 { if(j==79){s[i++][j]='\n';j=0;} if(a!='\n'){s[i][j++]=a;} elses[i++][j]=a; }}第二個模塊是文本輸出模塊,通過函數(shù)show_text()實現(xiàn),偽代碼如下:voidText::show_text(){ cout<<"文本如下:"<<endl;}第三個模塊是指令集顯示模塊,便于隨時查看命令,進(jìn)行新的操作函數(shù)偽代碼”voidText::help(){cout<<"請選擇操作指令"<<endl<<endl;cout<<"================================================================================"<<endl;cout<<"☆count:分別統(tǒng)計各類字符總數(shù)☆"<<endl<<endl;cout<<"☆search:統(tǒng)計所查字符☆"<<endl<<endl;cout<<"☆delete:刪除特定字符☆"<<endl<<endl;cout<<"☆help:查看程序指令集合☆"<<endl<<endl; cout<<"☆return:返回選擇文件☆"<<endl<<endl;cout<<"☆exit:退出文本編輯程序☆"<<endl<<endl; cout<<"================================================================================"<<endl;}第四個模塊是分類統(tǒng)計字符模塊,用來統(tǒng)計各類字符信息并傳遞到終端。通過voidText::count()函數(shù)實現(xiàn),函數(shù)偽代碼:voidText::count()//分別統(tǒng)計各類字符個數(shù){ intcc,cp,cn,co,sum; cc=cp=cn=co=sum=0; for(inti=0;i<len;i++) for(intj=0;j<80;j++) { 掃描并分類統(tǒng)計字符信息 } cout<<"文章字符統(tǒng)計如下"<<endl<<endl; cout<<"字母個數(shù)為:"<<cc<<endl; cout<<"空格個數(shù)為:"<<cp<<endl; cout<<"數(shù)字個數(shù)為:"<<cn<<endl; cout<<"文章總字?jǐn)?shù):"<<sum<<endl;}第五個模塊是子串查找模塊,該模塊對用戶在終端輸入的子串在目標(biāo)串中運用順序查找進(jìn)行檢索,統(tǒng)計匹配次數(shù),并將結(jié)果反應(yīng)給用戶,由voidText::search_str()函數(shù)實現(xiàn)函數(shù)偽代碼:voidText::search_str(){ charstr[80],*p;intq,count=0; cout<<"請輸入一個字符子串:"<<endl; cin>>str; p=str;/ 匹配…..cout<<str<<"在文章中的出現(xiàn)次數(shù)為:"<<count<<endl<<endl;}第六個模塊是子串刪除模塊,該模塊對用戶輸入的子串在目標(biāo)串中運用順序查找進(jìn)行檢索并刪除,后續(xù)字符前移,通過voidText::delete_str()函數(shù)實現(xiàn)函數(shù)偽代碼:voidText::search_str(){ charstr[80],*p;intq,count=0; cout<<"請輸入一個字符子串:"<<endl; cin>>str; p=str;匹配并刪除cout<<"刪除字符"<<str<<"后的文本為:"<<endl<<endl;show_text();}四、調(diào)試與測試修改程序能夠正確編譯執(zhí)行后出現(xiàn)的問題及解決方法:文本輸出局部正確,后面出現(xiàn)亂碼。查找資料說是沒有對數(shù)組內(nèi)存初始化,可以通過memset函數(shù)實現(xiàn),在獲取文本的時候同時對數(shù)組內(nèi)存初始化,解決問題。加上memset函數(shù)之后分類統(tǒng)計字符的時候輸出異常。具體是文章總字?jǐn)?shù)sum不正確,仔細(xì)檢查是for循環(huán)的過程中,sum每次都自增,沒有設(shè)置自增條件,通過對sum++加上if條件后解決問題。加上自增if條件后刪除子串時如果遇見同一子串連續(xù)出現(xiàn)數(shù)次,只能刪除一半這是因為每次匹配時j的值變化,需要復(fù)原,然后J++如果不刪除前面匹配過直接復(fù)原即可,刪除的話后續(xù)子串前移,自增后前移的第一個值將不會匹配,通過設(shè)置不同的j值復(fù)原解決五、源程序及運行結(jié)果程序源代碼:#include<iostream>#include<fstream>//輸入輸出文件流類頭文件usingnamespacestd;constintN=800;classText//定義Text類{private: chars[N][80]; charfilename[30]; charstr[90]; intlen; voidgetdata1(); voidgetdata2(); voidgetdata(); voidshow_text(); voidcount(); voidsearch_str(); voiddelete_str(); voidhelp();public: Text() {cout<<"★您好,歡送使用文本編輯程序!★"<<endl<<endl; cout<<"================================================================================"<<endl; cout<<"================================================================================"<<endl; }voidMain_Work();};voidText::getdata(){ intchose;//選擇文本 cout<<"請選擇文件來源"<<endl<<endl; cout<<"1、翻開文件"<<endl<<endl;cout<<"2、手動輸入"<<endl<<endl; cin>>chose; switch(chose) { case1:getdata1();break; case2:getdata2();break; }}voidText::getdata1(){ cout<<"請輸入文本名:"<<endl; cin>>filename; cout<<endl; FILE*f1;chara;inti=0,j=0; f1=fopen(filename,"r");//通過文件名與文件流關(guān)聯(lián)cout<<"正在讀取數(shù)據(jù)"<<endl<<endl; len=0; memset(s,0,sizeof(s));while((a=getc(f1))!=EOF)//從文件逐個讀取字符并傳遞a直到文件結(jié)束 { if(j==79){s[i++][j]='\n';j=0;}//每行不超過80個字符 if(a!='\n'){s[i][j++]=a;}//如果沒有回車就一直傳遞 elses[i++][j]=a;//如果遇見回車換行輸入 } len=i+1;//計算行數(shù) cout<<"數(shù)據(jù)讀取完畢:"<<endl;}voidText::getdata2()//從鍵盤輸入字符{ cout<<"請輸入一段字符,以#號結(jié)束"<<endl; memset(s,0,sizeof(s)); chara;inti=0,j=0; while((a=getchar())!='#')//以#號結(jié)束 { if(j==79){s[i++][j]='\n';j=0;} if(a!='\n'){s[i][j++]=a;} elses[i++][j]=a; } len=i+1;}voidText::show_text(){ cout<<"文本如下:"<<endl; for(inti=0;i<len;i++) for(intj=0;j<80;j++) { if(s[i][j]!='\0') cout<<s[i][j]; } cout<<endl;}voidText::help(){cout<<"請選擇操作指令"<<endl<<endl;cout<<"================================================================================"<<endl;cout<<"☆count:分別統(tǒng)計各類字符總數(shù)☆"<<endl<<endl;cout<<"☆search:統(tǒng)計所查字符☆"<<endl<<endl;cout<<"☆delete:刪除特定字符☆"<<endl<<endl;cout<<"☆help:查看程序指令集合☆"<<endl<<endl; cout<<"☆return:返回選擇文件☆"<<endl<<endl;cout<<"☆exit:退出文本編輯程序☆"<<endl<<endl; cout<<"================================================================================"<<endl;}voidText::count()//分別統(tǒng)計各類字符個數(shù){ intcc,cp,cn,co,sum; cc=cp=cn=co=sum=0; for(inti=0;i<len;i++) for(intj=0;j<80;j++) { if(s[i][j]>='0'&&s[i][j]<='9')cn++; if(s[i][j]>='A'&&s[i][j]<='Z'||s[i][j]>='a'&&s[i][j]<='z')cc++; if(s[i][j]=='')cp++; if(s[i][j]!='\0')sum++;//只要字符不為空,就計入總數(shù) } cout<<"文章字符統(tǒng)計如下"<<endl<<endl; cout<<"字母個數(shù)為:"<<cc<<endl; cout<<"空格個數(shù)為:"<<cp<<endl; cout<<"數(shù)字個數(shù)為:"<<cn<<endl; cout<<"文章總字?jǐn)?shù):"<<sum<<endl;}voidText::search_str(){ charstr[80],*p;intq,count=0;//定義子串指針 cout<<"請輸入一個字符子串:"<<endl; cin>>str; p=str;//從鍵盤輸入子串 for(inti=0;i<len;i++) for(intj=0;j<80;j++) { q=j;//保存j的初值while(*p!='\0')//匹配直至子串最后一個字符 if(*p==s[i][j]){j++;p++;}//如果字符匹配,目標(biāo)串和子串同時右移 elsebreak;//如果字符不匹配跳出循環(huán) if(*p=='\0')count++;//完全匹配時count加1 p=str;//子串復(fù)原 j=q;//復(fù)原j的值 }cout<<str<<"在文章中的出現(xiàn)次數(shù)為:"<<count<<endl<<endl;}voidText::delete_str(){charstr[80],*p;intq,m;cout<<"請輸入一個字符子串:"<<endl;cin>>str;p=str;for(inti=0;i<len;i++) for(intj=0;j<80;j++) { q=j; while(*p!='\0') if(*p==s[i][j]){j++;p++;} elsebreak; m=j-q;//刪除子串后移動的距離〔子串長度〕 if(*p=='\0') { for(j=q;s[i][j+m]!='\0';j++)s[i][j]=s[i][j+m];//字符前移 s[i][j]='\0';//前移之后末尾長度為子串長度的字符設(shè)為結(jié)束符 j=q-1;//刪除一次子串,目標(biāo)串前移之后,j++〔再次匹配需要-1〕 } elsej=q;//不刪除子串,前面的已經(jīng)匹配過,所以不需要-1 p=str;//子串復(fù)原 }cout<<"刪除字符"<<str<<"后的文本為:"<<endl<<endl;show_text();}voidText::Mai

溫馨提示

  • 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

提交評論