版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目錄</b></p><p> 第一章 課程設(shè)計的目的和要求1</p><p> 1.1 課程設(shè)計的目的1</p><p> 1.2 課程設(shè)計的要求1</p><p> 第二章 課程設(shè)計任務(wù)內(nèi)容3</p><p> 2.1 課程設(shè)計要求3</
2、p><p> 2.2 功能需求3</p><p> 2.3 功能模塊圖4</p><p> 第三章 詳細設(shè)計說明5</p><p> 3.1 程序設(shè)計思路5</p><p> 3.2 函數(shù)說明5</p><p> 3.2.1 main()主函數(shù)5</p><
3、;p> 3.2.2 menu_select菜單選擇函數(shù)7</p><p> 3.2.3 enter輸入函數(shù)8</p><p> 3.2.4 delete_text刪除函數(shù)9</p><p> 3.2.5 find函數(shù)10</p><p> 3.2.6 list函數(shù)11</p><p> 3.
4、2.7 save函數(shù)12</p><p> 3.2.8 load函數(shù)12</p><p><b> 3.3 調(diào)試14</b></p><p> 第四章 軟件使用說明15</p><p> 第五章 課程設(shè)計心得與體會18</p><p> 附錄1 參考文獻19</p>
5、;<p> 附錄2 程序清單20</p><p><b> 簡單的行編輯器</b></p><p> 第一章 課程設(shè)計的目的和要求</p><p> 此章節(jié)詳細介紹了課程設(shè)計的目的和要求。</p><p> 1.1 課程設(shè)計的目的</p><p> 課程設(shè)計的目的是通過
6、實踐環(huán)節(jié)的訓(xùn)練,使學(xué)生進一步加深對C語言知識的綜合理解,提高C語言應(yīng)用技能,并結(jié)合專業(yè)特點培養(yǎng)學(xué)生計算機程序的應(yīng)用能力。</p><p> 結(jié)合計算機科學(xué)專業(yè)的特點是培養(yǎng)學(xué)生閱讀本專業(yè)相關(guān)領(lǐng)域C語言程序的能力,分析并掌握程序的設(shè)計思想和方法。通過課程設(shè)計,培養(yǎng)學(xué)生查閱C語言相關(guān)資料能力、分析和閱讀程序的能力,應(yīng)用C語言基本知識設(shè)計小型應(yīng)用程序的能力。其中,需要掌握C語言中的結(jié)構(gòu)體,指針,函數(shù)(系統(tǒng)函數(shù),自定義函
7、數(shù)),文件操作等知識,通過對系統(tǒng)的分析和設(shè)計,進一步鞏固C語言的學(xué)習(xí),以提高對開發(fā)環(huán)境的進一步認(rèn)識和綜合編程能力。</p><p> 在學(xué)習(xí)課程設(shè)計之前,要掌握好程序設(shè)計的基本概念、方法和思維方式。開發(fā)程序的目的是為了解決問題,而解決問題首先需要找出合適的解決方案,然后用合適的語言把方案描述出來。顯然,該過程的關(guān)鍵是分析問題并找出解決方案,而不是描述方案。因此,程序設(shè)計的首要目標(biāo),是培養(yǎng)解決問題的基本思維方式,
8、其次才是語言知識。</p><p> 1.2 課程設(shè)計的要求</p><p> 程序設(shè)計報告應(yīng)該能夠反映學(xué)生完成課程設(shè)計題目的全部情況,包括對課程設(shè)計題目要求的分析、應(yīng)用程序的設(shè)計、程序的測試過程以及程序的運行情況等,因此,編寫課程設(shè)計報告是課程設(shè)計一個不容忽視的重要環(huán)節(jié)。一個高質(zhì)量的報告需要學(xué)生掌握以下幾點:</p><p> 運用有關(guān)課程的基礎(chǔ)理論和技能解
9、決實際問題;</p><p> 能用文字、圖形和現(xiàn)代設(shè)計方法系統(tǒng)地、正確地表達設(shè)計成果;</p><p> 分析應(yīng)用的功能構(gòu)成、數(shù)據(jù)對象及其關(guān)聯(lián),實現(xiàn)系統(tǒng)的類的設(shè)計; </p><p> 對所設(shè)計應(yīng)用進行調(diào)試。</p><p> 第二章 課程設(shè)計任務(wù)內(nèi)容</p><p> 此章節(jié)主要從課程設(shè)計的要求,功能需求
10、兩方面講述課程設(shè)計的有關(guān)內(nèi)容。</p><p> 2.1 課程設(shè)計要求</p><p> 設(shè)置一個簡單的行編輯器,每行以回車結(jié)束;</p><p> 數(shù)據(jù)以文件形式存儲;</p><p> 編輯器具有查找、替換、修改數(shù)據(jù)的功能。</p><p><b> 2.2 功能需求</b><
11、/p><p> 該程序具有行的查找、替換、刪除的功能。</p><p> 行編輯器是文本編輯器的一種,針對行進行編輯?,F(xiàn)在看來當(dāng)然非常地老式,這種編輯器起源于操作員還使用電傳打字機的年代,也就是一個打印機連著鍵盤,因為沒有顯示屏,也就無法在文檔中移動光標(biāo)。</p><p> 行編輯器只能從事最基本的文本輸入與輸出。輸入、編輯、文檔顯示并不能同步地進行。一般而言,用
12、戶無法直接輸入文本,而只能在文本終端上通過簡要的命令,對已區(qū)”的做法顯然不是最恰當(dāng)?shù)?。較好的做法是,設(shè)立一個輸入緩沖區(qū),用以接受用戶輸入的一行字符,然后逐行存入用戶數(shù)據(jù)區(qū)。允許用戶輸入出差錯,并在發(fā)現(xiàn)有誤時可以及時更正。例如,當(dāng)用戶發(fā)現(xiàn)剛剛鍵入的一個字符是錯的時,可補進一個退格符"#",以表示有文檔進行添加或編寫。命令和文本,以及編輯器的相應(yīng)輸出,會根據(jù)他們的輸入順序,從底部開始逐一顯示。雖然命令一般會顯示被修改的行
13、,但如果要將行連同文檔中的上下文一起顯示,則需要另外單獨的命令。</p><p> 現(xiàn)在常見的編輯器,都是通過移動光標(biāo),來選取要編輯的文本段落,與此不同的是,行編輯器只能對“當(dāng)前行”進行編輯。一般也可在行內(nèi)進行上下文匹配,或者選擇特定行,以決定哪部分文檔將被編輯或顯示。當(dāng)然,這些編輯每次都只能針對一行。</p><p> 一個簡單的行編輯程序的功能是:接受用戶從終端輸入的程序或數(shù)據(jù),并
14、存入用戶的數(shù)據(jù)區(qū)。</p><p> 由于用戶在終端上進行輸入時,不能保證不出差錯,因此,若在編輯程序中,“每接受一個字符即存入用戶數(shù)據(jù)前一個字符無效;如果發(fā)現(xiàn)當(dāng)前鍵入的行內(nèi)差錯較多或難以補救,則可以鍵入一個退行符"@",以表示當(dāng)前行中的字符均無效。</p><p><b> 2.3 功能模塊圖</b></p><p>
15、 根據(jù)上面的功能需求分析,,可以將這個系統(tǒng)的設(shè)計分為如下六大模塊:</p><p> 輸入,替換,刪除,查找,修改,保存(見圖2-1)。</p><p> 圖 2-1功能模塊圖</p><p> 第三章 詳細設(shè)計說明</p><p> 此章節(jié)通過程序設(shè)計思路,函數(shù)說明兩大章節(jié)詳細的描述了程序的函數(shù)功能說明,參數(shù)說明等。</p&
16、gt;<p> 3.1 程序設(shè)計思路</p><p> 課程設(shè)計要求設(shè)計一個簡單的行編輯器,該程序具有行的查找、替換、刪除等功能,設(shè)計這個程序是為了對行的各種功能進行了解。定義一個結(jié)構(gòu)體來包含對行編輯器的一般操作,如輸入函數(shù)printf(),刪除需要一個刪除函數(shù)delete_text(),保存一個文件需要使用save()等,主函數(shù)模塊中需要運用switch()多分支選擇語句和do while()
17、循環(huán)語句來調(diào)用上述所需要的函數(shù)。</p><p><b> 3.2 函數(shù)說明</b></p><p> 3.2.1 main()主函數(shù)</p><p> 主函數(shù)是程序入口,采用模塊化設(shè)計。其主要功能有:1)使用一個主菜單來顯示編輯器的各項操作;2)運用一個多選擇分支switch()語句來實現(xiàn)要進行的操作;3)菜單函數(shù)通過do while
18、()循環(huán)中的get來輸出,內(nèi)嵌套switch語句來總體實現(xiàn)主函數(shù)的所有功能;其中用到了字符串?dāng)?shù)組argv,用來存放指向字符串參數(shù)的指針數(shù)組,即每一個元素指向一個參數(shù),整數(shù)argc,用來統(tǒng)計你運行程序時送給main函數(shù)的命令行參數(shù)的個數(shù),代碼中包括六個case。程序如下(見圖3-1):</p><p> char s[80],choice,fname[80]; </p><p> //
19、struct line *info; </p><p> int linenum=1; </p><p> start=NULL; </p><p> last=NULL; </p><p> if(argc==2) load(argv[1]);/*裝入命令行上的文件 */ </p><p><b>
20、 do{ </b></p><p> choice=menu_select(); </p><p> switch(choice){ </p><p> case 1:printf("\t行號:"); </p><p><b> gets(s); </b></p>
21、<p> linenum=atoi(s); </p><p> enter(linenum); </p><p><b> break; </b></p><p> case 2:delete_text(); </p><p><b> break; </b></p>
22、<p> case 3:list(); </p><p><b> break; </b></p><p> case 4:printf("\t文件名:"); </p><p> gets(fname); </p><p> save(fname); </p>&
23、lt;p><b> break; </b></p><p> case 5:printf("\t文件名:"); </p><p> gets(fname); </p><p> load(fname); </p><p><b> break; </b></
24、p><p> case 6:exi4t(0); </p><p><b> } </b></p><p> }while(1); </p><p> 圖3-1 main主函數(shù)</p><p> 3.2.2 menu_select菜單選擇函數(shù)</p><p> 這是
25、一個菜單顯示界面,顯示:輸入,刪除一行,顯示一行等,之后輸入數(shù)字選擇所需要的功能。定義整型變量c,使用printf輸出函數(shù)實現(xiàn)。程序如下(見圖3-2):</p><p> char s[80]; </p><p><b> int c; </b></p><p> printf("\t\t1.輸入\n"); </
26、p><p> printf("\t\t2.刪除一行\(zhòng)n"); </p><p> printf("\t\t3.顯示一行\(zhòng)n"); </p><p> printf("\t\t4.文件存盤\n"); </p><p> printf("\t\t5.裝入文件\n"
27、); </p><p> printf("\t\t6.退出\n"); </p><p><b> do{ </b></p><p> printf("\n\n\t\t請按數(shù)字選擇:"); </p><p><b> gets(s); </b></
28、p><p> c=atoi(s); </p><p> }while(c<0||c>6); </p><p> return(c);</p><p> 圖3-2 menu_select菜單選擇函數(shù)</p><p> 3.2.3 enter輸入函數(shù)</p><p> 此函數(shù)是
29、將所需要的文本信息插在指定行端部,其中,使用到了內(nèi)存分配函數(shù),如果分配成功則返回指向被分配內(nèi)存的指針,否則返回空指針NULL。使用操作符sizeof,判斷數(shù)據(jù)類型長度符,其作用是返回一個對象或者類型所占的內(nèi)存字節(jié)數(shù),程序中使用了if語句,printf輸出函數(shù),gets輸入函數(shù)(見圖3-3)。</p><p> 圖3-3 enter輸入函數(shù)</p><p> 3.2.4 delete_t
30、ext刪除函數(shù)</p><p> 此函數(shù)主要實現(xiàn)行編輯器的刪除功能,其中主要使用條件語句if…else…,輸入函數(shù)gets,輸出函數(shù)printf,代碼中atoi的作用是把字符串轉(zhuǎn)換成整型數(shù),并多次使用指針的指向語句,比如:info->next->prior=info->prior(見圖3-4)。</p><p> 圖3-4 delete_text刪除函數(shù)</p&
31、gt;<p> 3.2.5 find函數(shù)</p><p> 查找函數(shù)主要用來根據(jù)用戶的需要查找一行文本。程序如下(見圖3-5):</p><p> struct line *info; </p><p> info=start; </p><p> while(info){ </p><p>
32、 if(linenum==info->num) return(info); </p><p> info=info->next; </p><p><b> } </b></p><p> return(NULL); </p><p> 圖3-5 find函數(shù)</p><p>
33、 3.2.6 list函數(shù)</p><p> 顯示文本,顯示用戶在查找函數(shù)中選擇的文本。程序如下(見圖3-6):</p><p> struct line *info; </p><p> info=start; </p><p> while(info){ </p><p> ("%d:%s\n
34、",info->num,info->text); </p><p> info=info->next; </p><p><b> } </b></p><p> printf("\n\n"); </p><p> 圖3-6 list函數(shù)</p>&l
35、t;p> 3.2.7 save函數(shù)</p><p> 將文件儲存在指定的文件夾里,以備以后查找使用。其中,定義了字符型的指針p,使用了while循環(huán)語句,輸出函數(shù)putc(見圖3-7)。</p><p> 圖3-7 save儲存函數(shù)</p><p> 3.2.8 load函數(shù)</p><p> 將文件以.txt的形式裝入,如果
36、文件打不開,則裝入不成功,如果文件正在裝入,結(jié)束后,按任意鍵退出。定義整型變量size,inch,其中,使用if判斷語句,while循環(huán)語句,printf輸出函數(shù),定義了字符型指針變量p,使用了指針的指向語句,如:start=start->next; info->prior=temp等(見圖3-8)。</p><p> 圖3-8 load函數(shù)</p><p><b>
37、; 3.3 調(diào)試</b></p><p> 編輯執(zhí)行時,出現(xiàn)一個warming,錯誤出現(xiàn)在menu_select()中,丟掉了return語句,return表示中止當(dāng)前函數(shù)的運行,并將操作權(quán)返回給調(diào)用者,就算不寫,在函數(shù)執(zhí)行完畢后也會返回操作權(quán)給調(diào)用者。寫return是一種清晰的風(fēng)格,可以防止一些意外的錯誤。如圖所示:</p><p> 圖 3-9 調(diào)試框所顯示錯誤<
38、;/p><p> 圖 3-10 錯誤所在處</p><p> 圖 3-11 錯誤修改后</p><p><b> 圖 3-12 編譯</b></p><p><b> 圖 3-13 執(zhí)行</b></p><p> 第四章 軟件使用說明</p><p&
39、gt; 簡單的行編輯器,主要包括五個內(nèi)容:第一,字符的按行錄入及儲存;第二,文件內(nèi)容的顯示;第三,文件內(nèi)容的查找;第四,文件內(nèi)容的替換第五,文件的修改。</p><p> 開始進入初始化界面,按數(shù)字進行所需要的操作: </p><p><b> 圖4-1 主畫面</b></p><p> 按數(shù)字一,任意輸入行號:</p>
40、<p><b> 圖4-2 輸入界面</b></p><p> 按數(shù)字二,選擇所需要刪除的行號:</p><p><b> 圖4-3 刪除界面</b></p><p> 按數(shù)字三,顯示刪除后其余的行號:</p><p><b> 圖4-4 顯示界面</b>
41、;</p><p> 按數(shù)字四,輸入某個文件命名,將該文件存盤:</p><p><b> 圖4-5 存儲界面</b></p><p> 按數(shù)字五,將選定的文件裝入:</p><p><b> 圖4-6 裝入界面</b></p><p> 第五章 課程設(shè)計心得與體會
42、</p><p> 三周的課程設(shè)計,終于結(jié)束了,這次課程設(shè)計,讓我明白了很多,自己以前學(xué)的那些東西,只是皮毛,是為了應(yīng)付考試才看書學(xué)習(xí)的,自己根本沒有真正掌握所學(xué)的專業(yè)知識,這次的課程設(shè)計,下了很大功夫,一開始,以為課程設(shè)計很簡單,在網(wǎng)上隨便百度一個課程設(shè)計報告就可以了,可是沒想到,網(wǎng)上找的都不能用,代碼都是有錯誤的,只好自己編寫代碼,重新開始好好看書,學(xué)習(xí)C語言知識,上網(wǎng)查閱資料,去圖書館翻閱有關(guān)書籍,每天想
43、的只有課程設(shè)計,因為自己基礎(chǔ)很差,編寫起來代碼很困難,一開始編寫出來的代碼錯誤很多,很沮喪,很傷心,想著這次課程設(shè)計一定完蛋了,停下來休息了一天繼續(xù)修改自己的程序,最終把代碼修改到完善,心里終于落下了一塊大石頭,以為一切搞定了,卻發(fā)現(xiàn),還有寫報告這件重頭戲,每天繼續(xù)奔波于機房和圖書館之間,通過老師的幫助和自己不斷的努力,終于完成了報告??粗约旱膱蟾?,又激動又害怕,第一次自己下很大心血完成的東西,讓人很興奮,卻也擔(dān)心自己的報告得不到老師
44、的肯定。</p><p> 這次課程設(shè)計,讓我明白了,一個報告里,最重要的是編寫代碼以及流程圖,雖然自己基礎(chǔ)很差,不過通過這次課程設(shè)計,我的專業(yè)知識提高了很多,明白了,只有通過真正的實踐,才能明白自己真正學(xué)了多少知識,自己有多少知識能拿到實際中運用,比如說編寫代碼時,當(dāng)你把代碼編譯并讓其運行,發(fā)現(xiàn)很多錯誤,再回頭檢查錯誤出在哪里,是很費力的一件事情,因此分析和規(guī)劃代碼是很重要的,最重要的是要把整體的邏輯結(jié)構(gòu)寫好
45、,這樣就不會出現(xiàn)大問題,寫代碼就要先找出核心的內(nèi)容,用多種方法來實現(xiàn)核心部分,這樣可以盡可能的避免發(fā)現(xiàn)邏輯或編譯不支持的錯誤。</p><p> 通過這次的課程設(shè)計,讓我初步學(xué)會了一個課程設(shè)計的基本方法有哪些,學(xué)會了如何借鑒別人的方法和經(jīng)驗,如何將所有的資料整合起來并加以運用,這次報告的設(shè)計,為以后課程設(shè)計以及畢業(yè)論文打下了很好的基礎(chǔ)。三周當(dāng)中,會因為程序的事而心煩意亂,不過,人總是在挫折中成長的,積累的失敗的
46、經(jīng)驗多一些,對成長有很大的幫助。這次的報告,有很多不盡人意的地方,很感謝荀老師的幫助,報告的完善,大部分都是在老師的幫助下完成的,這次的報告,融入了自己很大的心血,我覺得我的報告很好,以后,需要更加刻苦的學(xué)習(xí)自己的專業(yè)知識,不斷的提高自己的能力。</p><p><b> 附錄1 參考文獻</b></p><p> [1]譚浩強編著. C++程序設(shè)計. 北京:清華
47、大學(xué)出版社,2005</p><p> [2]譚浩強編著. C++程序設(shè)計解題與上機指導(dǎo). 北京:清華大學(xué)出版社,2005</p><p> [3]譚浩強編著. C程序設(shè)計(第二版). 北京:清華大學(xué)出版社,1999</p><p> [4]譚浩強編著. C程序設(shè)計設(shè)計解題與上機指導(dǎo)(第二版). 北京:清華大學(xué)出社,1999</p><p&
48、gt; [5]黃迪明 主編 C++語言程序設(shè)計基礎(chǔ).北京:電子工業(yè)出版社 2003.6 </p><p> [6]錢能 主編 C++程序設(shè)計教程.北京:清華大學(xué)出版社 1999.4 </p><p> [7]鄭莉、董淵 編著 C++語言程序設(shè)計.北京:清華大學(xué)出版社 1999.12 </p><p> [8]吳訪升 編著 C++程序設(shè)計.北京: 機械工業(yè)出版
49、社 2002 </p><p> [9]吳訪升 編著 C++程序設(shè)計學(xué)習(xí)指導(dǎo)與上機實踐.北京:機械工業(yè)出版社出版2002</p><p> [10]孫淑霞等 C/C++程序設(shè)計教程(第2版),電子工業(yè)出版社,2007.2 </p><p> [11]鄭莉 董淵C++語言程序設(shè)計,清華大學(xué)出版社,鄭莉、董淵,1999.12</p><p>
50、; [12]王正軍 Visual C++6.0程序設(shè)計從入門到精通 北京:人民郵電出版社2006.1</p><p><b> 附錄2 程序清單</b></p><p> #include "stdio.h" </p><p> #include "stdlib.h"</p><
51、;p> struct line{ </p><p> char text[81]; </p><p> int num; /*行號*/ </p><p> struct line *next; /*指向下一個輸入項目的指針 */ </p><p> struct line *prior; /*指向前一個項目的指針 */ <
52、;/p><p><b> }; </b></p><p> struct line *start; /*指向表中第一個項目的指針 */ </p><p> struct line *last; /*指向表中作后一個項目的指針 */ </p><p> struct line *find(int),*dls_store
53、(struct line *); </p><p> void patchup(int,int),delete_text(),list(),save(char *),load(char *); </p><p> menu_select(); </p><p> enter(int linenum); </p><p> void m
54、ain(int argc,char *argv[]) </p><p><b> { </b></p><p> char s[80],choice,fname[80]; </p><p> // struct line *info; </p><p> int linenum=1; </p>&l
55、t;p> start=NULL; </p><p> last=NULL; </p><p> if(argc==2) load(argv[1]);/*裝入命令行上的文件 */ </p><p><b> do{ </b></p><p> choice=menu_select(); </p>
56、<p> switch(choice){ </p><p> case 1:printf("\t行號:"); </p><p><b> gets(s); </b></p><p> linenum=atoi(s); </p><p> enter(linenum); <
57、/p><p><b> break; </b></p><p> case 2:delete_text(); </p><p><b> break; </b></p><p> case 3:list(); </p><p><b> break; <
58、/b></p><p> case 4:printf("\t文件名:"); </p><p> gets(fname); </p><p> save(fname); </p><p><b> break; </b></p><p> case 5:print
59、f("\t文件名:"); </p><p> gets(fname); </p><p> load(fname); </p><p><b> break; </b></p><p> case 6:exit(0); </p><p><b> } <
60、;/b></p><p> }while(1); </p><p><b> } </b></p><p> /* 顯示菜單,供用戶選擇 */ </p><p> menu_select() </p><p><b> { </b></p>&l
61、t;p> char s[80]; </p><p><b> int c; </b></p><p> printf("\t\t1.輸入\n"); </p><p> printf("\t\t2.刪除一行\(zhòng)n"); </p><p> printf("\t
62、\t3.顯示一行\(zhòng)n"); </p><p> printf("\t\t4.文件存盤\n"); </p><p> printf("\t\t5.裝入文件\n"); </p><p> printf("\t\t6.退出\n"); </p><p><b>
63、do{ </b></p><p> printf("\n\n\t\t請按數(shù)字選擇:"); </p><p><b> gets(s); </b></p><p> c=atoi(s); </p><p> }while(c<0||c>6); </p>&l
64、t;p> return(c); </p><p><b> } </b></p><p> /*將文本插在指定行端部 */ </p><p> enter(int linenum) </p><p><b> { </b></p><p> struct l
65、ine *info; </p><p> //char t[81]; </p><p><b> for(;;){ </b></p><p><b> /* */ </b></p><p> info=(struct line *)malloc(sizeof(struct line)); &
66、lt;/p><p> if(!info){ </p><p> printf("\t! 內(nèi)存不夠!\n"); </p><p> return(NULL); </p><p><b> } </b></p><p> printf("%d:",line
67、num); </p><p> gets(info->text); </p><p> info->num=linenum; </p><p> if(*info->text){ </p><p> if(find(linenum)) patchup(linenum,1); </p><p>
68、 if(*info->text) start=dls_store(info); </p><p><b> } </b></p><p> else break; </p><p> linenum++; </p><p><b> } </b></p><p&g
69、t; return(linenum); </p><p><b> } </b></p><p> /*當(dāng)文本內(nèi)容插在文件中間時其下面的內(nèi)容的行號必須增加1,而 */ </p><p> /*刪除時,被刪除的文本后面的行號必須減1 */ </p><p> void patchup(int n,int incr
70、) </p><p><b> { </b></p><p> struct line *i; </p><p> i=find(n); </p><p> while(i){ </p><p> i->num=i->num+incr; </p><p&g
71、t; i=i->next; </p><p><b> } </b></p><p><b> } </b></p><p> /*按行號排序后插入 */ </p><p> struct line *dls_store(struct line *i) </p><
72、;p><b> { </b></p><p> struct line *old,*p; </p><p> if(last==NULL){ </p><p> i->next=NULL; </p><p> i->prior=NULL; </p><p><b&
73、gt; last=i; </b></p><p> return(i); </p><p><b> } </b></p><p><b> p=start; </b></p><p> old=NULL; </p><p> while(p){ &l
74、t;/p><p> if(p->num){ </p><p><b> old=p; </b></p><p> p=p->next; </p><p><b> } </b></p><p><b> else{ </b></p
75、><p> if(p->prior){ </p><p> p->prior->next=i; </p><p> i->next=p; </p><p> p->prior=i; </p><p> return start; </p><p><b&
76、gt; } </b></p><p> i->next=p; </p><p> i->prior=NULL; </p><p> p->prior=i; </p><p> return(i); </p><p><b> } </b></p>
77、;<p><b> } </b></p><p> old->next=i; </p><p> i->next=NULL; </p><p> i->prior=old; </p><p><b> last=i; </b></p><
78、p> return start; </p><p><b> } </b></p><p> /*刪除一行 */ </p><p> void delete_text() </p><p><b> { </b></p><p> struct line *
79、info; </p><p> char s[80]; </p><p> int linenum; </p><p> printf("\t行號:"); </p><p><b> gets(s); </b></p><p> linenum=atoi(s); &l
80、t;/p><p> info=find(linenum); </p><p> if(info){ </p><p> if(start==info){ </p><p> start=info->next; </p><p> if(start) start->prior=NULL; </p&
81、gt;<p> else last=NULL; </p><p><b> } </b></p><p><b> else{ </b></p><p> info->prior->next=info->next; </p><p> if(info!=la
82、st) </p><p> info->next->prior=info->prior; </p><p> else last=info->prior; </p><p><b> } </b></p><p> free(info); </p><p> pa
83、tchup(linenum+1,-1); </p><p><b> } </b></p><p><b> } </b></p><p> /*查找一行文本 */ </p><p> struct line *find(int linenum) </p><p>&
84、lt;b> { </b></p><p> struct line *info; </p><p> info=start; </p><p> while(info){ </p><p> if(linenum==info->num) return(info); </p><p>
85、 info=info->next; </p><p><b> } </b></p><p> return(NULL); </p><p><b> } </b></p><p> /*顯示文本 */ </p><p> void list() </p
86、><p><b> { </b></p><p> struct line *info; </p><p> info=start; </p><p> while(info){ </p><p> ("%d:%s\n",info->num,info->tex
87、t); </p><p> info=info->next; </p><p><b> } </b></p><p> printf("\n\n"); </p><p><b> } </b></p><p><b> /*存文
88、件 */ </b></p><p> void save(char *fname) </p><p><b> { </b></p><p> struct line *info; </p><p><b> char *p; </b></p><p>
89、 FILE *fp; </p><p> if((fp=fopen("text.txt","w"))==NULL){ </p><p> printf("\t文件打不開!\n"); </p><p><b> exit(0); </b></p><p>&
90、lt;b> } </b></p><p> printf("\t正在存入文件:\n"); </p><p> info=start; </p><p> while(info){ </p><p> p=info->text; </p><p> while(*p
91、) putc(*p++,fp); </p><p> //putc('\r',fp); </p><p> putc('\n',fp); </p><p> info=info->next; </p><p><b> } </b></p><p>
92、 fclose(fp); </p><p><b> } </b></p><p> /*裝入文件 */ </p><p> void load(char *fname) </p><p><b> { </b></p><p> struct line *info
93、,*temp; </p><p><b> char *p; </b></p><p> FILE *fp; </p><p> //int t,size,inct; </p><p> int size,inct; </p><p> if((fp=fopen("text.t
94、xt","r"))==NULL){ </p><p> printf("\t文件打不開!\n"); </p><p><b> exit(0); </b></p><p><b> } </b></p><p> while(start){
95、</p><p> temp=start; </p><p> start=start->next; </p><p> free(temp); </p><p><b> } </b></p><p> printf("\n\t正裝入文件 !\n"); <
96、;/p><p> size=sizeof(struct line); </p><p> start=(struct line*)malloc(size); </p><p> if(!start){ </p><p> printf("\n\t內(nèi)存已經(jīng)用完!"); </p><p><b
97、> return; </b></p><p><b> } </b></p><p> info=start; </p><p> p=info->text; </p><p><b> inct=1; </b></p><p> whil
98、e((*p=getc(fp))!=EOF){ </p><p><b> p++; </b></p><p> while((*p=getc(fp))!='\n') p++; //getc(fp); /*丟掉'\n' */ </p><p><b> *p='\0'; <
99、/b></p><p> info->num=inct++; </p><p> info->next=(struct line*)malloc(size); </p><p> if(!info->next){ </p><p> printf("\n\t內(nèi)存已經(jīng)用完!"); </p
100、><p><b> return; </b></p><p><b> }</b></p><p> info->prior=temp; </p><p> temp=info; </p><p> info=info->next; </p>
101、<p> p=info->text; </p><p><b> } </b></p><p> temp->next=NULL; </p><p> last=temp; </p><p> free(info); </p><p> start->pri
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c++課程設(shè)計--簡單文本編輯器的設(shè)計
- 簡單的行編輯器課程設(shè)計
- 簡單的行編輯器課程設(shè)計報告
- c語言課程設(shè)計--文本編輯器
- c_文本編輯器課程設(shè)計
- c++課程設(shè)計--簡單計算器
- c++課程設(shè)計--簡單計算器
- c_編寫的文本編輯器課程設(shè)計
- c++課程設(shè)計(文章編輯)
- c++面向?qū)ο蠛喴讏D形編輯器
- c++課程設(shè)計報告--簡單計算器
- c++簡單計算器課程設(shè)計報告
- 文本編輯器課程設(shè)計
- vb編輯器課程設(shè)計報告
- 文本編輯器課程設(shè)計報告
- java課程設(shè)計---文本編輯器
- java課程設(shè)計---文本編輯器
- java課程設(shè)計--文本編輯器
- 虛擬的java編輯器課程設(shè)計報告
- vb課程設(shè)計文本編輯器
評論
0/150
提交評論