簡(jiǎn)單行編輯程序?qū)嶒?yàn)報(bào)告_第1頁(yè)
簡(jiǎn)單行編輯程序?qū)嶒?yàn)報(bào)告_第2頁(yè)
簡(jiǎn)單行編輯程序?qū)嶒?yàn)報(bào)告_第3頁(yè)
簡(jiǎn)單行編輯程序?qū)嶒?yàn)報(bào)告_第4頁(yè)
簡(jiǎn)單行編輯程序?qū)嶒?yàn)報(bào)告_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余13頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、簡(jiǎn)單行編輯程序課程設(shè)計(jì)一設(shè)計(jì)要求1 .問(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è)字符。2 .需求分析該程序要實(shí)現(xiàn)以下4 條基本的編輯命令:行插入。格式:i行號(hào) 回車(chē)文本. 回車(chē)將文本插入活區(qū)中第行號(hào) 行之后。(2)行刪

2、除。格式:dwr號(hào)1空格行號(hào)2卜回車(chē) 例如刪除活區(qū)中第行號(hào)1行(到第行號(hào)2行) 。(3)活區(qū)切換。格式:n回車(chē),將活區(qū)寫(xiě)入輸出文件,并從輸入文件中讀入下一段,作為新的活區(qū)?;顓^(qū)顯示。格式:p回車(chē);逐頁(yè)地(每頁(yè)20行)顯示活區(qū)內(nèi)容,在每顯示的一頁(yè)之后請(qǐng)用戶決定是否繼續(xù)顯示以后各頁(yè)(如果存在) 。印出的每一行要前置行號(hào)和一個(gè)空格符,行號(hào)固定占 4 位,增量為 1 。各條命令中的行號(hào)均須在活區(qū)中各行號(hào)范圍之內(nèi), 只有插入命令的行號(hào)可以等于活區(qū)第一行行號(hào)減一, 表示插入當(dāng)前的屏幕中第一行之前, 否則命令參數(shù)非法。二概要設(shè)計(jì)1 .主界面設(shè)計(jì)為了實(shí)現(xiàn)簡(jiǎn)單行編輯程序, 設(shè)計(jì)一個(gè)含有多個(gè)菜單項(xiàng)的主控菜單子程序

3、以鏈接系統(tǒng)的各項(xiàng)子功能。主控菜單運(yùn)行如下:行 示若 入除要文存事用杏文-BJ .請(qǐng)選擇:.2 .存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)該系統(tǒng)采用用的順序存儲(chǔ)結(jié)構(gòu)3 .系統(tǒng)功能設(shè)計(jì)(1)行插入(2)行刪除(3)文本顯示(4)保存文件(5)讀取文件(6)退出系統(tǒng)三.模塊設(shè)計(jì)1 .模塊設(shè)計(jì)本程序包含主程序模塊、菜單選擇模塊和用操作模塊。調(diào)用關(guān)系如下主程序模塊菜單選擇模塊串操作模塊2 .系統(tǒng)子程序及雙希葉(1) enter(int linenum)據(jù)結(jié)構(gòu)設(shè)計(jì)ADT line基本操作:enter(linenum)初始條件:有內(nèi)存。操作結(jié)果:linenum +1.delete_text()初始條件:line存在。操作結(jié)果:若刪除的

4、最后一行,則直接刪除。若刪除中間一行,則后面的linenum -1。Load ()初始條件:存在文件file操作結(jié)果:打開(kāi)文件。 ADT line2.系統(tǒng)主要子程序詳細(xì)設(shè)計(jì)( 1)主程序模塊設(shè)計(jì)void main(int argc,char *argv) char s80,choice,fname80;int linenum=1;start=NULL;last=NULL;if(argc=2) load(argv1);dochoice=menu_select();switch(choice)case 1:printf(" 行號(hào) :");gets(s);linenum=atoi

5、(s);enter(linenum);break;case 2:delete_text();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("t* 歡迎使用簡(jiǎn)單行編輯程序 *n");printf(

6、"tttt1. 行插入n");printf("tttt2. 行刪除n");printf("tttt3.文本顯示n");printf("tttt4.保存文件n");printf("tttt5.讀取文件n");printf("tttt6.退出 n");printf("t*n");do printf("nntt 請(qǐng)選擇 :");gets(s); c=atoi(s);while(c<0|c>6); return(c);( 2)主要工

7、作函數(shù)/* 將文本插在指定行端部*/enter(int linenum)struct line *info;for(;) info=(struct line *)malloc(sizeof(struct 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-&

8、gt;text) start=dls_store(info);else break;linenum+; return(linenum);/* 當(dāng)文本內(nèi)容插在文件中間時(shí)其下面的內(nèi)容的行號(hào)必須增加1,而刪除時(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)排序后插入*/*i)struct line *dls_store(struct linestruct line *old,*p;if(last=NUL

9、L)i->next=NULL;i->prior=NULL;last=i;return(i);p=start;old=NULL;while(p)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;

10、return start;/* 刪除一行*/void delete_text()struct line *info;char s80;int linenum;printf(" 行號(hào) :");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->

11、;next->prior=info->prior;else 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

12、)printf("%d:%sn",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 Saved :n");info=start

13、;while(info)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(start)tem

14、p=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->

15、;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);四.測(cè)試分析1.主菜單12 3 4 5 6行 示& 人除fl文文存事用-B 請(qǐng)選擇:2.行插入行

16、一入除顯存封 用蔣文蕾 使 L2.2.4.E.行號(hào):1 l:hello 2 worldworld請(qǐng)選擇;工3.行刪除及文本顯示請(qǐng)選擇:2aK除顯文文存事 用LU仃文-ft/ 1.12 3 4 5 6請(qǐng)選擇:3L - helloQ:hello world4.保存及讀取文件二 4 -txt請(qǐng)選擇 文件名:D:xhello SavedBKMXMJCJOCNJitiMXJCJtJCJHM12 3 4 5 6行 示若單人萱文文存西用L1I仃文M MJCM; M.NMrM-4 請(qǐng)選擇;5I: 1 牛名:D : he Ila . txtReading-«5退出主菜單下輸入5并回車(chē)即退出“簡(jiǎn)單行編輯

17、程序”五.源程序清單#include <>#include <>#include <>struct linechar text81;int num;/* 行號(hào)*/struct line *next;/*指向下一個(gè)輸入項(xiàng)目的指針*/struct line *prior; /*指向前一個(gè)項(xiàng)目的指針*/;struct line *start;/*指向表中第一個(gè)項(xiàng)目的指針*/struct line *last; /* 指向表中最后一個(gè)項(xiàng)目的指針 */struct line *find(int),*dls_store(struct line *);void patch

18、up(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=1;start=NULL;last=NULL;if(argc=2) load(argv1);/* 讀取命令行上的文件*/dochoice=menu_select();switch(choice)case 1:printf(" 行號(hào) :");gets(s);line

19、num=atoi(s);enter(linenum);break;case 2:delete_text();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("t* 歡迎使用簡(jiǎn)單行

20、編輯程序 *n");printf("tttt1.行插入n");printf("tttt2.行刪除n");printf("tttt3.文本顯示n");printf("tttt4.保存文件n");printf("tttt5.讀取文件n");printf("tttt6.退出 n");printf("t*n");doprintf("nntt 請(qǐng)選擇 :");gets(s);c=atoi(s);while(c<0|c>6);

21、return(c);/* 將文本插在指定行端部*/enter(int linenum)struct line *info;for(;)line);info=(struct line *)malloc(sizeof(struct 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(*in

22、fo->text) start=dls_store(info);else break;linenum+;return(linenum);/* 當(dāng)文本內(nèi)容插在文件中間時(shí)其下面的內(nèi)容的行號(hào)必須增加1,而刪除時(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(la

23、st=NULL)i->next=NULL;i->prior=NULL;last=i;return(i);p=start;old=NULL;while(p)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;

24、last=i;return start;/* 刪除一行*/void delete_text()struct line *info;char s80;int linenum;printf(" 行號(hào) :");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)i

25、nfo->next->prior=info->prior;else last=info->prior;free(info);patchup(linenum+1,-1);/* 查找一行文本*/struct line *find(int linenum)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",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 Saved

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論