




已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
學(xué) 號(hào)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)設(shè)計(jì)說明書簡(jiǎn)單行編輯程序起止日期: 2011年 12月 12 日 至 2011 年 12月16日學(xué)生姓名班級(jí)成績(jī)指導(dǎo)教師(簽字) 電子與信息工程系2011年 12月16日天津城市建設(shè)學(xué)院課程設(shè)計(jì)任務(wù)書20112012學(xué)年第1學(xué)期 電子與信息工程 系 軟件工程 專業(yè) 班級(jí)課程設(shè)計(jì)名稱: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 設(shè)計(jì)題目: 簡(jiǎn)單行編輯程序 完成期限:自 2011 年 12 月 12 日至 2011 年 12 月 16 日共 1 周設(shè)計(jì)依據(jù)、要求及主要內(nèi)容(可另加附頁):一、設(shè)計(jì)目的熟悉各種數(shù)據(jù)結(jié)構(gòu)和運(yùn)算,會(huì)使用數(shù)據(jù)結(jié)構(gòu)的基本操作解決一些實(shí)際問題。二、設(shè)計(jì)要求 (1)重視課程設(shè)計(jì)環(huán)節(jié),用嚴(yán)謹(jǐn)、科學(xué)和踏實(shí)的工作態(tài)度對(duì)待課程設(shè)計(jì)的每一項(xiàng)任務(wù);(2)按照課程設(shè)計(jì)的題目要求,獨(dú)立地完成各項(xiàng)任務(wù),嚴(yán)禁抄襲;凡發(fā)現(xiàn)抄襲,抄襲者與被抄襲者皆以零分計(jì)入本課程設(shè)計(jì)成績(jī)。凡發(fā)現(xiàn)實(shí)驗(yàn)報(bào)告或源程序雷同,涉及的全部人員皆以零分計(jì)入本課程設(shè)計(jì)成績(jī);(3)學(xué)生在接受設(shè)計(jì)任務(wù)后,首先要按設(shè)計(jì)任務(wù)書的要求編寫設(shè)計(jì)進(jìn)程表;(4)認(rèn)真編寫課程設(shè)計(jì)報(bào)告。三、設(shè)計(jì)內(nèi)容1)問題描述文本編輯程序是利用計(jì)算機(jī)進(jìn)行文字加工的基本軟件工具,實(shí)現(xiàn)對(duì)文本文件的插入、刪除等修改操作。限制這些操作以行為單位進(jìn)行的編輯程序稱為行編輯程序。被編輯的文本文件可能很大,全部讀入編輯程序的數(shù)據(jù)空間(內(nèi)存)的做法既不經(jīng)濟(jì),也不總能實(shí)現(xiàn)。一種解決方法是逐段地編輯。任何時(shí)刻只把待編輯文件的一段放在內(nèi)存,稱為活區(qū)。試按照這種方法實(shí)現(xiàn)一個(gè)簡(jiǎn)單的行編輯程序。設(shè)文件每行不超過320個(gè)字符,很少超過80字符。2)基本要求實(shí)現(xiàn)以下4條基本編輯命令:(1) 行插入。格式:i將插入活區(qū)中第行之后(2)行刪除。格式:d刪除活區(qū)中第行(到第行)。兩種格式的例子是:“d10”和“d1014”(3)活區(qū)切換。格式:n將活區(qū)寫入輸出文件,并從輸入文件中讀入下一段,作為新的活區(qū)。(4)活區(qū)顯示。格式:p逐頁地(每頁20行)顯示活區(qū)內(nèi)容,每顯示一頁之后請(qǐng)用戶決定是否繼續(xù)顯示以后各頁(如果存在)。印出的每一行要前置以行號(hào)和一個(gè)空格符,行號(hào)固定占4位,增量為1。各條命令中的行號(hào)均須在活區(qū)中各行行號(hào)范圍之內(nèi),只有插入命令的行號(hào)可以等于活區(qū)第一行行號(hào)減1,表示插入當(dāng)前屏幕中第一行之前,否則命令參數(shù)非法。3)測(cè)試數(shù)據(jù)由學(xué)生依據(jù)軟件工程的測(cè)試技術(shù)自己確定。注意測(cè)試邊界數(shù)據(jù),如首行、尾行。4)實(shí)現(xiàn)提示(1) 設(shè)活區(qū)的大小用行數(shù)activemaxlen(可設(shè)為100)來描述??紤]到文本文件行長(zhǎng)通常為正態(tài)分布,且峰值在60到70之間,用320activemaxlen大小的字符數(shù)組實(shí)現(xiàn)存儲(chǔ)將造成大量浪費(fèi)??梢砸詷?biāo)準(zhǔn)行塊為單位為各行分配存儲(chǔ),每個(gè)標(biāo)準(zhǔn)行塊含81個(gè)字符。這些行塊可以組成一個(gè)數(shù)組,也可以利用動(dòng)態(tài)鏈表連接起來。一行文字可能占多個(gè)行塊。行尾可用一個(gè)特殊的ASCII字符(如(012)8)標(biāo)識(shí)。此外,還應(yīng)記住活區(qū)起始行號(hào)。行插入將引起隨后各行行號(hào)的順序下推。(2) 初始化過程包括:請(qǐng)用戶提供輸入文件名(空串表示無輸入文件)和輸出文件名,兩者不能相同。然后盡可能多地從輸入文件中讀入各行,但不超過activemaxlen-x。x的值可以自定。 (3) 在執(zhí)行行插入命令的過程中,每接收到一行時(shí)到要檢查活區(qū)大小是否已達(dá)activemaxlen。如果是,則為了在插入這一行之后仍保持活區(qū)大小不超過activemaxlen,應(yīng)將插入點(diǎn)之前的活區(qū)部分中第一行輸出到輸出文件中;若插入點(diǎn)為第一行之前,則只得將新插入的這一行輸出。(4) 若輸入文件尚未讀完,活區(qū)切換命令可將原活區(qū)中最后幾行留在活區(qū)頂部,以保持閱讀連續(xù)性;否則,它意味著結(jié)束編輯或開始編輯另一個(gè)文件。(5) 可令前三條命令執(zhí)行后自動(dòng)調(diào)用活區(qū)顯示。5)選作內(nèi)容(1) 對(duì)于命令格式非法等一切錯(cuò)誤作嚴(yán)格檢查和適當(dāng)處理。(2) 加入更復(fù)雜的編輯操作,如對(duì)某行進(jìn)行串替換;在活區(qū)內(nèi)進(jìn)行模式匹配等,格式可以為S和m。四、參考文獻(xiàn)1王紅梅數(shù)據(jù)結(jié)構(gòu)清華大學(xué)出版社2王紅梅數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)輔導(dǎo)與實(shí)驗(yàn)指導(dǎo)清華大學(xué)出版社3嚴(yán)蔚敏,吳偉民數(shù)據(jù)結(jié)構(gòu)(C語言版)清華大學(xué)出版社一、需求分析程序?qū)ξ淖忠孕袨閱挝贿M(jìn)行編輯,功能有行的插入、行的刪除、行的交換和進(jìn)入下一頁。要求用文本文件輸入數(shù)據(jù),并將修改好的數(shù)據(jù)保存到另一個(gè)文件中。因輸入文件可能太大,不能將數(shù)據(jù)一次性全部輸入,僅輸入一部分,如:100行。二、問題求解我所編寫的軟件是行編輯軟件,生活中人們常常要對(duì)數(shù)據(jù)進(jìn)行處理、編輯。但對(duì)單個(gè)文字的處理效率比較低,人們常常需要更快捷的而編寫方法,我這里采用以行為單位進(jìn)行編輯,。大大提高了處理數(shù)據(jù)的速度。首先要從文件中將數(shù)據(jù)讀入內(nèi)存,要以行為單位,而不能以每個(gè)字或每句話為單位。因此要定義一個(gè)結(jié)構(gòu)體,存儲(chǔ)一行的內(nèi)容。而要使編輯方便,需要每行的編號(hào),因此在結(jié)構(gòu)體中要加入一個(gè)存儲(chǔ)行號(hào)的變量。但從文件中讀數(shù)據(jù)不能一次全讀完,因此定義一個(gè)活區(qū)的類,這個(gè)類里包含了行的數(shù)量和行的結(jié)構(gòu)體變量。并將之定義為private。要對(duì)行進(jìn)行編輯,而行的數(shù)據(jù)又是private型的,因此在類里再定義一些操作函數(shù),實(shí)現(xiàn)對(duì)private數(shù)據(jù)的操作。接著將文件內(nèi)容輸出到顯示器,將活區(qū)的內(nèi)容分次輸出,一頁10行。下面就是對(duì)數(shù)據(jù)的處理了,每行的內(nèi)容存儲(chǔ)到結(jié)構(gòu)體數(shù)組中,刪除操作只需將后一個(gè)的把前一個(gè)覆蓋,并將數(shù)組數(shù)量減一。插入操作,將數(shù)組數(shù)量加一,從后向前到插入處,把前一個(gè)覆蓋后一個(gè)。然后將要插入的內(nèi)容寫入插入處即可。行與行之間交換,這個(gè)比較容易實(shí)現(xiàn)。只需將要交換的兩行的內(nèi)容交換即可。三、總體設(shè)計(jì)程序的功能圖:行編輯器文件的選擇文件的輸出行的刪除行的插入行的修改行的交換顯示下一頁進(jìn)入下一個(gè)活區(qū)程序流程圖輸入文件名判斷是否存在 否 是從磁盤文件讀入內(nèi)存顯示第一頁在顯示器上輸入命令依據(jù)命令進(jìn)行編輯四、詳細(xì)設(shè)計(jì)struct Row 行的結(jié)構(gòu)體,包含行的內(nèi)容,行的編號(hào);class Active 活區(qū)的類,包含活區(qū)內(nèi)行的總數(shù)量、行的結(jié)構(gòu)體;void putIn ()將文件從文件讀入內(nèi)存;putOut() 將數(shù)據(jù)輸出到顯示器del() 對(duì)行的刪除操作insert() 插入操作chang() 行與行交換 五、調(diào)試與測(cè)試測(cè)試刪除 測(cè)試第一行:輸入:d1 正確測(cè)試中間的:輸入:d10 正確測(cè)試最后一行 輸入: d40 正確測(cè)試插入測(cè)試第一行:輸入:i1 正確測(cè)試中間的:輸入:i10 正確測(cè)試最后一行 輸入: i40 正確測(cè)試交換:輸入:c2 7 正確測(cè)試進(jìn)入下一頁:輸入:p 正確測(cè)試進(jìn)入下一個(gè)活區(qū);輸入:n 正確測(cè)試過程中,遇到第一行不顯示,程序錯(cuò)誤終斷,刪除后最后一行出現(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請(qǐng)輸入要編輯的文件名:fileName;coutfileName.c_str()endl;ifstream infile(fileName.c_str();if(!infile)cerr找不到該文件!endl;cerr請(qǐng)重新輸入文件名endl;goto beg;ofstream outfile(out.txt);string temp;char order;int rowth=1; /活區(qū)行序號(hào)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請(qǐng)輸入修改內(nèi)容:temp;act.putIn (lrow,temp);printPage(page,act);break;case i: /插入cinlrow;cout請(qǐng)輸入插入的內(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 智慧安防保障城市安全的智能系統(tǒng)
- 從心理成長(zhǎng)到創(chuàng)新教育的理論框架構(gòu)建與實(shí)踐
- 智慧城市公共安全的綜合治理與大數(shù)據(jù)應(yīng)用
- 學(xué)生創(chuàng)新能力培養(yǎng)的教育心理學(xué)策略
- 以教育技術(shù)為媒介探索增強(qiáng)學(xué)生學(xué)習(xí)動(dòng)力和效率的新路徑
- 當(dāng)代辦公室內(nèi)應(yīng)用個(gè)化學(xué)資料的有效性及其對(duì)于技術(shù)變革的響應(yīng)
- 中職數(shù)學(xué)基礎(chǔ)模塊課件
- 企業(yè)級(jí)數(shù)據(jù)治理平臺(tái)的構(gòu)建與實(shí)踐
- 醫(yī)療科技與智慧教育的深度融合探討
- 機(jī)器人輔助的醫(yī)療教學(xué)與智能教育探索
- 農(nóng)業(yè)供應(yīng)鏈管理考試試題及答案
- 人行雨棚施工方案
- 2025-2030中國(guó)晶圓鍵合系統(tǒng)行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析研究報(bào)告
- 從校園到職場(chǎng):新員工角色轉(zhuǎn)換與職業(yè)化塑造
- 奶茶服務(wù)協(xié)議合同
- 學(xué)生食堂維修改造工程施工組織設(shè)計(jì)
- 書籍保密協(xié)議書范文
- 2025年章魚小丸子項(xiàng)目可行性研究報(bào)告
- “中小學(xué)生每天至少2小時(shí)體育活動(dòng)”的價(jià)值追求與實(shí)現(xiàn)路徑研究
- 2024年四川成都農(nóng)業(yè)科技中心招聘筆試真題
- 成都市房產(chǎn)抵押合同模板2025年
評(píng)論
0/150
提交評(píng)論