c++課程設(shè)計--字符串類的設(shè)計與實現(xiàn)_第1頁
已閱讀1頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  課 程 設(shè) 計 任 務(wù) 書</p><p><b>  目 錄</b></p><p>  1 需求分析- 1 -</p><p>  2 算法基本原理- 1 -</p><p>  3 類設(shè)計- 2 -</p><p>  4 詳細設(shè)計- 3 -</p>

2、<p>  4.1 類的接口設(shè)計- 3 -</p><p>  4.2 類的實現(xiàn)- 5 -</p><p>  4.3 主函數(shù)設(shè)計- 10 -</p><p>  5 DOS界面程序運行結(jié)果及分析- 11 -</p><p>  5.1 程序運行結(jié)果- 11 -</p><p>  5.2運行結(jié)

3、果分析- 12 -</p><p>  6 基于MFC的圖形界面程序開發(fā)- 13 -</p><p>  6.1 基于MFC的圖形界面程序設(shè)計- 13 -</p><p>  6.2 程序測試- 17 -</p><p>  6.3 MFC程序編寫總結(jié)- 19 -</p><p>  7 參考文獻- 19

4、-</p><p><b>  1 需求分析</b></p><p>  (1) 計算機處理的對象分為數(shù)值數(shù)據(jù)和非數(shù)值數(shù)據(jù),字符串是最基本的非數(shù)值數(shù)據(jù)。其應(yīng)用非常廣泛,它是許多軟件系統(tǒng)(如字符編輯、情報檢索、詞法分析、符號處理、自然語言翻譯等系統(tǒng))的操作對象。其重要性不言而喻。</p><p>  (2)字符串是字符的有限集合,可記作a=’a1

5、 …an’。其中a是字符串的名,單括號里的字符序列是字符串的值,單引號不是字符串的成分,其作用是為了避免變量名與常量混淆。ai(0<i<n+1)稱為字符串的元素,是構(gòu)成字符串的基本單位。N表示字符串的長度,且n=>0,如果等于0,則稱a為空串,記作:a=’’。 </p><p><b>  2 算法基本原理</b></p><p> ?。?)字符串從

6、結(jié)構(gòu)上看是一種以字符為數(shù)據(jù)元素的線性表,從存儲結(jié)構(gòu)的不同可分為順序表和鏈?zhǔn)酱鎯Y(jié)構(gòu),它們都適用于字符串,但由于要求的操作不同,為了提高運算效率所選用的存儲結(jié)構(gòu)也是不同的。對于字符串改動較頻繁的一般用鏈?zhǔn)酱鎯Y(jié)構(gòu),而順序存儲結(jié)構(gòu)能夠高效的讀取。所以各有優(yōu)點。本程序由于需要大量改動數(shù)據(jù),理所當(dāng)然的選擇鏈?zhǔn)酱鎯Y(jié)構(gòu),其算法結(jié)構(gòu)為:</p><p>  Typedef struct</p><p>

7、;<b>  {</b></p><p>  Char *ch; /*若字符串為空,則按長度分配存儲區(qū),否則為NULL */</p><p>  Int length; /*字符串的長度*、</p><p><b>  }</b></p><p> ?。?)本題字符串要求用堆來分

8、配字符串的存儲空間,采用堆分配函數(shù)malloc,它的格式為T->ch=(char *)malloc(sizeof(char)*len,就會為字符串分配內(nèi)存。</p><p> ?。?)函數(shù)是有字符串類進行調(diào)用的,通過在主函數(shù)中定義字符串類的對象,作為函數(shù)的參數(shù),對于需要改寫對象的需要進行址傳遞,我們可以通過函數(shù)在主函數(shù)中的反映來觀察他的執(zhí)行狀態(tài)。</p><p><b> 

9、 3 類設(shè)計</b></p><p><b>  4 詳細設(shè)計</b></p><p>  整個程序分為三個獨立的文檔,Linequ.h文件中包括矩陣類Matrix和線性方程組類Linequ的聲明,Linequ.cpp文件中包括這兩個類的成員函數(shù)實現(xiàn)文件;main.cpp文件包括程序的主函數(shù),主函數(shù)中定義了一個類Linequ的對象,通過這個對象求解一個四元

10、線性方程組。</p><p>  4.1 類的接口設(shè)計</p><p>  //Linequ.h文件,實現(xiàn)類的聲明</p><p>  #include <iostream></p><p>  #include <cmath></p><p>  using namespace std;<

11、;/p><p>  class Matrix//基類Matrix聲明</p><p><b>  {</b></p><p>  public://外部接口</p><p>  Matrix(int dims=2);//構(gòu)造函數(shù)</p><p>  ~Matrix();//析構(gòu)

12、函數(shù)</p><p>  void SetMatrix(double *rmax);//矩陣賦初值</p><p>  void PrintM();//顯示矩陣</p><p>  protected:</p><p>  int index;//方陣的行數(shù)</p><p>  double* MatrixA

13、;//矩陣存放數(shù)組首地址</p><p><b>  };</b></p><p>  class Linequ:public Matrix//公有派生類Linequ聲明</p><p><b>  {</b></p><p>  public://外部接口</p>&

14、lt;p>  Linequ(int dims=2);//構(gòu)造函數(shù)</p><p>  ~Linequ();//析構(gòu)函數(shù)</p><p>  void SetLinequ(double *a, double *b);//方程賦值</p><p>  void PrintL();//顯示方程</p><p>  int

15、Solve();//全選主元高斯消去法求解方程</p><p>  void ShowX();//顯示方程的解</p><p>  private://私有數(shù)據(jù)</p><p>  double *sums;//方程右端項</p><p>  double *solu;//方程的解</p>&l

16、t;p><b>  };</b></p><p>  經(jīng)過公有派生,Linequ類獲得了除構(gòu)造函數(shù)、析構(gòu)函數(shù)之外的Matrix類的全部成員,由于基類的成員是公有和保護類型,因此在派生類中的成員函數(shù)中,基類繼承來的成員全部可以訪問,而對于建立Linequ類對象的外部模塊來講,基類的保護成員是無法訪問的。通過保護訪問類型和公有的繼承方式,實現(xiàn)了基類Matrix的數(shù)據(jù)的有效共享和可靠保護。在

17、程序中,方程的系數(shù)矩陣、解以及右端項全部采用了動態(tài)內(nèi)存分配技術(shù),這些工作都是在基類、派生類的構(gòu)造函數(shù)中完成,它們的清理工作在析構(gòu)函數(shù)中完成。</p><p><b>  4.2 類的實現(xiàn)</b></p><p><b>  4.3 主函數(shù)設(shè)計</b></p><p>  int main()</p><

18、p><b>  {</b></p><p>  int a=1,p,len;</p><p>  MyString S;</p><p>  MyString st1;</p><p>  MyString st2;</p><p>  MyString sub;</p>&l

19、t;p>  MyString T;</p><p>  char ch1[20];</p><p><b>  char cl;</b></p><p>  cout<<"****************************歡迎進入字符串操作程序****************************"

20、<<endl;</p><p>  while (a!=0)</p><p>  { cout<<"-------------------------------------------------------------------------------"<<endl;</p><p>  cout&l

21、t;<"請選擇功能操作:"<<endl;</p><p>  cout<<"\n1.字符串的賦值\n2.字符串的長度\n3.字符串的比較\n4.字符串的連接\n5.求字符串的子串\n6.清空字符串\n0.退出"<<endl;</p><p><b>  cin >>a;</b>

22、;</p><p><b>  switch(a)</b></p><p><b>  {</b></p><p>  case 0:cout<<"******************************謝謝使用!祝您工作順利!*****************************"

23、;<<endl;break;</p><p>  case 1: cout<<"請輸入用于賦值新字符串"<<endl;</p><p><b>  cin>>ch1;</b></p><p>  InitString(&st1); </p><p

24、>  StrAssign(&st1,ch1);</p><p>  cout<<"字符串被賦的值為:";</p><p>  PrintString(st1);break ;</p><p>  case 2: cout<<"請輸入新字符串S"<<endl;</p>

25、<p><b>  cin>>ch1;</b></p><p>  InitString(&st1);</p><p>  StrAssign(&st1,ch1);</p><p>  cout<<"長度為:"<<StrLength(st1)<<e

26、ndl;break;</p><p>  case 3:{ cout<<"請輸入要比較的兩個字符串S pk T"<<endl;</p><p>  cout<<"請輸入第一個字符串st1(長度<20:)";</p><p><b>  cin>>ch1;</

27、b></p><p>  InitString(&st1);</p><p>  StrAssign(&st1,ch1);</p><p>  cout<<"請輸入第二個字符串st2(長度<20):";</p><p><b>  cin>>ch1;</b

28、></p><p>  InitString(&st2);</p><p>  StrAssign(&st2,ch1);</p><p>  StrCompare(st1,st2);</p><p>  int flag=StrCompare(st1,st2);</p><p>  if(flag

29、==0)</p><p><b>  {</b></p><p>  cout<<"字符串st1與st2相等"<<endl;</p><p><b>  }</b></p><p>  else if(flag>0)</p><p

30、><b>  {</b></p><p>  cout<<"字符串st1比st2大"<<endl;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {&

31、lt;/b></p><p>  cout<<"字符串st1比st2小"<<endl;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break ;</b></

32、p><p>  case 4:cout<<"請輸入要連接的兩個字符串S1 & S2"<<endl;</p><p>  cout<<"請輸入第一個字符串(長度<20):";</p><p><b>  cin>>ch1;</b></p>

33、<p>  InitString(&st1);</p><p>  StrAssign(&st1,ch1);</p><p>  cout<<"請輸入第二個字符串(長度<20):";</p><p><b>  cin>>ch1;</b></p>&l

34、t;p>  InitString(&st2);</p><p>  StrAssign(&st2,ch1);</p><p>  InitString(&T);</p><p>  Concat(&T,st1,st2);</p><p>  cout<<"連接后的新字符串:"

35、;<<endl;</p><p>  PrintString(T);</p><p><b>  break;</b></p><p><b>  case 5:</b></p><p>  cout<<"請輸入主串S(長度<20):"<<

36、;endl;</p><p><b>  cin>>ch1;</b></p><p>  InitString(&S);</p><p>  StrAssign(&S,ch1);</p><p>  InitString(&sub);</p><p>  cou

37、t<<"請輸入起始位置p:"<<endl;</p><p><b>  cin>>p;</b></p><p>  cout<<"請輸入子串的長度len(請考慮主串的長度)"<<endl;</p><p><b>  cin>&g

38、t;len;</b></p><p>  cout<<"所求子串為:"<<endl;</p><p>  SubString(&sub,S,p,len);</p><p>  PrintString(sub);</p><p><b>  break;</b>

39、;</p><p>  case 6:cout<<"確定要清空的字符串(Y/N)"<<endl;</p><p><b>  cin>>cl;</b></p><p>  if(cl=='y'||cl=='Y')</p><p>&l

40、t;b>  {</b></p><p>  ClearString(&st1);</p><p>  ClearString(&st2);</p><p>  ClearString(&sub);</p><p>  ClearString(&T);</p><p>&

41、lt;b>  };</b></p><p>  cout<<"字符串操作清除成功!"<<endl;</p><p><b>  break;</b></p><p>  default:cout<<"操作錯誤!請輸入正確序號!"<<endl

42、;</p><p><b>  } </b></p><p><b>  };</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  主函數(shù)的設(shè)計思路是

43、通過定義mystring類的對象,然后通過生成的對象去調(diào)用相應(yīng)的函數(shù)從而達到調(diào)試所編寫的函數(shù)功能的目的。此主函數(shù)有著演示函數(shù)的要求,為了使它能夠更靈活的進行函數(shù)的調(diào)用,首先設(shè)計了一個循環(huán)體,由整型變量a控制,當(dāng)a=0時就結(jié)束循環(huán)。而在循環(huán)體中又由switch(a)函數(shù)來控制,通過輸入不同的a的值來控制不同的操作,即函數(shù)的演示。</p><p><b>  。</b></p>&

44、lt;p>  5 DOS界面程序運行結(jié)果及分析</p><p>  從它運行的界面可以看出,當(dāng)進入函數(shù)調(diào)試狀態(tài)時我們可也通過輸入相應(yīng)的操作序號來選擇不同的操作。例如選擇輸入1將進入字符串的賦值操作。下面就來看一下相應(yīng)的函數(shù)。</p><p>  輸入1點回車鍵就被要求輸入要賦得值,函數(shù)原型為StrAssign(&T, chars),執(zhí)行后就把字符串chars賦給對象T了。&l

45、t;/p><p>  輸入2則進入字符串的長度函數(shù),我們要測試它的功能只要輸入一個字符串就可以加以驗證。例如上圖所示輸入字符串為:sfdffgffh,則串長為9.</p><p>  選擇4則進行字符串的比較功能,這個函數(shù)需要讀取相比較的兩個字符串,通過對字符串的每個字符的逐個的比較有一個返回值返給調(diào)用函數(shù)。</p><p>  選擇4則進行字符串的連接功能,把一個字符

46、串連在另一個字符串的后面,如上圖所示:第一個字符串為dfghgh,另一個字符串為fgghf,則連接的字符串為dfghghfgghf。</p><p>  輸入5則選擇求字符串子串的功能,這個函數(shù)需要輸入一個主串,起始位置p和子串長度len,輸入好參數(shù)后就可輸出所求的子串了。</p><p>  因為上述字符串操作中都給字符串賦了值,所以需要字符串,回到初始狀態(tài)。</p>&l

47、t;p>  選擇0則結(jié)束函數(shù)演示。</p><p>  5.1 程序運行結(jié)果</p><p><b>  圖2 程序運行結(jié)果</b></p><p>  從圖2中可以看出,程序能夠?qū)崿F(xiàn)全選主元高斯消去法對于線性方程組的求解,但是,對于求解結(jié)果的正確性問題卻無法獲知,為了能夠驗證求解結(jié)果的正確性,考慮將求解結(jié)果x帶入原方程Ax=b中,如果滿

48、足原方程,即說明求解結(jié)果是正確的,否則,說明求解存在問題,需對程序進行進一步調(diào)試分析。</p><p>  為此,考慮在Linequ類中增加測試函數(shù)Test,用以驗證求解結(jié)果的正確性。</p><p>  void Linequ::test()//求解結(jié)果驗證函數(shù)</p><p><b>  {</b></p><p&g

49、t;  double *b2;</p><p>  b2=new double[index];</p><p>  for (int i=0;i<index;i++)//將解solu帶入原方程求出新的右端項b2</p><p><b>  {</b></p><p><b>  b2[i]=0;<

50、/b></p><p>  for (int j=0;j<index;j++)</p><p>  b2[i]=b2[i]+MatrixA[i*index+j]*solu[j];</p><p><b>  }</b></p><p>  for (i=0;i<index;i++)//輸出新的右端項&

51、lt;/p><p><b>  {</b></p><p>  cout<<b2[i]<<" ";</p><p><b>  }</b></p><p>  cout<<endl;</p><p><b>  

52、}</b></p><p>  在主函數(shù)main中增加語句:</p><p>  equ1.test();//驗證求解結(jié)果</p><p>  經(jīng)過驗證的程序運行結(jié)果如圖3所示。</p><p>  圖3 程序運行結(jié)果的驗證</p><p>  從圖3中可以看出,方程組求解驗證的右端項結(jié)果與原右端項結(jié)果完

53、全一致,這說明了方程組求解的正確性。</p><p><b>  5.2運行結(jié)果分析</b></p><p>  整個程序中的矩陣存儲采用的是一維數(shù)組和動態(tài)內(nèi)存分配方式。</p><p>  基類是專門處理矩陣的類,公有派生類Linequ是針對線性方程組而設(shè)計的,除了繼承基類的基本特征之外,結(jié)合問題的實際需要,增加了很多線性方程組所特有的成員,

54、使基類Matrix進一步具體化、特殊化,達到對問題的有效描述和處理。</p><p>  程序的訪問控制也是根據(jù)問題的需要而設(shè)計的。基類的數(shù)據(jù)成員的存儲、維護著矩陣數(shù)據(jù),這正是派生類方程組的系數(shù)矩陣,使派生類解方程成員函數(shù)必須訪問的。利用保護成員特征,將基類數(shù)據(jù)成員的訪問控制屬性設(shè)置為保護型,在公有派生類Linequ中就可以訪問到基類繼承下來的保護成員;而對于類外的其余模塊,這些數(shù)據(jù)無法訪問。這樣,就在數(shù)據(jù)的共享

55、與隱藏之間尋找到一個比較恰當(dāng)?shù)慕Y(jié)合點。</p><p>  在派生過程中,基類的構(gòu)造函數(shù)和析構(gòu)函數(shù)無法繼承下來,因此在派生類中需要添加構(gòu)造函數(shù)、析構(gòu)函數(shù)來完成派生類的初始化和最后清理工作。派生類的構(gòu)造函數(shù)通過調(diào)用基類的構(gòu)造函數(shù)來對基類數(shù)據(jù)進行初始化,本設(shè)計中,派生類Linequ的構(gòu)造函數(shù)調(diào)用了基類Matrix的構(gòu)造函數(shù)并傳遞必須的初始化參數(shù)。派生類的析構(gòu)函數(shù)調(diào)用基類的構(gòu)造函數(shù),共同完成清理任務(wù)。</p>

56、;<p>  6 基于MFC的圖形界面程序開發(fā)</p><p>  MFC的圖形界面程序設(shè)計可在上述類設(shè)計的基礎(chǔ)上進行改造,MFC的圖形界面程序與DOS界面程序的主要不同點是:MFC圖形界面程序與DOS界面程序的輸入輸出方式不同,DOS界面程序采用字符交互式實現(xiàn)數(shù)據(jù)輸入輸出,主要通過cin,cout等I/O流實現(xiàn),而MFC的圖形程序界面采用標(biāo)準(zhǔn)Windows窗口和控件實現(xiàn)輸入輸出,因此必須在MFC類

57、的框架下加入上面所設(shè)計的矩陣和方程組類,并通過圖形界面的輸入輸出改造來完成。</p><p>  6.1 基于MFC的圖形界面程序設(shè)計</p><p><b> ?。?)界面設(shè)計</b></p><p>  首先在VC中建立MFC AppWizard(exe)工程,名稱為GuassLineGUI,并在向?qū)У腟tep1中選擇Dialog base

58、d,即建立基于對話框的應(yīng)用程序,如下圖4~5所示。</p><p>  圖4 建立MFC AppWizard(exe)工程</p><p>  圖5 建立基于對話框的應(yīng)用程序</p><p>  將對話框資源中的默認(rèn)對話框利用工具箱改造成如下界面,如圖6所示。</p><p>  圖6 方程組求解程序界面設(shè)計</p><p

59、>  圖6所示的界面中包含了3個Static Text控件,3個Button控件,和24個Edit Box控件,控件的基本信息列表如下表1所示。</p><p><b>  表1 控件基本信息</b></p><p><b>  (2)代碼設(shè)計</b></p><p>  為了能夠?qū)υ捒蚪缑嫔系目丶軌蚺c代碼聯(lián)系起

60、來,需要為24個Edit Box控件建立Member Variables,按Ctrl+w鍵進入MFC ClassWizard界面,選擇Member Variables選項卡,可顯示成員變量設(shè)置界面,如圖7所示。</p><p>  圖7 成員變量設(shè)置界面</p><p>  通過該界面設(shè)置與24個Edit Box控件對應(yīng)的成員變量,具體如表2所示。</p><p>

61、<b>  表2 控件基本信息</b></p><p>  下面是編寫代碼的重要階段,可以借鑒在設(shè)計基于DOS界面的控制臺應(yīng)用程序的代碼,并將其作必要的改寫,具體改寫的步驟與內(nèi)容如下。</p><p> ?、賹inequ.h文件和Linequ.cpp文件合并成一個文件,重新命名為Linequ.h,并將其加入MFC工程。</p><p> ?、?/p>

62、修改Linequ.h文件具體包括:</p><p>  將顯示矩陣PrintM()函數(shù)和顯示方程PrintL()函數(shù)注釋掉,因為在圖形界面的程序上已經(jīng)不需要連個函數(shù)承擔(dān)輸出功能了;</p><p>  將輸出方程組的解ShowX()函數(shù)加入?yún)?shù)double x[]變成ShowX(double x[]),以實現(xiàn)將所求的解輸出至參數(shù)x中,并最終完成在對話框界面上的顯示;</p>

63、<p>  將全選主元高斯法求解函數(shù)Solve()中的兩處cout語句去掉,因為不需要也不能夠使用cout流實現(xiàn)輸出。</p><p> ?、墼趯υ捒蝾惖膶崿F(xiàn)文件GuassLineGUIDlg.cpp中加入#include "Linequ.h",以實現(xiàn)在該文件中可使用Linequ類。</p><p> ?、茉贕uassLineGUIDlg.cpp文件中加入

64、以下全局變量的定義,以實現(xiàn)GuassLineGUIDlg類和Linequ類之間的通信,具體代碼如下:</p><p>  double a[]=//系數(shù)矩陣</p><p><b>  {</b></p><p>  0.2368,0.2471,0.2568,1.2671,</p><p>  0.1968,0.2

65、071,1.2168,0.2271,</p><p>  0.1581,1.1675,0.1768,0.1871,</p><p>  1.1161,0.1254,0.1397,0.1490</p><p><b>  };</b></p><p>  double b[4]={ 1.8471,1.7471,1.6471

66、,1.5471};//方程右端項</p><p>  double *X;//存放方程組的解</p><p>  ⑤編寫讀入數(shù)據(jù)按鈕的消息處理函數(shù),實現(xiàn)將矩陣和右端項的數(shù)據(jù)刷新到界面上,具體代碼如下:</p><p>  void CGuassLineGUIDlg::OnBUTTONRead() </p><p><b>  

67、{</b></p><p>  // TODO: Add your control notification handler code here</p><p>  m_A00=a[0]; m_A01=a[1]; m_A02=a[2]; m_A03=a[3];</p><p>  m_A10=a[5]; m_A11=a[6]; m_A12=a[7]; m

68、_A13=a[8];</p><p>  m_A20=a[9]; m_A21=a[10]; m_A22=a[11]; m_A23=a[12];</p><p>  m_A30=a[13]; m_A31=a[14]; m_A32=a[15]; m_A33=a[16];</p><p>  m_b0=b[0]; m_b1=b[1]; m_b2=b[2]; m_b3=b[

69、3];</p><p>  UpdateData(FALSE);</p><p><b>  }</b></p><p> ?、蘧帉懹嬎闱蠼獍粹o的消息處理函數(shù),實現(xiàn)將方程求解,具體代碼如下:</p><p>  void CGuassLineGUIDlg::OnButtonCalc() </p><p

70、><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  Linequ equ1(4);//定義一個四元方程組對象</p><p>  equ1.SetLinequ(a,b);//設(shè)置方程組</p>

71、<p>  X=new double[4];</p><p>  if(equ1.Solve())//求解方程組</p><p><b>  {</b></p><p>  equ1.ShowX(X);//輸出方程組的解</p><p>  m_X0=X[0];</p><p>  

72、m_X1=X[1];</p><p>  m_X2=X[2];</p><p>  m_X3=X[3];</p><p>  UpdateData(FALSE);</p><p><b>  }</b></p><p><b>  else</b></p>&l

73、t;p>  MessageBox("求解失敗");//求解失敗</p><p><b>  }</b></p><p> ?、咄顺霭粹o比較簡單,代碼如下:</p><p>  void CGuassLineGUIDlg::OnBUTTONExit() </p><p><b>  

74、{</b></p><p>  // TODO: Add your control notification handler code here</p><p><b>  OnOK();</b></p><p><b>  }</b></p><p><b>  6.2 程序

75、測試</b></p><p>  運行程序后,首先出現(xiàn)的界面如圖8所示。</p><p>  圖8 程序初始運行界面</p><p>  單擊讀入數(shù)據(jù)按鈕后,可將系數(shù)矩陣A和方程組右端項b的數(shù)據(jù)在界面上顯示出來,如圖9所示。</p><p>  圖9 讀入數(shù)據(jù)后的界面</p><p>  單擊計算求解按鈕,

76、實現(xiàn)求解并將解顯示出來,如圖10所示。</p><p>  圖10 求解方程組后的界面</p><p>  單擊退出按鈕后,程序能夠正常實現(xiàn)退出。</p><p>  6.3 MFC程序編寫總結(jié)</p><p>  MFC程序與DOS界面程序編寫的最大不同是程序員需要將編程精力放在圖形界面設(shè)計、圖形界面輸入輸出以及界面元素和代碼對應(yīng)轉(zhuǎn)換等問題

77、上,而這些問題在DOS界面程序中是不存在的,因此,初學(xué)MFC的編程者會對此感到困難,然而,當(dāng)你編寫出一個基于Windows界面的程序時,所獲得的滿足程度遠遠大于簡單的DOS界面程序,況且基于Windows的圖形界面的程序設(shè)計已成為主流,作為程序員而言,是非學(xué)會不可的。</p><p>  本次課程設(shè)計作為編寫Windows程序的初步嘗試,能夠?qū)崿F(xiàn)程序的主要功能,可以說是取得了成功,然而好的程序絕不僅僅是只有功能性

78、這一個指標(biāo),本此編寫的MFC程序雖然能實現(xiàn)所需功能,但從面向?qū)ο蟪绦蛟O(shè)計理念和圖形界面設(shè)計要求來說,尚存在不足,主要包括以下幾個方面。</p><p> ?。?)使用全局變量存儲矩陣系數(shù)、方程組右端向量和解向量本身有悖面向?qū)ο蟪绦蛟O(shè)計理念,需要將其改進,利用局部變量和其它方式實現(xiàn)存儲,作者認(rèn)為最理想的方式是使用文件。</p><p> ?。?)將類的定義與實現(xiàn)放在同一個頭文件Linequ.

79、h中也違背了面向?qū)ο蟪绦蛟O(shè)計理念,需要將二者分開成定義文件和實現(xiàn)文件。</p><p> ?。?)圖10所示的界面中對解的顯示沒有格式化,導(dǎo)致界面看起來不夠規(guī)范,需要對解的輸出進行小數(shù)點固定位數(shù)顯示。</p><p><b>  7 參考文獻</b></p><p>  [1]徐士良. C常用算法程序集. 北京:清華大學(xué)出版社,1995<

80、/p><p>  [2]鄭莉,董淵,張瑞豐. C++語言程序設(shè)計(第3版). 北京:清華大學(xué)出版社,2007</p><p>  [3]錢能. C++程序設(shè)計教程(第二版). 北京:清華大學(xué)出版社,2007</p><p>  [4]陳志泊,王春玲. 面向?qū)ο蟮某绦蛟O(shè)計語言—C++. 北京:人民郵電出版社,2002</p><p>  [5]李慶

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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

提交評論