數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——簡(jiǎn)單行編輯程序_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——簡(jiǎn)單行編輯程序_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——簡(jiǎn)單行編輯程序_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——簡(jiǎn)單行編輯程序_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——簡(jiǎn)單行編輯程序_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 電子信息工程學(xué)院課程設(shè)計(jì)報(bào)告設(shè)計(jì)名稱(chēng): 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 簡(jiǎn)單行編輯程序 姓 名: 學(xué) 號(hào): 專(zhuān)業(yè)班級(jí): 電子信息工程學(xué)院 系 (院): 設(shè)計(jì)時(shí)間: 設(shè)計(jì)地點(diǎn): EDA實(shí)驗(yàn)室 成績(jī):指導(dǎo)教師評(píng)語(yǔ): 簽名: 年 月 日1課程設(shè)計(jì)目的1、訓(xùn)練學(xué)生靈活應(yīng)用所學(xué)數(shù)據(jù)結(jié)構(gòu)知識(shí),獨(dú)立完成問(wèn)題分析,結(jié)合數(shù)據(jù)結(jié)構(gòu)理論知識(shí),編寫(xiě)程序求解指定問(wèn)題。 2.初步掌握軟件開(kāi)發(fā)過(guò)程的問(wèn)題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測(cè)試等基本方法和技能;3.提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法獨(dú)立分析和解決問(wèn)題的能力;4.訓(xùn)練用系統(tǒng)的觀(guān)點(diǎn)和軟件開(kāi)發(fā)一般規(guī)范進(jìn)行軟件開(kāi)發(fā),鞏固、深化學(xué)生的理論知識(shí),提高編程水平,并在此過(guò)程中培養(yǎng)他們嚴(yán)謹(jǐn)?shù)目茖W(xué)態(tài)度

2、和良好的工作作風(fēng)。2課程設(shè)計(jì)任務(wù)與要求:任務(wù)問(wèn)題描述:文本編輯程序是利用計(jì)算機(jī)進(jìn)行文字加工的基本軟件工具,實(shí)現(xiàn)對(duì)文本文件的插入、刪除等修改操作。限制這些操作以行為單位進(jìn)行的編輯程序稱(chēng)為行編輯程序。被編輯的文本文件可能很大,全部讀入編輯程序的數(shù)據(jù)空間(內(nèi)存)的做法即不經(jīng)濟(jì),又不總能實(shí)現(xiàn)。一種解決方法是逐段的編輯。任何時(shí)刻只把待編輯文件的一段放在內(nèi)存,稱(chēng)為活區(qū)。試按這種方法實(shí)現(xiàn)一個(gè)簡(jiǎn)單的行編輯程序,設(shè)文件每行不超過(guò)320個(gè)字符,很少超過(guò)80個(gè)字符。要求:實(shí)現(xiàn)以下4條基本的編輯命令:(1)行插入。格式:i<行號(hào)><回車(chē)><文本>. <回車(chē)>將<文

3、本>插入活區(qū)中第<行號(hào)>行之后。(2)行刪除。格式:d<行號(hào)1><空格><行號(hào)2>.<回車(chē)>例如刪除活區(qū)中第<行號(hào)1>行(到第<行號(hào)2>行)。例如:例如:“d10”和d1014”。(3)活區(qū)切換。格式:n<回車(chē)>將活區(qū)寫(xiě)入輸出文件,并從輸入文件中讀入下一段,作為新的活區(qū)。(4)活區(qū)顯示。格式:p<回車(chē)> 逐頁(yè)地(每頁(yè)20行)顯示活區(qū)內(nèi)容,在每顯示的一頁(yè)之后請(qǐng)用戶(hù)決定是否繼續(xù)顯示以后各頁(yè)(如果存在)。印出的每一行要前置行號(hào)和一個(gè)空格符,行號(hào)固定占4位,增量為1。 各條命令中的行號(hào)均須

4、在活區(qū)中各行號(hào)范圍之內(nèi),只有插入命令的行號(hào)可以等于活區(qū)第一行行號(hào)減一,表示插入當(dāng)前的屏幕中第一行之前,否則命令參數(shù)非法。3課程設(shè)計(jì)說(shuō)明書(shū)一 需求分析(1)、被編譯的文本文件可能很大,全部讀入編輯程序的數(shù)據(jù)空間(內(nèi)存)的做法既不經(jīng)濟(jì),也不總能實(shí)現(xiàn)。任何時(shí)刻只把待編輯文件的一段放在內(nèi)存,稱(chēng)為活區(qū)。(2)、活區(qū)的大小用行數(shù)ActiveMaxLen(可設(shè)為100)來(lái)描述??梢砸詷?biāo)準(zhǔn)行塊為單位為各行分配存儲(chǔ),每個(gè)標(biāo)準(zhǔn)行塊可含81個(gè)行塊。(3)、將輸入文件中的內(nèi)容的ActiveMaxLen x(x由用戶(hù)自己定義)行的內(nèi)容讀入活區(qū)中。然后分別對(duì)活區(qū)中的內(nèi)容進(jìn)行編輯。(4)、分別實(shí)現(xiàn)各命令的函數(shù),然后對(duì)客戶(hù)的

5、需求實(shí)行相應(yīng)的操作。對(duì)命令格式不正確的進(jìn)行處理。二 概要設(shè)計(jì)ADT line基本操作:enter(linenum) 初始條件:有內(nèi)存。 操作結(jié)果:linenum +1. delete_text( ) 初始條件:line存在。操作結(jié)果:若刪除的最后一行,則直接刪除。 若刪除中間一行,則后面的linenum -1。 Load( )初始條件:存在文件file 操作結(jié)果:打開(kāi)文件。 ADT line三 詳細(xì)設(shè)計(jì)1)將文本插在指定行端部enter(int linenum) struct line *info; for(;) info=(struct line *)malloc(sizeof(struct

6、 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); 2)刪除一行 void delete_text(

7、) struct line *info; char s80; int linenum; printf("tlinenum :"); gets(s); linenum=atoi(s); info=find(linenum); if(info) if(start=info) start=info->next; if(start) start->prior=NULL; else last=NULL; else info->prior->next=info->next; if(info!=last) info->next->prior=in

8、fo->prior; else last=info->prior; free(info); patchup(linenum+1,-1); 3)存文件 void save(char *fname) struct line *info; char *p; FILE *fp; if(fp=fopen(fname,"w")=NULL) printf("t Can't open the file !n"); exit(0); printf("t Saving :n"); info=start; while(info) p=i

9、nfo->text; while(*p) putc(*p+,fp); putc('n',fp); info=info->next; fclose(fp); 4)讀取文件 void load(char *fname) struct line *info,*temp; char *p; FILE *fp; int size,inct; if(fp=fopen(fname,"r+")=NULL) printf("t Can't open the file !n"); exit(0); while(start) temp=st

10、art; start=start->next; free(temp); printf("nt Reading.n"); size=sizeof(struct line); start=(struct line*)malloc(size); if(!start) printf("nt內(nèi)存已經(jīng)用完 !"); return; info=start; p=info->text; inct=1; while(*p=getc(fp)!=EOF) p+; while(*p=getc(fp)!='n') p+; *p='0'

11、info->num=inct+; info->next=(struct line*)malloc(size); if(!info->next) printf("nt內(nèi)存已經(jīng)用完 !"); return; info->prior=temp; temp=info; info=info->next; p=info->text; temp->next=NULL; last=temp; free(info); start->prior=NULL; fclose(fp); 四 設(shè)計(jì)與調(diào)試分析這個(gè)程序的源程序是我在圖書(shū)館資料上找的,當(dāng)時(shí)不能

12、運(yùn)行,main的界面也不是現(xiàn)在這樣。源程序里面也沒(méi)有存文件和讀取文件的功能,我先對(duì)源程序進(jìn)行調(diào)試分析,把里面的錯(cuò)誤一一改正,編寫(xiě)出mian程序。然后在里面添加了存文件和打開(kāi)文件的功能,使的程序更加完善。本程序在運(yùn)行時(shí),必須選擇“3.Display a line”才能將輸入,刪除或者打開(kāi)后的文件顯示出來(lái),這就有點(diǎn)浪費(fèi)時(shí)間,使得操作有點(diǎn)復(fù)雜。五 用戶(hù)手冊(cè) 1本程序在win-tc下運(yùn)行。 2在進(jìn)行輸入,刪除或者打開(kāi)文件的操作后,再選擇“3.Display a line”將輸入,刪除或者想要打開(kāi)的文件內(nèi)容顯示出來(lái)。3在執(zhí)行“5.Open the file”時(shí),輸入想要打開(kāi)文件的正確路徑,回車(chē)。如果想要

13、打開(kāi)的文件不存在,則跳出運(yùn)行。 4在進(jìn)行保存文件的操作時(shí),在提示后輸入想要保存的正確路徑名,再按回車(chē),文件即被保存。六 測(cè)試成果圖(1):圖(2):圖(3):圖(4):七 附錄(源程序清單) #include "stdio.h" #include "stdlib.h" #include "string.h" struct line char text81; int num; /*行號(hào)*/ struct line *next; /*指向下一個(gè)輸入項(xiàng)目的指針 */ struct line *prior; /*指向前一個(gè)項(xiàng)目的指針 */ ;

14、 struct line *start; /*指向表中第一個(gè)項(xiàng)目的指針 */ struct line *last; /*指向表中最后一個(gè)項(xiàng)目的指針 */ struct line *find(int),*dls_store(struct line *); void patchup(int,int),delete_text(),list(),save(char *),load(char *); menu_select(); enter(int linenum); void main(int argc,char *argv) char s80,choice,fname80; int linenum=

15、1; start=NULL; last=NULL; if(argc=2) load(argv1);/*讀取命令行上的文件 */ do choice=menu_select(); switch(choice) case 1:printf("tlinenum :"); gets(s); linenum=atoi(s); enter(linenum); break; case 2:delete_text(); break; case 3:list(); break; case 4:printf("tfilename :"); gets(fname); save

16、(fname); break; case 5:printf("tfilename :"); gets(fname); load(fname); break; case 6:exit(0); while(1); /* 顯示菜單,供用戶(hù)選擇 */ menu_select() char s80; int c; printf("tt1.Entern"); printf("tt2.Delete a linen"); printf("tt3.Display a linen"); printf("tt4.Save th

17、e filen"); printf("tt5.Read the filen"); printf("tt6.Quitn"); do printf("nntt Please choice a num :"); gets(s); c=atoi(s); while(c<0|c>6); return(c); /*將文本插在指定行端部*/ enter(int linenum) struct line *info; for(;) info=(struct line *)malloc(sizeof(struct line); i

18、f(!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); /*當(dāng)文本內(nèi)容插在文件中間時(shí)其下面的內(nèi)容的行號(hào)必須增加1,而 */

19、 /*刪除時(shí),被刪除的文本后面的行號(hào)必須減1 */ void patchup(int n,int incr) struct line *i; i=find(n); while(i) i->num=i->num+incr; i=i->next; /*按行號(hào)排序后插入 */ 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)

20、 if(p->num) old=p; p=p->next; else if(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

21、; char s80; int linenum; printf("tlinenum :"); gets(s); linenum=atoi(s); info=find(linenum); if(info) if(start=info) start=info->next; if(start) start->prior=NULL; else last=NULL; else info->prior->next=info->next; if(info!=last) info->next->prior=info->prior; else

22、last=info->prior; free(info); patchup(linenum+1,-1); /*查找一行文本 */ 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) printf("%d:%sn&

23、quot;,info->num,info->text); info=info->next; printf("nn"); /*存文件 */ void save(char *fname) struct line *info; char *p; FILE *fp; if(fp=fopen(fname,"w")=NULL) printf("t Can't open the file !n"); exit(0); printf("t Saving :n"); info=start; while(in

24、fo) p=info->text; while(*p) putc(*p+,fp); putc('n',fp); info=info->next; fclose(fp); /*讀取文件 */ void load(char *fname) struct line *info,*temp; char *p; FILE *fp; int size,inct; if(fp=fopen(fname,"r+")=NULL) printf("t Can't open the file !n"); exit(0); while(star

25、t) temp=start; start=start->next; free(temp); printf("nt Reading.n"); size=sizeof(struct line); start=(struct line*)malloc(size); if(!start) printf("nt內(nèi)存已經(jīng)用完 !"); return; info=start; p=info->text; inct=1; while(*p=getc(fp)!=EOF) p+; while(*p=getc(fp)!='n') p+; *p='0' info->num=inct+; info->next=(struct line*)malloc(size); if(!info->next) printf("nt內(nèi)存已經(jīng)用完 !"); return; info->prior=temp; temp=info;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論