




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、簡單行編輯程序課程設(shè)計一設(shè)計要求1 .問題描述文本編輯程序是利用計算機(jī)進(jìn)行文字加工的基本軟件工具, 實現(xiàn)對文本文件的插入、 刪除等修改操作。 限制這些操作以行為單位進(jìn)行的編輯程序稱為行編輯程序。被編輯的文本文件可能很大, 全部讀入編輯程序的數(shù)據(jù)空間 (內(nèi)存) 的做法即不經(jīng)濟(jì), 又不總能實現(xiàn)。 一種解決方法是逐段的編輯。 任何時刻只把待編輯文件的一段放在內(nèi)存, 稱為活區(qū)。 試按這種方法實現(xiàn)一個簡單的行編輯程序, 設(shè)文件每行不超過320 個字符,很少超過80 個字符。2 .需求分析該程序要實現(xiàn)以下4 條基本的編輯命令:行插入。格式:i行號 回車文本. 回車將文本插入活區(qū)中第行號 行之后。(2)行刪
2、除。格式:dwr號1空格行號2卜回車 例如刪除活區(qū)中第行號1行(到第行號2行) 。(3)活區(qū)切換。格式:n回車,將活區(qū)寫入輸出文件,并從輸入文件中讀入下一段,作為新的活區(qū)?;顓^(qū)顯示。格式:p回車;逐頁地(每頁20行)顯示活區(qū)內(nèi)容,在每顯示的一頁之后請用戶決定是否繼續(xù)顯示以后各頁(如果存在) 。印出的每一行要前置行號和一個空格符,行號固定占 4 位,增量為 1 。各條命令中的行號均須在活區(qū)中各行號范圍之內(nèi), 只有插入命令的行號可以等于活區(qū)第一行行號減一, 表示插入當(dāng)前的屏幕中第一行之前, 否則命令參數(shù)非法。二概要設(shè)計1 .主界面設(shè)計為了實現(xiàn)簡單行編輯程序, 設(shè)計一個含有多個菜單項的主控菜單子程序
3、以鏈接系統(tǒng)的各項子功能。主控菜單運行如下:行 示若 入除要文存事用杏文-BJ .請選擇:.2 .存儲結(jié)構(gòu)設(shè)計該系統(tǒng)采用用的順序存儲結(jié)構(gòu)3 .系統(tǒng)功能設(shè)計(1)行插入(2)行刪除(3)文本顯示(4)保存文件(5)讀取文件(6)退出系統(tǒng)三.模塊設(shè)計1 .模塊設(shè)計本程序包含主程序模塊、菜單選擇模塊和用操作模塊。調(diào)用關(guān)系如下主程序模塊菜單選擇模塊串操作模塊2 .系統(tǒng)子程序及雙希葉(1) enter(int linenum)據(jù)結(jié)構(gòu)設(shè)計ADT line基本操作:enter(linenum)初始條件:有內(nèi)存。操作結(jié)果:linenum +1.delete_text()初始條件:line存在。操作結(jié)果:若刪除的
4、最后一行,則直接刪除。若刪除中間一行,則后面的linenum -1。Load ()初始條件:存在文件file操作結(jié)果:打開文件。 ADT line2.系統(tǒng)主要子程序詳細(xì)設(shè)計( 1)主程序模塊設(shè)計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、作函數(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)容插在文件中間時其下面的內(nèi)容的行號必須增加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 內(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);四.測試分析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è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)容插在文件中間時其下面的內(nèi)容的行號必須增加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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)境修復(fù)過程中企業(yè)創(chuàng)新與產(chǎn)業(yè)升級的協(xié)同
- 高技能人才培養(yǎng)的內(nèi)涵與實施路徑探索
- 甘肅省白銀市育才中學(xué)2025屆數(shù)學(xué)八上期末質(zhì)量檢測模擬試題含解析
- 遼寧理工職業(yè)大學(xué)《比較政治制度》2023-2024學(xué)年第一學(xué)期期末試卷
- 城市綠化槽棎種植與養(yǎng)護(hù)合同
- 電視臺節(jié)目制作人述職報告
- 如何應(yīng)用基因編輯技術(shù)治療遺傳性疾病
- 企業(yè)培訓(xùn)項目的設(shè)計與實施管理報告
- 公共營養(yǎng)師技能考核教學(xué)計劃
- 游戲策劃與關(guān)卡設(shè)計教程
- 2025年第九屆“學(xué)憲法、講憲法”活動知識競賽測試題庫及答案
- 采棉機(jī)操作手冊和維護(hù)指南
- 2025年山西省華遠(yuǎn)國際陸港集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 塞爾維亞語教學(xué)與學(xué)習(xí)作業(yè)指導(dǎo)書
- 農(nóng)商銀行貸款合同電子版
- 翼狀胬肉術(shù)后護(hù)理
- 《目視化管理》課件
- ERP車間管理模塊操作培訓(xùn)手冊
- 機(jī)械制造項目檢測試驗計劃
- 2025-2030年中國產(chǎn)業(yè)園區(qū)物業(yè)管理行業(yè)開拓第二增長曲線戰(zhàn)略制定與實施研究報告
- 2025神華新街能源限責(zé)任公司系統(tǒng)內(nèi)招聘23人(第二批)高頻重點提升(共500題)附帶答案詳解
評論
0/150
提交評論