版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 班 級: 10計本2班 姓 名: 鄧 寅 森 學 號: 2010305202 指導教師: 楊 老 師 完成日期: 2011年12月 計算機科學與技術(shù)系課程設(shè)計評分表 課程名稱: 數(shù)據(jù)結(jié)構(gòu) 簡易文本編輯器項 目評 價設(shè)計方案的合理性與創(chuàng)造性設(shè)計與調(diào)試結(jié)果設(shè)計說明書的質(zhì)量功能完善度綜合成績學 號班 級姓 名綜合成績201030520210計本2班鄧寅森教師評語 教師簽名: 日 期: 目 錄一、需求分析3二、概要設(shè)計3三、模塊設(shè)計5四、詳細設(shè)計7五、調(diào)試分析8六、用戶使用說明11七、 參考文獻12八、 對所設(shè)計的軟件進行自我評價,如創(chuàng)新點、未解決的問題等情況說明12九、程序源代碼:13一、需求分析
2、1.1 問題描述 傳統(tǒng)的紙質(zhì)文檔已經(jīng)不能滿足大家的需求,有容易丟失、查找不方便等缺點。計算機信息管理為人們的生活、工作提供了方便,提高了效率。“簡易文本編輯器”是為了幫助老師、同學或其他一些需要使用文本編輯的人員進行管理和分析的一種計算機應(yīng)用程序。1.2 基本任務(wù) 通過用戶調(diào)查分析及實際需求,系統(tǒng)需要實現(xiàn)如下基本任務(wù):(1)輸入數(shù)據(jù)信息建立文本;(2)查詢文本中滿足要求的信息;(3)插入新的信息到文本中;(4)刪除不再需要的文本信息; (5) 查看所有的文本信息。二、概要設(shè)計為了完成需求分析的基本任務(wù),主要從以下3個方面進行設(shè)計:2.1 主界面設(shè)計 為了實現(xiàn)簡易文本編輯器的各項功能,設(shè)計了一個
3、含有多個菜單項的主控菜單模塊以操作系統(tǒng)的各項功能,以方便用戶使用系統(tǒng)。系統(tǒng)進入菜單運行界面如圖所示:簡易文本編輯器主菜單2.2 數(shù)據(jù)結(jié)構(gòu)設(shè)計系統(tǒng)采用線性表的順序存儲結(jié)構(gòu)表示和存儲“簡易文本編輯器”中的信息。實現(xiàn)文本的輸入,刪除,插入,查找,顯示功能。2.3 系統(tǒng)功能設(shè)計 運行程序,提示進入菜單,按“回車鍵”進入主菜單,再可以在主菜單上進行各項操作。每次進入菜單,選擇“1鍵”新建文本,然后才可以進行其他操作,或者按“0鍵”選擇退出。三、模塊設(shè)計3.1 模塊設(shè)計系統(tǒng)主要包含主程序模塊和其它操作模塊。其調(diào)用關(guān)系如圖所示。主函數(shù)各操作模塊模塊調(diào)用示意圖3.2 系統(tǒng)子模塊及其功能設(shè)計本系統(tǒng)共設(shè)計了16個
4、子模塊,各程序的函數(shù)名及功能說明如下:1、/*由模式串nextval值*/void GetNextval(SqVString T,int nextval)2、/*模式匹配KMP算法*/int KMPIndex(SqVString S,int pos,int next,SqVString T)3、/*初始化串*/void InitString(SqVString *S,char *str)4、/*串插入*/int StrInsert(SqVString *S,int pos,SqVString T)5、 /*串刪除*/int StrDelete(SqVString *S,int pos,int
5、len)6、/*求子串*/int SubStr(SqVString S,int pos,int len,SqVString *T)7、/*串連接*/int Concat(SqVString *S,SqVString T)8、/*串賦值*/int StrAssign(SqVString *S,char *value)9、 void InputString() /新建 10、void DeleteString()/刪除11、 void DeleteSubstring()/刪除12、 void InsertSubstring()/查找13、void DisplayString()/顯示14、void
6、 cd()/進入界面15、void ts()/主菜單16、void tc()/退出3.3 系統(tǒng)模塊之間的調(diào)用關(guān)系系統(tǒng)的16個子模塊之間的主要調(diào)用關(guān)系所示:系統(tǒng)函數(shù)調(diào)用關(guān)系圖四、詳細設(shè)計4.1 數(shù)據(jù)結(jié)構(gòu)設(shè)計系統(tǒng)采用線性表的順序存儲結(jié)構(gòu)存儲通訊錄信息。4.2 系統(tǒng)主要模塊設(shè)計(1) 建立文本模塊,由void InitString(SqVString *S,char *str)函數(shù)實現(xiàn)。該模塊的算法思想是:按照給定的線性表存儲空間的初始化分配量分配存儲空間,若分配成功,則往下進行;令線性表長為0;令線性表當前存儲容量為給定的線性表存儲空間的初始化分配量。該模塊的算法描述如下:見源程序(2) 查看文本
7、中得所有記錄,需要一個模式匹配int KMPIndex(SqVString S,int pos,int next,SqVString T)函數(shù)實現(xiàn)。該模塊的算法思想是:在此略該模塊的算法描述如下:見源程序(其它模塊設(shè)計 略)五、調(diào)試分析5.1、調(diào)試方法: 首先打開Microsoft Visual C+ 6.0 ,運行程序,出現(xiàn)錯誤修改再運行,直至運行結(jié)果0 error ,0 warning結(jié)束。接著進入程序界面,看程序能否實現(xiàn)所要求的各項功能,再作下一步的修改。5.2、調(diào)試結(jié)果主菜單新建顯示刪除查找插入退出5.3、程序出現(xiàn)的問題:還有幾個程序模塊未能成功調(diào)用。( 其他問題 見“第八項中未能解決
8、的問題” )六、用戶使用說明當用戶打開程序,就會提示按【回車鍵】進入,按【回車鍵】則進入主菜單頁面,進入主菜單,選擇【1鍵】,新建文本信息,編輯好后,按照程序中的文字提示,返回到主菜單,此時在主菜單選擇其他操作,當進入各項操作,均有提示。每一操作完成,按【回車鍵】返回主菜單,選擇【0鍵】,安全退出程序!7、 參考文獻數(shù)據(jù)結(jié)構(gòu)理論與實踐楊永斌8、 對所設(shè)計的軟件進行自我評價,如創(chuàng)新點、未解決的問題等情況說明。 拿到該課程題目,準備仿照電腦上的文本編輯器寫該程序,由于我所學不是扎實,于是就借助課本上所學的串與數(shù)組,寫好了這個程序,程序能夠正確的完成,程序充分包含了本學期的所學內(nèi)容,體現(xiàn)了數(shù)據(jù)結(jié)構(gòu)的
9、特點。繼續(xù)沿用了清屏函數(shù),是屏幕看起來很舒服,不至于那么雜亂。 未解決的問題:在完成插入,查找功能的時候,出現(xiàn)了問題,當程序執(zhí)行到此處時,程序未能進入下一步,而是直接退出了。當進入主菜單后,只能選擇【1鍵】或者退出,這是未能得到優(yōu)化的。塊移動(行塊,列塊移動),正確存盤、取盤;正確顯示總行數(shù)等功能未能完成。九、程序源代碼:#include<iostream.h>#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<string.h>#define STRSIZE 1
10、00#define MAXSTRING 60#define MAXLINE 24/*存儲結(jié)構(gòu)*/typedef structchar*ch;int length;SqVString;/*由模式串nextval值*/void GetNextval(SqVString T,int nextval)int j=0,k=-1;nextval0=-1;while(j<T.length)if(k=-1|T.chj=T.chk)j+;k+;if(T.chj=T.chk)nextvalj=nextvalk;elsenextvalj=k;elsek=nextvalk;/*模式匹配KMP算法*/int KM
11、PIndex(SqVString S,int pos,int next,SqVString T)int i=pos,j=0,r;while(i<S.length && j<T.length)if(i<S.chi=T.chj)+i;+j;else if(j=0)+i;elsej=nextj;if(j>=T.length)r=i-T.length;elser=-1;return r;/*初始化串*/void InitString(SqVString *S,char *str)int i;char *c;int len=0;c=str;while(*c!=
12、39;n')len+;c+;/*求str的長度*/S->ch=(char *)malloc(len *sizeof(char);/*申請動態(tài)數(shù)組空間*/S->length=len;/*置串的當前長度*/for(i=0;i<S->length;i+)S->chi=stri;/*賦值串值*/*串插入*/int StrInsert(SqVString *S,int pos,SqVString T)int i;int len;if(pos<0 | pos>S->length)cout<<" tt插入位置不合法,其取值范圍應(yīng)該
13、是0,length"return 0;len=S->length+T.length;S->ch=(char *)realloc(S->ch,len *sizeof(char);if(!S->ch)cout<<" tt分配空間出錯,無法完成串插入操作"return 0;for(i=S->length-1;i>=pos;i-)S->chi=T.length=S->chi;for(i=0;i<T.length;i+)S->chi+pos=T.chi;S->length=len;return 1
14、;/*串刪除*/int StrDelete(SqVString *S,int pos,int len)int i;int length;char *str;if(pos<0 | len<=0 | pos>S->length |S->length<=0)cout<<" tt刪除位置pos及刪除長度len不合法,無法完成刪除操作"return 0;length=S->length-len;if(length<=0)length=pos;/*若pos+len大于串長,則從pos刪到串尾*/str=(char *)mall
15、oc(length*sizeof(char);if(!str)cout<<" tt分配空間出錯,無法完成串的刪除操作"return 0;for(i=0;i<pos;i+)stri=S->chi;for(i=pos+len;i<S->length;i+)stri-len=S->chi;free(S->ch);S->length=length;S->ch=str;return 1;/*求子串*/int SubStr(SqVString S,int pos,int len,SqVString *T)int i;if(S.
16、length<=0)cout<<" tt空串,無法完成求子串操作"return 0;if(pos<0 | pos>S.length | len<=0)cout<<" tt子串位置pos及子串長度len不合法,無法完成求子串操作"return 0;if(pos+len>S.length)len=S.length-pos+1;/*當子串長度超過主串長度,則只取到串尾即可*/if(T->length)free(T->ch);/*釋放S的原有空間*/T->ch=(char *)malloc(
17、len *sizeof(char);if(!T->ch)cout<<" tt分配空間出錯,無法完成求子串操作"return 0;for(i=0;i<len;i+)T->chi=S.chi+pos;T->length=len;return 1;/*串連接*/int Concat(SqVString *S,SqVString T)int i;int len;len=S->length+T.length;S->ch=(char *)realloc(S->ch,len *sizeof(char);if(!S->ch)cou
18、t<<" tt分配空間出錯,無法完成串連接操作"return 0;for(i=0;i<T.length;i+)S->chi+S->length=T.chi;S->length=len;return 1;/*串賦值*/int StrAssign(SqVString *S,char *value)int count=0;int i;char *c;/S=(SqVString *)malloc(sizeof(SqVString);if(S->length!=0)free(S->ch);/*釋放S的原有空間*/c=value;whil
19、e(*c!='n')count+;c+;/*求value的長度*/if(!count)/*value為空串*/S->ch=NULL;S->length=0;elseS->ch=(char *)malloc(count);if(!S->ch) cout<<"tt分配空間出錯,無法完成串賦值操作"return 0;for(i=0;i<count;i+)S->chi=valuei;S->length=count;return 1;SqVString *linesMAXLINE;void InputString(
20、)char bufferMAXSTRING;SqVString *tmp;int LineNum=0;flushall();cout<<"tt="<<endl;cout<<"tt 新 建 文 本 "<<endl;cout<<"tt="<<endl;cout<<"tt請輸入文本,每以回車結(jié)束,一段以#結(jié)束行"<<endl;docin>>buffer;tmp=(SqVString *)malloc(sizeof(
21、SqVString);InitString(tmp,buffer);linesLineNum=tmp;LineNum+;while(buffer0!='#');/cout<<" ttOK."void DeleteString()int i;cout<<"tt="<<endl;cout<<"tt 刪 除 文 本 "<<endl;cout<<"tt="<<endl;cout<<" tt請輸入要刪除行
22、的行號:"cin>>i;free(linesi-1);while(linesi->ch0!='#')linesi-1=linesi;i+;linesi-1=linesi;cout<<" ttOK."<<endl;void InsertSubstring()int i=0;int pos=0;char bufferMAXSTRING;SqVString tmp;cout<<"tt="<<endl;cout<<"tt 插 入 子 串 "
23、<<endl;cout<<"tt="<<endl;cout<<" tt請輸入子串所在的行號:"cin>>i;cout<<" tt請輸入插入位置:"cin>>pos;cout<<" tt請輸入子串值:"cin>>buffer;InitString(&tmp,buffer);StrInsert(linesi,pos,tmp);cout<<" ttOK."<<en
24、dl;void DeleteSubstring()int i=0;int pos=0;int len=0;cout<<"tt="<<endl;cout<<"tt 刪 除 子 串 "<<endl;cout<<"tt="<<endl;cout<<" tt請輸入子串所在的行號:"cin>>i;cout<<"ntt請輸入刪除的起始位置:"cin>>pos;cout<<&qu
25、ot; tt請輸入刪除的字符數(shù):"cin>>len;StrDelete(linesi,pos,len);cout<<"tt OK."<<endl;void FindSubstring()int i=0;int pos=0;char bufferMAXSTRING;int nextMAXSTRING;SqVString tmp;cout<<"tt="<<endl;cout<<"tt 查 找 文 本 "<<endl;cout<<&qu
26、ot;tt="<<endl;cout<<" tt請輸入要查找的子串:"cin>>buffer;InitString(&tmp,buffer);GetNextval(tmp,next);while(linesi->ch0!='#')if(pos=KMPIndex(* linesi,0,next,tmp)!=-1)cout<<" tt子串"<<buffer<<" 在第"<<i+1<<" 行的&q
27、uot;<<pos<<"位置上出現(xiàn)"<<endl;return;i+;cout<<" ttOK."<<endl;void DisplayString()int i=0;cout<<"tt="<<endl;cout<<"tt 顯 示 文 本 "<<endl;cout<<"tt="<<endl;while(linesi->ch0!='#')cout
28、<<linesi->ch<<endl;i+;cout<<" ttOK."<<endl;void cd()/進入界面cout<<endl<<endl;cout<<"tt"<<"_"<<endl;cout<<"tt"<<"-"<<endl;cout<<"tt"<<" 歡·迎·使&
29、#183;用 "<<endl; cout<<"tt"<<""<<endl;cout<<"tt"<<" 簡易文本編輯器 "<<endl;cout<<"tt"<<"·················
30、3;····"<<endl;cout<<"tt"<<"-"<<endl;cout<<"tt"<<" 重慶工商大學派斯學院 "<<endl;cout<<"tt"<<" 計算機科學系 "<<endl;cout<<"tt"<<" 制作人: 10計本2班 鄧寅森&
31、quot;<<endl;cout<<"tt"<<" 2011年11月 "<<endl;cout<<"tt"<<""<<endl;cout<<"tt"<<"_"<<endl;cout<<"tt"<<" 點擊【回車】 進 入 "<<endl;cout<<"tt&qu
32、ot;<<""<<endl;cout<<"tt"void ts() cout<<endl;cout<<"tt-"<<endl;cout<<"tt 主菜單 "<<endl;cout<<"tt-"<<endl;cout<<"tt 1、輸入文本"<<endl;cout<<"tt 2、刪除一行"<<endl;cout<<&quo
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 打木漿機市場發(fā)展現(xiàn)狀調(diào)查及供需格局分析預(yù)測報告
- 對講機租賃合同樣本
- 精裝修房屋承包合同
- 工程項目合同范本實務(wù)指南
- 小額創(chuàng)業(yè)貸款合同模板
- 廣東省揭陽市事業(yè)單位聘用合同書
- 燙皺褶用熨斗產(chǎn)業(yè)規(guī)劃專項研究報告
- 個人房屋出售合同
- 房產(chǎn)按揭貸款合同示例
- 石油化工產(chǎn)品買賣合同范本
- 關(guān)愛青少年心理健康 課件(共18張ppt) 心理健康
- 放射科技能考核評分表
- isae3402如何做--dmla訪問控制
- 部編版三年級語文(上冊)標點符號專項訓練題(含答案)
- 《勞動關(guān)系協(xié)調(diào)員》教學計劃及教學大綱
- 中國歷史文化名城-南京課件
- 城市橋梁安全性評估規(guī)程DB50-T 273-2021
- 《人物的千姿百態(tài)》初中美術(shù)教學課件
- 尾礦庫在線自動監(jiān)測系統(tǒng)解決預(yù)案
- 滲透現(xiàn)象-課件完整版
- 水利工程單位工程外觀質(zhì)量評定標準報備
評論
0/150
提交評論