




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、-作者xxxx-日期xxxx簡(jiǎn)單行編輯程序【精品文檔】數(shù)據(jù)結(jié)構(gòu)程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告簡(jiǎn)單行編輯程序院系:計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院專(zhuān)業(yè):軟件工程1班姓名:丁珊珊學(xué)號(hào):E01214269日期:2014/9/19一、需求分析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è)字符,很少
2、超過(guò)80個(gè)字符。2、此程序具備以下功能:(1)行插入。格式:i<行號(hào)><回車(chē)><文本>. <回車(chē)>將<文本>插入活區(qū)中第<行號(hào)>行之后。(2)行刪除。格式:d<行號(hào)1><空格><行號(hào)2><回車(chē)>; 刪除活區(qū)中第<行號(hào)1>行(到第<行號(hào)2>行)。(3)活區(qū)切換。格式:n<回車(chē)>將活區(qū)寫(xiě)入輸出文件,并從輸入文件中讀入下一段,作為新的活區(qū)。(4)活區(qū)顯示。格式:p<回車(chē)> 逐頁(yè)地(每頁(yè)20行)顯示活區(qū)內(nèi)容,在每顯示的一頁(yè)之后請(qǐng)用戶(hù)決定
3、是否繼續(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、 主頁(yè)面設(shè)計(jì) 2、 存儲(chǔ)結(jié)構(gòu)設(shè)計(jì) typedef struct text char stringSIZE;/存儲(chǔ)每一行的元素 struct text *next;/指向后一個(gè)節(jié)點(diǎn)的指針 int length;text,*textp;3、 系統(tǒng)功能設(shè)計(jì)1)行插入2)行刪除3)活區(qū)切換4)活區(qū)顯示5)結(jié)束4、 程序調(diào)用關(guān)系程序結(jié)構(gòu)流程圖:開(kāi)始輸入
4、命令e輸入命令p輸入命令n輸入命令d輸入命令i結(jié)束程序顯示活區(qū)切換活區(qū)刪除一行內(nèi)容插入一行文字三、 詳細(xì)設(shè)計(jì) 1 、 數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)定義typedef struct text char stringSIZE;/存儲(chǔ)每一行的元素 struct text *next;/指向后一個(gè)節(jié)點(diǎn)的指針 int length;text,*textp;2、 行插入int insert(textp &head,FILE *out)int hang,i;textp p,p1;scanf("%d",&hang);p=(textp)malloc(sizeof(text);/為插入行分配空
5、間fflush(stdin);fgets(p->string,80,stdin); /*輸入插入行的內(nèi)容*/p1=head->next;if(head->length=ActiveMaxLen)fputs(p1->string,out);elseif(hang=1) p->next=head->next;head->next=p;head->length+; elsefor(i=2;i<hang;i+) p1=p1->next;p->next=p1->next;p1->next=p;head->length+;
6、printf("在第%d行前插入完成n",hang); return OK;3、 行刪除int del(textp &head) /刪除d命令對(duì)應(yīng)的函數(shù),用來(lái)刪maxmin中的行,用結(jié)構(gòu)體中的flat表示是否被刪除text *p,*q; int min,max,i; scanf("%d %d",&min,&max); if(head=NULL)printf("nlist null!n"); return OK; p=head; for(i=1;i<min;i+)/*找到要?jiǎng)h除的第一行的前一行*/p=p-&
7、gt;next; for(i=i-1,q=p->next;i<max;i+)/*刪除到最后一行*/p->next=q->next;free(q);q=p->next;head->length-;printf("第%d行到第%d行刪除完成!n",min,max); return OK;4、 活區(qū)切換Status LoadFile(textp head,FILE *fp) /*從文件讀內(nèi)容到活區(qū)*/ textp p; for(p=head;p&&(!feof(fp);p=p->next) if(!fgets(p->
8、string,80,fp) break; p->flat=1; return 0;Status SaveFile(textp head,FILE *out) /*存儲(chǔ)活區(qū)的函數(shù)*/ textp p; for(p=head;p;p=p->next)if(p->flat=1)fputs(p->string,out); /*輸出活區(qū)的內(nèi)容到指定的文件*/ p->flat=0; return OK; 5、 活區(qū)顯示void display(textp head)/顯示P命令對(duì)應(yīng)的函數(shù),用來(lái)顯示活區(qū)的內(nèi)容 int i;int j=head->length/20;int
9、 k=0; textp p=head->next;for(j=0;j<=head->length/20;j+)printf("*page%d*n",j+1); for(i=20*j+1;i<=head->length;p=p->next,i+)printf("%2d",i); printf(" %s",p->string);if(i%20=0)break;printf("是否繼續(xù)顯示下一頁(yè),是輸入1,否輸入0.n");scanf("%d",&k)
10、;if(k=0)break;if(j=head->length/20-1)printf("沒(méi)有后續(xù)頁(yè)面了n");break; 四、 測(cè)試分析 1.開(kāi)始界面 2.用戶(hù)輸入一個(gè)已經(jīng)存在的文本文件名稱(chēng)并回車(chē),程序?qū)⒆x出內(nèi)容并存入一個(gè)新的文本文件out中。并輸入命令p,顯示。3.輸入命令i,在文本文件中插入文本。4.輸入命令d,刪除選中文本。并輸入命令p,顯示當(dāng)前活區(qū)。5.輸入命令n,切換活區(qū)。并輸入命令平,顯示。6.輸入命令e,結(jié)束程序并清除活區(qū)。五、 源程序設(shè)計(jì)#include<>#include<>#include<>#include
11、<>#include<>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define ActiveMaxLen 100#define SIZE 80#define x 20typedef struct text char stringSIZE;/存儲(chǔ)每一行的元素 struct text *next;/指向后一個(gè)節(jié)點(diǎn)的指針 int length;text,*textp;void Createlist(textp &hea
12、d)/建立一個(gè)80個(gè)節(jié)點(diǎn)的鏈表,是整個(gè)活區(qū)的大小head=(text *)malloc(sizeof(text); int n=0;head->length=0; textp p,q; while(n<80)p=(text *)malloc(sizeof(text); n+; if(n=1) head->next=p;p->next=NULL;q=p;head->length+; else p->next=q->next;q->next=p;q=p;head->length+; printf("活區(qū)創(chuàng)建完成n");int
13、 del(textp &head)/刪除d命令對(duì)應(yīng)的函數(shù),用來(lái)刪maxmin中的行,用結(jié)構(gòu)體中的flat表示是否被刪除text *p,*q; int min,max,i; scanf("%d %d",&min,&max); if(head=NULL)printf("nlist null!n"); return OK; p=head; for(i=1;i<min;i+)/*找到要?jiǎng)h除的第一行的前一行*/p=p->next; for(i=i-1,q=p->next;i<max;i+)/*刪除到最后一行*/p-&
14、gt;next=q->next;free(q);q=p->next;head->length-;printf("第%d行到第%d行刪除完成!n",min,max); return OK;void display(textp head)/顯示P命令對(duì)應(yīng)的函數(shù),用來(lái)顯示活區(qū)的內(nèi)容 int i;int j=head->length/20;int k=0; textp p=head->next;for(j=0;j<=head->length/20;j+)printf("*page%d*n",j+1); for(i=20*
15、j+1;i<=head->length;p=p->next,i+)printf("%2d",i); printf(" %s",p->string);if(i%20=0)break;printf("是否繼續(xù)顯示下一頁(yè),是輸入1,否輸入0.n");scanf("%d",&k);if(k=0)break;if(j=head->length/20-1)printf("沒(méi)有后續(xù)頁(yè)面了n");break;void freemem(textp &head)/釋放鏈
16、表所占的內(nèi)存text *p=head->next; while(p)head->next=p->next; free(p); p=head->next;head->length-;printf("活區(qū)清除n");int insert(textp &head,FILE *out)int hang,i;textp p,p1;scanf("%d",&hang);p=(textp)malloc(sizeof(text);/為插入行分配空間fflush(stdin);fgets(p->string,80,stdi
17、n); /*輸入插入行的內(nèi)容*/p1=head->next;if(head->length=ActiveMaxLen)fputs(p1->string,out);elseif(hang=1) p->next=head->next;head->next=p;head->length+; elsefor(i=2;i<hang;i+) p1=p1->next;p->next=p1->next;p1->next=p;head->length+;printf("在第%d行前插入完成n",hang); ret
18、urn OK;void LoadFile(textp &head,FILE *fp,int e) /*從文件讀內(nèi)容到活區(qū)*/ textp p=head->next;for(int j=0;j<e;j+) fgets(head->string,81,fp);for(int i=0;i<head->length&&(!feof(fp);i+) fgets(p->string,81,fp); p=p->next;void SaveFile(textp head,FILE *out,FILE *in,int &e) /*存儲(chǔ)活區(qū)
19、的函數(shù)*/ textp p=head->next;e=e+80; for(int i=0;i<head->length;p=p->next,i+)fputs(p->string,out); void HELP()/幫助函數(shù),顯示一些命令的格式 printf("nt *n"); printf("t * 行插入格式: i<行號(hào)><回車(chē)><文本><回車(chē)> *n"); printf("t * 行刪除格式: d<回車(chē)><行號(hào)1><空格><
20、;行號(hào)2><回車(chē)> *n"); printf("t * 活區(qū)切換格式: n<回車(chē)> *n"); printf("t * 活區(qū)顯示格式: p<回車(chē)> *n"); printf("t * 退出格式: e<回車(chē)> *n"); printf("t *n");void main()/主函數(shù),用來(lái)接受命令/編輯函數(shù),用來(lái)接受處理編輯命令int e=0;textp head; FILE *in,*out; char c,inname30,outname30; pri
21、ntf("#歡迎使用行編輯程序#n"); HELP();/*打開(kāi)輸入、輸出文件*/ printf("Enter the infile name:"); scanf("%s",inname); printf("Enter the outfile name:"); scanf("%s",outname); if(in=fopen("in.txt","r")=NULL)printf("can't open the file! n"); if(out=fopen(outname,"w")=NULL) printf("can't iiopen the file!n"); exit(0); Createlist(head); LoadFile(head,
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 三農(nóng)村現(xiàn)代化建設(shè)路徑研究
- 項(xiàng)目延期的情況說(shuō)明報(bào)告
- 項(xiàng)目啟動(dòng)與實(shí)施方案詳解
- 高級(jí)營(yíng)養(yǎng)師練習(xí)卷附答案
- 市場(chǎng)調(diào)研報(bào)告總結(jié)表格-市場(chǎng)趨勢(shì)總結(jié)分析
- 電梯125%額定載荷制動(dòng)試驗(yàn)專(zhuān)項(xiàng)自檢記錄
- 三農(nóng)產(chǎn)品電商物流運(yùn)營(yíng)實(shí)戰(zhàn)指南
- 醫(yī)院醫(yī)療服務(wù)價(jià)格手冊(cè)
- 教育行業(yè)產(chǎn)品策劃指南
- 家庭理財(cái)規(guī)劃建議表
- 《騎鵝旅行記》名著閱讀讀課件
- 2025年工程策劃勘察設(shè)計(jì)合作框架協(xié)議書(shū)
- 國(guó)外銀發(fā)經(jīng)濟(jì)發(fā)展
- 2025年高考作文素材積累之《人民日?qǐng)?bào)》時(shí)評(píng)觀點(diǎn)摘抄(標(biāo)題、開(kāi)頭、分論點(diǎn)、結(jié)尾)
- 2024年07月上海興業(yè)銀行上海分行招考筆試歷年參考題庫(kù)附帶答案詳解
- 湖北日?qǐng)?bào)傳媒集團(tuán)(湖北日?qǐng)?bào)社)招聘筆試沖刺題2025
- GB/T 31771-2024家政服務(wù)母嬰護(hù)理服務(wù)質(zhì)量規(guī)范
- 廣東省茂名市2025屆高三第二次調(diào)研數(shù)學(xué)試卷含解析
- 公司安全生產(chǎn)事故隱患內(nèi)部報(bào)告獎(jiǎng)勵(lì)工作制度
- 開(kāi)封市第二屆職業(yè)技能大賽無(wú)人機(jī)裝調(diào)檢修項(xiàng)目技術(shù)文件(國(guó)賽項(xiàng)目)
- 【MOOC】人工智能與信息社會(huì)-北京大學(xué) 中國(guó)大學(xué)慕課MOOC答案
評(píng)論
0/150
提交評(píng)論