文本編輯器課程設(shè)計(jì)報(bào)告_第1頁
已閱讀1頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  目錄</b></p><p>  問題描述-------------------------------------------------------------------------2</p><p>  1、基本要求----------------------------------------------------------

2、------------2</p><p>  2、提高要求----------------------------------------------------------------------2</p><p>  二、需求分析-------------------------------------------------------------------------2<

3、/p><p>  三、概要設(shè)計(jì)-------------------------------------------------------------------------3</p><p>  四、詳細(xì)設(shè)計(jì)-------------------------------------------------------------------------5</p><p&

4、gt;  1、文件操作----------------------------------------------------------------------5</p><p>  編輯操作----------------------------------------------------------------------10</p><p>  工具操作------------

5、----------------------------------------------------------19</p><p>  關(guān)于操作----------------------------------------------------------------------20</p><p>  五、編碼與調(diào)試分析-----------------------------

6、-----------------------------------20</p><p>  六、使用說明-------------------------------------------------------------------------22</p><p>  七、測(cè)試結(jié)果--------------------------------------------------

7、-----------------------22</p><p>  八、自學(xué)知識(shí)-------------------------------------------------------------------------26</p><p>  九、課程設(shè)計(jì)心得體會(huì)----------------------------------------------------------

8、---27</p><p><b>  一、問題的描述</b></p><p>  設(shè)計(jì)并編寫一個(gè)小型文本編輯器,使其具有通常文本編輯器(如Vi、Edlin)應(yīng)具備的基本功能。 </p><p>  1.基本要求:編輯器應(yīng)具備對(duì)文本文件的打開、保存、新建、查找、插人、刪除、修改、字符串替換、統(tǒng)計(jì)字?jǐn)?shù),統(tǒng)計(jì)行數(shù)等功能,對(duì)于超過一屏的長(zhǎng)文件,應(yīng)能夠

9、分頁顯示。設(shè)計(jì)用戶接口命令,實(shí)現(xiàn)對(duì)文本的編輯。</p><p>  2.提高要求:可以支持“* ”、“? ”等通配符,支持復(fù)制、粘貼等功能,支持多文檔同時(shí)編輯。設(shè)計(jì)用戶接口命令,實(shí)現(xiàn)對(duì)文本的編輯。</p><p><b>  二、需求分析</b></p><p>  文本編輯器的基本功能:</p><p>  該文本編輯

10、器是用windows編寫的一個(gè)程序,運(yùn)行后彈出文本編輯器的主界面,由鍵盤輸入或以打開的方式輸入或顯示文本文件內(nèi)容。其中程序的編輯項(xiàng)可對(duì)當(dāng)前的文本進(jìn)行撤銷、刪除、剪切、復(fù)制、粘貼、在文本里顯示當(dāng)前時(shí)間、全選、清除、查找、替換、統(tǒng)計(jì)等功能。程序的文件項(xiàng)可以對(duì)電腦上txt,c++等格式文件的打開、對(duì)當(dāng)前文本的保存和另存、對(duì)當(dāng)前文本的的新建以及退出文本編輯系統(tǒng)。程序的工具項(xiàng)為背景音樂,為用戶提供了優(yōu)美動(dòng)聽的音樂,僅在用戶編輯疲憊乏力的時(shí)候盡情的

11、享用。最后在程序的幫助項(xiàng)有對(duì)該小型文本編輯器的關(guān)于,用來介紹該程序,還有訪問鏈接百度,訪問114網(wǎng)頁大全,為用戶提供查找資料等功能服務(wù)。</p><p><b>  輸入形式:</b></p><p>  ①直接在文本編輯框中輸入文本內(nèi)容;</p><p> ?、谝源蜷_的方式打開并在文本框中顯示電腦的上文本。</p><p&

12、gt;<b>  輸出形式:</b></p><p>  ①對(duì)編輯框中尚無文本內(nèi)容時(shí)進(jìn)行查找、替換、統(tǒng)計(jì)等,程序會(huì)彈出一個(gè)提示尚無文本信息的小對(duì)話框,需輸入文本后再進(jìn)行以上操作。</p><p> ?、趯?duì)編輯框中已有文本內(nèi)容后進(jìn)行查找、替換、統(tǒng)計(jì)操作,程序?qū)棾雠c之對(duì)應(yīng)的對(duì)話框,根據(jù)所彈出的對(duì)話框的按鍵要求進(jìn)行之后的操作就可以。保存文件,另存為等功能都異曲同工,撤銷、

13、刪除、剪切、復(fù)制、 粘貼、等就直接在主文本編輯框中操作,直接在其顯示操作后的文本信 息。</p><p>  測(cè)試數(shù)據(jù)要求:任意一文本文件。</p><p><b>  概要設(shè)計(jì)</b></p><p><b>  抽象數(shù)據(jù)類型:</b></p><p>  直接運(yùn)用windows中的的窗口類,通

14、過消息響應(yīng),調(diào)用API函數(shù)實(shí)現(xiàn)有關(guān)對(duì)話框的操作功能,以及自己定義一個(gè)僅含有成員函數(shù)的普通類對(duì)文本字符進(jìn)行查找、替換、統(tǒng)計(jì)的輔助操作,對(duì)主對(duì)話框和副對(duì)話框中函數(shù)的回調(diào)和參數(shù)的回顯功能。</p><p><b>  主程序流程圖</b></p><p> ?。?)模塊調(diào)用關(guān)系:</p><p>  該文本編輯器函數(shù)括:WINAPI Main_Pro

15、c(), WINAPI Change_Proc(), WINAPI Find_Proc(), WINAPI Total_Proc(), Main_OnInitDialog(); Change _OnInitDialog(); Find_OnInitDialog(); Total_ OnInitDialog(); Main_OnCommand(); Change_ OnCommand(); Find_ OnCommand(); T

16、otal_ OnCommand(),Main_OnClose(),Change_ Main_OnClose(); Find__OnClose(); Total _OnClose(); Main_OnSize(), TCHAR * temp(),D_change()等函數(shù);其中每個(gè)對(duì)話框?qū)?yīng)一組函數(shù)例如主對(duì)話框包括WINAPI Main_Proc(), Main_OnInitDialog(),Main_OnCommand(),Main

17、_OnClose()函數(shù),Main_Proc()函數(shù)通過消息響應(yīng)調(diào)用M</p><p>  其函數(shù)調(diào)用關(guān)系如下:</p><p><b>  四、詳細(xì)設(shè)計(jì)</b></p><p><b>  〔1〕、文件操作:</b></p><p>  1、文件的新建的實(shí)現(xiàn):</p><p&g

18、t;  int ret=MessageBox(NULL,TEXT("是否把更改保存到新建的文本文檔!!!"),TEXT("溫馨提示"),MB_YESNO | MB_ICONQUESTION);</p><p>  if(ret==IDYES) //根據(jù)選擇如果保存</p><p><b>  {</b></p>

19、<p>  OPENFILENAME ofn; //文件對(duì)象</p><p>  char szFile[MAX_PATH]; //文件的大小,最大</p><p>  ZeroMemory(&ofn,sizeof(ofn)); //文件的初始化</p><p>  ofn.lStructSize = sizeof(ofn);</p>

20、;<p>  ofn.lpstrFile = szFile;</p><p>  ofn.lpstrFile[0] = TEXT('\0');</p><p>  ofn.nMaxFile = sizeof(szFile);</p><p>  ofn.lpstrFilter = TEXT("ALL\0*.*\0Text\0*

21、.TXT\0C++\0*.cpp\0"); //保存的文件類型</p><p>  ofn.nFilterIndex = 1;</p><p>  ofn.lpstrFileTitle = NULL;</p><p>  ofn.nMaxFileTitle = 0;</p><p>  ofn.lpstrInitialDir =

22、NULL;</p><p>  ofn.hwndOwner = hwnd;</p><p>  ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;</p><p>  ofn.lpstrTitle=TEXT("保存");</p><p>  if

23、 (GetSaveFileName(&ofn)) </p><p><b>  {</b></p><p><b>  FILE *fp;</b></p><p>  fp=fopen(szFile,"w"); //打開文件</p><p>  if(fp==NULL)

24、</p><p><b>  {</b></p><p>  MessageBox(NULL,TEXT("文件無法保存"),TEXT("嗚嗚"),MB_OK);</p><p><b>  }</b></p><p>  TCHAR str[10000];&l

25、t;/p><p>  TCHAR end[10000];</p><p>  memset(end,0,10000);</p><p>  GetDlgItemText(hwnd,IDC_EDIT1,str,sizeof(str));</p><p>  fputs(str,fp);</p><p>  fclose(fp

26、);</p><p><b>  }</b></p><p>  SetDlgItemText(hwnd,IDC_EDIT1,"");</p><p><b>  }</b></p><p><b>  else</b></p><p&g

27、t;<b>  {</b></p><p>  SetDlgItemText(hwnd,IDC_EDIT1,"");</p><p><b>  }</b></p><p>  2、文件打開的實(shí)現(xiàn):</p><p>  case ID_MENUITEMOPEN: /

28、/文本的打開</p><p><b>  {</b></p><p>  OPENFILENAME ofn;</p><p>  char szFile[MAX_PATH]; //保存路徑變量</p><p>  ZeroMemory(&ofn,sizeof(ofn));</p><p&g

29、t;  在這里我們使用ZeroMemory“函數(shù)”,ZeroMemory其實(shí)并不是函數(shù),看一下ZeroMemory的定義:</p><p>  ofn.lStructSize = sizeof(ofn);</p><p>  ofn.lpstrFile = szFile; </p><p>  //szFile是一個(gè)字符數(shù)組,那么szFile這個(gè)名字就代表這個(gè)字

30、符數(shù)組的首地址</p><p>  這是一個(gè)指針的應(yīng)用,把接收選擇文件名的數(shù)組的地址傳遞到GetOpenFileName函數(shù)中。 ofn.lpstrFile[0] = TEXT('\0');</p><p>  ofn.lpstrFile[0] = TEXT('\0');效果等價(jià)于ZeroMemory(szFile,sizeof(szFile

31、)/sizeof(char));</p><p>  ofn.nMaxFile = sizeof(szFile);</p><p>  ofn.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.txt\0");</p><p><b>  文件過濾器</b></p><p>

32、;  *.*就表示所有文件*.txt就表示所有文本文件abc*.*就表示所有以abc開頭的文件abc*.txt就表示所有以abc開頭的文本文件(txt) </p><p>  ofn.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.TXT\0");用“\0”分割出幾個(gè)段,每?jī)啥问且唤M過濾器,每組的第一個(gè)段代表過濾器的顯示的值,而第二段表示真正的過濾器<

33、/p><p>  ofn.nFilterIndex = 1; //選擇一個(gè)過濾器</p><p>  ofn.lpstrFileTitle = NULL;</p><p>  windows的一個(gè)慣例:結(jié)構(gòu)體的指針類型別名一般是LP+結(jié)構(gòu)體的名字GetOpenFileName(&ofn)而不是GetOpenFileName(ofn),因?yàn)镚etOpenFil

34、eName函數(shù)要的是OPENFILENAME的指針(8)只要用戶還沒關(guān)閉對(duì)話框,那么GetOpenFileName函數(shù)是停住的,同步模式的PlaySound以及getchar、scanf是一樣的。用戶關(guān)閉對(duì)話框,GetOpenFileName函數(shù)返回,返回值是BOOL,等于TRUE表示用戶選擇了文件,如果等于FALSE就表示用戶選擇了【取消】按鈕</p><p>  ofn.nMaxFileTitle = 0

35、;</p><p>  ofn.lpstrInitialDir = NULL;</p><p>  ofn.hwndOwner = hwnd;</p><p>  ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;</p><p>  if(GetOpenFileN

36、ame(&ofn)) </p><p><b>  {</b></p><p><b>  FILE *fp;</b></p><p>  fp=fopen(szFile,"r");</p><p>  if(fp==NULL)</p><p>&

37、lt;b>  {</b></p><p>  MessageBox(NULL,TEXT("文件打開錯(cuò)誤!"),TEXT("記事本"),MB_OK);</p><p><b>  }</b></p><p>  TCHAR line[256];</p><p>  

38、TCHAR end[10000];</p><p>  memset(line,0,256);</p><p>  memset(end,0,256);</p><p>  while(!feof(fp))</p><p><b>  {</b></p><p>  fgets(line,size

39、of(line),fp);</p><p>  lstrcat(end,line);</p><p>  int w=strlen(end);</p><p>  end[w-1]='\0';</p><p>  lstrcat(end,"\r\n");</p><p><b&

40、gt;  }</b></p><p>  SetDlgItemText(hwnd,IDC_RICHEDIT1,end);</p><p>  fclose(fp); //關(guān)閉文件</p><p><b>  }</b></p><p><b>  break;</b></p&

41、gt;<p><b>  }</b></p><p><b>  break;</b></p><p>  3、文件保存的實(shí)現(xiàn):</p><p>  case ID_MENUITEMSAVE: //文本的保存</p><p><b>  {</b>

42、</p><p>  OPENFILENAME ofnb;</p><p>  char bcFile[MAX_PATH];</p><p>  ZeroMemory(&ofnb,sizeof(ofnb));</p><p>  ofnb.lStructSize = sizeof(ofnb);</p><p>

43、  ofnb.lpstrFile = bcFile;</p><p>  ofnb.lpstrFile[0] = TEXT('\0');</p><p>  ofnb.nMaxFile = sizeof(bcFile);</p><p>  ofnb.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.txt\0&q

44、uot;);</p><p>  ofnb.nFilterIndex = 1;</p><p>  ofnb.lpstrFileTitle = NULL;</p><p>  ofnb.nMaxFileTitle = 0;</p><p>  ofnb.lpstrInitialDir = NULL;</p><p> 

45、 ofnb.hwndOwner = hwnd;</p><p>  ofnb.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST|OFN_OVERWRITEPROMPT;</p><p>  if (GetSaveFileName(&ofnb))</p><p><b>  {&l

46、t;/b></p><p>  FILE * fp = fopen (".txt","w"); //保存所有文件都為txt格式</p><p>  TCHAR baoc [100000]; //保存的最大容量為100000</p><p>  GetDlgItemText(hwnd,IDC_RICHEDIT1,

47、baoc,sizeof(baoc));</p><p>  fputs(baoc,fp);</p><p>  fclose(fp);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break;</

48、b></p><p>  退出文本編輯器的實(shí)現(xiàn):</p><p>  int ret=MessageBox(NULL,TEXT("是否把更改保存到新建的文本文檔!!!"),TEXT("溫馨提示"),MB_YESNO | MB_ICONQUESTION);</p><p>  if(ret==IDYES)</p>

49、;<p><b>  {</b></p><p>  OPENFILENAME ofn;</p><p>  char szFile[MAX_PATH];</p><p>  ZeroMemory(&ofn,sizeof(ofn));</p><p>  ofn.lStructSize = size

50、of(ofn);</p><p>  ofn.lpstrFile = szFile;</p><p>  ofn.lpstrFile[0] = TEXT('\0');</p><p>  ofn.nMaxFile = sizeof(szFile);</p><p>  ofn.lpstrFilter = TEXT("

51、ALL\0*.*\0Text\0*.TXT\0C++\0*.cpp\0");</p><p>  ofn.nFilterIndex = 1;</p><p>  ofn.lpstrFileTitle = NULL;</p><p>  ofn.nMaxFileTitle = 0;</p><p>  ofn.lpstrInitial

52、Dir = NULL;</p><p>  ofn.hwndOwner = hwnd;</p><p>  ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;</p><p>  ofn.lpstrTitle=TEXT("保存");</p><p&g

53、t;  if (GetSaveFileName(&ofn)) </p><p><b>  {</b></p><p><b>  FILE *fp;</b></p><p>  fp=fopen(szFile,"w");</p><p>  if(fp==NULL)&l

54、t;/p><p><b>  {</b></p><p>  MessageBox(NULL,TEXT("文件無法保存"),TEXT("嗚嗚"),MB_OK);</p><p><b>  }</b></p><p>  TCHAR str[10000];<

55、/p><p>  TCHAR end[10000];</p><p>  memset(end,0,10000);</p><p>  GetDlgItemText(hwnd,IDC_EDIT1,str,sizeof(str));</p><p>  fputs(str,fp);</p><p>  fclose(fp);

56、</p><p><b>  }</b></p><p>  MessageBox(NULL,TEXT("文件保存成功!放心關(guān)閉!!!"),TEXT("嘻嘻"),MB_OK);</p><p><b>  }</b></p><p>  EndDialog(h

57、wnd, 0);</p><p><b>  〔2〕、編輯操作:</b></p><p><b>  1、剪切的實(shí)現(xiàn):</b></p><p>  case ID_MENUITEMCUT: //剪切</p><p>  {SendDlgItemMessage(hwnd,IDC_RICHEDI

58、T1,WM_CUT,0,0);</p><p>  //傳遞對(duì)話框中的內(nèi)容首先獲取RichEdit中的內(nèi)容,WM_CUT,傳遞要進(jìn)行操作的內(nèi)容,0,0為兩個(gè)WPARAM和LPARAM是約定的消息參數(shù)類型。</p><p><b>  break;</b></p><p><b>  }</b></p><

59、;p><b>  2、復(fù)制的實(shí)現(xiàn):</b></p><p>  case ID_MENUITEMCOPY: //復(fù)制</p><p>  {SendDlgItemMessage(hwnd,IDC_RICHEDIT1,WM_COPY,0,0);</p><p>  //傳遞對(duì)話框中的內(nèi)容首先獲取RichEdit中的內(nèi)容,WM_CO

60、PY,,傳遞要進(jìn)行操作的內(nèi)容,0,0為兩個(gè)WPARAM和LPARAM是約定的消息參數(shù)類型。</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  3、粘貼的實(shí)現(xiàn):</b></p><p>  case ID_MEN

61、UITEMPASTE: //粘貼</p><p>  { SendDlgItemMessage(hwnd,IDC_RICHEDIT1,WM_PASTE,0,0);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b> 

62、 4、清除的實(shí)現(xiàn):</b></p><p>  case ID_MENUITEMEMPTY: //清除</p><p><b>  {</b></p><p>  SetDlgItemText(hwnd,IDC_RICHEDIT1,"");</p><p><b>  br

63、eak;</b></p><p><b>  }</b></p><p><b>  5、撤銷的實(shí)現(xiàn):</b></p><p>  case ID_MENUITEMUNDO: //“撤銷”菜單</p><p><b>  {</b></p>

64、<p>  SendDlgItemMessage(hwnd,IDC_RICHEDIT1, EM_UNDO, 0, 0);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  6、刪除的實(shí)現(xiàn):</b></p>

65、<p>  case ID_MENUITEMDELETE: //刪除</p><p><b>  {</b></p><p>  SendMessage(GetDlgItem(hwnd, IDC_RICHEDIT1), WM_CLEAR, 0, 0);</p><p><b>  }</b></p&

66、gt;<p><b>  break;</b></p><p><b>  7、全選的實(shí)現(xiàn):</b></p><p>  case ID_MENUITEMSELECTALL: //全選</p><p><b>  {</b></p><p>  SendMes

67、sage(GetDlgItem(hwnd, IDC_RICHEDIT1), EM_SETSEL, 0, -1);</p><p><b>  }</b></p><p><b>  break;</b></p><p>  8、系統(tǒng)時(shí)間的實(shí)現(xiàn):</p><p>  VOID CALLBACK MyT

68、imerFun(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)</p><p><b>  { </b></p><p>  SYSTEMTIME strLocal; //當(dāng)前時(shí)間</p><p>  GetLocalTime(&strLocal);</p>

69、<p>  TCHAR str[256];</p><p>  wsprintf(str,"%04d-%02d-%02d %02d:%02d:%02d",strLocal.wYear,strLocal.wMonth,</p><p>  strLocal.wDay,strLocal.wHour,strLocal.wMinute,strLocal.wSeco

70、nd);</p><p>  SetDlgItemText(hwnd,IDC_EDIT2,str);</p><p><b>  }</b></p><p>  9、查找功能的實(shí)現(xiàn):</p><p>  int count=0;</p><p>  int Line_count=1;</p&

71、gt;<p>  int Row_count=1;</p><p>  int num=0;</p><p>  int flag=0;</p><p>  TCHAR str1[256];</p><p>  TCHAR temp1[5000];</p><p>  TCHAR temp2[5000];

72、</p><p>  memset(temp1,0,5000);</p><p>  memset(temp2,0,5000);</p><p>  memset(str1,0,256);</p><p>  GetDlgItemText(hwnd,IDC_EDIT_FINDWORD,str1,sizeof(str1));</p>

73、<p>  if(strlen(str1)==0)</p><p><b>  {</b></p><p>  MessageBox(NULL,TEXT("查找的內(nèi)容為空,請(qǐng)輸入內(nèi)容后再查找!!!"),TEXT("嗚嗚"),MB_OK);</p><p><b>  }</b

74、></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  int i=0;</b></p><p><b>  int j=0;</b></p><p>  whil

75、e(str2[i]!='\0' )</p><p><b>  {</b></p><p>  if((str2[i]=='\n') || (Row_count==63))</p><p><b>  {</b></p><p>  Line_count++;<

76、/p><p>  Row_count=0;</p><p><b>  }</b></p><p>  if(str2[i]==str1[j])</p><p>  { </p><p><b>  i++;</b></p><p>

77、;<b>  j++;</b></p><p>  Row_count++;</p><p>  if(str1[j]=='\0')</p><p><b>  {</b></p><p><b>  j=0;</b></p><p>&

78、lt;b>  count++;</b></p><p>  wsprintf(temp2,"<%i>你要尋找的內(nèi)容在第:%i 行,第:%i 列至第:%i 列!!!",count,Line_count,(Row_count-strlen(str1)),(Row_count-1));</p><p>  strcat(temp1,temp2);

79、</p><p>  strcat(temp1,"\r\n"); </p><p><b>  flag=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>

80、  else</b></p><p><b>  {</b></p><p><b>  i=i-j+1;</b></p><p><b>  j=0;</b></p><p>  Row_count++; </p><p><b&

81、gt;  }</b></p><p>  if(str2[i]=='\0' && flag==1)</p><p><b>  {</b></p><p>  SetDlgItemText(hwnd,IDC_EDIT2,temp1);</p><p>  MessageBox(

82、NULL,temp1,TEXT("嘿嘿"),MB_OK);</p><p><b>  }</b></p><p>  if(str2[i]=='\0' && flag==0)</p><p><b>  { </b></p><p>  Mess

83、ageBox(NULL,TEXT("沒有你想要找的內(nèi)容,請(qǐng)重新輸入查找的內(nèi)容"),TEXT("嗚嗚"),MB_OK);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  } </b><

84、/p><p><b>  }</b></p><p><b>  } </b></p><p><b>  break;</b></p><p>  通過簡(jiǎn)單的字符串比配算法實(shí)現(xiàn)其功能。</p><p>  9、替換功能的實(shí)現(xiàn):</p><

85、;p>  TCHAR *change::D_change(TCHAR S[], TCHAR T1[] ,TCHAR T2[]) //替換功能的主算法</p><p><b>  {</b></p><p><b>  int i=0;</b></p><p><b>  int j=0;</b>

86、;</p><p><b>  int k=0;</b></p><p><b>  int l=0;</b></p><p>  TCHAR *S1;</p><p>  while((S[i]!='\0'))</p><p><b>  {<

87、;/b></p><p>  if(S[i]==T1[j])</p><p><b>  {</b></p><p><b>  i++;</b></p><p><b>  j++;</b></p><p><b>  count1=i

88、;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  i=i-j+1;</b></p><p><b&

89、gt;  j=0;</b></p><p><b>  count1=i;</b></p><p><b>  }</b></p><p>  if(T1[j]=='\0')</p><p><b>  {</b></p><p&

90、gt;<b>  i=i-j;</b></p><p>  if(strlen(T1)==strlen(T2))</p><p><b>  {</b></p><p>  int num1=strlen(T1);</p><p>  for(k=i;k<i+num1;k++)</p&g

91、t;<p><b>  {</b></p><p>  S[k]=T2[l];</p><p><b>  l++;</b></p><p><b>  }</b></p><p><b>  j=0;</b></p><

92、p><b>  l=0;</b></p><p><b>  }</b></p><p>  else if(strlen(T1)>strlen(T2))</p><p><b>  {</b></p><p>  int num2=strlen(T1)-strle

93、n(T2);</p><p>  int lengthT2=strlen(T2);</p><p>  for(k=i;k<strlen(S)-num2;k++)</p><p><b>  {</b></p><p>  S[k]=S[k+num2];</p><p><b> 

94、 }</b></p><p>  for(k=(strlen(S)-num2);k<=strlen(S);k++)</p><p><b>  {</b></p><p>  S[k]='\0';</p><p><b>  } </b></p>&l

95、t;p>  for(k=i;k<(i+lengthT2);k++)</p><p><b>  {</b></p><p>  S[k]=T2[l];</p><p><b>  l++;</b></p><p><b>  }</b></p><

96、;p><b>  j=0;</b></p><p><b>  l=0;</b></p><p><b>  }</b></p><p>  else if(strlen(T1)<strlen(T2))</p><p><b>  {</b>&

97、lt;/p><p>  int num3=strlen(T2)-strlen(T1);</p><p>  S1=new TCHAR[strlen(S)+num3];</p><p>  for(int k=0;k<i;k++)</p><p><b>  {</b></p><p>  S1[

98、k]=S[k];</p><p><b>  }</b></p><p>  for(int k2=i;k2<strlen(T2)+i;k2++)</p><p><b>  {</b></p><p>  S1[k2]=T2[k2-i];</p><p><b&

99、gt;  }</b></p><p>  for(int k3=i+strlen(T1);k3<strlen(S);k3++)</p><p><b>  {</b></p><p>  S1[k3+num3]=S[k3];</p><p><b>  }</b></p>

100、;<p>  S1[k3+num3]='\0';</p><p>  if(S[i]=='\0')</p><p><b>  {</b></p><p>  return S1;</p><p><b>  }</b></p><p

101、><b>  else</b></p><p><b>  {</b></p><p>  strcpy(S,S1);</p><p><b>  j=0;</b></p><p><b>  }</b></p><p>&l

102、t;b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  return S;</b></p><p><b>  }</b></p><p>

103、;  也通過字符算的比配,一一找到后,一一替換,最后返回替換后的文本內(nèi)容;</p><p>  9、統(tǒng)計(jì)功能的實(shí)現(xiàn):</p><p>  void Total_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)</p><p><b>  {</b></p>&

104、lt;p>  int Line_count=1;</p><p>  int Row_count=0;</p><p>  int Total_count=0;</p><p>  int English_count=0;</p><p>  int math_count=0;</p><p>  int oth

105、er_count=0;</p><p>  int space_count=0;</p><p>  int punct_count=0;</p><p>  TCHAR temp1[256];</p><p>  TCHAR temp2[256];</p><p>  memset(temp1,0,256);<

106、/p><p>  memset(temp2,0,256);</p><p><b>  int i=0;</b></p><p>  while(total2[i]!='\0')</p><p><b>  {</b></p><p>  if((total2[i

107、]!=' ') && (total2[i]!='\r') && (total2[i]!='\n'))</p><p><b>  {</b></p><p>  Total_count++;</p><p><b>  }</b></p&

108、gt;<p>  if((total2[i]>='a' && total2[i]<='z') || (total2[i]>='A' && total2[i]<='Z'))</p><p><b>  {</b></p><p>  En

109、glish_count++;</p><p><b>  }</b></p><p>  if(total2[i]>='0' && total2[i]<='9')</p><p><b>  {</b></p><p>  math_cou

110、nt++;</p><p><b>  }</b></p><p>  if(total2[i]==33 || total2[i]==34 || total2[i]==39 || total2[i]==44 || total2[i]==46 || total2[i]==58 || total2[i]==59 || total2[i]==63)</p>

111、<p><b>  {</b></p><p>  punct_count++;</p><p><b>  }</b></p><p>  if(total2[i]==' ')</p><p><b>  {</b></p><p

112、>  space_count++;</p><p><b>  }</b></p><p>  if((total2[i]=='\n') || (Row_count==62))</p><p><b>  {</b></p><p>  Line_count++;</p&

113、gt;<p>  Row_count=0;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  Row_count++; </p><p>&

114、lt;b>  }</b></p><p><b>  i++;</b></p><p><b>  }</b></p><p>  other_count=Total_count-English_count-math_count-punct_count;</p><p>  wsp

115、rintf(temp2,"<1>文本的行數(shù)為:%i !",Line_count-1);</p><p>  strcat(temp1,temp2);</p><p>  strcat(temp1,"\r\n");</p><p>  memset(temp2,0,256);</p><p>

116、  wsprintf(temp2,"<2>文本的總字符數(shù)為:%i !",Total_count);</p><p>  strcat(temp1,temp2);</p><p>  strcat(temp1,"\r\n");</p><p>  memset(temp2,0,256);</p><

117、;p>  wsprintf(temp2,"<3>文本的英文字符數(shù)為:%i !",English_count);</p><p>  strcat(temp1,temp2);</p><p>  strcat(temp1,"\r\n");</p><p>  memset(temp2,0,256);</p

118、><p>  wsprintf(temp2,"<4>文本的數(shù)字字符數(shù)為:%i !",math_count);</p><p>  strcat(temp1,temp2);</p><p>  strcat(temp1,"\r\n");</p><p>  memset(temp2,0,256);

119、</p><p>  wsprintf(temp2,"<5>文本的空格數(shù)為:%i !",space_count);</p><p>  strcat(temp1,temp2);</p><p>  strcat(temp1,"\r\n");</p><p>  memset(temp2,0,

120、256);</p><p>  wsprintf(temp2,"<6>文本的標(biāo)點(diǎn)符號(hào)數(shù)為:%i !",punct_count);</p><p>  strcat(temp1,temp2);</p><p>  strcat(temp1,"\r\n");</p><p>  memset(t

121、emp2,0,256);</p><p>  wsprintf(temp2,"<7>文本的其它字符數(shù)為:%i !",other_count);</p><p>  strcat(temp1,temp2);</p><p>  strcat(temp1,"\r\n");</p><p>  m

122、emset(temp2,0,256);</p><p>  SetDlgItemText(hwnd,IDC_EDIT1,temp1);</p><p><b>  }</b></p><p>  通過傳參,把文本信息傳到副對(duì)話框中。然后對(duì)文本進(jìn)行各項(xiàng)簡(jiǎn)單的統(tǒng)計(jì)</p><p><b>  〔3〕、工具操作:&l

123、t;/b></p><p><b>  北京音樂的實(shí)現(xiàn):</b></p><p>  case ID_MENU_MUSIC:</p><p><b>  {</b></p><p>  TCHAR shortPath[MAX_PATH];</p><p>  GetSh

124、ortPathName("C:\\Documents and Settings\\user\\桌面\\edit\\鄧紫棋 - 寂寞星球的玫瑰.mp3",shortPath,sizeof(shortPath)); //獲取音樂的途徑</p><p>  TCHAR cmd[MAX_PATH+10];</p><p>  wsprintf(cmd,"play %

125、s",shortPath);</p><p>  mciSendString(cmd," ",0,NULL);</p><p>  int ret = MessageBox(NULL,TEXT("你當(dāng)前正在享受音樂!!!是否要退出"),TEXT("嘻嘻"),MB_YESNO | MB_ICONQUESTION);<

126、/p><p>  if(ret==IDYES)</p><p><b>  {</b></p><p>  MessageBox(NULL,TEXT("還好聽吧!歡迎再欣賞!再見!!!"),TEXT("嘿嘿"),MB_OK);</p><p>  mciSendString("

127、;CLOSE cmd"," ",0,NULL);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b>&

128、lt;/p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  主要是通過mciSendStri

129、ng()API函數(shù)的使用。</p><p><b>  〔4〕、關(guān)于操作:</b></p><p>  1、關(guān)于對(duì)話框的彈出實(shí)現(xiàn):</p><p>  case ID_MENU_ABOUT:</p><p><b>  {</b></p><p>  HINSTANCE hI

130、nstance=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);</p><p>  DialogBox(hInstance, MAKEINTRESOURCE(IDD_ABOUT), NULL, Main_Proc);</p><p><b>  break;</b></p><p><b>

131、  }</b></p><p>  用DialogBox()函數(shù)實(shí)現(xiàn)對(duì)話框的彈出。</p><p><b>  2、訪問百度實(shí)現(xiàn):</b></p><p>  case IDM_BAIDU: //訪問百度網(wǎng)</p><p><b>  {</b></p><p

132、>  ShellExecute(hwnd,TEXT("open"),TEXT("www.baidu.com"),NULL,NULL,SW_SHOWNORMAL);</p><p><b>  break;</b></p><p><b>  }</b></p><p>  3、

133、訪問114實(shí)現(xiàn):</p><p>  case IDM_GOOGLE:</p><p><b>  {</b></p><p>  ShellExecute(hwnd,TEXT("open"),TEXT("www.114la.com"),NULL,NULL,SW_SHOWNORMAL);</p>

134、;<p><b>  break;</b></p><p><b>  }</b></p><p>  都是ShellExecute()函數(shù)的使用。</p><p><b>  五、編碼與調(diào)試分析</b></p><p>  1.確定好語言后,設(shè)計(jì)主界面,參考wi

135、ndows自帶的記事本開始設(shè)計(jì),需要實(shí)現(xiàn)的各個(gè)功能現(xiàn)在主界面的下拉菜單中顯示,還有時(shí)間的顯示框的設(shè)計(jì),關(guān)于對(duì)話框的設(shè)計(jì),替換對(duì)話框的設(shè)計(jì),查找對(duì)話框的設(shè)計(jì),以及統(tǒng)計(jì)對(duì)話框的設(shè)計(jì)。接下來開始一一實(shí)現(xiàn)其功能。</p><p>  2.編碼與調(diào)試過程中遇到的問題及解決辦法:</p><p>  【問題一】在打開文本文件時(shí)只能讀取一行。</p><p>  開始時(shí)用fget

136、s(line,sizeof(line),fp)讀取文件時(shí),只能讀取到一行,在文件沒結(jié)束的前提下,如果讀取下一行的話,顯示的時(shí)候下一行將會(huì)把上一行覆蓋掉了,最后一行為空了,結(jié)果什么也沒有顯示出來。后來查了一下資料,通過lstrcat(end,line); int w=strlen(end); end[w-1]='\0';lstrcat(end,"\r\n");把從文件中讀出來的文本先一起連起來,存在字符

137、數(shù)組中,然后再一起輸出。</p><p>  【問題二】在副對(duì)話框把參數(shù)回調(diào)到主對(duì)話框中時(shí)出現(xiàn)問題。</p><p>  如果在替換功能函數(shù)完成后如何將替換對(duì)話框中通過傳參改變后,存放在字符數(shù)組里的文本內(nèi)容傳到主對(duì)話框中,并將其顯示出來。后來通過回調(diào)函數(shù)返回指針,通過引用都沒能解決問題。最后通過調(diào)試發(fā)現(xiàn)了通過回調(diào)其實(shí)已經(jīng)把信息傳過來了,只是因?yàn)楫?dāng)要替換的字符小于替換字符的長(zhǎng)度時(shí),由于字符指

138、針和字符組數(shù)的互異性,出現(xiàn)了亂碼。結(jié)果通過動(dòng)態(tài)分配適當(dāng)?shù)膬?nèi)存才解決了問題</p><p>  【問題三】如何在對(duì)話框之間傳參的問題</p><p>  以前接觸到windows編程也不多,在對(duì)話框之前如果傳參,如結(jié)構(gòu)體,整型,字符型是遇到了問題,查了資料,最后在如鵬網(wǎng)上c語言也能看大事的的視屏上得知了原來是通過DialogBoxParam(hInstance, MAKEINTRESOURC

溫馨提示

  • 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. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論