文章編輯數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_第1頁
文章編輯數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_第2頁
文章編輯數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_第3頁
文章編輯數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_第4頁
文章編輯數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 長沙理工大學(xué) 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告 學(xué) 院 專 業(yè) 班 級 學(xué) 號 學(xué)生姓名 指導(dǎo)教師 課程成績 完成日期 課程設(shè)計成績評定學(xué) 院 專 業(yè) 班 級 學(xué) 號 學(xué)生姓名 指導(dǎo)教師 完成日期 指導(dǎo)教師對學(xué)生在課程設(shè)計中的評價評分項目優(yōu)良中及格不及格課程設(shè)計中的創(chuàng)造性成果學(xué)生掌握課程內(nèi)容的程度課程設(shè)計完成情況課程設(shè)計動手能力文字表達學(xué)習(xí)態(tài)度規(guī)范要求課程設(shè)計論文的質(zhì)量指導(dǎo)教師對課程設(shè)計的評定意見綜合成績 指導(dǎo)教師簽字 年 月 日課程設(shè)計任務(wù)書計算機與通信工程學(xué)院 軟件工程專業(yè) 課程名稱數(shù)據(jù)結(jié)構(gòu)課程設(shè)計時間學(xué)生姓名指導(dǎo)老師題 目文章編輯主要內(nèi)容:采用單鏈表數(shù)據(jù)結(jié)構(gòu)靜態(tài)存儲文章,以c語言實現(xiàn)相關(guān)程序,實現(xiàn)

2、對輸入的文章進行統(tǒng)計文章中總字符數(shù)、統(tǒng)計文章中空格個數(shù)、統(tǒng)計文章中數(shù)字個數(shù)、統(tǒng)計文章中英文字母數(shù)、刪除文章中指定字符串、統(tǒng)計文章中指定字符串出現(xiàn)次數(shù)的文章編輯功能操作。要求:(1)通過實際項目的分析、設(shè)計、編碼、測試等工作,掌握用c語言來開發(fā)和維護軟件。(2)按要求編寫課程設(shè)計報告書,能正確編寫分析、設(shè)計、編碼、測試等技術(shù)文檔和用戶使用手冊。應(yīng)當(dāng)提交的文件:(1)文章編輯數(shù)據(jù)結(jié)構(gòu)課程設(shè)計論文。(2)代碼清單。 文章編輯 學(xué)生姓名:陳旖指導(dǎo)老師:陳倩詒摘 要 本課程設(shè)計主要解決了基本的文章編輯問題。對于一頁按要求輸入到程序執(zhí)行窗口的文章,靜態(tài)存儲結(jié)構(gòu)使用線性表中,分別完成統(tǒng)計文章總字符數(shù)、文章中

3、空格個數(shù)、文章中英文字母數(shù)、統(tǒng)計文章中英文字母數(shù)的操作和文章中某一字符串的出現(xiàn)的次數(shù),并輸出該次數(shù);除以上的統(tǒng)計操作,還實現(xiàn)刪除文章中指定字符串,并且將刪除字符串后面的字符前移,再保存為編輯后的文章。關(guān)鍵字 靜態(tài)存儲;線性表;編輯;字符串 目 錄1.引言1 1.1課程設(shè)計意義 11.2課程設(shè)計目的11.3課題要求12.設(shè)計思路與方案22.1函數(shù)流程22.2功能函數(shù)43.詳細實現(xiàn)53.1數(shù)據(jù)結(jié)構(gòu)設(shè)計53.2功能函數(shù)設(shè)計53.3函數(shù)分析64.運行環(huán)境與結(jié)果 124.1運行環(huán)境124.2運行結(jié)果125.結(jié)束語 166.參考文獻 177.附錄 18代碼清單18陳旖文章編輯1引 言1.1課程設(shè)計意義在實

4、踐教學(xué)中,課程設(shè)計是一個重要環(huán)節(jié),它以某一課程為基礎(chǔ),可以涉及和課程相關(guān)的各個方面,是一門獨立于課程之外的特殊課程。課程設(shè)計是讓同學(xué)們對所學(xué)的課程更全面的學(xué)習(xí)和應(yīng)用,理解和掌握課程的相關(guān)知識。數(shù)據(jù)結(jié)構(gòu)1是一門重要的專業(yè)基礎(chǔ)課,是計算機理論和應(yīng)用的核心基礎(chǔ)課程。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計,要求學(xué)生在數(shù)據(jù)結(jié)構(gòu)的邏輯特性和物理表示、數(shù)據(jù)結(jié)構(gòu)的選擇和應(yīng)用、算法的設(shè)計2及其實現(xiàn)等方面,加深對課程基本內(nèi)容的理解3。同時,在程序設(shè)計方法以及上機操作等基本技能和科學(xué)作風(fēng)方面受到比較系統(tǒng)和嚴格的訓(xùn)練。1.2課程設(shè)計目的1提高對數(shù)據(jù)邏輯結(jié)構(gòu)4的特點以及存儲表示方式的認識,培養(yǎng)在具體應(yīng)用中選擇合適的數(shù)據(jù)結(jié)構(gòu)和存儲結(jié)構(gòu)的能力。

5、2熟悉軟件開發(fā)的基本過程,初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計、程序編碼5、測試等階段基本任務(wù)和技能方法。3培養(yǎng)自己的算法設(shè)計和算法分析能力,提高綜合運用所學(xué)的理論知識和方法獨立分析和解決問題的能力。4訓(xùn)練用系統(tǒng)的觀點和軟件開發(fā)一般規(guī)范進行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的工作方法、作風(fēng)和相互合作的精神。5綜合運用鏈表6的查找、插入和刪除,理論結(jié)合實際,將其運用到文章編輯這一實驗中。使這些知識得到進一步鞏固、加深和拓展。利用模塊的思想,模塊之間用指針連接,減少了不必要的麻煩。鞏固加深指針的用途,理解模塊的優(yōu)點。加深對鏈表的理解,全面認識鏈表操作的字符串的模式匹配操作。1.3課題要求課題名稱

6、:文章編輯具體要求:(1)靜態(tài)存儲一頁文章,每行最多不超過80個字符,共n行;(2)分別統(tǒng)計出其中英文字母數(shù)和空格數(shù)及整篇文章總字數(shù); (3)統(tǒng)計某一字符串在文章中出現(xiàn)的次數(shù),并輸出該次數(shù); (4)刪除某一子串,并將后面的字符前移; (5)存儲結(jié)構(gòu)使用線性表3,分別用幾個子函數(shù)實現(xiàn)相應(yīng)的功能。 2 設(shè)計思路與方案2.1函數(shù)流程根據(jù)課題文章編輯的詳細要求,可將程序的運行分為三個模塊,即文章輸入和文章輸出模塊、指令輸入和指令判斷模塊、執(zhí)行指令操作模塊。構(gòu)造多個線性表,將輸入的文章的每一行字符,都分別靜態(tài)存儲4在相應(yīng)的線性表中。每個線性表的存儲容量不超過80個字符。 文

7、章輸入結(jié)束后,程序輸出指令菜單,列出程序可以合法執(zhí)行的操作指令,并選擇輸入合法的指令,以執(zhí)行相應(yīng)的指令操作。 依照課題要求,程序設(shè)計了6大功能,分別為統(tǒng)計文章中總字符數(shù)、統(tǒng)計文章中空格個數(shù)、統(tǒng)計文章中數(shù)字個數(shù)、統(tǒng)計文章中英文字母個數(shù)、刪除文章中指定字符串、統(tǒng)計文章中指定字符串出現(xiàn)次數(shù),并且為每一項功能提供相信的執(zhí)行指令。程序的執(zhí)行流程如圖2.1所示。首先按要求輸入文章,然后按照指令菜單選擇要執(zhí)行的指令,程序判斷指令,并且執(zhí)行相應(yīng)的指令操作,輸出指令執(zhí)行結(jié)果后,重新返回指令菜單,再次等待指令輸入。指令書輸入和指令執(zhí)行為無限循環(huán),在用戶退出程序前,程序不會自動結(jié)束。 圖2.1 函數(shù)執(zhí)行流程圖2.2

8、功能函數(shù) 為實現(xiàn)6個執(zhí)行指令操作,分別設(shè)計相應(yīng)的功能函數(shù),并運用c語言數(shù)據(jù)結(jié)構(gòu)構(gòu)造相關(guān)代碼。功能函數(shù)名以功能說明如表2.2所示。表2-1 功能函數(shù)列表函數(shù)功能void countall()統(tǒng)計文章中總字符數(shù)void countspace()統(tǒng)計文章中空格個數(shù)void countnumber()統(tǒng)計文章中數(shù)字個數(shù)void conuntletter()統(tǒng)計文章中英文字母數(shù)void delstring()刪除文章中指定字符串void findstring()統(tǒng)計文章中指定字符串出現(xiàn)次數(shù)3 詳細實現(xiàn)3.1數(shù)據(jù)結(jié)構(gòu)設(shè)計(1)定義結(jié)構(gòu)體:typedef struct line char *data; st

9、ruct line *next;line; line為單鏈表存儲結(jié)構(gòu)。3.2功能函數(shù)設(shè)計(1)統(tǒng)計文章總字數(shù):void countall(line * &head)將p付給表頭指針; 初始化count為0; 用do-while語句遍歷鏈表,同時統(tǒng)計字符串中總字數(shù); 用printf語句輸出文章中總字數(shù),調(diào)用子函數(shù)menu()。(2)統(tǒng)計文章中的空格數(shù):void countspace(line * &head) 將p付給表頭指針; 初始化count為0; 用do-while語句遍歷鏈表,同時統(tǒng)計字符串中空格數(shù); 用printf語句輸出文章中空格數(shù),調(diào)用子函數(shù)menu()。(3) 統(tǒng)

10、計文章中數(shù)字個數(shù):void countnumber(line* &head) 將p付給表頭指針; 初始化count為0; 用do-while語句遍歷鏈表,同時統(tǒng)計字符串中數(shù)字個數(shù); 用printf語句輸出文章中數(shù)字個數(shù),調(diào)用子函數(shù)menu()。 (4) 統(tǒng)計文章中英文字母數(shù):void countletter(line * &head) 將p付給表頭指針; 初始化count為0; 用do-while語句遍歷鏈表,同時統(tǒng)計字符串中英文字母數(shù) 用printf語句輸出文章中英文字母數(shù),調(diào)用子函數(shù)menu()。(5)查找字符串的函數(shù):void findstring(line * &

11、;head)將p付給表頭指針;初始化count為0;初始化len1,用來保存當(dāng)前行的總字符數(shù);定義整型變量len2表示待統(tǒng)計字符串的長度;用printf語句提醒用戶輸入要統(tǒng)計的字符串;用do-while語句遍歷鏈表,同時用for循環(huán)和if語句找出指定字符串在文章中出現(xiàn)的次數(shù);用printf語句輸出指定字符串在文章中出現(xiàn)的總次數(shù),調(diào)用子函數(shù)menu()。(6)刪除字符串的函數(shù):void delstring(line * &head) 先創(chuàng)建一個delstringword,其中包含兩個字符串char *s和char *str,用*s表示輸入的字符串,*str表示要刪除的字符。這個函數(shù)的功能

12、是找到字符串s在字符串中出現(xiàn)的位置并刪除該字符串。 定義字符串的刪除函數(shù)delstring(),用do-while語句遍歷鏈表,語句中再套用if語句,并調(diào)用delstringword()進行刪除。 3.3函數(shù)分析(1)void countall(line * &head)本函數(shù)的作用是統(tǒng)計整篇文章的所有字符數(shù),包括空格。返回統(tǒng)計結(jié)果之后會調(diào)用menu方法打印指令菜單。void countall(line * &head) line *p=head; int count=0; do count+=strlen(p->data); while(p=p->next)!=n

13、ull); printf("文章總字數(shù): %d n",count); printf("*n"); printf("n"); menu();(2)void countspace(line * &head)本函數(shù)的作用是統(tǒng)計字符串鏈表中的空格個數(shù),在統(tǒng)計完空格個數(shù)后,調(diào)用menu方法打印指令菜單。void countspace(line * &head) line *p=head; int count=0; do int len=strlen(p->data); for(int i=0;i<len;i+) if

14、(p->datai=32)count+; while(p=p->next)!=null); printf("文章中空格個數(shù): %d n", count); printf("*n"); printf("n"); menu();(3)void countnumber(line * &head) 本函數(shù)的作用是統(tǒng)計字符串鏈表中的數(shù)字個數(shù),在統(tǒng)計完數(shù)字個數(shù)后,調(diào)用menu方法打印指令菜單。void countnumber(line * &head) line *p=head; int count=0; do int

15、 len=strlen(p->data); for(int i=0;i<len;i+) if(p->datai>=48 && p->datai<=57)count+; while(p=p->next)!=null); printf("文章中數(shù)字個數(shù): %d n",count); printf("*n");printf("n"); menu();(4)void countletter(line * &head)本函數(shù)的作用是統(tǒng)計整個字符串鏈表中英文字母的個數(shù)。遍歷完成之后

16、會調(diào)用menu方法打印指令菜單。void countletter(line * &head) line *p=head; int count=0;do int len=strlen(p->data); /計算當(dāng)前data里的數(shù)據(jù)元素個數(shù) for(int i=0;i<len;i+)if(p->datai>='a'&&p->datai<='z')|(p->datai>='a'&&p->datai<='z') count+; /計算字母數(shù)

17、 while(p=p->next)!=null); /遍歷鏈表 printf("文章中英文字母個數(shù): %d n", count); /返回文章里 printf("*n");printf("n"); menu();(5)void findstring(line * &head)用戶調(diào)用這個方法查找相應(yīng)字符串的出現(xiàn)在文章中的次數(shù)。統(tǒng)計后調(diào)用menu()方法打印指令菜單。void findstring(line * &head) line *p=head; int count=0;int len1=0; int len

18、2; int i,j,k; char str120; printf("n"); printf("請輸入要統(tǒng)計的字符串:"); scanf("%s",str1); len2=strlen(str1); do len1=strlen(p->data); for(i=0;i<len1;i+) if(p->datai=str10) k=0; for(j=0;j<len2;j+) if(p->datai+j=str1j) k+; if(k=len2) count+;i=i+k-1; while(p=p->ne

19、xt)!=null); /遍歷鏈表 printf("該字符串在文中出現(xiàn)的次數(shù): %d n",count); printf("*n");printf("n"); menu();(6)void delstring(line * &head)刪除字符串的函數(shù),通過這個函數(shù),刪除出現(xiàn)在字符串鏈表里的所有的輸入的字符片段。最后調(diào)用menu方法打印指令菜單。void delstring(line * &head) line *p=head;char str20; printf("請輸入要刪除的字符串: ");

20、scanf("%s",str); do if(strstr(p->data,str)!=null)delstringword(p->data,str);while(p=p->next)!=null);printf("刪除指定字符串后的文章為: n");output(head);printf("*n");printf("n");menu();4 運行環(huán)境與結(jié)果4.1運行環(huán)境本程序的運行環(huán)境為以windows 7系統(tǒng)pc上的visual c+ 6.0。4.2運行結(jié)果如圖4.1,所示,輸入一段包含漢字、

21、英文大小寫字母、阿拉伯?dāng)?shù)字、空格、特殊字符的文章,每行都不超過80個字符,以“ctrl+e(e)”為結(jié)束符。圖4.1 文章輸入如圖4.2所示,輸入指令“2”,執(zhí)行“統(tǒng)計文章中總字符數(shù)”指令,執(zhí)行結(jié)果為“399”。圖4.2 統(tǒng)計文章中總字符數(shù)如圖4.3所示,輸入指令“3”,執(zhí)行“統(tǒng)計文章中空格個數(shù)”指令,執(zhí)行結(jié)果為“57”。圖4.3 統(tǒng)計文章中空格個數(shù)如圖4.4所示,輸入指令“3”,執(zhí)行“統(tǒng)計文章中數(shù)字個數(shù)”指令,執(zhí)行結(jié)果為“6”。圖4.4 統(tǒng)計文章中數(shù)字個數(shù)如圖4.5所示,輸入指令“4”,執(zhí)行“統(tǒng)計文章中英文字母數(shù)”指令,包括英文大寫字母和英文小寫字母,執(zhí)行結(jié)果為“399”。圖4.5 統(tǒng)計文章

22、中英文字母數(shù)如圖4.6所示,輸入指令“5”,執(zhí)行“刪除文章中指定字符串”指令,輸入要刪除的字符串“n”,執(zhí)行結(jié)果如下。 圖4.6 刪除文章中指定字符串如圖4.7所示,輸入指令“6”,執(zhí)行“統(tǒng)計文章中指定字符串出現(xiàn)次數(shù)”指令,輸入要統(tǒng)計的字符串為“printf”,執(zhí)行結(jié)果為“8”。圖4.7 統(tǒng)計文章中指定字符串出現(xiàn)次數(shù)如圖4.8所示,輸入指令“7”,輸出“指令輸入錯誤”。圖4.8 指令輸入錯誤本程序的文章為用戶輸入的文章,只能做即時輸入的統(tǒng)計、編輯,而不能對已有的磁盤文件中的文章進行統(tǒng)計、編輯,如果引入文件流類,就可以打開磁盤文件,對其進行統(tǒng)計、編輯并保存,這是有待改進的。5結(jié)束語此次課程設(shè)計使

23、我對數(shù)據(jù)結(jié)構(gòu)方面的知識有了更加深入的了解,也使我認識到自己在學(xué)習(xí)編程方面還有很多的不足。今后我要多讀一些編程方面的書籍,不能只拘泥于課本上的知識,并注重理論與實踐的結(jié)合,多上機練習(xí)編寫程序,提高自己的實際動手能力和獨立思考的能力,不斷充實自己,更好的掌握編程思想。同時,此次課程設(shè)計也使我對編程產(chǎn)生了興趣,特別是在通過查書籍資料以及網(wǎng)上資源的情況下能夠使程序運行成功,得到了一種成就感,相對于以前的一組人完成一個程序,此次一個人獨立完成成就感更大一些。參考文獻1 嚴蔚敏,吳偉民數(shù)據(jù)結(jié)構(gòu)(c語言版)北京:清華大學(xué)出版社,20022 許卓群數(shù)據(jù)結(jié)構(gòu)與算法北京:高等教育出版社,20043 金遠平數(shù)據(jù)結(jié)構(gòu)

24、(c語言版) 北京:清華大學(xué)出版社,20054 殷人昆數(shù)據(jù)結(jié)構(gòu)(c語言版) 北京:清華大學(xué)出版社,20015 g.perryc+程序設(shè)計教程. 北京:清華大學(xué)出版社,1994 6 嚴蔚敏,吳偉民數(shù)據(jù)結(jié)構(gòu)習(xí)題集(c語言版)北京:清華大學(xué)出版社,200417附錄代碼清單:#include <string.h>#include <stdio.h> typedef struct line char *data; struct line *next;line; /創(chuàng)建鏈表,向里面輸入文本數(shù)據(jù)void output(line * &head) /向屏幕輸出文字 line *

25、p=head;/printf(":n");do printf("%sn",p->data); while(p=p->next)!=null); /遍歷鏈表printf("n");void menu()printf("*編輯指令*n");printf("1:統(tǒng)計文章中總字符數(shù) n");printf("2:統(tǒng)計文章中空格個數(shù) n");printf("3:統(tǒng)計文章中數(shù)字個數(shù) n");printf("4:統(tǒng)計文章中英文字母數(shù) n")

26、;printf("5:刪除文章中指定字符串 n");printf("6:統(tǒng)計文章中指定字符串出現(xiàn)次數(shù)n");printf("*n");void create(line * &head)printf ("請輸入文章,每行最多80個字符,以ctrl+e(e)為結(jié)束符n");line *p=new line; /首先為鏈表建立一個附加表頭結(jié)點 head=p; /將付給表頭指針char tmp100;while(1)gets(tmp); /輸入字符串if(strlen(tmp)>80)printf("

27、;每行最多輸入80個字符!");break;if(tmp0=5)break; /如果發(fā)現(xiàn)輸入e,則退出輸入 p=p->next=new line;p->data=new charstrlen(tmp)+1; /為結(jié)點分配空間 strcpy(p->data,tmp);if(tmpstrlen(tmp)-1=5) /除去最后一個控制符e p->datastrlen(tmp)-1='0'break;p->next=null; /最后一個指針為空head=head->next;printf("n");menu();voi

28、d countletter(line * &head) /統(tǒng)計英文字母數(shù)line *p=head; int count=0;do int len=strlen(p->data); /計算當(dāng)前data里的數(shù)據(jù)元素個數(shù)for(int i=0;i<len;i+)if(p->datai>='a'&&p->datai<='z')|(p->datai>='a'&&p->datai<='z') count+; /計算字母數(shù)while(p=p-&g

29、t;next)!=null); /遍歷鏈表printf("文章中英文字母個數(shù): %d n", count);/返回文章里printf("*n");printf("n");menu();void countnumber(line * &head) line *p=head;int count=0;do int len=strlen(p->data);for(int i=0;i<len;i+)if(p->datai>=48 && p->datai<=57)count+; whil

30、e(p=p->next)!=null); printf("文章中數(shù)字個數(shù): %d n",count);printf("*n");printf("n");menu();void countspace(line * &head) line *p=head; int count=0;do int len=strlen(p->data);for(int i=0;i<len;i+)if(p->datai=32)count+; while(p=p->next)!=null); printf("文章中

31、空格個數(shù): %d n", count);printf("*n");printf("n");menu();void countall(line * &head) line *p=head; int count=0; do count+=strlen(p->data); while(p=p->next)!=null); printf("文章總字數(shù): %d n",count);printf("*n");printf("n");menu();void findstring(

32、line * &head) line *p=head;int count=0;int len1=0; int len2; int i,j,k;char str120; printf("n");printf("請輸入要統(tǒng)計的字符串:");scanf("%s",str1);len2=strlen(str1);do len1=strlen(p->data); for(i=0;i<len1;i+) if(p->datai=str10)k=0;for(j=0;j<len2;j+)if(p->datai+j=str1j) k+;if(k=len2)count+;i=i+k-1;

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論