




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、簡單行編輯程序課程設計一設計要求1 .問題描述文本編輯程序是利用計算機進行文字加工的基本軟件工具, 實現對文本文件的插入、 刪除等修改操作。 限制這些操作以行為單位進行的編輯程序稱為行編輯程序。被編輯的文本文件可能很大, 全部讀入編輯程序的數據空間 (內存) 的做法即不經濟, 又不總能實現。 一種解決方法是逐段的編輯。 任何時刻只把待編輯文件的一段放在內存, 稱為活區。 試按這種方法實現一個簡單的行編輯程序, 設文件每行不超過320 個字符,很少超過80 個字符。2 .需求分析該程序要實現以下4 條基本的編輯命令:行插入。格式:i行號 回車文本. 回車將文本插入活區中第行號 行之后。(2)行刪
2、除。格式:dwr號1空格行號2卜回車 例如刪除活區中第行號1行(到第行號2行) 。(3)活區切換。格式:n回車,將活區寫入輸出文件,并從輸入文件中讀入下一段,作為新的活區。活區顯示。格式:p回車;逐頁地(每頁20行)顯示活區內容,在每顯示的一頁之后請用戶決定是否繼續顯示以后各頁(如果存在) 。印出的每一行要前置行號和一個空格符,行號固定占 4 位,增量為 1 。各條命令中的行號均須在活區中各行號范圍之內, 只有插入命令的行號可以等于活區第一行行號減一, 表示插入當前的屏幕中第一行之前, 否則命令參數非法。二概要設計1 .主界面設計為了實現簡單行編輯程序, 設計一個含有多個菜單項的主控菜單子程序
3、以鏈接系統的各項子功能。主控菜單運行如下:行 示若 入除要文存事用杏文-BJ .請選擇:.2 .存儲結構設計該系統采用用的順序存儲結構3 .系統功能設計(1)行插入(2)行刪除(3)文本顯示(4)保存文件(5)讀取文件(6)退出系統三.模塊設計1 .模塊設計本程序包含主程序模塊、菜單選擇模塊和用操作模塊。調用關系如下主程序模塊菜單選擇模塊串操作模塊2 .系統子程序及雙希葉(1) enter(int linenum)據結構設計ADT line基本操作:enter(linenum)初始條件:有內存。操作結果:linenum +1.delete_text()初始條件:line存在。操作結果:若刪除的
4、最后一行,則直接刪除。若刪除中間一行,則后面的linenum -1。Load ()初始條件:存在文件file操作結果:打開文件。 ADT line2.系統主要子程序詳細設計( 1)主程序模塊設計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(" 行號 :");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* 歡迎使用簡單行編輯程序 *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 請選擇 :");gets(s); c=atoi(s);while(c<0|c>6); return(c);( 2)主要工
7、作函數/* 將文本插在指定行端部*/enter(int linenum)struct line *info;for(;) info=(struct line *)malloc(sizeof(struct line);if(!info)printf("t! 內存不夠! 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);/* 當文本內容插在文件中間時其下面的內容的行號必須增加1,而刪除時,被刪除的文本后面的行號必須減1*/void patchup(int n,int incr)struct line *i;i=find(n);while(i)i->num=i->num+incr;i=i->next;/* 按行號排序后插入*/*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(" 行號 :");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 內存已經用完!");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 內存已經用完!");return;info->prior=temp;temp=info;info=info->next;p=info->text;temp->next=NULL; last=temp;free(info);start->prior=NULL; fclose(fp);四.測試分析1.主菜單12 3 4 5 6行 示& 人除fl文文存事用-B 請選擇:2.行插入行
16、一入除顯存封 用蔣文蕾 使 L2.2.4.E.行號:1 l:hello 2 worldworld請選擇;工3.行刪除及文本顯示請選擇:2aK除顯文文存事 用LU仃文-ft/ 1.12 3 4 5 6請選擇:3L - helloQ:hello world4.保存及讀取文件二 4 -txt請選擇 文件名:D:xhello SavedBKMXMJCJOCNJitiMXJCJtJCJHM12 3 4 5 6行 示若單人萱文文存西用L1I仃文M MJCM; M.NMrM-4 請選擇;5I: 1 牛名:D : he Ila . txtReading-«5退出主菜單下輸入5并回車即退出“簡單行編輯
17、程序”五.源程序清單#include <>#include <>#include <>struct linechar text81;int num;/* 行號*/struct line *next;/*指向下一個輸入項目的指針*/struct line *prior; /*指向前一個項目的指針*/;struct line *start;/*指向表中第一個項目的指針*/struct line *last; /* 指向表中最后一個項目的指針 */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(" 行號 :");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* 歡迎使用簡單行
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 請選擇 :");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");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);/* 當文本內容插在文件中間時其下面的內容的行號必須增加1,而刪除時,被刪除的文本后面的行號必須減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(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(" 行號 :");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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學校派遣工管理制度
- 學校綠化員管理制度
- 學生星級化管理制度
- 學齡前培訓管理制度
- 安全注射室管理制度
- 安徽生育證管理制度
- 宏寶萊公司管理制度
- 實行項目庫管理制度
- 實驗室試樣管理制度
- 室內籃球場管理制度
- 融媒體保密管理制度
- 2025江蘇揚州寶應縣“鄉村振興青年人才”招聘67人筆試參考題庫附答案詳解
- 2025年河南高考真題化學試題含答案
- 陜西省榆林市2023-2024學年高二下學期期末質量檢測政治試卷(含答案)
- 2025年高考全國二卷數學高考真題解析 含參考答案
- 2025年普通高等學校招生全國統一考試數學試題(全國一卷)(有解析)
- 護士文職面試題及答案
- 解剖期末試題題庫及答案
- 2025年山西焦煤集團公司招聘筆試參考題庫含答案解析
- 【MOOC】生理學-中南大學 中國大學慕課MOOC答案
- 2024年浙江省中考數學試題及答案
評論
0/150
提交評論