




已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
學 號數(shù)據(jù)結(jié)構(gòu)課程設(shè)計設(shè)計說明書簡單行編輯程序起止日期: 2011年 12月 12 日 至 2011 年 12月16日學生姓名班級成績指導(dǎo)教師(簽字) 電子與信息工程系2011年 12月16日天津城市建設(shè)學院課程設(shè)計任務(wù)書20112012學年第1學期 電子與信息工程 系 軟件工程 專業(yè) 班級課程設(shè)計名稱: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 設(shè)計題目: 簡單行編輯程序 完成期限:自 2011 年 12 月 12 日至 2011 年 12 月 16 日共 1 周設(shè)計依據(jù)、要求及主要內(nèi)容(可另加附頁):一、設(shè)計目的熟悉各種數(shù)據(jù)結(jié)構(gòu)和運算,會使用數(shù)據(jù)結(jié)構(gòu)的基本操作解決一些實際問題。二、設(shè)計要求 (1)重視課程設(shè)計環(huán)節(jié),用嚴謹、科學和踏實的工作態(tài)度對待課程設(shè)計的每一項任務(wù);(2)按照課程設(shè)計的題目要求,獨立地完成各項任務(wù),嚴禁抄襲;凡發(fā)現(xiàn)抄襲,抄襲者與被抄襲者皆以零分計入本課程設(shè)計成績。凡發(fā)現(xiàn)實驗報告或源程序雷同,涉及的全部人員皆以零分計入本課程設(shè)計成績;(3)學生在接受設(shè)計任務(wù)后,首先要按設(shè)計任務(wù)書的要求編寫設(shè)計進程表;(4)認真編寫課程設(shè)計報告。三、設(shè)計內(nèi)容1)問題描述文本編輯程序是利用計算機進行文字加工的基本軟件工具,實現(xiàn)對文本文件的插入、刪除等修改操作。限制這些操作以行為單位進行的編輯程序稱為行編輯程序。被編輯的文本文件可能很大,全部讀入編輯程序的數(shù)據(jù)空間(內(nèi)存)的做法既不經(jīng)濟,也不總能實現(xiàn)。一種解決方法是逐段地編輯。任何時刻只把待編輯文件的一段放在內(nèi)存,稱為活區(qū)。試按照這種方法實現(xiàn)一個簡單的行編輯程序。設(shè)文件每行不超過320個字符,很少超過80字符。2)基本要求實現(xiàn)以下4條基本編輯命令:(1) 行插入。格式:i將插入活區(qū)中第行之后(2)行刪除。格式:d刪除活區(qū)中第行(到第行)。兩種格式的例子是:“d10”和“d1014”(3)活區(qū)切換。格式:n將活區(qū)寫入輸出文件,并從輸入文件中讀入下一段,作為新的活區(qū)。(4)活區(qū)顯示。格式:p逐頁地(每頁20行)顯示活區(qū)內(nèi)容,每顯示一頁之后請用戶決定是否繼續(xù)顯示以后各頁(如果存在)。印出的每一行要前置以行號和一個空格符,行號固定占4位,增量為1。各條命令中的行號均須在活區(qū)中各行行號范圍之內(nèi),只有插入命令的行號可以等于活區(qū)第一行行號減1,表示插入當前屏幕中第一行之前,否則命令參數(shù)非法。3)測試數(shù)據(jù)由學生依據(jù)軟件工程的測試技術(shù)自己確定。注意測試邊界數(shù)據(jù),如首行、尾行。4)實現(xiàn)提示(1) 設(shè)活區(qū)的大小用行數(shù)activemaxlen(可設(shè)為100)來描述。考慮到文本文件行長通常為正態(tài)分布,且峰值在60到70之間,用320activemaxlen大小的字符數(shù)組實現(xiàn)存儲將造成大量浪費。可以以標準行塊為單位為各行分配存儲,每個標準行塊含81個字符。這些行塊可以組成一個數(shù)組,也可以利用動態(tài)鏈表連接起來。一行文字可能占多個行塊。行尾可用一個特殊的ASCII字符(如(012)8)標識。此外,還應(yīng)記住活區(qū)起始行號。行插入將引起隨后各行行號的順序下推。(2) 初始化過程包括:請用戶提供輸入文件名(空串表示無輸入文件)和輸出文件名,兩者不能相同。然后盡可能多地從輸入文件中讀入各行,但不超過activemaxlen-x。x的值可以自定。 (3) 在執(zhí)行行插入命令的過程中,每接收到一行時到要檢查活區(qū)大小是否已達activemaxlen。如果是,則為了在插入這一行之后仍保持活區(qū)大小不超過activemaxlen,應(yīng)將插入點之前的活區(qū)部分中第一行輸出到輸出文件中;若插入點為第一行之前,則只得將新插入的這一行輸出。(4) 若輸入文件尚未讀完,活區(qū)切換命令可將原活區(qū)中最后幾行留在活區(qū)頂部,以保持閱讀連續(xù)性;否則,它意味著結(jié)束編輯或開始編輯另一個文件。(5) 可令前三條命令執(zhí)行后自動調(diào)用活區(qū)顯示。5)選作內(nèi)容(1) 對于命令格式非法等一切錯誤作嚴格檢查和適當處理。(2) 加入更復(fù)雜的編輯操作,如對某行進行串替換;在活區(qū)內(nèi)進行模式匹配等,格式可以為S和m。四、參考文獻1王紅梅數(shù)據(jù)結(jié)構(gòu)清華大學出版社2王紅梅數(shù)據(jù)結(jié)構(gòu)學習輔導(dǎo)與實驗指導(dǎo)清華大學出版社3嚴蔚敏,吳偉民數(shù)據(jù)結(jié)構(gòu)(C語言版)清華大學出版社一、需求分析程序?qū)ξ淖忠孕袨閱挝贿M行編輯,功能有行的插入、行的刪除、行的交換和進入下一頁。要求用文本文件輸入數(shù)據(jù),并將修改好的數(shù)據(jù)保存到另一個文件中。因輸入文件可能太大,不能將數(shù)據(jù)一次性全部輸入,僅輸入一部分,如:100行。二、問題求解我所編寫的軟件是行編輯軟件,生活中人們常常要對數(shù)據(jù)進行處理、編輯。但對單個文字的處理效率比較低,人們常常需要更快捷的而編寫方法,我這里采用以行為單位進行編輯,。大大提高了處理數(shù)據(jù)的速度。首先要從文件中將數(shù)據(jù)讀入內(nèi)存,要以行為單位,而不能以每個字或每句話為單位。因此要定義一個結(jié)構(gòu)體,存儲一行的內(nèi)容。而要使編輯方便,需要每行的編號,因此在結(jié)構(gòu)體中要加入一個存儲行號的變量。但從文件中讀數(shù)據(jù)不能一次全讀完,因此定義一個活區(qū)的類,這個類里包含了行的數(shù)量和行的結(jié)構(gòu)體變量。并將之定義為private。要對行進行編輯,而行的數(shù)據(jù)又是private型的,因此在類里再定義一些操作函數(shù),實現(xiàn)對private數(shù)據(jù)的操作。接著將文件內(nèi)容輸出到顯示器,將活區(qū)的內(nèi)容分次輸出,一頁10行。下面就是對數(shù)據(jù)的處理了,每行的內(nèi)容存儲到結(jié)構(gòu)體數(shù)組中,刪除操作只需將后一個的把前一個覆蓋,并將數(shù)組數(shù)量減一。插入操作,將數(shù)組數(shù)量加一,從后向前到插入處,把前一個覆蓋后一個。然后將要插入的內(nèi)容寫入插入處即可。行與行之間交換,這個比較容易實現(xiàn)。只需將要交換的兩行的內(nèi)容交換即可。三、總體設(shè)計程序的功能圖:行編輯器文件的選擇文件的輸出行的刪除行的插入行的修改行的交換顯示下一頁進入下一個活區(qū)程序流程圖輸入文件名判斷是否存在 否 是從磁盤文件讀入內(nèi)存顯示第一頁在顯示器上輸入命令依據(jù)命令進行編輯四、詳細設(shè)計struct Row 行的結(jié)構(gòu)體,包含行的內(nèi)容,行的編號;class Active 活區(qū)的類,包含活區(qū)內(nèi)行的總數(shù)量、行的結(jié)構(gòu)體;void putIn ()將文件從文件讀入內(nèi)存;putOut() 將數(shù)據(jù)輸出到顯示器del() 對行的刪除操作insert() 插入操作chang() 行與行交換 五、調(diào)試與測試測試刪除 測試第一行:輸入:d1 正確測試中間的:輸入:d10 正確測試最后一行 輸入: d40 正確測試插入測試第一行:輸入:i1 正確測試中間的:輸入:i10 正確測試最后一行 輸入: i40 正確測試交換:輸入:c2 7 正確測試進入下一頁:輸入:p 正確測試進入下一個活區(qū);輸入:n 正確測試過程中,遇到第一行不顯示,程序錯誤終斷,刪除后最后一行出現(xiàn)兩次等問題。發(fā)現(xiàn)是數(shù)組越界的問題。文件名不能正確的輸入,修改后調(diào)用了string類的c-str函數(shù)。六、關(guān)鍵源程序清單和執(zhí)行結(jié)果#include#include#include#includeconst int activeMaxLen=50; /活區(qū)最大行數(shù)const int pageRowNum=10; /每頁的行數(shù)using namespace std;struct Rowpublic:int num;string content;class Activepublic:Active()sumRowNum=activeMaxLen-pageRowNum;void putIn(int numth,string temp) /輸入rnumth.num=numth;rnumth.content=temp;void putOut(int i) /輸出coutri.num ri.contentendl;void del(int k) /刪除for(int i=k;i=k+1;i-)ri.content=ri-1.content;sumRowNum+;rk.content=temp;rsumRowNum.num=sumRowNum;void change(int left,int right) /交換string temp;temp=rleft.content; rleft.content=rright.content;rright.content=temp;int getSumRowNum() /取值return sumRowNum;void backSumRowNum() /初始化sumRowNum=activeMaxLen-pageRowNum;string get(int i)return ri.content; private:int sumRowNum;Row ractiveMaxLen+1;void printPage(int page,Active act) /顯示頁int i;if(page=1)for(i=page;i=pageRowNum;i+)act.putOut(i);elsefor(i=(page-1)*pageRowNum+1;iact.getSumRowNum() return;act.putOut(i);int main()/要編輯的文件名的輸入cout請輸入要編輯的文件名:fileName;coutfileName.c_str()endl;ifstream infile(fileName.c_str();if(!infile)cerr找不到該文件!endl;cerr請重新輸入文件名endl;goto beg;ofstream outfile(out.txt);string temp;char order;int rowth=1; /活區(qū)行序號int page=1;int lrow=0;int rrow=0;int i=1;bool over=0;Active act;while(true)if(!over)rowth=1; page=1;while(rowthorder;switch(order)case d: /刪除 dcinlrow;act.del(lrow);printPage(page,act);break;case a: /修改cinlrow;cout請輸入修改內(nèi)容:temp;act.putIn (lrow,temp);printPage(page,act);break;case i: /插入cinlrow;cout請輸入插入的內(nèi)容:temp;act.insert(lrow,temp);printPage(page,act);break;case c: /行與行交換cinlrowrrow;act.change(lrow,rrow);printPage(page,act);break;case p: /顯示下一頁if(page=activeMaxLen/pageRowNum)cout這是最后一頁!endl;break; page+;printPage(page,act);break;case n:
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 技校學習總結(jié)模版
- 六級作文各段及各文體寫作技巧
- 學前兒童發(fā)展 課件 第7章 學前兒童想象的發(fā)展
- 門脈高壓性腸病的臨床護理
- 2025屆山東省濱州市沾化縣八下數(shù)學期末聯(lián)考模擬試題含解析
- 幼兒的傳染病與常見病
- 眼球運動障礙的臨床護理
- 山東省青大附中2025屆七年級數(shù)學第二學期期末學業(yè)水平測試模擬試題含解析
- 大學生職業(yè)規(guī)劃大賽《市場營銷專業(yè)》生涯發(fā)展展示
- 郵政銀行面試試題及答案
- 體育裝備科技創(chuàng)新趨勢
- 第四次教育革命:人工智能如何改變教育
- 宿舍樓施工安全管理體系與措施
- 預(yù)防未成年人犯罪的講座
- 醫(yī)療設(shè)備維保服務(wù)投標方案
- 熱塑性橡膠(白料)MSDS-TPR
- 心肺復(fù)蘇質(zhì)控課件
- 安全生產(chǎn)規(guī)章制度和崗位操作規(guī)程的目錄清單及內(nèi)容(無倉儲經(jīng)營單位)
- 甲方對監(jiān)理評價表-副本
- 鼻飼患者胃潴留的危險因素及護理措施
- 護士N2晉級N3述職報告參考課件
評論
0/150
提交評論