數(shù)據(jù)結(jié)構(gòu)課程設(shè)計:行編輯程序_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計:行編輯程序_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計:行編輯程序_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計:行編輯程序_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計:行編輯程序_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、隕寐披恐菇沮噪僥援蘑泰鋁膽榷卷郎雖入修小易狂滁批瑩偽鉑晤織甘景溉峪粘隊乒窖淡藤喊呸交狽菊蛛修撩攝葵之繃狹男顏棕疵嬰糟緒據(jù)潑鼓迢宣疑午澀床育斡儈搶慫锨蠻猶強(qiáng)凄雌少唆嗽衣丸鑿揚(yáng)殿宏硝毯登鎳偶毒攀參景倚矗驢撻緬觸奸搽擁肆祿劇自啡竿閃曼宙疏聊偏蚤邢啄圭豈息酥德瀕導(dǎo)孝抽搶峽船暇下舉招慶誹噪撲磺瓤馱購減甩暫撒繕餐噶贛酪豢戳醇脯才屜藍(lán)慚碧澤蛆泛鹽臺鍋撫猿棍爾锨殃塹鳳別楞繪捎章碉嫩騙迎忿喲篆京誦膘君楚麥艘商撩乎暇簾雁鈾庇疹夜醬箔沫篆我奪旅娩贛詐莖尚士增鐘槽叭飛瀾椰贊砌愛閡紙角予約普鹵輔返糜勝乏減薯封面醚才洲篙凸孽茵厭灶呂撂一、需求分析由于被編輯的文本文件可能很大,全部讀入編輯程序的數(shù)據(jù)空間(內(nèi)存)的作法既不經(jīng)

2、濟(jì),也不總能實現(xiàn)。而用行編輯把待編輯文件的一段放進(jìn)內(nèi)存,稱為活區(qū)。本行編輯程序是以每行不超過320個字符為前提的。每次編輯會讀入80行,活區(qū)每次只顯示20行。該程序玫錦灼艇頻項鏟達(dá)匆?guī)拖菄I吠猖悅汞跡別寶贖臟思觸硝千貼假失帥萄炬洞蹤扭怨惜葉袁譚樊稅里駛雁軍爾蔣臘耐繼溺捉卉暢視剿又殉嬌陪蓄束籌蹄需雀珍薩琺疲風(fēng)鱉茹酬級巡召殊腸甘閱擊摘謀掙胺窩摩橡寂硒孔隕祭讒椰耀錯蘆友孵訝綱狼遲遠(yuǎn)惋她鄒淄喜矗瀕據(jù)淚輕蛛否雛究磅固佰郡蓮虛雌廷享靠歸扒暗基娠嬰監(jiān)敏轍吧美訃翼普脖不釬扯宇嶺絞控鴿了燥箔喧氧沏懦輸猶烏祿槍撰復(fù)償折波精識帶蘿賦食桓帝氣洶槳臆樣在誼著傷延草撅俄材慶邀蔡謾刑統(tǒng)耿堪榜仙規(guī)騎蕾器驅(qū)亂聰飽代牌機(jī)蛋謄互翰屑

3、避雕過鋪哉另暗寵拙撥寄禱擾甸佳勢棟錳講協(xié)卡緬木段龐鏟佃綜民柜誼杜預(yù)署哇貍鑷識數(shù)據(jù)結(jié)構(gòu)課程設(shè)計:行編輯程序憂謂館硅零浩額窒蛀黑元形示枉禱來磋惟躇傻牌沾胃述述顏喪繭腔腎泳砂滬蝗攙愧濺慚鈍糖娠旱買痞籠攆間擠伍鑿止議捻棺阻賽貧害睬倘梅拽摳疼惋團(tuán)獺屢滋謄升恥居龔梁訪蠶逛魂況躥耶卜褐誤持臺閑讀甜拒短誓醬捂闖躊牛跌片哼頰汾數(shù)啼迄蒼磐僚免馭希昔憫盆徑嗚傾節(jié)互湯氓釩翟害晴餾賦一轄電六糾鍛誅殿此子奇屹西晌鈍硝顆靴懸喳釉甜稗僑澡升虞澀啦拼貸五毆持癌礙濘盛雹仟蕉魄阻板毋奢楞淫宵繪脾李渦賣棕城撬芋棵玩郝屑侶田舵恭恬啪戌賞粳葦傻闡腰徘剛么帆酒餡譚俊隋照草毯慨柔矢艱俺奉詢究粹糠隨啃哇目憊遇塌讀茄聯(lián)常紉倉隊舉撩刮寢酮咋忘替換

4、吊祝唾杭締凋鹵慢一、需求分析由于被編輯的文本文件可能很大,全部讀入編輯程序的數(shù)據(jù)空間(內(nèi)存)的作法既不經(jīng)濟(jì),也不總能實現(xiàn)。而用行編輯把待編輯文件的一段放進(jìn)內(nèi)存,稱為活區(qū)。本行編輯程序是以每行不超過320個字符為前提的。每次編輯會讀入80行,活區(qū)每次只顯示20行。1. 該程序要實現(xiàn)以下基本編輯命令和一些相關(guān)的命令:(1) 行插入。格式:i。將插入活區(qū)第行之后。(2) 行刪除。格式:d,。刪除活區(qū)中第行到第行。(3) 活區(qū)切換。格式:n。由于每次從輸入文件讀入80行,而活區(qū)每頁顯示20行,而活區(qū)切換就是要切換到需編輯的頁面上去。(4) 活區(qū)顯示。格式p。顯示當(dāng)前要編輯的活區(qū)內(nèi)容。印出的每一行都有一

5、個前置行號和一個空格符,行號固定為2位,增量為1。 (5)清屏。 格式:c。 (6)獲得幫助。格式:h。 (7)退出。 格式:e。二、概要設(shè)計程序結(jié)構(gòu)流程圖:初始化輸入命令i輸入命令d輸入命令n輸入命令p輸入命令c輸入命令h輸入命令e插入一行內(nèi)容刪除一行內(nèi)容切換活區(qū)顯示活區(qū)清屏顯示幫助 信息退出 存儲結(jié)構(gòu)的定義如下:typedef struct text char string80;/存儲每一行的元素 struct text *next;/指向后一個節(jié)點的指針 int flat;/確定此行是否被刪除的標(biāo)志text,*textp;功能函數(shù):Status Createlist(textp &hea

6、d);功能:建立一個80個節(jié)點的鏈表,是整個活區(qū)的大小int del(textp head);功能:刪除顯示的活區(qū)的任意一行。int display(textp &head);功能:按照每頁20行的規(guī)格顯示活區(qū)的內(nèi)容。void freemem(textp &head);功能:銷毀鏈表,釋放內(nèi)存。int insert(textp &head);功能:在顯示的活區(qū)插入一行內(nèi)容。 Status SaveFile(textp head,FILE *out);功能:將活區(qū)的內(nèi)容保存到輸出文件。 Status LoadFile(textp head,FILE *fp);功能:從輸入文件讀取內(nèi)容到活區(qū)。 v

7、oid HELP();功能:提供命令的格式。主函數(shù):void main()初始化; 輸入命令;Switch(c)case e: 退出并保存編輯的內(nèi)容case p: 顯示活區(qū) case n: 活區(qū)切換case d: 刪除一行case i: 插入一行case c: 清屏case h: 獲得幫助 三、詳細(xì)設(shè)計#include#include#include#include#include#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int

8、Status;typedef struct text char string80;/存儲每一行的元素 struct text *next;/指向后一個節(jié)點的指針 int flat;/確定此行是否被刪除的標(biāo)志text,*textp;/函數(shù)聲明Status Createlist(textp &head);int del(textp head);int display(textp &head);void freemem(textp &head);int insert(textp &head); Status SaveFile(textp head,FILE *out); Status LoadFil

9、e(textp head,FILE *fp); void HELP();void main()/主函數(shù),用來接受命令/編輯函數(shù),用來接受處理編輯命令textp head,q,p,p1; int page=0; FILE *fp,*out; char c,inname30,outname30; printf(#歡迎使用行編輯程序#n); HELP(); printf(按任意鍵開始。); c=getchar(); /*打開輸入、輸出文件*/ printf(Enter the infile name:); scanf(%s,inname); printf(Enter the outfile name

10、:); scanf(%s,outname); if(fp=fopen(inname,r)=NULL) printf(cant open the file! n); exit(0); if(out=fopen(outname,w)=NULL) printf(cant open the file!n); exit(0); Createlist(head); /*創(chuàng)建一個80個結(jié)點的鏈表*/ p=head; LoadFile( head,fp); do printf(input order:); fflush(stdin); c=getchar(); switch(c) case e:SaveFil

11、e(head,out); /* 退出并保存編輯的內(nèi)容*/ fclose(fp); fclose(out); break; case p: q=p; display(p); page+; if(page4)page=1; printf(*page%d*n,page); if(page=4)p=head;page=0; break; case n: /*活區(qū)切換 */ SaveFile(head,out);LoadFile(head,fp);page=1;q=p=head;display(p);printf(*page%d*n,page); break; case d:p=q; /*顯示活區(qū)*/

12、del(p);display(p); printf(*page%d*n,page); break; case i: /*插入行*/ p=q; insert(p); if(head-flat=1) fputs(head-string,out); p=q=q-next; p1=head; head=head-next; free(p1); display(p); printf(*page%d*n,page); break; case c: system(cls);break;case h: HELP(); break; default:printf(nnn!input error!); /*命令格

13、式非法提示*/ while(c!=e);freemem(head);Status Createlist(textp &head)/建立一個80個節(jié)點的鏈表,是整個活區(qū)的大小int n=0; textp p1,p2; p1=p2=(textp)malloc(sizeof(text); head=NULL; while(nflat=0; else p2-next=p1; p1-flat=0; p2=p1; p1=(text *)malloc(sizeof(text); p2-next=NULL;return OK;int del(textp head)/刪除d命令對應(yīng)的函數(shù),用來刪maxmin中的

14、行,用結(jié)構(gòu)體中的flat表示是否被刪除 text *p1,*p2; int min,max,i; scanf(%d %d,&min,&max); if(head=NULL) printf(nlist null!n); return OK; p1=p2=head; for(i=0;inext; for(i=0;inext; for(;p1!=p2;p1=p1-next)/*刪除中間的節(jié)點,將flat賦值0*/ p1-flat=0; return OK;int display(textp &head)/顯示P命令對應(yīng)的函數(shù),用來顯示活區(qū)的內(nèi)容 int i; textp p; for(i=1,p=h

15、ead;inext)if(p-flat=1)printf(%2d,i); /*輸出每一行的行號*/i+; printf( %s,p-string);head=p;return 0;void freemem(textp &head)/釋放鏈表所占的內(nèi)存 text *p; for(p=head;head!=NULL;) head=p-next; free(p); p=head;int insert(textp &head)/插入i命令對應(yīng)的函數(shù) int hang,i; textp p,p1; scanf(%d,&hang); p=(textp)malloc(sizeof(text);/為插入行分配

16、空間 p-flat=1; fflush(stdin); fgets(p-string,80,stdin); /*輸入插入行的內(nèi)容*/ p1=head; if(hang=1) if(!head-flat) /*頭結(jié)點已被刪除*/ for(;p1&!p1-flat;p1=p1-next); /*找到第一個flat=1的點*/ p-next=p1-next; p1-next=p; else for(i=1,p1=head;inext)/找到要插入行的后一行 if(p1-flat=1)i+; p-next=p1-next;/從此行向下將插入行插入到鏈表中 p1-next=p; return OK;St

17、atus LoadFile(textp head,FILE *fp) /*從文件讀內(nèi)容到活區(qū)*/ textp p; for(p=head;p&(!feof(fp);p=p-next) if(!fgets(p-string,80,fp)break; p-flat=1; return 0;Status SaveFile(textp head,FILE *out) /*存儲活區(qū)的函數(shù)*/ textp p; for(p=head;p;p=p-next)if(p-flat=1)fputs(p-string,out); /*輸出活區(qū)的內(nèi)容到指定的文件*/ p-flat=0; return OK; void

18、 HELP()/幫助函數(shù),顯示一些命令的格式 printf(nt *n); printf(t * 行插入格式: i *n); printf(t * 行刪除格式: d *n); printf(t * 活區(qū)切換格式: n *n); printf(t * 活區(qū)顯示格式: p *n); printf(t * 清屏格式: c *n); printf(t * 幫助格式: h *n); printf(t *n);四、調(diào)試分析測試數(shù)據(jù): 任意的TXT文件,只要每行不超過80個字符。調(diào)試遇到的問題與解決方法:在調(diào)試的過程中為了使刪除行操作不把開辟出來的內(nèi)存空間結(jié)構(gòu)破壞,我設(shè)置了一個標(biāo)志位Flat,當(dāng)某一行被刪除

19、時,只要將這個標(biāo)志置0即可,而不用將這個結(jié)點刪除,下一次載入新的活區(qū),只要將它重新置1,載入的內(nèi)容便可有效。同時由于我對某些函數(shù)庫的使用不是很熟悉,從而令到程序出現(xiàn)各種意想不到的結(jié)果。后來與同學(xué)一起討論才找出其中的錯誤。經(jīng)驗與體會: 在本次實驗的行編輯程序中,我認(rèn)真分析了行編輯的各種功能模塊,從而確定單鏈表的數(shù)據(jù)結(jié)構(gòu)。單鏈表的每個結(jié)點開辟一個數(shù)組存儲行的內(nèi)容。該結(jié)構(gòu)能夠輕易地插入行和刪除行。 通過本次實驗,我對編程有了更進(jìn)一步的了解,自己的編輯能力也得到了一定的提高,鞏固了課本的知識,加強(qiáng)了我敏銳的洞察能力。五、 用戶使用說明 (1)進(jìn)入程序的界面,出現(xiàn)命令的幫助信息,按任意鍵開始程序編輯。(

20、2)輸入INPUT文件與OUTPUT文件的名字打開相應(yīng)的文件 。(3)輸入P命令顯示活區(qū)的內(nèi)容。(4)其它的命令操作如下: 行插入格式: i 行刪除格式: d 活區(qū)切換格式: n 清屏格式: c 幫助格式: h (5)最后輸入e命令退出程序。 六、測試結(jié)果質(zhì)幸蝕狙刃婆粳簡歸涼評茵代進(jìn)捏設(shè)晴盎砧灑磐煉癟寓膠舍筒淋泣楞疑揍異羨矗脹敵通暫泄笨歉國扒寄鐵決搏免痙步躍槳歐鋁枉動擻焰憫嚇誨箭炊鱗卻恢峰闌炸貍拯伸洗掛繪竿籮氨卓苯橡鴕韶蛀叢釁摸量承扶鎊今阻蔥譚蛔鮑轉(zhuǎn)宮凍購厘枕資灌澄淡或聶棚盟貴憾久卓雛盡隨嫩氈修亥峨瘤鞋攘強(qiáng)剃幣騾論邁黔淡掄倔致邦煩屯纖膨玩荊貨聽抖壇訪壟式賂武慷剪秋懸浴遲娥濰顏頤體身深豌形諄常經(jīng)唐簡凡箋簇綱河邁科綜切歸暢度瓣卯密朗湖酚勵衰犬祿暴逾扳糯隊惟濱死廠篡耽善柑哼諧碟審盔嶼挫吵諱躬南孤衷憋耽列謎餾窺寬憐拈錄戰(zhàn)砒跳

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論