



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、課程設(shè)計說明書課程名稱:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計專業(yè):電子信息科學(xué)與技術(shù)班級:2012-1設(shè)計人:山東科技大學(xué)2015年 7月 11日1山東科技大學(xué)課程設(shè)計任務(wù)書一、課程設(shè)計題目:簡易文本編輯器二、設(shè)計原始資料:1嚴(yán)蔚敏、吳偉民,數(shù)據(jù)結(jié)構(gòu)( C語言版)清華大學(xué)出版社 2012,052孫承愛、趙衛(wèi)東,程序設(shè)計基礎(chǔ)基于C 語言 科學(xué)出版社 2010,10三、設(shè)計應(yīng)解決下列各主要問題:_1、具有菜單圖形界面;2、具有查找、替換、插入、塊移動、刪除等功能;3、可正確存盤、取盤;4、正確顯示總行數(shù)四、設(shè)計說明書應(yīng)附有下列圖紙:1、模塊調(diào)用圖2、程序流程圖五、小組分工說明:六、命題發(fā)出日期:2015/7/4 _
2、設(shè)計完成日期:2015/7/112指導(dǎo)教師評語成績:指導(dǎo)教師(簽章):年月日3山東科技大學(xué)學(xué)生課程設(shè)計目錄1 需求分析說明21.1 主函數(shù)模塊21.2 菜單顯示及輸出子模塊21.3 查找功能子模塊21.4 替換功能子模塊21.5 插入功能子模塊31.6 塊移動功能模塊31.7 刪除功能模塊31.8 讀盤功能模塊31.9 存盤功能模塊31.10 測試數(shù)據(jù)32 概要設(shè)計說明42.1 設(shè)計思想42.2 模塊調(diào)用圖42.3 程序代碼簡介43 詳細設(shè)計說明73.1 主函數(shù)模塊73.2 菜單顯示及輸出子模塊73.3 查找功能子模塊73.4 替換子模塊93.5 插入子模塊103.6 塊移動模塊113.7 刪
3、除模塊123.8 讀盤功能模塊133.9 存盤功能模塊153.10 流程圖164 調(diào)試分析174.1 遇到的問題174.2 測試結(jié)果185 用戶使用說明226 課程設(shè)計總結(jié)241山東科技大學(xué)學(xué)生課程設(shè)計1 需求分析說明簡易文本編輯器的總體目標(biāo):在 Visual Studio的開發(fā)環(huán)境下,利用所學(xué) C 語言和數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識, 開發(fā)一個具有良好人機界面的簡易文本編輯器,實現(xiàn)對文本的簡單修改,從而達到編輯文本以及查看文本信息的目的?;竟δ苋缦拢海?1)界面友好,易與操作。采用菜單或其它人機對話方式進行選擇。( 2)能正確打開所鍵入的文本路徑,并能夠讀取相應(yīng)文本信息。( 3)能對打開的文本進行文
4、本信息顯示、替換、查找、塊移動、刪除等基本操作。(4)能夠正確對修改后的文本內(nèi)容存盤。(5)正確顯示文本總行數(shù)。以下是各功能模塊的功能描述:1.1 主函數(shù)模塊主函數(shù)模塊的主要功能是初始化菜單界面,功能按鍵選擇并調(diào)用相關(guān)模塊,實現(xiàn)軟件功能。1.2 菜單顯示及輸出子模塊菜單顯示模塊的主要功能是將菜單進行顯示, 內(nèi)容包括本設(shè)計的主要功能及相關(guān)代號。文本顯示模塊的主要功能是將所要顯示的文本信息通過傳入的參量傳入本模塊進行顯示。輸出模塊主要功能是輸出文本所有信息。1.3 查找功能子模塊本模塊的主要功能是通過輸入想要查找的文本信息, 返回文本中所要查找的文本信息的所處起始位置。1.4 替換功能子模塊本模塊
5、的主要功能是將輸入的被替換的文本替換為替換的文本信息, 并能夠顯示文本信息。2山東科技大學(xué)學(xué)生課程設(shè)計1.5 插入功能子模塊本模塊的主要功能是將需要插入的文本信息插入到指定的位置, 并能夠顯示修改后的文本信息。1.6 塊移動功能模塊本模塊的主要功能是將所要移動的模塊移動到指定的相應(yīng)位置, 并能夠顯示修改后的文本信息。1.7 刪除功能模塊本模塊的主要功能是刪除指定的文本。1.8 讀盤功能模塊本模塊的主要功能是將存于磁盤內(nèi)的文件讀取,以便后續(xù)操作過程中使用。1.9 存盤功能模塊本模塊的主要功能是將改變后的文件存于磁盤,以便下次使用。1.10 測試數(shù)據(jù):存于磁盤下的 .txt 文件(可自己定義)。3
6、山東科技大學(xué)學(xué)生課程設(shè)計2 概要設(shè)計說明2.1 設(shè)計思想本次設(shè)計主要是運用在主模塊中的 switch,case語句進行調(diào)用相關(guān)函數(shù)實現(xiàn)文本編輯器的基本功能,運用鏈?zhǔn)酱鎯Y(jié)構(gòu),鏈?zhǔn)酱鎯Y(jié)構(gòu)能夠通過結(jié)點指針的 next 值的改變實現(xiàn)插入、替換、移動、刪除等一系列操作;通過 KMP 算法實現(xiàn)查找功能;通過 C 語言自帶的文件操作函數(shù)實現(xiàn)文件的讀取與存盤等功能。2.2 模塊調(diào)用圖主模塊取盤模塊插入模塊輸出模塊塊移動模菜單模塊替換模塊塊查找模塊存盤模塊刪除模塊2.3 程序代碼簡介#define STRING_MAXSIZE 256/ 定義串的長度#define ERR_NOMEMORY -1char s
7、ource_strSTRING_MAXSIZE;將/文件內(nèi)資源以字符串存于此變量int len;/ 存儲原始字符串的長度/ 定義數(shù)據(jù)存儲的結(jié)構(gòu),以鏈結(jié)構(gòu)存儲 typedef struct LNodechar data;4山東科技大學(xué)學(xué)生課程設(shè)計struct LNode *next;LNode,*LinkList;LinkList L = 0;/ 定義全局變量字符串的起始指針voidmenu()/ 菜單顯示函數(shù),顯示菜單,無傳遞參數(shù),/ 接調(diào)用LinkList Init(char Init_str);/ 初始化函數(shù),將資源轉(zhuǎn)化為所定義的連/ 式結(jié)構(gòu),傳入?yún)?shù)為所要初始化的文本, / 返回值為 L
8、inkList類型的頭指針。intInput(char input_string);/ 插入函數(shù),在默認在文本末尾插入文本, / 傳入?yún)⒘繛樗迦氲奈谋拘畔?,返?/ 值為修改后的文本信息。voidOutput();/ 輸出函數(shù),輸出文本所包含的信息,無/ 傳入?yún)⒘?,無返回值intSearch(char search_str);/ 查找函數(shù),查找相應(yīng)的字符串函數(shù)傳入/ 參量為指定的查找文本信息,返回查找/ 到的參數(shù)。voidReplace(char bereplaced_str,char replace_str);/ 替換函數(shù),替換相應(yīng)文本信息,傳入?yún)? 量為被替換的文本信息,以及替換的文/
9、 本信息。voidInsert(char insert_str,int location);/ 插入函數(shù),在指定位置插入指定信息,/ 傳入?yún)⒘繛樾枰迦氲奈谋拘畔ⅲ?以及/ 插入的相關(guān)位置。voidMove(char bemoved_str,int location);/ 塊移動函數(shù),將文本信息中的指定信息/ 移動到指定位置, 傳入?yún)⒘繛樾枰苿? 的文本塊以及指定的移動位置。5山東科技大學(xué)學(xué)生課程設(shè)計voidDelete(char delete_str);/ 刪除函數(shù),刪除相應(yīng)的文本信息,傳入/ 參數(shù)為指定的被刪除的文本voidDisplay(int len_dis);/ 顯示函數(shù),傳入?yún)⒘?/p>
10、為所要顯示的文本 / 長度。voidsave();/ 存盤函數(shù),將所改變的文本存入到磁盤/ 中,無傳入?yún)?shù),無返回參數(shù)voiddelay();/ 延時函數(shù)intStringLength( LinkList S ); / 求串長函數(shù),傳入?yún)?shù)為要求的串的長/ 度,返回參數(shù)為文本的長度void statistics();/ 統(tǒng)計行數(shù),無傳入?yún)?shù),無返回值。voidKMPGetNext(char *T,int n2,int nextval);intKMPIndex(char *S,int n1,char *T,int n2); /KMP算法,求文本的位置6山東科技大學(xué)學(xué)生課程設(shè)計3 詳細設(shè)計說明3.
11、1 主函數(shù)模塊主函數(shù)模塊的主要功能是調(diào)用 menu函數(shù)初始化菜單界面, 并調(diào)用 Openfile 函數(shù)將存于本地磁盤內(nèi)的文件讀出到 source_str 數(shù)組中以備后續(xù)調(diào)用,并在將字符數(shù)組初始化為鏈表之后進入功能按鍵選擇,通過 switch 語句進行相應(yīng)的功能操作并調(diào)用相關(guān)模塊,實現(xiàn)軟件功能。3.2 菜單顯示及輸出子模塊菜單顯示模塊的主要功能是將菜單進行顯示,本模塊調(diào)用menu 函數(shù),menu 函數(shù)由 printf 函數(shù)進行格式的輸出,并通過 system()函數(shù)進行顏色的改變,以及清屏等操作,主要輸出內(nèi)容包括本設(shè)計的介紹、小組信息、主要功能及相關(guān)代號。輸出模塊主要功能是輸出文本內(nèi)容以及總行數(shù)
12、,主要是調(diào)用Output 函數(shù)和statistics函數(shù)將文本基本信息進行打印。Output 函數(shù)主要是將changed_source_str字符數(shù)組進行輸出打印, changed_source_str字符數(shù)組是存儲操作后的 source_str字符數(shù)組; statistics函數(shù)主要是統(tǒng)計文本中換行和結(jié)束符的個數(shù),并輸出打印 count。3.3 查找功能子模塊本模塊的主要功能是通過調(diào)用 Search函數(shù)實現(xiàn)基本功能, Search函數(shù)通過讀入用戶輸入的想要查找的文本信息,通過調(diào)用 KMP算法函數(shù)返回文本中所要查找的文本信息的所處起始位置 search_loc,若找不到子串,則返回 -1。獲取
13、子串的 next 函數(shù)如下 :void KMPGetNext(char *T,int n2,int nextval)/ 求子串 T的 next函數(shù)修正值并存入數(shù)組 nextvalint j=1,k=0;nextval0=-1;while(j<n2)if(k=0|Tk=Tj)nextvalj=Tk=Tj?nextvalk:k;j+;k+;7山東科技大學(xué)學(xué)生課程設(shè)計elsek=nextvalk;具體的 KMP 算法如下:intKMPIndex(char *S,int n1,char *T,int n2)/ 利用子串 T的next函數(shù)求 T在主串 S中的位置int i=0,j=0;int *n
14、ext=(int *)malloc(n2*sizeof(int);if(!next) return ERR_NOMEMORY ;KMPGetNext(T,n2,next);while(i<n1&&j<n2)if(j=-1|Si=Tj)/ 繼續(xù)比較后繼字符i+;j+;else/ 模式串向右移動j=nextj;free(next);return (j>=n2?i-n2:-1);Search函數(shù)的描述如下:int Search(char search_str)char sSTRING_MAXSIZE;int i=0;int search_loc,search_len
15、,s_len;LNode *p;p=L->next;while(p)/ 獲取修改后的文本信息si+=p->data;p=p->next;s_len=strlen(s);8山東科技大學(xué)學(xué)生課程設(shè)計search_len=strlen(search_str);if(search_len <= s_len)search_loc = KMPIndex(s,s_len,search_str,search_len);/ 利用KMP算法獲取查找的位置return search_loc;elsereturn -1;/ 未找到3.4 替換子模塊本模塊的主要調(diào)用Replace函將輸入的被替換
16、的文本轉(zhuǎn)換為替換的文本信息,并顯示文本信息。 Replace函數(shù)通過調(diào)用 for 循環(huán)得到被替換的文本的前一節(jié)點的指針 *p ,以及被替換文本的后一節(jié)點的指針 *s,調(diào)用 Init 函數(shù)使替換文本初始化為連式存儲并返回此鏈的頭節(jié)點指針存于 *w ,for 循環(huán)得到替換文本最后一位節(jié)點的指針 *w 。通過指針的操作將被替換的文本卸下,并連接替換文本組成新鏈。最終打印輸出此鏈。具體的實現(xiàn)函數(shù)如下:int Replace(char replaced_str,char replace_str)int j=0;int replaced_str_loc,replaced_str_len,reped_len
17、,source_str_len; LNode *p,*s,*z,*w;replaced_str_len = strlen(replaced_str);/ 被替換的字符的長度reped_len = strlen(replace_str);/ 需要替換的字符的長度source_str_len = strlen(source_str);/ 主串字符的長度replaced_str_loc = Search(replaced_str); / 被替換的字符的位置 if(replaced_str_loc != -1)LTmp = Init(replace_str);p = L;s = L;z = LTmp-
18、>next;w = LTmp;9山東科技大學(xué)學(xué)生課程設(shè)計for(j = 0; j < replaced_str_loc;j+)p = p->next;for(j = 0; j < (replaced_str_loc + replaced_str_len);j+)s = s->next;for(j = 0; j < reped_len;j+)w = w->next;p->next = z;w->next = s->next;Display();return 0;elseprintf("*n");printf(&quo
19、t;* 主銀!您所被替換的文本不存在哦 *n"); printf("*n");3.5 插入子模塊本模塊的主要通過調(diào)用 Insert 函數(shù)實現(xiàn)基本功能。 Insert 函數(shù)是將需要插入的文本信息插入到指定的位置,并顯示修改后的文本信息。此函數(shù)采用邊生成新節(jié)點邊插入的方式完成, 通過 while 循環(huán)得到插入位置的指針 *p ,將插入文本的第 i 位賦值給新生成的結(jié)點 s->data,p 的 next 指向新生成的結(jié)點 s,依次循環(huán)直到將整個文本插入完成。具體的實現(xiàn)函數(shù)如下:void Insert(char insert_str, int location)in
20、t i,j,len_ins,source_str_len;LNode *p,*s;len_ins = strlen(insert_str);source_str_len = strlen(source_str);if(location <= source_str_len)&&(location >= 0)p=L;j=0;for(i=0;i<len_ins;i+)/ 插入的次數(shù)10山東科技大學(xué)學(xué)生課程設(shè)計while(p&&j<location)p=p->next;j+;s=(LinkList)malloc(sizeof(LNode);
21、 / 生成新結(jié)點 s->data=insert_stri;s->next=p->next;p->next=s;p=p->next;len_ins=strlen(source_str)+len_ins;Display();else3.6 塊移動模塊本模塊的主要通過調(diào)用 Move 函數(shù)實現(xiàn)基本功能, Move 函數(shù)將所要移動的模塊移動到指定的相應(yīng)位置, 并顯示修改后的文本信息。 Move 函數(shù)通過改變 next 值來實現(xiàn)移動的目的。思想類似于 Replace函數(shù),首先得到塊的前一位結(jié)點的指針 *p ,塊最后一位節(jié)點的指針,要移動位置的指針 *w ,通過結(jié)點的 next
22、 值得改變得到新鏈,打印輸出。具體函數(shù)如下: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_str_len = strlen(source_str); if(bemoved_str_loc) > 0)11山東科技大學(xué)學(xué)生
23、課程設(shè)計if(location <= source_str_len)&&(location >= 0)p = L;s = L;w = L;for(j = 0; j < bemoved_str_loc-1;j+)p = p->next;temp = p->next;for(j = 0; j < (bemoved_str_loc + bemoved_str_len-1);j+)s = s->next;for(j = 0; j < location;j+)w = w->next;p->next = s->next;s-
24、>next = w->next;w->next = temp;Display();else;else;3.7 刪除模塊本模塊的主要通過調(diào)用 Delete 函數(shù)實現(xiàn)基本功能, Delete 函數(shù)是刪除指定的文本。并輸出打印操作完成后的結(jié)果。 Delete 函數(shù)通過調(diào)用 Search函數(shù)得到待刪除文本的位置, 并通過 while 循環(huán)得到待刪除文本的前一個結(jié)點的位置指針 *q 和待刪除文本的后一個結(jié)點的位置指針 *p(如遇到換行符則將 *p 指針向后移動一位。),將 *q 的 next 值指向 *p 即得到刪除后的文本。最后打印輸出。12山東科技大學(xué)學(xué)生課程設(shè)計具體實現(xiàn)函數(shù)如下:
25、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(delete_str)+1;if(loc - 1) >= 0)for(i=0;i<len_del;i+)/ 要刪除的結(jié)點的個數(shù)while(p->next&&j<loc-1) / 尋找第 loci 個元素,并令 p指向其前驅(qū)p=p->next;j+;q=p->next;/ 刪除結(jié)點if(q->
26、next->data= 10)q=q->next;p->next=q->next;len=strlen(source_str)-len_del;Display();else;3.8 讀盤功能模塊本模塊的主要通過調(diào)用 OpenFile函數(shù)實現(xiàn)基本功能, OpenFile函數(shù)主要實現(xiàn)將存于磁盤內(nèi)的文件讀取, 以便后續(xù)操作過程中使用。 OpenFile函數(shù)以只讀的方式調(diào)用 fopen函數(shù)讀取文本內(nèi)容并存于字符數(shù)組 source_str中,存儲完后通過 fclose函數(shù)將其關(guān)閉。13山東科技大學(xué)學(xué)生課程設(shè)計函數(shù)實現(xiàn)如下void OpenFile()char ch,meng33;
27、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(" 總統(tǒng)大人,您的文件不在磁盤里呢,是不是在U盤 ,再¨來一遍 !n");scanf("%s",way);fp1 = fopen(way,"r");if(fp1 != NULL
28、)flag = 0;elseflag = 1;if(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_sou
29、rce_strcopy_num = source_strcopy_num;printf(" 我已經(jīng)把他印在腦海里了!給你看下一個畫面,不要捉急 .n");14山東科技大學(xué)學(xué)生課程設(shè)計delay();fclose(fp1);system( "cls" ) ;menu();void delay()int i,j;for(i = 0;i < 55000;i+)for(j = 0;j < 11000;j+);3.9 存盤功能模塊本模塊的主要通過調(diào)用 save函數(shù)實現(xiàn)基本功能, save函數(shù)是將改變后的文件存于磁盤,以便下次使用。 Save函數(shù)以寫的方
30、式調(diào)用 fopen函數(shù)打開源文件,并調(diào)用 fprintf 函數(shù)將改變的字符數(shù)組 changed_source_str寫入到其中。最后,調(diào)用 fclose函數(shù)關(guān)閉本文件。函數(shù)實現(xiàn)如下void save()FILE * fp2;fp2=fopen(way,"w");fprintf (fp2,"%s",changed_source_str);fclose (fp2);15山東科技大學(xué)學(xué)生課程設(shè)計3.10 流程圖開始初始化界面輸入要編輯文檔路徑否輸入是文件路徑否正確是打開文件功能選擇界面輸入功能前代號功能代號123456其他7輸出查找替換插入移動刪除輸入錯誤退出
31、輸入要查找輸入替輸入要插輸入要移輸入要刪入的位置的文本換、被替動的位置除的文本換的文本及文本及文本是否存盤否否否否否否位置是否正確文本是否存在位置是否正確文本是否存在文本是否存在是是是是是是輸出替換后的文本輸出插入后的文本否輸出刪除后的文本文本是否存在保存并退出輸出文本位置是是是是否繼續(xù)查找是否繼續(xù)插入輸出移動后的文本是否繼續(xù)刪除是是否繼續(xù)查找是請重新輸入是否繼續(xù)移動否否否否否結(jié)束16山東科技大學(xué)學(xué)生課程設(shè)計4 調(diào)試分析4.1 遇到的問題文本在改變后不能輸出功能不能正確執(zhí)行打印的還是沒有編輯過的前文本內(nèi)容。分析發(fā)現(xiàn)在供打印輸出的字符數(shù)組沒有被及時的更新, 因此每次都是顯示原始的信息,這就會使退出時不能將編輯過的文本正確保存。解決方法:在 Display函數(shù)里將編輯過的文本重新賦值到全局變量的字符數(shù)組 changed_source_str中,此問題得到解決。執(zhí)行查找功能時,輸出
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 銷售公司業(yè)務(wù)員勞動合同協(xié)議
- 房屋按揭共同還款合同樣本2025
- 生態(tài)養(yǎng)殖基地租賃合同
- 特許經(jīng)營合同示范文本
- 新能源貨車租賃合同
- 采購合同管理:風(fēng)險防范與應(yīng)對措施
- 合作建房借款合同(單位集體住房)
- 度產(chǎn)品試用合同協(xié)議
- 金屬冶煉安全管理課件
- 寵物營養(yǎng)與寵物骨骼健康考核試卷
- GB/T 5916-2008產(chǎn)蛋后備雞、產(chǎn)蛋雞、肉用仔雞配合飼料
- 《中小學(xué)教育懲戒規(guī)則》(試用)試題及答案
- GB/T 30516-2014高粘高彈道路瀝青
- GB/T 23723.1-2009起重機安全使用第1部分:總則
- 安全測試工具、蹭網(wǎng)利器wifiphisher新增漢化版
- 中學(xué)教育-中學(xué)生心理健康量表參考范本
- 外科病人體液失衡-課件
- 生物氧化 Biological Oxidation課件
- 電力拖動自動控制系統(tǒng)-運動控制系統(tǒng)(第5版)習(xí)題答案
- 贛美版四年級美術(shù)下冊全冊課件匯總
- 工會專業(yè)知識考試題庫
評論
0/150
提交評論