簡單行編輯程序——課程設(shè)計_第1頁
簡單行編輯程序——課程設(shè)計_第2頁
簡單行編輯程序——課程設(shè)計_第3頁
簡單行編輯程序——課程設(shè)計_第4頁
簡單行編輯程序——課程設(shè)計_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上簡單行編輯程序題目:簡單行編輯程序班級:計算機(jī)科學(xué)與技術(shù)(非師范)姓名:學(xué)號:完成日期:2010-6-251需求分析以無歧義的陳述說明程序設(shè)計的任務(wù),強(qiáng)調(diào)的是程序要做什么?并明確規(guī)定:文本編輯程序是利用計算機(jī)進(jìn)行文字加工的基本軟件工具,實現(xiàn)對文本文件的插入、刪除等修改操作。限制這些操作以行為單位進(jìn)行的編輯程序稱為行編輯程序。(1) 輸入的形式和輸入值的范圍;無范圍(2) 輸出的形式;字符串(3) 程序所能達(dá)到的功能;實現(xiàn)以下4條基本編輯命令:(1) 行插入。格式:i<行號><回車><文本><回車>將<文本>插

2、入活區(qū)中第<行號>行之后(2)行刪除。格式:d<行號1><行號2><回車>刪除活區(qū)中第<行號1>行(到第<行號2>行)。兩種格式的例子是:“d10”和“d1014”(3)活區(qū)切換。格式:n<回車>將活區(qū)寫入輸出文件,并從輸入文件中讀入下一段,作為新的活區(qū)。(4)活區(qū)顯示。格式:p<回車>(4) 測試數(shù)據(jù):包括正確的輸入及其輸出結(jié)果和含有錯誤的輸入及其輸出結(jié)果。2概要設(shè)計說明本程序中用到的所有抽象數(shù)據(jù)類型的定義、主程序的流程以及各程序模塊之間的層次(調(diào)用)關(guān)系。typedef struct text

3、char string80;/存儲每一行的元素 struct text *next;/指向后一個節(jié)點的指針 struct text *pre;/指向前一個節(jié)點的指針 int num;/每一行元素的長度 int flat;/確定此行是否被刪除的標(biāo)志text;FILE *fp,*out;/fp是執(zhí)行被打開的文件,out指向被寫入的文件text *head;/鏈表的頭指針int n=0,sum,delnum,xiugai=0,page=0;/file:/修改用來指示文件是否被修改過,如果修改過才回存盤。page用來計算顯示的/file:/頁數(shù).delnum用來存儲被刪除的字節(jié)數(shù),sum存儲一頁的總字

4、節(jié)數(shù)3詳細(xì)設(shè)計實現(xiàn)概要設(shè)計中定義的所有數(shù)據(jù)類型,對每個操作只需要寫出偽碼算法;對主程序和其他模塊也都需要寫出偽碼算法(偽碼算法達(dá)到的詳細(xì)程度建議為:按照偽碼算法可以在計算機(jī)鍵盤直接輸入高級程序設(shè)計語言程序);畫出函數(shù)和過程的調(diào)用關(guān)系圖。cmd=getchar(); printf("n請輸入命令(按E鍵退出):"); cmd=getchar(); switch(cmd) case 'e': case 'E': if(xiugai=1) saveall(); freemem(); if(fp) fclose(fp); if(out) fclose

5、(out); system("cls"); return 0; case 'o': case 'O': Openfiles(); break; case 'p': case 'P': Createlist(); display(); break; case 'n': case 'N': saveanddisplay(10); break; case 'd': case 'D': del(); break; case 'i': cas

6、e 'I': insert(); break; default:printf("nnn!輸入錯誤!");4調(diào)試分析當(dāng)我調(diào)試程序時發(fā)現(xiàn)前面的子程序調(diào)用后面的子程序竟然是錯誤的,明明已經(jīng)定義了的子程序竟然沒有定義這令我大為不解不過后來當(dāng)我把被調(diào)用的程序放到前面,程序就順利運行了。5用戶使用說明說明如何使用你編寫的程序,詳細(xì)列出每一步的操作步驟。當(dāng)你使用這個程序時,會出現(xiàn)一個簡單的提示界面,你可以選擇相應(yīng)的help選項,來看操作說明。6測試結(jié)果列出你的測試結(jié)果,包括輸入和輸出。這里的測試數(shù)據(jù)應(yīng)該完整和嚴(yán)格,最好多于需求分析中所列。7附錄帶注釋的源程序。如果提交源程

7、序軟盤,可以只列出程序文件名的清單。#define NULL 0#define OK 0#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <conio.h>typedef struct text char string80;/存儲每一行的元素 struct text *next;/指向后一個節(jié)點的指針 struct text *pre;/指向前一個節(jié)點的指針 int nu

8、m;/每一行元素的長度 int flat;/確定此行是否被刪除的標(biāo)志text;FILE *fp,*out;/fp是執(zhí)行被打開的文件,out指向被寫入的文件text *head;/鏈表的頭指針int n=0,sum,delnum,xiugai=0,page=0;/file:/修改用來指示文件是否被修改過,如果修改過才回存盤。page用來計算顯示的/file:/頁數(shù).delnum用來存儲被刪除的字節(jié)數(shù),sum存儲一頁的總字節(jié)數(shù)void byebye()/沒有具體用處,只是寫著玩的,在屏幕上顯示一個bye puts("ttt* * * *"); puts("ttt* *

9、 * * * "); puts("ttt* * * * * "); puts("ttt* * * * * "); puts("ttt* * *"); puts("ttt* * * * "); puts("ttt* * * * "); puts("ttt* * * * "); puts("ttt* * *");void HELP()/幫助函數(shù),顯示一些命令的格式 printf("nt*n"); printf("t* 打

10、開文件: o<行號><文件名><回車> *n"); printf("t* 行插入格式: i<行號><回車><文本><回車> *n"); printf("t* 行刪除格式: d<行號1><空格><行號2><回車> *n"); printf("t* 活區(qū)切換格式: n<回車> *n"); printf("t* 活區(qū)顯示格式: p<回車> *n"); pri

11、ntf("t* 注意:在執(zhí)行所有命令前必須先用o命令打開文件,并 *n"); printf("t* 用p命令顯示出來! *n"); printf("t*n"); system("pause"); printf("nnn"); void ABOUT()/也是寫著玩的 printf("ntt*n"); printf("tt* welcome to the program *n"); printf("tt* all work and no play m

12、ake jack adull boy *n"); printf("tt* enjoy your work *n"); printf("tt*n"); system("pause"); system("cls"); printf("nnn");void Createlist()/建立一個十個節(jié)點的鏈表,是文本中的一頁 text *p1,*p2; p1=p2=(text *)malloc(sizeof(text); head=NULL; while(n<10) n=n+1; if(n

13、=1) head=p1; else p2->next=p1; p1->pre=p2; p1->flat=0; p2=p1; p1=(text *)malloc(sizeof(text); p2->next=NULL;void freemem()/釋放鏈表所占的內(nèi)存 text *p; for(p=head;head!=NULL;) head=p->next; free(p); p=head; int Openfiles()/打開文件的函數(shù) char name30,outname30; puts("請輸入要打開的文件名:"); scanf(&quo

14、t;%s",name); if(fp=fopen(name,"r+")=NULL) printf("打不開原文件! n"); exit(0); puts("請輸入要寫入的文件名:"); scanf("%s",outname); if(out=fopen(outname,"w+")=NULL) printf("打不開目標(biāo)文件!n"); exit(0); return 0;int display()/從文件中讀入到鏈表中,并顯示出來 int i; char conti=

15、'y' text *p; while(!feof(fp)&&(conti='y'|conti='Y') page+; printf("tt第%d頁n",page); for(i=0,p=head,sum=0;(i<10)&&(!feof(fp);i+,p=p->next) fgets(p->string,sizeof(p->string),fp); puts(p->string); p->flat=1; p->num=strlen(p->strin

16、g); sum=sum+p->num; puts("Continue?(Y/N):"); conti=getche(); if(feof(fp) puts("n文件已經(jīng)結(jié)束!"); return 0; return 0;int saveanddisplay(int hang)/命令n執(zhí)行的函數(shù),用來將活區(qū)的內(nèi)容顯示并讀入下一頁內(nèi)容 int i,endflat=0; char conti='y' text *p=NULL; page+; for(i=0,p=head;i<hang;i+,p=p->next) /file:/

17、將活區(qū)寫入文件 if(p->flat=1) fputs(p->string,out); p->flat=0; if(!feof(fp) printf("tt第%d頁n",page); for(i=0,p=head,sum=0;(i<10)&&(!feof(fp);i+,p=p->next)/從文件讀入活區(qū) if(fgets(p->string,sizeof(p->string),fp) puts(p->string); p->flat=1; p->num=strlen(p->string);

18、sum=sum+p->num; if(feof(fp) printf("文件已經(jīng)結(jié)束!"); return 0;int saveall()/退出編輯函數(shù)后執(zhí)行的函數(shù),將所有的內(nèi)容存盤 int i,endflat=0; char conti='y' text *p; for(i=0,p=head;i<10;i+,p=p->next) /file:/將活區(qū)寫入文件 if(p->flat=1) fputs(p->string,out); p->flat=0; while(!feof(fp)/將其余的內(nèi)容寫入文件 fputc(fg

19、etc(fp),out); return 0;int del()/刪除d命令對應(yīng)的函數(shù),用來刪minmax中的行,用結(jié)構(gòu)體中的flat表示是否被刪除 text *p1,*p2,*p3; int min,max,i; xiugai=1; scanf("%d %d",&min,&max); if(head=NULL) printf("nlist null!n"); return 0; p1=p2=head; for(i=0;i<min-1;i+)/*找到要刪除的第一行*/ p1=p1->next; for(i=0;i<max

20、;i+)/*找到要刪除的最后一行*/ p2=p2->next; for(delnum=0;p1!=p2;p1=p1->next)/*刪除中間的節(jié)點,將flat賦值0*/ p1->flat=0; delnum=delnum+p1->num; for(i=0,p3=head;i<10;i+,p3=p3->next)/顯示刪除后的結(jié)果 if(p3->flat=1) puts(p3->string); saveanddisplay(10);/將刪除后的結(jié)果存盤并顯示下一頁內(nèi)容(十行) xiugai=1; return 0; int insert()/插入

21、i命令對應(yīng)的函數(shù),在i行后插入文本 int hang,i,increhang=1,number=1; text *p,*p1,*p2; xiugai=1; scanf("%d",&hang); p=p1=NULL; for(i=0,p1=head;i<hang-1;i+,p1=p1->next);/找到要插入行的前一列 p=(text *)malloc(sizeof(text);/為插入行分配空間 p->flat=1; p->next=p1->next;/從此行向下四行將插入行插入到鏈表中 p->pre=p1; p1->ne

22、xt->pre=p; p1->next=p; p->string0=getchar(); p->string0=getchar(); for(i=1;(i<80)&&(p->stringi-1!='');i+) p->stringi=getchar(); if(i+1=80)&&(p->stringi!='')/如果插入的內(nèi)容超過一行 /file:/的容量,則分配下一行空間 p1=p; /file:/并將其連入鏈表 p=(text *)malloc(sizeof(text); p-&

23、gt;flat=1; p->next=p1->next; p->pre=p1; p1->next->pre=p; p1->next=p; i=0; increhang+; p->num=i; p->stringi-1='n' p->stringi='0' puts("修改后的鏈表:"); for(p2=head;p2!=NULL;p2=p2->next)/顯示出修改后的鏈表 puts(p2->string); saveanddisplay(10+increhang);/將修改后

24、的鏈表存盤并顯示下一頁內(nèi)容 xiugai=1; return 0; int EDIT()/編輯函數(shù),用來接受處理編輯命令 char cmd; do cmd=getchar(); printf("n請輸入命令(按E鍵退出):"); cmd=getchar(); switch(cmd) case 'e': case 'E': if(xiugai=1) saveall(); freemem(); if(fp) fclose(fp); if(out) fclose(out); system("cls"); return 0; case 'o': case 'O': Openfiles(); break; case 'p': case 'P': Createlist(); display(); break; case 'n': case 'N': saveanddisplay(10);

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論