電子辭典課程設(shè)計方案_第1頁
電子辭典課程設(shè)計方案_第2頁
電子辭典課程設(shè)計方案_第3頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課程名稱Linux下的標準C設(shè)計題目英漢電子辭典項目組長邢美慧組 員丁寶陳飛郭宗良歐陽晨陽指導(dǎo)教師王建立2014目錄一、設(shè)計時間 0二、設(shè)計目的0三、需求分析 03.1單詞查詢03.2建立索引,并使用索引進行單詞查詢 03.3用戶添加新詞0四、系統(tǒng)分析 14.1 功能分析14.1.1 系統(tǒng)功能分析14.1.2 文本查找功能分析 1建立索引功能分析 1索引查找功能分析 14.1.5 添加新詞功能分析 24.2概要設(shè)計24.2.1 系統(tǒng)功能結(jié)構(gòu)圖24.2.2 文本查找功能圖3建立索引功能圖44.2.4 索引查找功能圖54.2.5 添加新詞功能圖64.3 各模塊細化分析 74.3.1 內(nèi)存存儲結(jié)構(gòu)-

2、哈希表的實現(xiàn)74.3.2 二進制索引文件構(gòu)造圖 84.3.3 文本查詢細化分析 94.3.4 建立索引文件細化分析 124.3.5 索引查詢細化分析174.3.6 添加新詞細化分析 20五、系統(tǒng)設(shè)計 215.1硬件環(huán)境215.2選擇語言215.3功能關(guān)系225.4框架設(shè)計235.5 詳細設(shè)計235.5.1 抽象數(shù)據(jù)類型235.5.2 函數(shù)接口聲明24六、編碼286.1模塊1代碼286.2模塊2代碼336.3模塊3代碼376.4模塊4代碼396.5主函數(shù)代碼41七、測試427.1單元測試427.1.1 模塊1測試427.1.2 模塊2測試447.1.3 模塊3測試447.1.4 模塊4測試477

3、.2集成測試48八、使用說明書49九、維護49一、設(shè)計時間2014年8月18日-2014年8月25日二、設(shè)計目的通過本次課程設(shè)計,熟悉C語言的程序設(shè)計與技巧,進一步提高編寫程序,分析程序及上機操作,調(diào)試程序的能力,提高動手操作能力及分析問題和解決問題的能力三、需求分析3.1單詞查詢給定文本文件“ dict.txt ”該文件用于存儲詞庫。詞庫為“英-漢” “漢-英”雙語詞典,每個單詞和其解釋的格式固定,如下所示:#單詞Trans:解釋1解釋2解釋n每個新單詞由“ #”開頭,解釋之間使用“ ”隔開。一個詞可能有多個解釋,解釋均存儲在一行里,行首固定以“ Trans:開頭。下面是一個典型的例子:#a

4、byss inianTrans:a.阿比西尼亞的 n.阿比西尼亞人;依索比亞人該詞有兩個解釋,一個是“ a.阿比西尼亞的”;另一個是“ n.阿比西尼亞人;依索比亞人”。 要求編寫程序?qū)⒃~庫文件讀取到內(nèi)存中,接受用戶輸入的單詞, 在字典中查找單詞, 并且將解釋輸出到屏幕上。用戶可以反復(fù)輸入,直到用戶輸入“exit ”字典程序退出。程序執(zhí)行格式如下所示:./app - text-text表示使用文本詞庫進行單詞查找。3.2建立索引,并使用索引進行單詞查詢要求建立二進制索引,索引格式如下圖所示。將文本文件“dict.txt 文件轉(zhuǎn)換為上圖所示索引文件“dict.dat”,使用索引文件實現(xiàn)單詞查找。程

5、序執(zhí)行格式如下:./app - index-index表示使用文本詞庫 dict.txt建立二進制索引詞庫dict.dat./app - bin-bin表示使用二進制索引詞庫進行單詞查找。3.3用戶添加新詞用戶添加的新詞存放在指定文件中。如果待查單詞在詞庫中找不到,則使用用戶提供的詞庫。用戶的詞庫使用文本形式保存,便于用戶修改。程序執(zhí)行格式圖1-1所示。./app詞庫選擇選項-f用戶詞庫文件名詞庫選項為-test1,或者-test2,表示使用文本詞庫或者二進制索引詞庫。-f為固定參數(shù),用來指定用戶詞庫文件名。四、系統(tǒng)分析4.1功能分析系統(tǒng)功能分析該項目包含4個主要功能:使用文本文件進行單詞查詢

6、;使用文本文件生成二進制索引文件; 使用二進制索引文件進行單詞查詢;用戶添加新詞;當用戶輸入./app -text執(zhí)行功能1 ;當用戶輸入./app -index執(zhí)行功能2 ;當用戶輸入./app -bin執(zhí)行功能3;當用戶輸入./app -insert執(zhí)行功能4;文本查找功能分析當用戶從終端輸入./app -text后進入該功能模塊,系統(tǒng)會提示用戶輸入要查詢的 英文單詞,當用戶鍵入待查單詞后,程序會先從dict.txt文件中查詢該單詞,若查到,即在終端顯示解釋;若未查到,再到自定義文本 my_dict.txt中查詢,若查到,即在終端顯示解釋;若未查到,則在終端提示“此單詞未找到”。用戶可以反

7、復(fù)查詢,直到鍵入Exit結(jié)束整個程序。建立索引功能分析當用戶從終端輸入./app -in dex后進入該功能模塊,系統(tǒng)會生成一個新的二進制文件dict.dat,若原已存在,將會被覆蓋,程序?qū)⑽谋疚募ict.txt 中的內(nèi)容寫進該二進制文件,并且生成一個目錄寫進該二進制文件,在建立完成后將會提示“建立成功”索引查找功能分析當用戶從終端輸入./app -bin后進入該功能模塊,系統(tǒng)會提示用戶輸入要查詢的英文單詞,當用戶鍵入待查單詞后,程序會從二進制索引文件dict.dat中查詢該單詞,若查到,即在終端顯示解釋;若未查到,則在終端提示“此單詞未找到”。用戶可以反復(fù)查詢,直到鍵入 Exit結(jié)束該程序

8、。添加新詞功能分析當用戶從終端輸入./app -insert后進入該功能模塊,系統(tǒng)會提示用戶要插入的英文單詞,當用戶鍵入待插單詞后,程序會先在標準文本和自定義文本兩個文件中查找該單詞,若查到,則提示“該單詞已存在,不能添加”;若未查到,則提示用戶輸入待插單詞的所有解釋,將單詞及解釋寫進自定義文本my_dict.txt 中4.2概要設(shè)計系統(tǒng)功能結(jié)構(gòu)圖模塊設(shè)計文本查詢單詞app -text建立索引文件app -index索引文件查詢單詞/app -biri添加新詞 /app -insert圖-系統(tǒng)功能422文本查找功能圖圖 modulel.ddd423建立索引功能圖廠開始load memory t

9、ext dddbuild dat index ddd圖 module2.ddd424索引查找功能圖圖 module3.ddd425添加新詞功能圖圖 module4.ddd4.3各模塊細化分析內(nèi)存存儲結(jié)構(gòu)-哈希表的實現(xiàn)分析:1.將同一個解釋的長度和內(nèi)容組成一個結(jié)點;2. 將同一個單詞的所有解釋存儲在一條鏈表上;3. 將一個單詞的長度、內(nèi)容、解釋個數(shù)及解釋鏈表的頭指針組成一個結(jié)點;4. 將所有單詞首字母相同的單詞結(jié)點存儲在一條鏈表上;5. 聲明一個結(jié)構(gòu)體數(shù)組,數(shù)組元素分別存放 26個英文字母和26條單詞鏈表 的頭指針abcd1ef碗度需內(nèi)容next指針匚二孵融躥內(nèi)容i單詞巖單詞內(nèi)容sm務(wù)脂針=”

10、NULILNULL圖哈希表存儲結(jié)構(gòu)好處:1.只加載英文部分,加載速度很快2.鎖定在特定鏈表中查詢,查找速度很快二進制索引文件構(gòu)造圖單詞1檢度(415)1單詞1內(nèi)容 (若干宇節(jié))單詞1解樺 柚(4宇節(jié))解釋1長度(455)解釋1內(nèi)容 (若干寧節(jié))解程2氏宸(4字節(jié))解釋2內(nèi)容 偌1Ff5)解輕門怏JS(4宇節(jié))解怪ri肉容 借干宇節(jié)單詞2長度(4寧節(jié)單詞2內(nèi)容 (若干字節(jié))and so on 略目錄目錄開始的 索引(long單詞個數(shù) (long)433文本查詢細化分析 力口載內(nèi)存圖 load_memory_text.ddd圖 clear_space.ddd4.333 在哈希表中查詢

11、單詞4.334在自定義文本中查詢單詞圖 search_word_text.ddd圖 search_word_mytext.ddd建立索引文件細化分析4.341建立二進制索引文件圖 build_dat_i ndex.ddd將文本內(nèi)容寫入二進制索引文件圖 write_c onten t_dat_i ndex.ddd4.343 將目錄寫進二進制索引文件開蛤-卅打幵索引文件丁開成功獲取Mat文件指針蘭i前也墨存到某個int變鈕中初始化目錄結(jié)點的個數(shù)word numO關(guān)閉文件返回0返回t和WEd num:結(jié)束口指向目錄誰轟下個結(jié)點圖 write list dat index.ddd4.34

12、4將目錄開始的索引寫進二進制索引文件結(jié)束-)圖 write_listkey_dat_ in dex.ddd4.345將單詞個數(shù)寫進二進制索引文件抽打幵索引文件N將里i司個數(shù)寫進dat文件中;/文件打幵黃敗關(guān)網(wǎng)文件i|5!siizeofitrans length)個字節(jié) 賦緒該結(jié)點.第i個解澤的長度讀?&izeaftran&曲耐)個字節(jié)贓涪該箔占第并解釋的內(nèi)容jtrans nsrng)個宇壬圖 search_word_with_ in dex_b in. ddd436添加新詞細化分析將單詞及解釋寫進自定義文本中N/I添加成咖/藩加失畋! /1f關(guān)閉文件( 結(jié)束 J圖 write_w

13、ord_mytext_i nsert.ddd五、系統(tǒng)設(shè)計5.1硬件環(huán)境支持Linux下的gcc編譯環(huán)境5.2選擇語言c語言5.3功能關(guān)系startImodulelload_me moryjextcreate_trans_niodei n s ert_trsns _n extc re ate_word_n ode_t exti n s ert_word_n ode_texlclear_spaceseardi_word_textse 3 rch_ward_mytext load_memory_text S9arch_wrd_textmodulesIloadmemorytextclear_space

14、write content dat indexwnte_li st_dat_ind ex write_l i stkey_d3t_i ndex write_w0(dn u m_dat_indexin s ert_i ndex_node_i nde xIbuild dat index moduleloadmemorybinIinsertnelec_ncfcleS68fCh_indeK_binse a nch_word_with_i ndex_binmodule4load_mennofy_text dear_pace search_word_Lexi sea rch_wa rd_mtext wri

15、t e_word_myt ext_i nsert5.4框架設(shè)計main.c提示用法mo-dukl.cmadule2xnnaduleS.cnnadule4.c5.5詳細設(shè)計抽象數(shù)據(jù)類型typedef struct trans tran s_t;typedef struct word word_t; typedef struct first first_t; typedef struct array array_t;typedef struct in dex in dex_t; typedef struct in dexdata in dex_data;/*1.存放解釋的結(jié)構(gòu)體*/struct t

16、ransint tran s_le ngth;char trans_n ameSIZE; trans_t *n ext;typedef trans_t *tra ns_p;1*2.存放單詞的結(jié)構(gòu)體*/struct wordint word_le ngth;char word _n ameSIZE;int trans_num; trans_p head; word_t *n ext;typedef word_t *word_p;/*3.存放哈希數(shù)組元素的結(jié)構(gòu)體*/struct firstchar ch; word_p n ext;;typedef first_t *first_p;1*4.存放指

17、針哈希數(shù)組的結(jié)構(gòu)體*/struct arrayfirst_p hash26;typedef array_t *array_p;/*5.存放目錄的結(jié)構(gòu)體*/struct in dexchar word _n ameSIZE; long positi on; in dex_t *n ext;typedef in dex_t *in dex_p;/*6.存放目錄數(shù)據(jù)域的結(jié)構(gòu)體*/struct in dexdatachar word _n ameSIZE; long positi on;5.5.2 函數(shù)接口聲明 模塊 1函數(shù)原型:void module1(void) 函數(shù)參數(shù):void函

18、數(shù)返回值類型:void函數(shù)功能:使用文本詞庫進行單詞查詢函數(shù)原型:array_p load_memory_text(char *,array_p) 函數(shù)參數(shù):char * ,array_p 函數(shù)返回值類型:array_p函數(shù)功能:文本詞庫加載到內(nèi)存中,采用哈希表結(jié)構(gòu)函數(shù)原型: word_p search_word_text(array_p,char *) 函數(shù)參數(shù):array_p , char * 函數(shù)返回值類型:word p函數(shù)功能:哈希表中查找單詞函數(shù)原型: word_p search_word_mytext(char *,char *) 函數(shù)參數(shù):char * , char *函數(shù)返回值

19、類型:word_p函數(shù)功能:自定義文本詞庫中查找單詞函數(shù)原型:trans_p create_tra ns_no de_text(char *)函數(shù)參數(shù):char *函數(shù)返回值類型:trans_p函數(shù)功能:生成解釋結(jié)點函數(shù)原型:trans_p in sert_tra ns_no de_text(tra ns_p,tra ns_p) 函數(shù)參數(shù):trans_p , trans_p函數(shù)返回值類型:trans_p函數(shù)功能:解釋結(jié)點插到解釋鏈表尾部函數(shù)原型: word_p create_word_ no de_text(char *,tra ns_p) 函數(shù)參數(shù):char * ,trans_p函數(shù)返回值類

20、型:word_p函數(shù)功能:生成單詞結(jié)點函數(shù)原型:word_p in sert_word_ no de_text(word_p,word_p) 函數(shù)參數(shù):word_p,word_p函數(shù)返回值類型:word_p函數(shù)功能:單詞結(jié)點插到單詞鏈表尾部函數(shù)原型:int get_tra ns_nu m(tra ns_p)函數(shù)參數(shù):trans_p函數(shù)返回值類型:int函數(shù)功能:獲取某個單詞的解釋個數(shù)函數(shù)原型:void prin t_hash(array_p)函數(shù)參數(shù):array_p函數(shù)返回值類型:void函數(shù)功能:遍歷哈希表函數(shù)原型:void prin t_word(word_p)函數(shù)參數(shù):word_p函數(shù)返

21、回值類型:void函數(shù)功能:遍歷單詞鏈表函數(shù)原型:void clear_space(char *)函數(shù)參數(shù):char *函數(shù)返回值類型:void函數(shù)功能:清除字符串后的空格5.522 模塊2函數(shù)原型:void module2(void)函數(shù)參數(shù):void函數(shù)返回值類型:void函數(shù)功能:建立二進制索引文件函數(shù)原型:void build_dat_i ndex(array_p,char *)函數(shù)參數(shù):array_p,char *函數(shù)返回值類型:void函數(shù)功能:生成二進制索引文件函數(shù)原型:in dex_p write_c onten t_dat_i ndex(array_p,char *)函數(shù)參數(shù)

22、:array_p,char *函數(shù)返回值類型:in dex_p函數(shù)功能:將哈希表中的內(nèi)容寫進二進制文件,并保存每個單詞所對的索引,生成目錄函數(shù)原型:long write_list_dat_i ndex(i ndex_p,char *,lo ng *)函數(shù)參數(shù):in dex_p,char *,lo ng *函數(shù)返回值類型:long函數(shù)功能:將目錄寫進 dat文件,并保存目錄開始的索引和目錄中單詞的個數(shù)函數(shù)原型:void write_listkey_dat_i ndex(lo ng)函數(shù)參數(shù):long函數(shù)返回值類型:void函數(shù)功能:將目錄開始的索引寫進 dat文件函數(shù)原型:void write_

23、word nu m_dat_ in dex(l ong)函數(shù)參數(shù):long函數(shù)返回值類型:void函數(shù)功能:將目錄中單詞的個數(shù)寫進dat文件函數(shù)原型:in dex p in sert in dex node in dex(i ndex p,i ndex p)函數(shù)參數(shù):in dex_p,i ndex_p函數(shù)返回值類型:in dex_p函數(shù)功能:目錄結(jié)點插到目錄鏈表頭部5.523 模塊3函數(shù)原型:void module3(void)函數(shù)參數(shù):void函數(shù)返回值類型:void函數(shù)功能:使用二進制索引文件進行單詞查詢函數(shù)原型:in dex_p load_memory_b in( char *,i nd

24、ex_p)函數(shù)參數(shù):char *,i ndex_p函數(shù)返回值類型:in dex_p函數(shù)功能:將二進制索引文件中的目錄加載到內(nèi)存中,采用鏈表結(jié)構(gòu)函數(shù)原型:long search_ in dex_b in (i ndex_p,char *)函數(shù)參數(shù):in dex_p,char *函數(shù)返回值類型:long函數(shù)功能:目錄鏈表中查找單詞對應(yīng)的索引函數(shù)原型: word_p search_word_with_ in dex_b in( char *,l ong)函數(shù)參數(shù):char *,lo ng函數(shù)返回值類型:word_p函數(shù)功能:dat中查找某個索引相對應(yīng)的單詞內(nèi)容及解釋5.524 模塊4函數(shù)原型:voi

25、d module4(void) 函數(shù)參數(shù):void函數(shù)返回值類型:void函數(shù)功能:添加新詞到自定義文本中函數(shù)原型:void write_word_mytext_i nsert(char *,char *)函數(shù)參數(shù):char *,char *函數(shù)返回值類型:void函數(shù)功能:寫入新詞及其解釋到自定義文本六、編碼6.1模塊1代碼#i nclude #i nclude #in elude #in elude /*/*模塊1:使用文本詞庫進行單詞查詢*/*/*1.使用文本詞庫進行單詞查詢*/void module1(void)int i;char str30;array_p poin t=(arra

26、y_p)malloc(sizeof(array_t);for(i=0;ihashi=(first_p)malloc(sizeof(first_t);poi nt-hashi-ch=a+i;poi nt-hashi- next=NULL;poin t=load_memory_text(dict.txt,po in t);while(1)prin tf(Please in put word:);gets(str);clear_space(str);if(strcmp(str,Exit)=O)return ;elseword_p result=search_word_text(po in t,str

27、);if(result=NULL)word_p result2=search_word_mytext(my_dict.txt,str); if(result2=NULL)prin tf(Sorry,word n ot foun d!n);elsetrans_p p=result2-head;while(p!=NULL)puts(p-tra ns_n ame); p=p-n ext;elsetrans_p p=result-head;while(p!=NULL)puts(p-tra ns_n ame);p=p-n ext;1*2.文本詞庫加載到內(nèi)存中,采用哈希表結(jié)構(gòu)*/array_p load_

28、memory_text(char *file name,array_p point)int i,j,m,c,flag;FILE *fp;word_p n ew_word;trans_p n ew_tra ns,tra ns_head;if(fp=fope n(file name,r)=NULL)prin tf(Sorry,file ope n failed!n);return point;while(1)char bufferSIZE=0,strSIZE=0;flag=0;if(c=fgetc(fp)=EOF)fclose(fp);return poi nt;if(c=#)tran s_hea

29、d=NULL;i=0,j=0;while(c=fgetc(fp)!=n) bufferi+=c;while(c=fgetc(fp)!=n)if(c!=)strj+=c;elsen ew_tra ns=create_tra ns_no de_text(str);tran s_head=in sert_tra ns_no de_text(tra ns_head, new_tra ns); j=0;for(m=0;mSIZE;m+) strm=0;n ew_tra ns=create_tra ns_no de_text(str);tran s_head=in sert_tra ns_no de_te

30、xt(tra ns_head ,n ew_tra ns); n ew_word=create_word_ no de_text(buffer,tra ns_head);for(i=0;ihashi-ch)flag=1;poi nt-hashi- next=i nsert_word_ino de_text(poi nt-hashi- next, new_word); break; if(!flag)fclose(fp);return poi nt;/*3.哈希表中查找單詞*/word_p search_word_text(array_p poin t,char *str)int i;for(i=

31、0;ihashi-ch)word_p p=po in t-hashi-n ext;while(p!=NULL)if(strcmp(p-word_ name,str)=0) retur n p;elsep=p-n ext;return NULL;return NULL;/*4.自定義文本詞庫中查找單詞*/word_p search_word_mytext(char *file name,char *str)int i;array_p poin t=(array_p)malloc(sizeof(array_t);for(i=0;ihashi=(first_p)malloc(sizeof(first

32、_t);poi nt-hashi-ch=a+i;poi nt-hashi- next=NULL;poin t=load_memory_text(file name,po in t); word_p result=search_word_text(po in t,str); return result;/*5.生成解釋結(jié)點*/trans_p create_tra ns_no de_text(char *str)tran s_p n ew=(tra ns_p)malloc(sizeof(tra ns_t); strcpy (n ew-tra ns_n ame,str);n ew-tra nsen

33、gth=strle n( str);n ew-n ext=NULL;return n ew;/*6.解釋結(jié)點插到解釋鏈表尾部*/trans_p in sert_tra ns_no de_text(tra ns_p head,tra ns_p newnode) if(head=NULL)newno de-n ext=NULL; head=newno de;elsetrans_p p=head;while(p-n ext!=NULL)p=p-n ext;newno de-n ext=NULL; p-n ext=newno de;retur n head;/*7.生成單詞結(jié)點*/word_p cre

34、ate_word_ no de_text(char *str1,tra ns_p head)word_p newno de=(word_p)malloc(sizeof(word_t); strcpy (newno de-word_ name,str1);newno de-worden gth=strle n(newno de-word_ name); newno de-head=head;newno de-n ext=NULL;newno de-tra ns_num=get_tra ns_nu m( newno de-head); retur n newno de;1*8.單詞結(jié)點插到單詞鏈表

35、尾部*/word_p in sert_word _no de_text(word_p head,word_p newnode) if(head=NULL)newno de-n ext=NULL;head=newno de;elseword_p p=head;while(p-n ext!=NULL)p=p-n ext;newno de-n ext=NULL;p-n ext=newno de;retur n head;/*9.獲取某個單詞的解釋個數(shù)*/int get_tra ns_nu m(tra ns_p head)int len gth=0;trans_p p=head;while(p!=NU

36、LL)len gth+;p=p-n ext;return len gth;/*10.遍歷哈希表*/void prin t_hash(array_p point)int i;word_p p;for(i=0;ihashi-n ext;while(p!=NULL)puts(p-word_ name);trans_p t=p-head;while(t!=NULL)prin tf(%s;,t-tra ns_n ame);t=t- n ext;putchar(n);p=p-n ext;return ;/*11.遍歷單詞鏈表*/void prin t_word(word_p head)word_p p=h

37、ead;while(p!=NULL) puts(p-word_ name); trans_p t=p-head; while(t!=NULL)prin tf(%s;,t-tra ns_n ame); t=t- n ext; putchar(n); p=p-n ext;return;/*12.清除字符串后的空格*/void clear_space(char *str)if(strstrlen(str)-1=) strstrle n(str)-1=O: clear_space(str);return ;6.2模塊2代碼#i nclude #i nclude #in clude #in clude

38、/*/*模塊2:建立二進制索引文件*/*/*1.建立二進制索引文件*/void module2(void)int i;array_p poin t=(array_p)malloc(sizeof(array_t); for(i=0;ihashi=(first_p)malloc(sizeof(first_t);poi nt_hashi_ch=a+i;poi nt-hashi- next=NULL;poin t=load_memory_text(dict.txt,po in t);build_dat_i ndex(poi nt,dict.dat); return ;/*2.生成二進制索引文件*/vo

39、id build_dat_i ndex(array_p poin t,char *file name)FILE *fp;long word_ nu m,start_ in dex;fp=fope n(file name,w);fclose(fp);in dex_p head=write_c on te nt_dat_i ndex(poi nt,file name); start_i ndex=write _l ist_dat_i ndex(head,file name,&word_ nu m); writeistkey_dat_i ndex(start_i ndex);write_word n

40、um _dat_i ndex(word _nu m);printf(%ld words has been built finished!n,word_inum); return ;,生成目錄*/*3.將哈希表中的內(nèi)容寫進二進制文件,并保存每個單詞所對的索引 in dex_p write_c onten t_dat_i ndex(array_p poin t,char *file name) int i;FILE *fp;word_p p;tran s_p t;in dex_p n ew,head;head=NULL;if(fp=fope n( dict.dat,ab)=NULL)prin tf

41、(Sorry,file ope n failed! n);return NULL;elsefor(i=0;ihashi-n ext;while(p!=NULL)n ew=(i ndex_p)malloc(sizeof( in dex_t);strcpy (n ew-word_ name,p-word_ name);n ew-positi on=ftell(fp);n ew-n ext=NULL;head=in sert_ in dex_ node_in dex(head, new);fwrite(&p-word_le ngth,sizeof(p-word_le ngth),1,fp); fwr

42、ite(p-word_ name,sizeof(p-word_ name),1,fp);fwrite(&p-tra ns_nu m,sizeof(p-tra ns_nu m),1,fp); t=p-head;while(t!=NULL)fwrite(&t-tra ns_len gth,sizeof(t-tra ns_len gth),1,fp); fwrite(t-tra ns_n ame,sizeof(t-tra ns_n ame),1,fp); t=t- n ext;p=p-n ext;fclose(fp);retur n head;/*4.將目錄寫進dat文件,并保存目錄開始的索引和目錄

43、中單詞的個數(shù)*/long write_list_dat_ in dex(i ndex_p head,char *file name,l ong *word_ num)FILE *fp;int t;in dex_p p=head;in dex_data n ew;*word _num=0;if(fp=fope n( ”dict.dat”,”ab”)=NULL)prin tf(Sorry,file ope n failed!n);return 0;elset=ftell(fp);while(p!=NULL)strcpy (n ew.word_ name,p-word_ name);n ew.pos

44、iti on=p-positi on;fwrite(&n ew,sizeof(i ndex_data),1,fp);(*word _nu m)+;p=p-n ext;fclose(fp);return t;/*5.將目錄開始的索引寫進dat文件*/void write_listkey_dat_ in dex(lo ng start_ in dex)FILE *fp;if(fp=fope n( ”dict.dat”,”ab”)=NULL)prin tf(Sorry,file ope n failed!n);return ;elsefwrite(&start_ in dex,sizeof( Ion

45、 g),1,fp);fclose(fp);/*6.將目錄中單詞的個數(shù)寫進dat文件*/void write_word nu m_dat_ in dex(l ong word _num)FILE *fp;if(fp=fope n(dict.dat,ab)=NULL)prin tf(Sorry,file ope n failed!n);return ;elsefwrite(&word_ nu m,sizeof( Ion g),1,fp);fclose(fp);return;/*7.目錄結(jié)點插到目錄鏈表頭部*/in dex_p in sert_ in dex_ node_in dex(i ndex_

46、p head,i ndex_p newnode) newno de-n ext=head;head=newno de;retur n head;6.3模塊3代碼#i nclude #i nclude #in elude #in elude /*/*模塊3:使用二進制索引文件進行單詞查詢*/*/*1.使用二進制索引文件進行單詞查詢*/void module3(void)char str30;long in dex;in dex_p head=NULL;word_p result;tran s_p t; head=load_memory_b in (dict.dat,head);while(1)prin tf(Please in put word:);gets(str);clear_space(str);if(strcmp(str,Exit)=O)return ;elsein dex=searchn dex_bi n(head,str);if(i ndex=-1)prin tf(Sorry,word not foun d!n);elseresult=search_word_with_i ndex_b i

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論