簡易文本編輯器 數(shù)據(jù)結(jié)構(gòu)課設(shè).doc_第1頁
簡易文本編輯器 數(shù)據(jù)結(jié)構(gòu)課設(shè).doc_第2頁
簡易文本編輯器 數(shù)據(jù)結(jié)構(gòu)課設(shè).doc_第3頁
簡易文本編輯器 數(shù)據(jù)結(jié)構(gòu)課設(shè).doc_第4頁
簡易文本編輯器 數(shù)據(jù)結(jié)構(gòu)課設(shè).doc_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

沈陽理工大學(xué)課程設(shè)計(jì)專用紙摘 要當(dāng)下C+語言是一門重要的課程學(xué)習(xí),學(xué)會(huì)運(yùn)用并結(jié)合其他的知識(shí)一起解題是一件值得我們重視的,數(shù)據(jù)結(jié)構(gòu)是一門結(jié)合C+知識(shí)的重要課程,因此我們要學(xué)會(huì)將平時(shí)課本的知識(shí)運(yùn)用到我們現(xiàn)實(shí)生活當(dāng)中,這樣才能讓我們所學(xué)的知識(shí)更加深刻。簡易文本編輯器的問題就是一個(gè)例子,傳統(tǒng)的紙質(zhì)文檔已經(jīng)不能滿足大家的需求,有容易丟失、查找不方便等缺點(diǎn)。計(jì)算機(jī)信息管理為人們的生活、工作提供了方便,提高了效率?!昂喴孜谋揪庉嬈鳌本褪菫榱藥椭蠋?、同學(xué)或其他一些需要使用文本編輯的人員進(jìn)行管理和分析的一種計(jì)算機(jī)應(yīng)用程序。關(guān)鍵詞:簡易文本編輯器,數(shù)據(jù)結(jié)構(gòu),順序表。 目 錄一、需求分析11.1問題描述11.2基本任務(wù)1二、概要設(shè)計(jì)12.1主界面設(shè)計(jì)12.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)1三、詳細(xì)設(shè)計(jì)23.1清空內(nèi)容模塊23.2打開文件模塊23.3輸入模塊23.4插入模塊23.5刪除模塊23.6替換模塊23.7顯示模塊23.8保存模塊33.9系統(tǒng)層次圖3四、測試結(jié)果34.1文本編輯器主界面34.2系統(tǒng)功能4五、調(diào)試分析7六、心得體會(huì)8七、參考文獻(xiàn)9八、程序源代碼1023一、需求分析1.1問題描述 傳統(tǒng)的紙質(zhì)文檔已經(jīng)不能滿足大家的需求,有容易丟失、查找不方便等缺點(diǎn)。計(jì)算機(jī)信息管理為人們的生活、工作提供了方便,提高了效率?!昂喴孜谋揪庉嬈鳌本褪菫榱藥椭蠋?、同學(xué)或其他一些需要使用文本編輯的人員進(jìn)行管理和分析的一種計(jì)算機(jī)應(yīng)用程序。1.2基本任務(wù) 通過用戶調(diào)查分析及實(shí)際需求,系統(tǒng)需要實(shí)現(xiàn)如下基本任務(wù):(1) 輸入數(shù)據(jù)信息建立文本;(2) 打開文本讀取已保存的信息;(3) 插入新的信息到文本中;(4) 刪除不再需要的文本信息;(5) 替換不需要的文本信息;(6) 顯示所有的文本信息;(7) 保存所輸入、插入、替換過的文本信息;(8) 清空文本信息。二、概要設(shè)計(jì)2.1主界面設(shè)計(jì)為了實(shí)現(xiàn)簡易文本編輯器的各項(xiàng)功能,設(shè)計(jì)一個(gè)含有多個(gè)菜單項(xiàng)的主控菜單模塊以操作系統(tǒng)的各項(xiàng)功能,進(jìn)而方便用戶使用系統(tǒng)。2.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)為實(shí)現(xiàn)數(shù)據(jù)的有序存儲(chǔ),該編輯器應(yīng)該用順序存儲(chǔ)結(jié)構(gòu)來存儲(chǔ)輸入的信息。順序表是數(shù)據(jù)結(jié)構(gòu)中線性表的一種,它是用一塊地址連續(xù)的存儲(chǔ)空間依次存儲(chǔ)線性表的元素。其特點(diǎn)為:在順序表上邏輯關(guān)系相鄰的倆個(gè)元素在物理位置上也相鄰;在順序表上可以隨即存取表中的元素。三、 詳細(xì)設(shè)計(jì)3.1清空內(nèi)容模塊清空以前的文本信息,將用數(shù)組存的數(shù)據(jù)內(nèi)容全部置為0。3.2打開文件模塊確認(rèn)打開文件并提示未保存的數(shù)據(jù)將會(huì)丟失,如果未選擇打開文件,則返回主菜單。3.3輸入模塊輸入文本信息,從主菜單中選擇輸入,提示輸入內(nèi)容,并統(tǒng)計(jì)文本字符數(shù)和行數(shù)。3.4插入模塊插入文本信息,首先在數(shù)組中查找要插入點(diǎn),如果找到該插入點(diǎn),提示輸入插入信息,確認(rèn)插入信息后,提示選擇向前插入信息還是向后插入信息,如果未找到插入點(diǎn),顯示未找到要插入的位置。3.5刪除模塊刪除文本信息,首先在數(shù)組中查找要?jiǎng)h除的信息,如果找到該信息,提示是否確認(rèn)刪除該信息,通過確認(rèn)來刪除信息,如果未找到要?jiǎng)h除的信息,提示未找到該信息。3.6替換模塊替換文本信息,首先在數(shù)組中查找要被替換的信息,如果找到該信息,提示輸入要替換的信息內(nèi)容,否則提示未找到要被替換的信息。3.7顯示模塊顯示當(dāng)前文本信息,遍歷用數(shù)組存入的信息,并輸入到外部顯示器上。3.8保存模塊 保存當(dāng)前信息,并提示輸入文件名,確認(rèn)保存之后提示保存成功。3.9系統(tǒng)層次圖簡易文本編輯器清空內(nèi)容輸入保存顯示替換刪除插入打開文件圖3-1 系統(tǒng)層次圖四、測試結(jié)果4.1文本編輯器主界面主界面功能,如圖41所示。圖41 文本編輯器主界面4.2系統(tǒng)功能 輸入文本信息功能,如圖42所示。圖42 輸入界面 查找文本信息,如圖43所示。 圖43查找功能界面 顯示文本信息,如圖44所示。圖44顯示文本界面插入操作,如圖45所示。圖45插入功能界面刪除操作,如圖46所示。圖46刪除功能界面替換文本內(nèi)容,如圖47所示。圖47 替換功能界面文件保存,如圖48所示。圖48 保存功能界面五、調(diào)試分析程序設(shè)計(jì)沒有按照一定的流程來,導(dǎo)致程序臃腫,可重復(fù)利用率太低,比如程序中的chazhao函數(shù),在替換,刪除等的過程中可以充分利用到,從而減少代碼的長多,提高可讀性和減少時(shí)間的復(fù)雜性,設(shè)計(jì)開始的時(shí)候沒有充分考慮到,到最后無法在短時(shí)間內(nèi)修改完成;程序的選擇語句運(yùn)行比較的多,當(dāng)初是為了程序的安全和便捷,選擇了較多的選擇,確認(rèn)步驟,這樣一來使得程序中的選擇語句比較的多,比較亂。這個(gè)在概要設(shè)計(jì)中沒有充分的理清思路,導(dǎo)致程序的可讀性較差。六、心得體會(huì)這是第一次比較全面的設(shè)計(jì)一個(gè)可執(zhí)行多種功能的程序的課程設(shè)計(jì),暴露出較多的知識(shí)點(diǎn)的缺乏,比如文件的打開與保存等。程序的運(yùn)行結(jié)果與理論推導(dǎo)結(jié)果基本吻合,即該算法與程序設(shè)計(jì)基本滿足課程設(shè)計(jì)要求。該程序的優(yōu)點(diǎn)是簡單易懂,不存在理解上的障礙,很自然地能想到這種解法。但是該程序比較臃腫,可重復(fù)利用率低,還有待修改和完善。通過這次數(shù)據(jù)結(jié)構(gòu)的課程設(shè)計(jì)使我對所學(xué)知識(shí)有了更好的理解,增強(qiáng)了自己的動(dòng)手能力,但同時(shí)也發(fā)現(xiàn)了自己的不足之處,對知識(shí)的應(yīng)用能力很是欠缺,應(yīng)用軟件的能力及編程水平與課程要求更是存在很大的差距。通過這個(gè)實(shí)驗(yàn),使我基本操作有了一定的思路,知道該從哪里著手去完成一項(xiàng)功能編譯,也讓我學(xué)會(huì)了如何通過書籍查閱到自己想要的信息,并有一個(gè)思維方向去解決編譯時(shí)出現(xiàn)的問題,提高了我的編程效率,我想這對我以后的學(xué)習(xí)會(huì)有很大的幫助,會(huì)讓我有信心去完成下一個(gè)實(shí)驗(yàn)。七、參考文獻(xiàn)1嚴(yán)蔚敏 吳偉名 編著,數(shù)據(jù)結(jié)構(gòu),清華大學(xué)出版社,2007年9月2譚浩強(qiáng) 編著,c語言程序設(shè)計(jì),清華大學(xué)出版社3錢能C+程序設(shè)計(jì)教程(第二版)M 北京:清華大學(xué)出版社,2005八、程序源代碼#include #include #include #include #define MAX 10000#define _CRT_SECURE_NO_DEPRECATE/在vs中取消warning的警告void menu(); void shuru(char text);void bc(char text); void dakai(char text);void dayin(char text);void chazhao(char text,int l);void tihan(char text,int l);int strindex(char text,char t,int i2,int l);void shanchu(char p,int l);void cs(char text);void charu(char text,int l);void tuichu(int status);char textMAX=;/文本編輯域char name20=;/文件保存的位置int status=0;/顯示是否保存過的狀態(tài)int ntext;/文本編輯的位置 void dakai(char text)system(cls); FILE *fp;char pd,ch;char name30;int i=0;printf(輸入A:確定打開文件(未保存的數(shù)據(jù)將會(huì)丟失) M:返回主菜單);fflush(stdin);pd=getchar();if (pd=A|pd=a)printf(請輸入要打開文件名字(例如c:a.txt));scanf(%s,name);while (fp=fopen(name,r)=NULL)printf(n打開文件失敗,請重新輸入要打開的文件名:);scanf(%s,name);cs(text);while(!feof(fp)ch=fgetc(fp);texti=ch;i+; texti=0; ntext=i; fclose(fp);printf(n文件讀取成功n文件內(nèi)容為n);dayin(text); if (pd=M|pd=m)menu(); void bc(char text)system(cls);FILE *fp;char pd;char tmp;int i;printf(n輸入【A】保存;任意鍵返回主菜單不保存n); fflush(stdin);pd=getchar();if (!(pd=A|pd=a)menu();else if(name20=NULL)printf(n請輸入保存文件名(例如: c:a.txt):);scanf(%s,name);while (fp=fopen(name,w+)=NULL)printf(文件不存在,請重新輸入文件名:);scanf(%s,name); printf(nA:確定;B:取消:); while(scanf(%c,&tmp)!=EOF)if (tmp=A | tmp=a) for(i=0;intext;i+) fprintf(fp,%c,texti); fclose(fp);status=1;printf(n文件保存成功n);break;if (tmp=B | tmp=b)break; void cs(char text)int i;for (i=0;intext;i+)texti=0;ntext=0;status=0; int strindex(char text,char t,int i2,int l) /查找要操作的數(shù)據(jù)的位置(模式匹配)int i1=l,j=0;while (i1ntext&j=i2)return(i1-i2); /返回匹配的第一個(gè)字符的下標(biāo)elsereturn(-1); /模式匹配不成功void menu()system(cls);time_t timep; time (&timep);printf(%s,ctime(&timep);printf(信息與計(jì)算科學(xué) 1209010314 范亞飛n);printf(nnnnnnnnntttWelcom to use our TXT edition system!n);printf(nnttt 歡迎您使用文本編輯器軟件!n);printf(nnnnnnnnnpress Enter to continue.n);getchar();loop:system(cls);printf(nnnntt*簡易文本編輯器*nn);printf(tttt-0.清空內(nèi)容-n);printf(tttt-1.打開文件-n);if (ntext=0)printf(tttt-2.輸入內(nèi)容-n); else printf(tttt-2.繼續(xù)輸入-n);printf(tttt-3.查找-n);printf(tttt-4.插入-n);printf(tttt-5.刪除-n);printf(tttt-6.替換-n);printf(tttt-7.顯示內(nèi)容-n);printf(tttt-8.保存-n);printf(tttt-9.退出-n);printf(ntt*選項(xiàng)*n);printf(ntttt輸入選項(xiàng)0-9:);char n;fflush(stdin);n=getchar();if(n=0&n=9)switch (n)case 0: cs(text);break;case 1: dakai(text);break;case 2: shuru(text);break;case 3: chazhao(text,0);break;case 4: charu(text,1);break;case 5: shanchu(text,0);break;case 6: tihan(text,0);break;case 7: dayin(text);break;case 8: bc(text);break;case 9: tuichu(status);default : break;elseprintf(n輸入有誤,請重新輸入:);fflush(stdin);n=getchar();system(pause);goto loop;void chazhao(char text,int l)system(cls);int i,t,a=-1;char pattern20,bd,pd;printf(原文為:n);dayin(text);printf(請輸入您要查找的內(nèi)容);scanf(%s,pattern);printf(您查找的內(nèi)容是:%sn,pattern);t=strlen(pattern);loop:a=strindex(text,pattern,t,l);if (a!=-1)l=a+t;int hs=1,ls=0;for (i=0;i=a;i+)ls+;if (texti=n)hs+;ls=0; if (a=-1)printf(查找到結(jié)尾沒有找到n輸入【R】將重頭查找;任意鍵返回主菜單);l=0;fflush(stdin);pd=getchar(); else printf(已經(jīng)找到在第%d行第%d列,輸入【R】繼續(xù)查找下一處;任意鍵返回主菜單,hs,ls);fflush(stdin);bd=getchar(); if (bd=R|bd=r) goto loop; if (pd=R|pd=r) l=0;chazhao(text,l);void dayin(char text)system(cls);printf(現(xiàn)在文本的內(nèi)容為:n);printf(%sn,text); int hs=1,i;for (i=0;intext;i+)if (texti=n)hs+; printf(n文本共有%d行n,hs);void shuru(char text)system(cls);printf(請輸入內(nèi)容(輸入結(jié)束輸入并返回主菜單):n);printf(%s,text);char c;int i=ntext,j=ntext;fflush(stdin); while (c=getchar()!=)texti=c;i+;ntext=i;continue;int cout=0,zf=0,h=1,hs=1,zfs=0;for(;coutntext;cout+)zf+;if(textcout=n)h+;zf-;if(textcout= )zf-;for(cout=j;coutntext;cout+)zfs+;if(textcout=n)hs+;zfs-;if(textcout= )zfs-;printf(統(tǒng)計(jì):文本一共有%d個(gè)字符,%d行,本次輸入了%d個(gè)字符,%d行n,zf,h,zfs,hs);void shanchu(char p,int l)int i,a=-1,t2=0;char x20,px,pd,pdx,c;system(cls);printf(%s,p);printf(n輸入【A】執(zhí)行查找刪除內(nèi)容;任意鍵返回主菜單:);fflush(stdin);px=getchar();if (px=a|px=A)printf(n輸入您要?jiǎng)h除的內(nèi)容,以結(jié)束:);fflush(stdin);while (c=getchar()!=)if (c=)break;elsext2=c;t2+;continue;loop:a=strindex(p,x,t2,l);int hs=1,ls=0;for (i=0;i=a;i+)ls+;if (pi=n)hs+; ls=0; if (a=-1)printf(已查找結(jié)束,您要?jiǎng)h除的內(nèi)容不存在n輸入【R】重新輸入要?jiǎng)h除的內(nèi)容;其他鍵將返回主菜單:);l=0;fflush(stdin);pdx=getchar(); else printf(你要?jiǎng)h除的內(nèi)容在第%d行第%d列n 輸入【A】確定刪除;輸入【B】尋找下個(gè)詞;其他鍵將返回主菜單:,hs,ls);fflush(stdin);pd=getchar();l=t2+a;if (pd=a|pd=A)for(i=a;intext;i+)pi=pi+t2;ntext=ntext-t2;printf(刪除成功,刪除后的內(nèi)容為:n%sn,text);else if (pd=b|pd=B)goto loop;if(pdx=r|pdx=R)shanchu(text,l);void charu(char text,int l) /向文本中插入內(nèi)容system(cls);int i=0,t=0,t2=0,a=-1,b;char cr20=,pd,x500,c,d;printf(n當(dāng)前文本信息為:n);printf(%s,text);printf(n輸入您要在哪個(gè)內(nèi)容前插入,以結(jié)束:);fflush(stdin);while (c=getchar()!=) /用一個(gè)數(shù)組接收要插入在哪個(gè)內(nèi)容之前if (c=)break;elsecrt=c;t+;continue;loop:a=strindex(text,cr,t,l); /查找并返回要插入的位置點(diǎn)int hs=1,ls=0;for (b=0;b=a;i-)texti+t2=texti;for (i=0;it2;i+)texti+a=xi;ntext=ntext+t2;printf(n當(dāng)前文本信息為:n);for (i=0;i=ntext-1;i+)printf(%c,texti);printf(n文本插入成功n);fflush(stdin);getchar();if (d=r|d=R)l=0;charu(text,l);status=0;void tihan(char p,int l) /內(nèi)容替換int t=0,t1=0,i,a,b;char c,th20,d,d1,bth20;int i2;system(cls);printf(n當(dāng)前文本信息為:n);for (i2=0;i2=ntext-1;i2+)printf(%c,pi2);printf(n輸入要被替換的內(nèi)容,以結(jié)束:);fflush(stdin);while (c=getchar()!=) /t指替換前內(nèi)容的長度if (c=)break;elsebtht=c;t+;continue;loop:a=strindex(p,bth,t,l); /查找要被替換的內(nèi)容的位置int hs=1,ls=0;for (b=0;ba;b+)ls+;if (pb=n)hs+;ls=0;if (a=-1)printf(n查找到結(jié)尾沒

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論