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