數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--文章編輯系統(tǒng)_第1頁
已閱讀1頁,還剩19頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)</b></p><p>  題 目 文章編輯系統(tǒng) </p><p><b>  文章編輯系統(tǒng)</b></p><p><b>  1、內(nèi)容綜述:</b></p><

2、;p>  此系統(tǒng)要求功能:輸入一頁文字,程序可以統(tǒng)計(jì)出文字、數(shù)字、空格的個(gè)數(shù)。</p><p>  基本要求靜態(tài)存儲(chǔ)一頁文章,每行最多不超過80個(gè)字符,共N行;s要求(1)分別統(tǒng)計(jì)出其中英文字母數(shù)和空格數(shù)及整篇文章總字?jǐn)?shù);(2)統(tǒng)計(jì)某一字符串在文章中出現(xiàn)的次數(shù),并輸出該次數(shù);(3)刪除某一子串,并將后面的字符前移。</p><p><b>  可行性分析:</b>

3、;</p><p>  對于文本的輸入采用頭插法將文本信息存儲(chǔ)到鏈表已申請好的存儲(chǔ)空間中對于文本內(nèi)容的統(tǒng)計(jì)使用循環(huán)對已存儲(chǔ)的文章進(jìn)行匹配大寫字母數(shù)、小寫字母數(shù)、空格數(shù)、數(shù)字?jǐn)?shù)直接通過條件比較即可得到對于文本內(nèi)容的處理查找部分仍是使用循環(huán)對已存儲(chǔ)的文章進(jìn)行匹配判斷需要查找的字符或者字符串是否與文章中某部分內(nèi)容相同如果存在相同的記錄相同的個(gè)數(shù)。刪除部分先使用程序的查找功能對文章中需要?jiǎng)h除的字符或者字符

4、串進(jìn)行查找然后對其進(jìn)行刪除。 </p><p><b>  2、系統(tǒng)設(shè)計(jì)</b></p><p><b>  2.1需求分析:</b></p><p>  存儲(chǔ)結(jié)構(gòu)使用線性表,分別用幾個(gè)子函數(shù)實(shí)現(xiàn)相應(yīng)的功能;</p><p>  輸入數(shù)據(jù)的形式和范圍:可以輸入大寫、小寫的英文字母、任何數(shù)字及標(biāo)點(diǎn)符

5、號(hào)。</p><p>  輸出形式:(1)、分行輸出用戶輸入的各行字符;</p><p> ?。?)、分4行輸出"全部字母數(shù)"、"數(shù)字個(gè)數(shù)"、"空格個(gè)數(shù)"、"文章總字?jǐn)?shù)"</p><p> ?。?)、輸出刪除某一字符串后的文章;</p><p><b>

6、  2.2總體設(shè)計(jì)</b></p><p>  根據(jù)題目,可得主程序設(shè)計(jì)流程圖如下所示:</p><p><b>  圖2-1</b></p><p>  文章輸入、瀏覽、統(tǒng)計(jì)串、統(tǒng)計(jì)及刪除的詳細(xì)流程如圖2—2所示:</p><p>  回車 回車 回車</p><p>

7、;<b>  Ctrl+E</b></p><p><b>  回車</b></p><p><b>  回車</b></p><p><b>  回車</b></p><p><b>  回車</b></p><

8、p>  回車 回車</p><p><b>  接上頁</b></p><p><b>  回車</b></p><p><b>  回車回車</b></p><p><b>  回車

9、</b></p><p><b>  回車</b></p><p><b>  圖2-2</b></p><p>  2.2.1.輸入模塊</p><p>  存儲(chǔ)結(jié)構(gòu):采用單鏈表結(jié)構(gòu)存儲(chǔ)文章,每個(gè)結(jié)點(diǎn)存儲(chǔ)一行,每行最長不超過80個(gè)字符。</p><p>  結(jié)構(gòu)

10、定義:typedef struct line</p><p><b>  {</b></p><p>  char *data; //字符串指針需要時(shí)動(dòng)態(tài)分配內(nèi)存</p><p>  struct line *next;</p><p><b>  }LINE;</b></p>

11、<p>  算法描述:用gets函數(shù)接收輸入,每遇到一個(gè)回車換行就新建一個(gè)結(jié)點(diǎn),將當(dāng)前行存入其data域。當(dāng)發(fā)現(xiàn)輸入為^E時(shí),在Data的最后加上字符串結(jié)束標(biāo)志,并置當(dāng)前結(jié)點(diǎn)的Next指針域?yàn)镹ULL。</p><p><b>  2.2.2統(tǒng)計(jì)模塊</b></p><p>  統(tǒng)計(jì)模塊包括統(tǒng)計(jì)全部字母數(shù),統(tǒng)計(jì)數(shù)字個(gè)數(shù),統(tǒng)計(jì)空格個(gè)數(shù),以及統(tǒng)計(jì)文章總字?jǐn)?shù),這四

12、個(gè)部分的實(shí)現(xiàn)算法大體相同,四者的關(guān)系是:全部字母數(shù)+數(shù)字個(gè)數(shù)+空格個(gè)數(shù)=文章總字?jǐn)?shù),也就是說可以在統(tǒng)計(jì)出其中三者的前提下計(jì)算出第四個(gè)的數(shù)量。</p><p>  另外一個(gè)重要的統(tǒng)計(jì)功能是統(tǒng)計(jì)某一字符串在整篇文章中出現(xiàn)的次數(shù),這個(gè)需要用到串的模式匹配算法來實(shí)現(xiàn)。</p><p><b>  2.2.3刪除模塊</b></p><p>  刪除模塊

13、的算法思想類同統(tǒng)計(jì)字符串的算法思想,由于采用了鏈表的存儲(chǔ)結(jié)構(gòu),使得刪除算法的時(shí)間復(fù)雜度大大減少。</p><p>  2.2.4 查找模塊</p><p>  int FindString(LINE * &head,char *str) /*統(tǒng)計(jì)str在文章中出現(xiàn)的次數(shù)*/</p><p>  求在一行中Str出現(xiàn)的次數(shù)的流程圖:</p>&l

14、t;p> ?、伲檎业谝粋€(gè)字符,如果有第一個(gè)字符即p->data[i]==str[0],設(shè)計(jì)數(shù)器k=0</p><p> ?、冢檎疫@個(gè)字符后面的字符與要查找的字符串是否匹配即p->data[i+j]==str[j],如果匹配k++</p><p>  ③.重復(fù)第二步,如果k=len2,則查找到,count++;如果沒查找到,重新進(jìn)行第一步</p><

15、p><b>  圖2-3</b></p><p>  void delstringword(char *s,char *str) /*刪除字符串*s中的字符串*str*/</p><p><b>  實(shí)現(xiàn)思想:</b></p><p> ?、伲畯淖址畇中尋找str第一次出現(xiàn)的位置 *p=strstr(s,str)

16、;</p><p> ?、冢甽en=strlen(s);i=len-strlen(p)即前i項(xiàng)恰好不含要?jiǎng)h除的字符串,將前i項(xiàng)復(fù)制到tmp中</p><p> ?、郏甹=i+strlen(str) 即要?jiǎng)h除的字符串在i+1和j之間,將j之后的字符串復(fù)制到tmp中</p><p> ?、埽畬mp賦給串s,返回s</p><p><b&g

17、t;  圖2-3</b></p><p><b>  2.3詳細(xì)設(shè)計(jì):</b></p><p>  #include <string.h></p><p>  #include <stdio.h></p><p>  #include <stdlib.h></p>

18、;<p>  #include <conio.h></p><p>  typedef struct line</p><p><b>  {</b></p><p>  char *data;</p><p>  struct line *next;</p><p>&

19、lt;b>  }LINE;</b></p><p>  void Create(LINE * &head)</p><p><b>  {</b></p><p>  printf ("請輸入一頁文章,以Ctrl+E為結(jié)尾(每行最多輸入80字符!):\n");</p><p>

20、;  LINE *p=new LINE; /*首先為鏈表 建立一個(gè)附加表頭結(jié)點(diǎn)*/ </p><p>  head=p; /*將p付給 表頭指針*/</p><p>  char ch[100];</p><p>&l

21、t;b>  while(1)</b></p><p><b>  {</b></p><p>  gets(ch); /*輸入字符串!*/</p><p>  if(strlen(ch)>80)</p><p><b>  {</b><

22、;/p><p>  printf("每行最多輸入80字符");</p><p><b>  break;</b></p><p><b>  }</b></p><p>  if(ch[0]==5)break; /*如果發(fā)現(xiàn)輸入 ^E,則退出輸入*/

23、</p><p>  p=p->next=new LINE;</p><p>  p->data=new char[strlen(ch)+1]; /*為結(jié)點(diǎn)分配空間 */ </p><p>  strcpy(p->data,ch);</p><p>  if(ch[strlen(ch)-1]==5)

24、 /*除去最后一個(gè)控制符 ^E */</p><p>  { </p><p>  p->data[strlen(ch)-1]='\0';</p><p><b>  break;</b></p><p><b>  }</b></p>

25、<p><b>  }</b></p><p>  p->next=NULL; /*最后的一個(gè)指針為空 */</p><p>  head=head->next;</p><p><b>  }</b></p><p>  /**文

26、本字?jǐn)?shù)統(tǒng)計(jì)**/</p><p>  int Count_Space(LINE* &head)//統(tǒng)計(jì)空格數(shù) </p><p><b>  {</b></p><p>  LINE *p=head;</p><p>  int asc_space=32;</p><p>  int cou

27、nt=0;</p><p><b>  int i;</b></p><p><b>  int Len;</b></p><p><b>  do{</b></p><p>  Len=strlen(p->data);</p><p>  for

28、(i=0;i<Len;i++)</p><p>  if(p->data[i]==asc_space)</p><p><b>  count++;</b></p><p>  }while((p=p->next)!=NULL);</p><p>  return count;</p>&

29、lt;p><b>  }</b></p><p>  int Count_Num(LINE * &head)//統(tǒng)計(jì)數(shù)字個(gè)數(shù) </p><p><b>  {</b></p><p>  LINE *p=head;</p><p>  int count=0;</p>&

30、lt;p><b>  int Len;</b></p><p><b>  int i;</b></p><p><b>  do{</b></p><p>  Len=strlen(p->data);</p><p>  for(i=0;i<Len;i++)

31、</p><p>  if(p->data[i]>=48 && p->data[i]<=57)</p><p><b>  count++;</b></p><p>  }while((p=p->next)!=NULL);</p><p>  return count; &l

32、t;/p><p><b>  }</b></p><p>  int Count_All_Word(LINE * &head)//統(tǒng)計(jì)文章的總字?jǐn)?shù) </p><p><b>  {</b></p><p>  LINE *p=head;</p><p>  int cou

33、nt=0;</p><p><b>  do{</b></p><p>  count+=strlen(p->data);</p><p>  }while((p=p->next)!=NULL);</p><p>  return count;</p><p><b>  }

34、</b></p><p>  int Count_Letter(LINE * &head)//統(tǒng)計(jì)字母數(shù) </p><p><b>  {</b></p><p>  LINE *p=head;</p><p>  int count=0;</p><p><b> 

35、 int Len;</b></p><p><b>  int i;</b></p><p><b>  do{</b></p><p>  Len=strlen(p->data);</p><p>  for(i=0;i<Len;i++)</p><p&

36、gt;  if(p->data[i]>='a' && p->data[i]<='z'||p->data[i]>='A' && p->data[i]<='Z')count++; //計(jì)算字母個(gè)數(shù)</p><p><b>  }</b></p

37、><p>  while((p=p->next)!=NULL);</p><p>  return count;</p><p><b>  }</b></p><p>  int Find_Word(LINE * &head,char *sch)//統(tǒng)計(jì) sch 在文章中出現(xiàn)的次數(shù)</p>&l

38、t;p><b>  {</b></p><p>  LINE *p=head;</p><p>  int count=0;</p><p>  int len1=0;</p><p>  int len2=strlen(sch);</p><p>  int i,j,k;</p>

39、;<p><b>  do{</b></p><p>  len1=strlen(p->data);//當(dāng)前行的字符數(shù)</p><p>  for(i=0;i<len1;i++)</p><p><b>  {</b></p><p>  if(p->data[i]=

40、=sch[0])</p><p><b>  {</b></p><p><b>  k=0;</b></p><p>  for(j=0;j<=len2-1;j++)</p><p>  if(p->data[i+j]==sch[j])k=k+1;</p><p&g

41、t;  if(k==len2) {count++;i=i+k-1;}</p><p><b>  }</b></p><p><b>  }</b></p><p>  }while((p=p->next)!=NULL);</p><p>  return count; </p>

42、<p><b>  }</b></p><p>  /**特定字符串的刪除**/</p><p>  void del_string_word(char *s,char *sch) </p><p><b>  {</b></p><p>  char *p=strstr(s,sch)

43、;</p><p>  char tmp[80];</p><p>  int len=strlen(s);</p><p><b>  int k,kk;</b></p><p>  int i=len-strlen(p);</p><p>  int j=i+strlen(sch);</

44、p><p>  int count=0;</p><p>  for(k=0;k<i;k++)</p><p>  tmp[count++]=s[k];</p><p>  for(kk=j;kk<len;kk++)</p><p>  tmp[count++]=s[kk];</p><p&

45、gt;  tmp[count]='\0';</p><p>  strcpy(s,tmp);</p><p><b>  }</b></p><p>  void Del_String(LINE * &head,char *sch)//刪除指定的字符串</p><p><b>  {&l

46、t;/b></p><p>  LINE *p=head;</p><p><b>  do{</b></p><p>  while(strstr(p->data,sch)!=NULL)</p><p>  del_string_word(p->data,sch);</p><p&

47、gt;  }while((p=p->next)!=NULL);</p><p><b>  }</b></p><p>  /**打印輸入的文本**/</p><p>  void OutPutTxt(LINE * &head)//向屏幕輸出文章 </p><p><b>  {</b>

48、;</p><p>  LINE *p=head;</p><p>  printf("文本文件輸出如下:");</p><p><b>  do{</b></p><p>  printf("%s\n",p->data);</p><p>  }wh

49、ile((p=p->next)!=NULL);</p><p><b>  }</b></p><p>  void Count(LINE * &head)</p><p><b>  {</b></p><p>  printf("文章統(tǒng)計(jì)信息結(jié)果:\n");&l

50、t;/p><p>  printf("全部字母數(shù):%d\n",Count_Letter(head));</p><p>  printf("數(shù)字個(gè)數(shù):%d\n",Count_Num(head));</p><p>  printf("空格個(gè)數(shù): %d \n",Count_Space(head));</p&

51、gt;<p>  printf("文章總字?jǐn)?shù): %d\n",(Count_All_Word(head)+Count_Num(head)+Count_Space(head)+Count_Letter(head))/2);</p><p>  printf("\n");</p><p><b>  }</b></

52、p><p>  void main()</p><p><b>  {</b></p><p>  LINE *head;</p><p>  char sch[20];</p><p>  char ID[10];</p><p><b>  char ch;<

53、;/b></p><p>  char tmp_sch[20];</p><p>  printf(" 文章編輯系統(tǒng) \n");</p><p>  printf(" 開發(fā)者:吉星星 \n");&

54、lt;/p><p>  printf(" 學(xué)號(hào):20102344910\n");</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  printf(&

55、quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");</p><p>  printf(" 1.新建文本\n");</p><p>  printf(" 2.瀏覽

56、輸入文本\n");</p><p>  printf(" 3.文本字符統(tǒng)計(jì)\n");</p><p>  printf(" 4.指定字符串的統(tǒng)計(jì)\n");</p><p>  printf("

57、 5.指定字符串的刪除\n");</p><p>  printf(" 6.退出\n");</p><p>  printf(" ****************************************************************\n");<

58、;/p><p>  printf("請輸入序號(hào):");</p><p>  scanf("%s",ID);</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  if(strcmp

59、(ID,"1")==0)</p><p><b>  {</b></p><p>  printf("新建文本要覆蓋已有文本,是否繼續(xù)輸入?(Y/N)\n");</p><p>  getchar();</p><p>  scanf("%c",&ch)

60、;</p><p>  system("cls");</p><p>  if(ch=='n'||ch=='N')</p><p><b>  break;</b></p><p>  else if(ch=='y'||ch=='Y')&

61、lt;/p><p>  Create(head);</p><p><b>  break;</b></p><p><b>  }</b></p><p>  else if(strcmp(ID,"2")==0)</p><p><b>  {&l

62、t;/b></p><p>  system("cls");</p><p>  OutPutTxt(head);</p><p><b>  break;</b></p><p><b>  }</b></p><p>  else if(strc

63、mp(ID,"3")==0)</p><p><b>  {</b></p><p>  system("cls");</p><p>  OutPutTxt(head);</p><p>  printf("\n");</p><p>

64、  Count(head);</p><p><b>  break;</b></p><p><b>  }</b></p><p>  else if(strcmp(ID,"4")==0)</p><p><b>  {</b></p>&

65、lt;p>  system("cls");</p><p>  printf("請輸入要統(tǒng)計(jì)的字符串:");</p><p>  scanf("%s",sch);</p><p>  printf("\n");</p><p>  OutPutTxt(hea

66、d);</p><p>  printf("\n");</p><p>  printf("出現(xiàn)的次數(shù)為: %d\n",Find_Word(head,sch));</p><p><b>  break;</b></p><p><b>  }</b>&

67、lt;/p><p>  else if(strcmp(ID,"5")==0)</p><p><b>  {</b></p><p>  system("cls");</p><p>  printf("請輸入要?jiǎng)h除的某一字符串:");</p><

68、;p>  scanf("%s",tmp_sch);</p><p>  printf("\n");</p><p>  OutPutTxt(head);</p><p>  Del_String(head,tmp_sch);</p><p>  printf("刪除后");&l

69、t;/p><p>  OutPutTxt(head);</p><p><b>  break;</b></p><p><b>  }</b></p><p>  else if(strcmp(ID,"6")==0)</p><p><b>  {

70、</b></p><p>  printf("你確定要退出系統(tǒng)嗎?(Y/N)\n");</p><p>  getchar();</p><p>  scanf("%c",&ch);</p><p>  system("cls");</p><

71、p>  if(ch=='n'||ch=='N')</p><p><b>  break;</b></p><p>  else if(ch=='y'||ch=='Y') exit(0);</p><p><b>  }</b></p>&

72、lt;p><b>  else</b></p><p><b>  {</b></p><p>  system("cls");</p><p>  printf("您輸入字母有錯(cuò),請重新輸入!\n\n");</p><p><b>  bre

73、ak;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  3、

74、系統(tǒng)實(shí)現(xiàn)</b></p><p><b>  圖3-2</b></p><p><b>  4 系統(tǒng)測試</b></p><p><b>  1、主界面</b></p><p><b>  圖4-1</b></p><p&g

75、t;<b>  2、新建文本界面</b></p><p><b>  圖4-2</b></p><p><b>  3、瀏覽文本</b></p><p><b>  圖4-3</b></p><p><b>  4、文本字符統(tǒng)計(jì)</b>

76、;</p><p><b>  圖4-4</b></p><p><b>  5、特定字符串統(tǒng)計(jì)</b></p><p><b>  圖4-5</b></p><p><b>  6、特定字符串刪除</b></p><p><

77、b>  圖4-6</b></p><p><b>  5 、結(jié)束語</b></p><p>  本次課程設(shè)計(jì),所用知識(shí)基本上包括了所學(xué)的知識(shí)以及很多有關(guān)C++的基礎(chǔ)知識(shí),課程設(shè)計(jì)的過程中自己更更進(jìn)一步了解了鏈表,掌握了數(shù)據(jù)結(jié)構(gòu)的思想與方法,也使我認(rèn)識(shí)到自己在學(xué)習(xí)編程方面還有很多的不足。自己在編寫程序的過程中,不是所有知識(shí)一下就想起來的,而是出現(xiàn)了不少

78、錯(cuò)誤,通過調(diào)試,在查閱一些資料后,才整理出來的。今后我要多讀一些編程方面的書籍,不能只拘泥于課本上的知識(shí),并注重理論與實(shí)踐的結(jié)合,多上機(jī)練習(xí)編寫程序,提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力,不斷充實(shí)自己,更好的掌握編程思想。</p><p><b>  參考文獻(xiàn):</b></p><p>  [1] 李根強(qiáng).《數(shù)據(jù)結(jié)構(gòu)(c++版) 》.第二版, 中國水利水電出版社&l

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論