C++課程設(shè)計簡單行編輯器_第1頁
C++課程設(shè)計簡單行編輯器_第2頁
C++課程設(shè)計簡單行編輯器_第3頁
C++課程設(shè)計簡單行編輯器_第4頁
C++課程設(shè)計簡單行編輯器_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目錄第一章課程設(shè)計的目的和要求 11.1 課程設(shè)計的目的 11.2 課程設(shè)計的要求 1第二章課程設(shè)計任務(wù)內(nèi)容 32.1 課程設(shè)計要求 32.2 功能需求 32.3 功能模塊圖 4第三章詳細設(shè)計說明 53.1 程序設(shè)計思路 53.2 函數(shù)說明 53.2.1 main ()主函數(shù) 53.2.2 menu_select 菜單選擇函數(shù) 73.2.3 enter 輸入函數(shù) 83.2.4 delete_text 刪除函數(shù) 93.2.5 find函數(shù) 103.2.6 list函數(shù) 113.2.7 save函數(shù) 123.2.8 load函數(shù) 123.3 調(diào)試 14第四章軟件使用說明 15第五章課程設(shè)計心得與體

2、會 18附錄1 參考文獻 19附錄2 程序清單 20程序設(shè)計綜合課程設(shè)計簡單的行編輯器第一章 課程設(shè)計的目的和要求此章節(jié)詳細介紹了課程設(shè)計的目的和要求。1.1 課程設(shè)計的目的課程設(shè)計的目的是通過實踐環(huán)節(jié)的訓練,使學生進一步加深對C語言知識的綜合 理解,提高C語言應(yīng)用技能,并結(jié)合專業(yè)特點培養(yǎng)學生計算機程序的應(yīng)用能力。結(jié)合計算機科學專業(yè)的特點是培養(yǎng)學生閱讀本專業(yè)相關(guān)領(lǐng)域C語言程序的能力,分析并掌握程序的設(shè)計思想和方法。通過課程設(shè)計,培養(yǎng)學生查閱C語言相關(guān)資料能 力、分析和閱讀程序的能力,應(yīng)用 C語言基本知識設(shè)計小型應(yīng)用程序的能力。其中, 需要掌握C語言中的結(jié)構(gòu)體,指針,函數(shù)(系統(tǒng)函數(shù),自定義函數(shù))

3、,文件操作等知 識,通過對系統(tǒng)的分析和設(shè)計,進一步鞏固C語言的學習,以提高對開發(fā)環(huán)境的進一 步認識和綜合編程能力。在學習課程設(shè)計之前,要掌握好程序設(shè)計的基本概念、方法和思維方式。開發(fā)程 序的目的是為了解決問題,而解決問題首先需要找出合適的解決方案,然后用合適的 語言把方案描述出來。顯然,該過程的關(guān)鍵是分析問題并找出解決方案,而不是描述 方案。因此,程序設(shè)計的首要目標,是培養(yǎng)解決問題的基本思維方式,其次才是語言 知識。1.2 課程設(shè)計的要求程序設(shè)計報告應(yīng)該能夠反映學生完成課程設(shè)計題目的全部情況,包括對課程設(shè)計題目要求的分析、應(yīng)用程序的設(shè)計、程序的測試過程以及程序的運行情況等,因此, 編寫課程設(shè)計

4、報告是課程設(shè)計一個不容忽視的重要環(huán)節(jié)。一個高質(zhì)量的報告需要學生 掌握以下幾點:1)運用有關(guān)課程的基礎(chǔ)理論和技能解決實際問題;2)能用文字、圖形和現(xiàn)代設(shè)計方法系統(tǒng)地、正確地表達設(shè)計成果;3)分析應(yīng)用的功能構(gòu)成、數(shù)據(jù)對象及其關(guān)聯(lián),實現(xiàn)系統(tǒng)的類的設(shè)計;4)對所設(shè)計應(yīng)用進行調(diào)試。29第二章課程設(shè)計任務(wù)內(nèi)容此章節(jié)主要從課程設(shè)計的要求,功能需求兩方面講述課程設(shè)計的有關(guān)內(nèi)容。2.1課程設(shè)計要求1)設(shè)置一個簡單的行編輯器,每行以回車結(jié)束;2)數(shù)據(jù)以文件形式存儲;3)編輯器具有查找、替換、修改數(shù)據(jù)的功能。2.2 功能需求該程序具有行的查找、替換、刪除的功能。行編輯器是文本編輯器的一種,針對行進行編輯?,F(xiàn)在看來當

5、然非常地老式,這 種編輯器起源于操作員還使用電傳打字機的年代, 也就是一個打印機連著鍵盤,因為 沒有顯示屏,也就無法在文檔中移動光標。行編輯器只能從事最基本的文本輸入與輸出。輸入、編輯、文檔顯示并不能同步 地進行。一般而言,用戶無法直接輸入文本,而只能在文本終端上通過簡要的命令, 對已區(qū)”的做法顯然不是最恰當?shù)摹?較好的做法是,設(shè)立一個輸入緩沖區(qū),用以接受 用戶輸入的一行字符,然后逐行存入用戶數(shù)據(jù)區(qū)。允許用戶輸入出差錯,并在發(fā)現(xiàn)有 誤時可以及時更正。例如,當用戶發(fā)現(xiàn)剛剛鍵入的一個字符是錯的時, 可補進一個退 格符"#",以表示有文檔進行添加或編寫。命令和文本,以及編輯器的相

6、應(yīng)輸出,會 根據(jù)他們的輸入順序,從底部開始逐一顯示。雖然命令一般會顯示被修改的行, 但如 果要將行連同文檔中的上下文一起顯示,則需要另外單獨的命令?,F(xiàn)在常見的編輯器,都是通過移動光標,來選取要編輯的文本段落,與此不同的 是,行編輯器只能對“當前行”進行編輯。一般也可在行內(nèi)進行上下文匹配,或者選 擇特定行,以決定哪部分文檔將被編輯或顯示。當然,這些編輯每次都只能針對一行。一個簡單的行編輯程序的功能是:接受用戶從終端輸入的程序或數(shù)據(jù),并存入用 戶的數(shù)據(jù)區(qū)。由于用戶在終端上進行輸入時,不能保證不出差錯,因此,若在編輯程序中,“每 接受一個字符即存入用戶數(shù)據(jù)前一個字符無效;如果發(fā)現(xiàn)當前鍵入的行內(nèi)差錯較

7、多或 難以補救,則可以鍵入一個退行符”,以表示當前行中的字符均無效。2.3 功能模塊圖根據(jù)上面的功能需求分析,可以將這個系統(tǒng)的設(shè)計分為如下六大模塊:輸入,替換,刪除,查找,修改,保存(見圖 2-1)。圖2-1功能模塊圖第三章詳細設(shè)計說明此章節(jié)通過程序設(shè)計思路,函數(shù)說明兩大章節(jié)詳細的描述了程序的函數(shù)功能說 明,參數(shù)說明等。3.1 程序設(shè)計思路課程設(shè)計要求設(shè)計一個簡單的行編輯器,該程序具有行的查找、替換、刪除等功能,設(shè)計這個程序是為了對行的各種功能進行了解。定義一個結(jié)構(gòu)體來包含對行編輯 器的一般操作,如輸入函數(shù)printf (),刪除需要一個刪除函數(shù)delete_text (),保 存一個文件需要

8、使用save ()等,主函數(shù)模塊中需要運用 switch ()多分支選擇語 句和do while ()循環(huán)語句來調(diào)用上述所需要的函數(shù)。3.2 函數(shù)說明3.2.1 main ()主函數(shù)主函數(shù)是程序入口,采用模塊化設(shè)計。其主要功能有:1)使用一個主菜單來顯示編輯器的各項操作;2)運用一個多選擇分支switch()語句來實現(xiàn)要進行的操作; 3)菜單函數(shù)通過do while() 循環(huán)中的get來輸出,內(nèi)嵌套switch語句來總體實現(xiàn) 主函數(shù)的所有功能;其中用到了字符串數(shù)組argv,用來存放指向字符串參數(shù)的指針數(shù)組,即每一個元素指向一個參數(shù),整數(shù) argc ,用來統(tǒng)計你運行程序時送給 main函 數(shù)的命

9、令行參數(shù)的個數(shù),代碼中包括六個case。程序如下(見圖3-1):char s80,choice,fname80;/ struct line *info;int linenum=1; start=NULL; last=NULL;if(argc=2) load(argv1);/*裝入命令行上的文件 */do choice=menu_select();switch(choice)case 1:printf("t 行號:");gets(s);linenum=atoi(s);enter(linenum);break;case 2:delete_text();break;case 3:

10、list();break;case 4:printf("t 文件名:");gets(fname);save(fname);break;case 5:printf("t 文件名:");gets(fname);load(fname);break;case 6:exi4t(0);while(1);3.2.2 menu_select 菜單選擇函數(shù)這是一個菜單顯示界面,顯示:輸入,刪除一行,顯示一行等,之后輸入數(shù)字選 擇所需要的功能。定義整型變量c,使用printf輸出函數(shù)實現(xiàn)。程序如下(見圖3-2): char s80;int c;printf("tt

11、1.輸入 n");printf("tt2.刪除一行 n");printf("tt3.顯示一行 n");printf("tt4.文件存盤 n");printf("tt5.裝入文件 n");printf("tt6.退出 n");doprintf("nntt請按數(shù)字選擇:");gets(s);c=atoi(s);while(c<0|c>6);return(c);_Lprintft" WnXHt 請按數(shù)reiumfcii圖3-2 menu_select

12、菜單選擇函數(shù)3.2.3 enter輸入函數(shù)此函數(shù)是將所需要的文本信息插在指定行端部,其中,使用到了內(nèi)存分配函數(shù),如果分配成功則返回指向被分配內(nèi)存的指針,否則返回空指針NULL使用操作符sizeof ,判斷數(shù)據(jù)類型長度符,其作用是返回一個對象或者類型所占的內(nèi)存字節(jié)數(shù), 程序中使用了 if語句,printf輸出函數(shù),gets輸入函數(shù)(見圖3-3)。3.2.4 delete_text 刪除函數(shù)此函數(shù)主要實現(xiàn)行編輯器的刪除功能,其中主要使用條件語句 if - else -,輸入 函數(shù)gets,輸出函數(shù)printf,代碼中atoi的作用是把字符串轉(zhuǎn)換成整型數(shù),并多次使 用指針的指向語句,比如:info-

13、>next->prior=info->prior (見圖 3-4)。圖3-4 delete text 刪除函數(shù)3.2.5 find 函數(shù)查找函數(shù)主要用來根據(jù)用戶的需要查找一行文本。程序如下(見圖 3-5):struct line *info;info=start;while(info)if(linenum=info->num) return(info);info=info->next;return(NULL);圖3-5 find 函數(shù)3.2.6 list 函數(shù)顯示文本,顯示用戶在查找函數(shù)中選擇的文本。程序如下(見圖 3-6): struct line *info;

14、info=start;while(info) ("%d:%sn",info->num,info->text);info=info->next;printf("nn");3.2.7 save 函數(shù)將文件儲存在指定的文件夾里,以備以后查找使用。其中,定義了字符型的指針 p,使用了 while循環(huán)語句,輸出函數(shù)putc(見圖3-7)。atn>cdine*Lnfci;pnnttt",;文件prints "正女(1 2一一p inTextputc(*p+Jp);felusri rp),圖3-7 save儲存函數(shù)3.2.8

15、 load 函數(shù)將文件以.txt的形式裝入,如果文件打不開,則裝入不成功,如果文件正在裝入, 結(jié)束后,按任意鍵退出。定義整型變量 size,inch ,其中,使用if判斷語句,while 循環(huán)語句,printf輸出函數(shù),定義了字符型指針變量p,使用了指針的指向語句,如: start=start->next; info->prior=temp 等(見圖 3-8)。pnntiEt 止裝 A Z .pnnttC Mt內(nèi)f匚七一rtturri;prmtK"' tff 內(nèi) l7 已¥reium;teimp-next-NULL.圖3-8 load 函數(shù)3.3 調(diào)試編

16、輯執(zhí)行時,出現(xiàn)一個 warming,錯誤出現(xiàn)在 menu_select()中,丟掉了 return 語句,return表示中止當前函數(shù)的運行,并將操作權(quán)返回給調(diào)用者,就算不寫,在 函數(shù)執(zhí)行完畢后也會返回操作權(quán)給調(diào)用者。寫 return是一種清晰的風格,可以防止 一些意外的錯誤。如圖所示:1 gUr j 1 oST - 7j1r32 Debu gConpilirig =»*a,cppsYDocuments andl S;ettingisAdlninietratDra Bcpp(6S)i : warninq OB日:'merau_Eelect1 i f unction shoul

17、d returna .Oli j . U err10 nlm).R u1ahiningfs:)圖3-9調(diào)試框所顯示錯誤>whlie(c<D| 104);j八以 *杠 Uti =£3且上T7圖3-10錯誤所在處c=atoi(s);while(c<0|c>6); return(c);圖3-11錯誤修改后ConFiguraition: a - Uin32 Debug Compilinga .cppa . ob j - 0 error(s) , 0 naming (s)圖3-12編譯Configuration: a - Win32 Debug Linking.a.ex

18、e - 0 error(s), 0 earning(s)圖3-13執(zhí)行第四章軟件使用說明簡單的行編輯器,主要包括五個內(nèi)容:第一,字符的按行錄入及儲存;第二,文 件內(nèi)容的顯示;第三,文件內(nèi)容的查找;第四,文件內(nèi)容的替換第五,文件的修改。開始進入初始化界面,按數(shù)字進行所需要的操作:匚'C:Docuaents and Sett1 .蒯入I2 .刪除一直3 .顯不一行4 .文件存盤S .裝入文件61退出請按數(shù)字選擇:圖4-1 王畫面按數(shù)字一,任意輸入行號:*C:DocuBents and SettincsXcaoshu?ingXDebug12 3 4 5 6入除示件入出翦顯文裝退尊盤件二存文請

19、按數(shù)字選擇.1行節(jié):圖4-2輸入界面按數(shù)字二,選擇所需要刪除的行號:箕仃盤件 二存文 (除示件入出 蒯顯文裝退12 3 4 5 6請按數(shù)字選擇;2 行號:圖4-3刪除界面按數(shù)字三,顯示刪除后其余的行號:12 3 4 5 6后仃盤件二存文人除示件入出輸刪顯文裝退請按數(shù)字選擇;31戰(zhàn)入2 .刪除一近 "顯示一行 4 .文件存盤 5 .裝入文件6.退出請按數(shù)字選擇:圖4-4顯示界面按數(shù)字四,輸入某個文件命名,將該文件存盤:圖4-5存儲界面按數(shù)字五,將選定的文件裝入:立仃盤件一 一存文A除示件入出哥顯文裝退12 3 4 5 6請按數(shù)字選擇;5文件名工正裝入文件!Jress ani/ key

20、to continue圖4-6裝入界面第五章課程設(shè)計心得與體會三周的課程設(shè)計,終于結(jié)束了,這次課程設(shè)計,讓我明白了很多,自己以前學的 那些東西,只是皮毛,是為了應(yīng)付考試才看書學習的,自己根本沒有真正掌握所學的 專業(yè)知識,這次的課程設(shè)計,下了很大功夫,一開始,以為課程設(shè)計很簡單,在網(wǎng)上 隨便百度一個課程設(shè)計報告就可以了, 可是沒想到,網(wǎng)上找的都不能用,代碼都是有 錯誤的,只好自己編寫代碼,重新開始好好看書,學習 C語言知識,上網(wǎng)查閱資料, 去圖書館翻閱有關(guān)書籍,每天想的只有課程設(shè)計,因為自己基礎(chǔ)很差,編寫起來代碼 很困難,一開始編寫出來的代碼錯誤很多,很沮喪,很傷心,想著這次課程設(shè)計一定 完蛋了

21、,停下來休息了一天繼續(xù)修改自己的程序, 最終把代碼修改到完善,心里終于 落下了一塊大石頭,以為一切搞定了,卻發(fā)現(xiàn),還有寫報告這件重頭戲,每天繼續(xù)奔 波于機房和圖書館之間,通過老師的幫助和自己不斷的努力, 終于完成了報告。看著 自己的報告,又激動又害怕,第一次自己下很大心血完成的東西,讓人很興奮,卻也 擔心自己的報告得不到老師的肯定。這次課程設(shè)計,讓我明白了,一個報告里,最重要的是編寫代碼以及流程圖,雖 然自己基礎(chǔ)很差,不過通過這次課程設(shè)計,我的專業(yè)知識提高了很多,明白了,只有 通過真正的實踐,才能明白自己真正學了多少知識,自己有多少知識能拿到實際中運 用,比如說編寫代碼時,當你把代碼編譯并讓其

22、運行,發(fā)現(xiàn)很多錯誤,再回頭檢查錯 誤出在哪里,是很費力的一件事情,因此分析和規(guī)劃代碼是很重要的, 最重要的是要 把整體的邏輯結(jié)構(gòu)寫好,這樣就不會出現(xiàn)大問題,寫代碼就要先找出核心的內(nèi)容,用 多種方法來實現(xiàn)核心部分,這樣可以盡可能的避免發(fā)現(xiàn)邏輯或編譯不支持的錯誤。通過這次的課程設(shè)計,讓我初步學會了一個課程設(shè)計的基本方法有哪些,學會了如何借鑒別人的方法和經(jīng)驗,如何將所有的資料整合起來并加以運用,這次報告的設(shè) 計,為以后課程設(shè)計以及畢業(yè)論文打下了很好的基礎(chǔ)。三周當中,會因為程序的事而心煩意亂,不過,人總是在挫折中成長的,積累的失敗的經(jīng)驗多一些,對成長有很大 的幫助。這次的報告,有很多不盡人意的地方,很

23、感謝荀老師的幫助,報告的完善, 大部分都是在老師的幫助下完成的, 這次的報告,融入了自己很大的心血,我覺得我 的報告很好,以后,需要更加刻苦的學習自己的專業(yè)知識,不斷的提高自己的能力。附錄1參考文獻1譚浩強編著.C+程序設(shè)計.北京:清華大學出版社,20052譚浩強編著.C+程序設(shè)計解題與上機指導.北京:清華大學出版社,20053譚浩強編著.C程序設(shè)計(第二版).北京:清華大學出版社,19994譚浩強編著.C程序設(shè)計設(shè)計解題與上機指導(第二版).北京:清華大學出社,19995黃迪明主編C+語言程序設(shè)計基礎(chǔ).北京:電子工業(yè)出版社2003.66錢能 主編C+程序設(shè)計教程.北京:清華大學出版社1999

24、.4口鄭莉、董淵 編著C+語言程序設(shè)計.北京:清華大學出版社1999.128吳訪升編著C+程序設(shè)計.北京:機械工業(yè)出版社20029吳訪升 編著C+程序設(shè)計學習指導與上機實踐.北京:機械工業(yè)出版社出版200210孫淑霞等C/C+程序設(shè)計教程(第2版),電子工業(yè)出版社,2007.211鄭莉 董淵C+郵言程序設(shè)計,清華大學出版社,鄭莉、董淵, 1999.1212王正軍Visual C+6.0 程序設(shè)計從入門到精通北京:人民郵電出版社2006.1附錄2程序清單#include "stdio.h" #include "stdlib.h" struct line c

25、har text81;int num; /* 行號*/struct line *next; /*指向下一個輸入項目的指針*/struct line *prior; /*指向前一個項目的指針*/;struct line *start; /*指向表中第一個項目的指針*/struct line *last; /*指向表中作后一個項目的指針*/struct line *find(int),*dls_store(struct line *);void patchup(int,int),delete_text(),list(),save(char *),load(char *); menu_select(

26、);enter(int linenum);void main(int argc,char *argv口)char s80,choice,fname80;/ struct line *info;int linenum=1;start=NULL;last=NULL;if(argc=2) load(argv1);/*裝入命令行上的文件 */dochoice=menu_select();switch(choice)case 1:printf("t 行號:");gets(s);linenum=atoi(s);enter(linenum);break;case 2:delete_tex

27、t();break;case 3:list();break;case 4:printf("t 文件名:");gets(fname);save(fname);break;case 5:printf("t 文件名:");gets(fname);load(fname);break;case 6:exit(0);while(1);/*顯示菜單,供用戶選擇*/menu_select()char s80;int c;printf("tt1.輸入 n");printf("tt2.刪除一行 n");printf("tt3

28、.顯示一行 n");printf("tt4.文件存盤 n");printf("tt5.裝入文件 n");printf("tt6. 退出 n");doprintf("nntt請按數(shù)字選擇:");gets(s);c=atoi(s);while(c<0|c>6);return(c);/*將文本插在指定行端部*/enter(int linenum) struct line *info;/char t81;for(;) /* */ info=(struct line *)malloc(sizeof(st

29、ruct line);if(!info)printf("t! 內(nèi)存不夠! n");return(NULL);printf("%d:",linenum);gets(info->text);info->num=linenum;if(*info->text)if(find(linenum) patchup(linenum,1);if(*info->text) start=dls_store(info);else break;linenum+;return(linenum);/*當文本內(nèi)容插在文件中間時其下面的內(nèi)容的行號必須增加1,而*/

30、*刪除時,被刪除的文本后面的行號必須減1 */void patchup(int n,int incr)struct line *i;i=find(n);while(i)i->num=i->num+incr;i=i->next;/*按行號排序后插入*/struct line *dls_store(struct line *i)struct line *old,*p;if(last=NULL)i->next=NULL;i->prior=NULL;last=i;return(i);p=start;old=NULL;while(p)if(p->num)old=p;p

31、=p->next;elseif(p->prior) p->prior->next=i;i->next=p;p->prior=i;return start;i->next=p;i->prior=NULL;p->prior=i;return(i);old->next=i;i->next=NULL;i->prior=old;last=i;return start;/*刪除一行*/void delete_text()struct line *info;char s80;int linenum;printf("t 行號:&

32、quot;);gets(s);linenum=atoi(s);info=find(linenum);if(info)if(start=info)start=info->next;if(start) start->prior=NULL;else last=NULL;elseinfo->prior->next=info->next;if(info!=last)info->next->prior=info->prior;else last=info->prior;free(info);patchup(linenum+1,-1);/*查找一行文本*

33、/struct line *find(int linenum)struct line *info;info=start;while(info)if(linenum=info->num) return(info);info=info->next;return(NULL);/*顯示文本*/ void list() struct line *info;info=start;while(info)("%d:%sn",info->num,info->text); info=info->next; printf("nn");/*存文件*

溫馨提示

  • 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

提交評論