數(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頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

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

5、需求實行相應(yīng)的操作。對命令格式不正確的進行處理。二 概要設(shè)計ADT line基本操作:enter(linenum) 初始條件:有內(nèi)存。 操作結(jié)果:linenum +1. delete_text( ) 初始條件:line存在。操作結(jié)果:若刪除的最后一行,則直接刪除。 若刪除中間一行,則后面的linenum -1。 Load( )初始條件:存在文件file 操作結(jié)果:打開文件。 ADT line三 詳細設(shè)計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è)計與調(diào)試分析這個程序的源程序是我在圖書館資料上找的,當(dāng)時不能

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

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

14、 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(); 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); /* 顯示菜單,供用戶選擇 */ 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)容插在文件中間時其下面的內(nèi)容的行號必須增加1,而 */

19、 /*刪除時,被刪除的文本后面的行號必須減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)

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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論