


版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、課程設計說明書課程名稱:數據結構課程設計專業:電子信息科學與技術班級:2012-1設計人:山東科技大學2015年 7月 11日1山東科技大學課程設計任務書一、課程設計題目:簡易文本編輯器二、設計原始資料:1嚴蔚敏、吳偉民,數據結構( C語言版)清華大學出版社 2012,052孫承愛、趙衛東,程序設計基礎基于C 語言 科學出版社 2010,10三、設計應解決下列各主要問題:_1、具有菜單圖形界面;2、具有查找、替換、插入、塊移動、刪除等功能;3、可正確存盤、取盤;4、正確顯示總行數四、設計說明書應附有下列圖紙:1、模塊調用圖2、程序流程圖五、小組分工說明:六、命題發出日期:2015/7/4 _
2、設計完成日期:2015/7/112指導教師評語成績:指導教師(簽章):年月日3山東科技大學學生課程設計目錄1 需求分析說明21.1 主函數模塊21.2 菜單顯示及輸出子模塊21.3 查找功能子模塊21.4 替換功能子模塊21.5 插入功能子模塊31.6 塊移動功能模塊31.7 刪除功能模塊31.8 讀盤功能模塊31.9 存盤功能模塊31.10 測試數據32 概要設計說明42.1 設計思想42.2 模塊調用圖42.3 程序代碼簡介43 詳細設計說明73.1 主函數模塊73.2 菜單顯示及輸出子模塊73.3 查找功能子模塊73.4 替換子模塊93.5 插入子模塊103.6 塊移動模塊113.7 刪
3、除模塊123.8 讀盤功能模塊133.9 存盤功能模塊153.10 流程圖164 調試分析174.1 遇到的問題174.2 測試結果185 用戶使用說明226 課程設計總結241山東科技大學學生課程設計1 需求分析說明簡易文本編輯器的總體目標:在 Visual Studio的開發環境下,利用所學 C 語言和數據結構的相關知識, 開發一個具有良好人機界面的簡易文本編輯器,實現對文本的簡單修改,從而達到編輯文本以及查看文本信息的目的。基本功能如下:( 1)界面友好,易與操作。采用菜單或其它人機對話方式進行選擇。( 2)能正確打開所鍵入的文本路徑,并能夠讀取相應文本信息。( 3)能對打開的文本進行文
4、本信息顯示、替換、查找、塊移動、刪除等基本操作。(4)能夠正確對修改后的文本內容存盤。(5)正確顯示文本總行數。以下是各功能模塊的功能描述:1.1 主函數模塊主函數模塊的主要功能是初始化菜單界面,功能按鍵選擇并調用相關模塊,實現軟件功能。1.2 菜單顯示及輸出子模塊菜單顯示模塊的主要功能是將菜單進行顯示, 內容包括本設計的主要功能及相關代號。文本顯示模塊的主要功能是將所要顯示的文本信息通過傳入的參量傳入本模塊進行顯示。輸出模塊主要功能是輸出文本所有信息。1.3 查找功能子模塊本模塊的主要功能是通過輸入想要查找的文本信息, 返回文本中所要查找的文本信息的所處起始位置。1.4 替換功能子模塊本模塊
5、的主要功能是將輸入的被替換的文本替換為替換的文本信息, 并能夠顯示文本信息。2山東科技大學學生課程設計1.5 插入功能子模塊本模塊的主要功能是將需要插入的文本信息插入到指定的位置, 并能夠顯示修改后的文本信息。1.6 塊移動功能模塊本模塊的主要功能是將所要移動的模塊移動到指定的相應位置, 并能夠顯示修改后的文本信息。1.7 刪除功能模塊本模塊的主要功能是刪除指定的文本。1.8 讀盤功能模塊本模塊的主要功能是將存于磁盤內的文件讀取,以便后續操作過程中使用。1.9 存盤功能模塊本模塊的主要功能是將改變后的文件存于磁盤,以便下次使用。1.10 測試數據:存于磁盤下的 .txt 文件(可自己定義)。3
6、山東科技大學學生課程設計2 概要設計說明2.1 設計思想本次設計主要是運用在主模塊中的 switch,case語句進行調用相關函數實現文本編輯器的基本功能,運用鏈式存儲結構,鏈式存儲結構能夠通過結點指針的 next 值的改變實現插入、替換、移動、刪除等一系列操作;通過 KMP 算法實現查找功能;通過 C 語言自帶的文件操作函數實現文件的讀取與存盤等功能。2.2 模塊調用圖主模塊取盤模塊插入模塊輸出模塊塊移動模菜單模塊替換模塊塊查找模塊存盤模塊刪除模塊2.3 程序代碼簡介#define STRING_MAXSIZE 256/ 定義串的長度#define ERR_NOMEMORY -1char s
7、ource_strSTRING_MAXSIZE;將/文件內資源以字符串存于此變量int len;/ 存儲原始字符串的長度/ 定義數據存儲的結構,以鏈結構存儲 typedef struct LNodechar data;4山東科技大學學生課程設計struct LNode *next;LNode,*LinkList;LinkList L = 0;/ 定義全局變量字符串的起始指針voidmenu()/ 菜單顯示函數,顯示菜單,無傳遞參數,/ 接調用LinkList Init(char Init_str);/ 初始化函數,將資源轉化為所定義的連/ 式結構,傳入參數為所要初始化的文本, / 返回值為 L
8、inkList類型的頭指針。intInput(char input_string);/ 插入函數,在默認在文本末尾插入文本, / 傳入參量為所要插入的文本信息,返回 / 值為修改后的文本信息。voidOutput();/ 輸出函數,輸出文本所包含的信息,無/ 傳入參量,無返回值intSearch(char search_str);/ 查找函數,查找相應的字符串函數傳入/ 參量為指定的查找文本信息,返回查找/ 到的參數。voidReplace(char bereplaced_str,char replace_str);/ 替換函數,替換相應文本信息,傳入參/ 量為被替換的文本信息,以及替換的文/
9、 本信息。voidInsert(char insert_str,int location);/ 插入函數,在指定位置插入指定信息,/ 傳入參量為需要插入的文本信息, 以及/ 插入的相關位置。voidMove(char bemoved_str,int location);/ 塊移動函數,將文本信息中的指定信息/ 移動到指定位置, 傳入參量為需要移動/ 的文本塊以及指定的移動位置。5山東科技大學學生課程設計voidDelete(char delete_str);/ 刪除函數,刪除相應的文本信息,傳入/ 參數為指定的被刪除的文本voidDisplay(int len_dis);/ 顯示函數,傳入參量
10、為所要顯示的文本 / 長度。voidsave();/ 存盤函數,將所改變的文本存入到磁盤/ 中,無傳入參數,無返回參數voiddelay();/ 延時函數intStringLength( LinkList S ); / 求串長函數,傳入參數為要求的串的長/ 度,返回參數為文本的長度void statistics();/ 統計行數,無傳入參數,無返回值。voidKMPGetNext(char *T,int n2,int nextval);intKMPIndex(char *S,int n1,char *T,int n2); /KMP算法,求文本的位置6山東科技大學學生課程設計3 詳細設計說明3.
11、1 主函數模塊主函數模塊的主要功能是調用 menu函數初始化菜單界面, 并調用 Openfile 函數將存于本地磁盤內的文件讀出到 source_str 數組中以備后續調用,并在將字符數組初始化為鏈表之后進入功能按鍵選擇,通過 switch 語句進行相應的功能操作并調用相關模塊,實現軟件功能。3.2 菜單顯示及輸出子模塊菜單顯示模塊的主要功能是將菜單進行顯示,本模塊調用menu 函數,menu 函數由 printf 函數進行格式的輸出,并通過 system()函數進行顏色的改變,以及清屏等操作,主要輸出內容包括本設計的介紹、小組信息、主要功能及相關代號。輸出模塊主要功能是輸出文本內容以及總行數
12、,主要是調用Output 函數和statistics函數將文本基本信息進行打印。Output 函數主要是將changed_source_str字符數組進行輸出打印, changed_source_str字符數組是存儲操作后的 source_str字符數組; statistics函數主要是統計文本中換行和結束符的個數,并輸出打印 count。3.3 查找功能子模塊本模塊的主要功能是通過調用 Search函數實現基本功能, Search函數通過讀入用戶輸入的想要查找的文本信息,通過調用 KMP算法函數返回文本中所要查找的文本信息的所處起始位置 search_loc,若找不到子串,則返回 -1。獲取
13、子串的 next 函數如下 :void KMPGetNext(char *T,int n2,int nextval)/ 求子串 T的 next函數修正值并存入數組 nextvalint j=1,k=0;nextval0=-1;while(jn2)if(k=0|Tk=Tj)nextvalj=Tk=Tj?nextvalk:k;j+;k+;7山東科技大學學生課程設計elsek=nextvalk;具體的 KMP 算法如下:intKMPIndex(char *S,int n1,char *T,int n2)/ 利用子串 T的next函數求 T在主串 S中的位置int i=0,j=0;int *next=
14、(int *)malloc(n2*sizeof(int);if(!next) return ERR_NOMEMORY ;KMPGetNext(T,n2,next);while(in1&j=n2?i-n2:-1);Search函數的描述如下:int Search(char search_str)char sSTRING_MAXSIZE;int i=0;int search_loc,search_len,s_len;LNode *p;p=L-next;while(p)/ 獲取修改后的文本信息si+=p-data;p=p-next;s_len=strlen(s);8山東科技大學學生課程設計searc
15、h_len=strlen(search_str);if(search_len next;w = LTmp;9山東科技大學學生課程設計for(j = 0; j next;for(j = 0; j next;for(j = 0; j next;p-next = z;w-next = s-next;Display();return 0;elseprintf(*n);printf(* 主銀!您所被替換的文本不存在哦 *n); printf(*n);3.5 插入子模塊本模塊的主要通過調用 Insert 函數實現基本功能。 Insert 函數是將需要插入的文本信息插入到指定的位置,并顯示修改后的文本信息。
16、此函數采用邊生成新節點邊插入的方式完成, 通過 while 循環得到插入位置的指針 *p ,將插入文本的第 i 位賦值給新生成的結點 s-data,p 的 next 指向新生成的結點 s,依次循環直到將整個文本插入完成。具體的實現函數如下:void Insert(char insert_str, int location)int i,j,len_ins,source_str_len;LNode *p,*s;len_ins = strlen(insert_str);source_str_len = strlen(source_str);if(location = 0)p=L;j=0;for(i=
17、0;ilen_ins;i+)/ 插入的次數10山東科技大學學生課程設計while(p&jnext;j+;s=(LinkList)malloc(sizeof(LNode); / 生成新結點 s-data=insert_stri;s-next=p-next;p-next=s;p=p-next;len_ins=strlen(source_str)+len_ins;Display();else3.6 塊移動模塊本模塊的主要通過調用 Move 函數實現基本功能, Move 函數將所要移動的模塊移動到指定的相應位置, 并顯示修改后的文本信息。 Move 函數通過改變 next 值來實現移動的目的。思想類似
18、于 Replace函數,首先得到塊的前一位結點的指針 *p ,塊最后一位節點的指針,要移動位置的指針 *w ,通過結點的 next 值得改變得到新鏈,打印輸出。具體函數如下:voidMove(char bemoved_str,int location)int j,bemoved_str_loc = 0,bemoved_str_len = 0,source_str_len; LNode *p,*s,*w,*temp;bemoved_str_loc = Search(bemoved_str) + 1; bemoved_str_len = strlen(bemoved_str); source_st
19、r_len = strlen(source_str); if(bemoved_str_loc) 0)11山東科技大學學生課程設計if(location = 0)p = L;s = L;w = L;for(j = 0; j next;temp = p-next;for(j = 0; j next;for(j = 0; j next;p-next = s-next;s-next = w-next;w-next = temp;Display();else;else;3.7 刪除模塊本模塊的主要通過調用 Delete 函數實現基本功能, Delete 函數是刪除指定的文本。并輸出打印操作完成后的結果。
20、 Delete 函數通過調用 Search函數得到待刪除文本的位置, 并通過 while 循環得到待刪除文本的前一個結點的位置指針 *q 和待刪除文本的后一個結點的位置指針 *p(如遇到換行符則將 *p 指針向后移動一位。),將 *q 的 next 值指向 *p 即得到刪除后的文本。最后打印輸出。12山東科技大學學生課程設計具體實現函數如下:void Delete(char delete_str)int loc;/ 記錄要刪除的文本的位置int i,j=0;int len_del;LNode *p,*q;p=L;len_del=strlen(delete_str);loc=Search(del
21、ete_str)+1;if(loc - 1) = 0)for(i=0;inext&jnext;j+;q=p-next;/ 刪除結點if(q-next-data= 10)q=q-next;p-next=q-next;len=strlen(source_str)-len_del;Display();else;3.8 讀盤功能模塊本模塊的主要通過調用 OpenFile函數實現基本功能, OpenFile函數主要實現將存于磁盤內的文件讀取, 以便后續操作過程中使用。 OpenFile函數以只讀的方式調用 fopen函數讀取文本內容并存于字符數組 source_str中,存儲完后通過 fclose函數將
22、其關閉。13山東科技大學學生課程設計函數實現如下void OpenFile()char ch,meng33;int i = 0,flag = 1,copy_num;FILE *fp1;printf( 你猜你要輸入什么樣兒滴文本路徑(我看這個不錯 f:1.txt)n);scanf(%s,way);if(fp1 = fopen(way,r) = NULL)while(flag)printf( 總統大人,您的文件不在磁盤里呢,是不是在U盤 ,再來一遍 !n);scanf(%s,way);fp1 = fopen(way,r);if(fp1 != NULL)flag = 0;elseflag = 1;i
23、f(fp1 = fopen(way,r) != NULL)while(!feof(fp1)ch = fgetc(fp1);source_stri+ = ch;source_stri = 0;for(i = 0;i strlen(source_str)-1;i+)source_stri = source_stri;source_stri = 0;for(copy_num = 0;copy_num STRING_MAXSIZE;copy_num +)changed_source_strcopy_num = source_strcopy_num;printf( 我已經把他印在腦海里了!給你看下一個畫面,不要捉急 .n);14山東科技大學學生課程設
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 質量管理部2025年度客戶關系管理計劃
- 軟件開發科技企業簡介范文
- 學校體育活動安全保障計劃
- (部編教材)五年級語文上冊第三單元興趣培養計劃
- 醫療糾紛調解組織制度及流程規范
- 新入職教師職業行為準則心得體會
- 小學四年級班主任班級志愿者培養計劃
- 一年級課外閱讀家長參與計劃
- 三年級下冊科學課程提升計劃
- 人教版六年級語文暑假復習計劃
- GB/T 5249-2013可滲透性燒結金屬材料氣泡試驗孔徑的測定
- GB/T 28267.3-2015鋼絲繩芯輸送帶第3部分:井下用輸送帶的特殊安全要求
- GB/T 15684-2015谷物碾磨制品脂肪酸值的測定
- 百靈達x32數字調音臺說明書簡體中文
- GA/T 947.2-2015單警執法視音頻記錄系統第2部分:執法記錄儀
- 噴霧干燥器課程設計終稿
- API-650-1鋼制焊接石油儲罐
- 英威騰GD變頻器調試說明
- 倉庫作業指導書
- 冰雪奇緣臺詞中英文對照完整版(常用)
- 施工現場安全管理處罰規定
評論
0/150
提交評論