軟件課程設(shè)計報告_第1頁
已閱讀1頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  《軟件課程設(shè)計》報告</p><p><b>  班 級:</b></p><p>  姓 名: </p><p>  學 號: </p><p>  指導(dǎo)老師: </p><

2、;p><b>  軟件課程設(shè)計任務(wù)書</b></p><p><b>  專業(yè)年級:</b></p><p><b>  學生姓名: </b></p><p>  任務(wù)下達日期: 年 月 日</p><p>  課程設(shè)計日期:年 月 日至年 月 日

3、</p><p>  課程設(shè)計題目: 面向過程 </p><p>  軟件課程設(shè)計指導(dǎo)教師評閱書</p><p>  指導(dǎo)教師評語(①基礎(chǔ)理論及基本技能的掌握;②獨立解決實際問題的能力;③研究內(nèi)容的理論依據(jù)和技術(shù)方法;④取得的主要成果及創(chuàng)新點;⑤工作態(tài)度及工作量;⑥總體評價及建議成績;⑦存在問題等):</p><p>  成 績:

4、 指導(dǎo)教師簽字:</p><p>  年 月 日</p><p><b>  目錄</b></p><p>  面向過程設(shè)計題2-------.求反序數(shù)和原數(shù)和(sy1-2.cpp)</p><p>  1.1 需求分析…………………………………………………………

5、…………….…6</p><p>  1.2 概要設(shè)計………………………………………………………………………...6</p><p>  1.3 詳細設(shè)計與編碼………………………………………………………………...7</p><p>  1.4 調(diào)試分析………………………………………………………………………...7</p><p>  

6、1.5 用戶使用說明 ………………………………………………………………….7</p><p>  1.6 設(shè)計心得………………………………………………………………………...7</p><p>  二、面向過程設(shè)計題5-----5判斷日期與星期:(sy1-5.cpp)</p><p>  2.1 需求分析…………………………………………………………………………

7、8</p><p>  2.2 概要設(shè)計………………………………………………………………………...8</p><p>  2.3 詳細設(shè)計與編碼………………………………………………………………...8</p><p>  2.4 調(diào)試分析………………………………………………………………………...9</p><p>  2.5 用戶

8、使用說明 ………………………………………………………………….9</p><p>  2.6 設(shè)計心得………………………………………………………………………...9</p><p>  三、面向?qū)ο笤O(shè)計題1------定義complex類進行復(fù)數(shù)的加減乘除</p><p> ?。╯y2-1.cpp)</p><p>  3.1 需求分析…

9、………………………………………………………………………10</p><p>  3.2 概要設(shè)計………………………………………………………………………...11</p><p>  3.3 詳細設(shè)計與編碼………………………………………………………………...12</p><p>  3.4 調(diào)試分析………………………………………………………………………...1

10、3</p><p>  3.5 用戶使用說明 …………………………………………………………………13</p><p>  3.6 設(shè)計心得………………………………………………………………………...13</p><p>  四、面向過程設(shè)計題3---------用三種方法通過虛函數(shù)求Fibonacci(sy2-3.cpp)</p><p>

11、;  4.1 需求分析…………………………………………………………………………14</p><p>  4.2 概要設(shè)計………………………………………………………………………...15</p><p>  4.3 詳細設(shè)計與編碼………………………………………………………………..16</p><p>  4.4 調(diào)試分析…………………………………………………

12、……………………...17</p><p>  4.5 用戶使用說明 ………………………………………………………………….17</p><p>  4.6 設(shè)計心得………………………………………………………………………...17</p><p>  五、圖形界面1---------計算器(sy3計算器.rar)</p><p>  5.1

13、 需求分析……………………………………………………………………… .18</p><p>  5.2 概要設(shè)計………………………………………………………………………..19</p><p>  5.3 詳細設(shè)計與編碼………………………………………………………………..20</p><p>  5.4 調(diào)試分析…………………………………………………………………

14、……...22</p><p>  5.5 用戶使用說明 ………………………………………………………………….22</p><p>  5.6 設(shè)計心得………………………………………………………………………...22</p><p>  六、數(shù)據(jù)結(jié)構(gòu)1------用鏈表和數(shù)組兩種方式分別實現(xiàn)棧的出棧、入棧、取棧頂元素、判空、查找等操作(第四階段1-1、第四階段1

15、-2)</p><p>  6.1 需求分析…………………………………………………………………………23</p><p>  6.2 概要設(shè)計………………………………………………………………………...24</p><p>  6.3 詳細設(shè)計與編碼……………………………………………………………….24</p><p>  6.4 調(diào)

16、試分析………………………………………………………………………...29</p><p>  6.5 用戶使用說明 ………………………………………………………………….29</p><p>  6.6 設(shè)計心得………………………………………………………………………...29</p><p>  七、數(shù)據(jù)結(jié)構(gòu)3--------求A矩陣的轉(zhuǎn)置矩陣B(第四階段――3)&

17、lt;/p><p>  7.需求分析………………………………………………………..………….……30</p><p>  7.概要設(shè)計………………………………………………………………………...30</p><p>  7.詳細設(shè)計與編碼………………………………………………………………..30</p><p>  7.調(diào)試分析…………………………

18、……………………………………………...31</p><p>  7.用戶使用說明 ………………………………………………………………….31</p><p>  7.設(shè)計心得………………………………………………………………………...32</p><p>  八、課程設(shè)計總結(jié) ……………………………………………………………… 33</p><p

19、><b>  第一部分 基礎(chǔ)題</b></p><p>  2. 編程序,從鍵盤輸入正整數(shù)n,求出n與其反序數(shù)之和并輸出。/////////////////////////////////</p><p><b>  需求分析:</b></p><p>  本程序主要完成的是:由用戶自己輸入一個多為正整數(shù),由程序?qū)⒚?/p>

20、位分離,倒序組合,并由程序?qū)⑴帕泻玫姆葱驍?shù)與原數(shù)進行求和。</p><p>  ////////////////////////////////程序執(zhí)行結(jié)果//////////////////////////////////////////////////////////////</p><p><b>  概要設(shè)計:</b></p><p>

21、  本程設(shè)計思路:將輸入的正整數(shù)通過取整、取余進行分離,利用數(shù)組儲存,再利用c++庫函數(shù)pow將分離的數(shù)分別乘上10的多次方達到,與原數(shù)位數(shù)相同且是反序數(shù)的效果。</p><p>  再將其與原數(shù)進行求和。</p><p>  1.3  詳細設(shè)計與編碼:</p><p>  #include<iostream></p><

22、p>  #include<cmath></p><p>  using namespace std;</p><p>  int main()</p><p><b>  {</b></p><p>  int n,m=0;</p><p>  cout<<"

23、;please input a integer:";</p><p><b>  cin>>n;</b></p><p><b>  int c=n;</b></p><p>  int a[100]={0};//用于將分離的數(shù)位儲存</p><p>  int b[100]=

24、{0};//用于儲存相反數(shù)位</p><p>  int i=0,j;</p><p>  while(n!=0)//分離整數(shù)各個位</p><p><b>  {</b></p><p>  a[i++]=n%10;</p><p><b>  n=n/10;</b><

25、;/p><p><b>  }</b></p><p>  for(i,j=0;i>0;i--,j++)</p><p><b>  {</b></p><p>  b[j]=a[i-1];</p><p><b>  }</b></p>

26、<p>  for(j;j>0;j--)</p><p><b>  { </b></p><p>  m=m+b[j-1]*pow(10,j-1);//計算相同數(shù)位的反序數(shù)</p><p><b>  }</b></p><p>  cout<<"原來的數(shù)

27、是:"<<c<<'\n';</p><p>  cout<<"倒序后的數(shù)是:"<<m<<'\n';</p><p>  cout<<"兩個數(shù)相加得:"<<c<<"+"<<m<&

28、lt;"="<<c+m<<endl;//求和</p><p>  cout<<"謝謝您的使用!"<<endl;</p><p><b>  return 0;</b></p><p><b>  }</b></p><

29、;p>  1.4 調(diào)試分析:</p><p>  在調(diào)試過程中數(shù)組中儲存的數(shù)一定要想好,否則不能得出結(jié)果。</p><p>  而且本程序支持9位以下的整數(shù),位數(shù)太多則不能得出結(jié)果。</p><p>  1.5  用戶使用說明:</p><p>  用戶根據(jù)程序的提示指定輸入自己想要計算的數(shù)。</p><

30、;p>  1.6 設(shè)計心得:</p><p>  通過自己的親手做,開始覺的有點不熟悉,不能完成,但通過自己耐心的調(diào)試最后得出了結(jié)果,如果可能的話希望把程序做得更簡潔些。</p><p>  2.第五題:編程序,使 用戶任意輸入一個年份以及該年的1月1日是星期幾,而后任意指定某一天(再輸入該年的任意一個月份日期),由程序計算出這一天是星期幾。注意,2月份閏年為29天,非閏年為28天

31、;可被4整除而不可被100整除的年份、或者可被400整除的年份均為閏年。 </p><p><b>  1需求分析</b></p><p>  用戶自己輸入一個日期,并輸入該年的一月一日是星期幾,由該程序完成計算,輸出這一天是星期幾。</p><p>  /////////////////////////////////程序執(zhí)行結(jié)果//////

32、//////////////////////////////////////////////////////////////</p><p><b>  2.2概要設(shè)計:</b></p><p>  本程設(shè)計思路:輸入用戶想要計算的日期(包括年、月、日)及本年一月一日的星期,</p><p>  定義一個數(shù)組儲存平年12個月的天數(shù),再用判斷語句

33、判斷這一年是平年還是閏年,若為閏年,將數(shù)組中儲存2月的元素的天數(shù)設(shè)為29,至此天數(shù)設(shè)定完成。然后利用一個for循環(huán)計算經(jīng)過的天數(shù)。最后利用公式計算這一天是星期幾。</p><p>  2.3  詳細設(shè)計與編碼:</p><p>  #include<iostream></p><p>  using namespace std;</p&

34、gt;<p>  void main()</p><p><b>  {</b></p><p>  int y,m,d,n;//輸入變量年、月、日和星期</p><p><b>  int s=0;</b></p><p>  int a[13]={0,31,28,31,30,31,

35、30,31,31,30,31,30,31};//定義一個數(shù)組儲存每個月的天數(shù)</p><p>  cout<<"請輸入年月日:"<<endl;</p><p>  cout<<"年"<<endl;cin>>y;</p><p>  cout<<"

36、月"<<endl; cin>>m;</p><p>  cout<<"日"<<endl; cin>>d;</p><p>  cout<<"請輸入這年的一月一日是星期幾;"<<endl;</p><p><b>  cin&

37、gt;>n;</b></p><p>  if(y/4==0&&y/100!=0||y/400==0)</p><p><b>  a[2]=29;</b></p><p><b>  else</b></p><p><b>  a[2]=28;<

38、/b></p><p>  for(int i=0;i<m;i++)</p><p><b>  {</b></p><p><b>  s=s+a[i];</b></p><p><b>  }</b></p><p><b> 

39、 s=s+d;</b></p><p><b>  int n1;</b></p><p><b>  n1=n;</b></p><p><b>  if(s<7)</b></p><p><b>  {</b></p>

40、<p><b>  n=n+s-1;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  n=n+s%7-1;</p><p

41、><b>  }</b></p><p>  cout<<"這一天是星期"<<n<<endl;</p><p><b>  }</b></p><p>  2.4 調(diào)試分析:</p><p>  調(diào)試過程中,經(jīng)常遇到公式計算錯誤,即使輸

42、入、輸出正確也要多驗證幾個不同情況,</p><p>  有時會忽略一些問題。</p><p>  2.5  用戶使用說明:</p><p>  用戶根據(jù)程序的提示輸入年、月、日及這年一月一日的星期。</p><p>  2.6 設(shè)計心得:</p><p>  這個程序看似復(fù)雜,其實弄懂其中的主要公式,及

43、編寫程序時的主要方法,就可以編寫出來。</p><p><b>  二 、面向?qū)ο?lt;/b></p><p>  1. 自定義一個示意性的復(fù)數(shù)類型complex,其中含有若干個成員函數(shù),使用該類可以完成復(fù)數(shù)的加法以及對復(fù)數(shù)的輸出。請完成類定義,并編制主函數(shù),說明complex類對象,對定義的各成員函數(shù)進行調(diào)用。進一步,在類中添加對復(fù)數(shù)進行其他基本運算(如,復(fù)數(shù)減、乘、除

44、、取模等)的相應(yīng)成員函數(shù),并通過主函數(shù)處的調(diào)用來驗證各函數(shù)的使用正確性。</p><p><b>  3.1需求分析</b></p><p>  用戶根據(jù)提示輸入兩個復(fù)數(shù),然后程序自動求出這兩個復(fù)數(shù)的和、差、積、商。</p><p>  ///////////////////////////////////程序執(zhí)行結(jié)果/////////////

45、/////////////////////////////////</p><p><b>  3.2概要設(shè)計</b></p><p>  本程序主要運用運算符的重載:</p><p>  complex operator+(complex &c2);</p><p>  complex operator-(co

46、mplex &c2);</p><p>  complex operator*(complex &c2);</p><p>  complex operator/(complex &c2);</p><p>  double x(complex &c);</p><p>  分別將實數(shù)的加減乘除運算符重載,使在

47、這些運算符在復(fù)數(shù)中也可以使用,還利用復(fù)數(shù)的算法。</p><p>  3.3 詳細設(shè)計及代碼</p><p>  #include<iostream></p><p>  #include<cmath></p><p>  using namespace std;</p><p>  class

48、 complex</p><p><b>  {</b></p><p><b>  private:</b></p><p>  double real;</p><p>  double imag;</p><p><b>  public:</b>

49、</p><p>  complex(){real=0.0;imag=0.0;}</p><p>  ~complex(){};</p><p>  complex(double r,double i)</p><p><b>  {</b></p><p><b>  real=r;&

50、lt;/b></p><p><b>  imag=i;</b></p><p><b>  }</b></p><p>  complex operator+(complex &c2);</p><p>  complex operator-(complex &c2);<

51、;/p><p>  complex operator*(complex &c2);</p><p>  complex operator/(complex &c2);</p><p>  double x(complex &c);</p><p>  void display();</p><p>

52、  void set();</p><p><b>  };</b></p><p>  double complex::x(complex &c)</p><p><b>  {</b></p><p>  return sqrt(c.real*c.real+c.imag*c.imag);

53、</p><p><b>  }</b></p><p>  void complex::set()</p><p><b>  {</b></p><p>  cout<<"請輸入實部"<<endl;</p><p>  cin&

54、gt;>real;</p><p>  cout<<"請輸入虛部"<<endl;</p><p>  cin>>imag;</p><p><b>  }</b></p><p>  void complex::display()</p><

55、;p><b>  {</b></p><p>  cout<<"("<<real<<","<<imag<<"i"<<")"<<endl;</p><p><b>  }</b>&

56、lt;/p><p>  complex complex::operator+(complex &c2)</p><p><b>  { </b></p><p>  return complex(real+c2.real,imag+c2.imag);</p><p><b>  }</b><

57、;/p><p>  complex complex::operator-(complex &c2)</p><p><b>  {</b></p><p>  return complex(real-c2.real,imag-c2.imag);</p><p><b>  }</b></p

58、><p>  complex complex::operator*(complex &c2)</p><p><b>  {</b></p><p>  return complex((real*c2.real-imag*c2.imag),(real*c2.imag+imag*c2.real));</p><p>&

59、lt;b>  }</b></p><p>  complex complex::operator/(complex &c2)</p><p><b>  { </b></p><p>  return complex((real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.i

60、mag*c2.imag),(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag));</p><p><b>  }</b></p><p>  int main()</p><p><b>  {</b></p><p>  co

61、mplex c1,c2,c7(0,0);</p><p>  double x1,x2;</p><p>  cout<<"請輸入第一個復(fù)數(shù):";c1.set();</p><p>  cout<<"請輸入第一個復(fù)數(shù):";c2.set();</p><p>  complex

62、c3,c4,c5,c6;</p><p><b>  c3=c1+c2;</b></p><p><b>  c4=c1-c2;</b></p><p><b>  c5=c1*c2;</b></p><p><b>  c6=c1/c2;</b><

63、/p><p>  x1=c1.x(c1);</p><p>  x2=c1.x(c2);</p><p>  cout<<"相加得"<<endl;c3.display();</p><p>  cout<<"相減得"<<endl;c4.display();&l

64、t;/p><p>  cout<<"相乘得"<<endl;c5.display();</p><p>  cout<<"相除得"<<endl;c6.display();</p><p>  cout<<"第一個數(shù)的模"<<x1<<

65、;endl;</p><p>  cout<<"第二個數(shù)的模"<<x2<<endl;</p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  3.4調(diào)試分析</

66、b></p><p>  調(diào)試過程中,由于代碼量較大,括號的數(shù)量可能會不一致,要細心,在編寫乘除法時要注意算法,因為復(fù)數(shù)的乘除與實數(shù)有一定的區(qū)別。</p><p>  3.5  用戶使用說明:</p><p>  用戶根據(jù)屏幕上的提示信息,依次輸入計算的復(fù)數(shù)的實虛部,</p><p>  然后程序會自動計算,然后將結(jié)果輸出到

67、屏幕上。</p><p><b>  3.6設(shè)計心得</b></p><p>  通過本程序的設(shè)計,我對運算符的重載有了更加深刻的認識,對于面向?qū)ο筮@種思想也有了更深的理解。</p><p>  4. 利用虛函數(shù)手段,按照3種不同的計算方法來求出Fibonacci數(shù)列的第n項(的具體項值)并輸出。</p><p><

68、;b>  4.1需求分析</b></p><p>  分別通過三種不同的方法結(jié)合面對對象的編程思想,利用類、純虛函數(shù),求Fibonacci數(shù)列的任何一項的值。</p><p>  第一種使用的是簡單數(shù)據(jù)平移法;</p><p>  第二種使用的是數(shù)組法;</p><p>  最后一種使用的函數(shù)遞歸的方法。</p>

69、<p>  ///////////////////////////////////////程序執(zhí)行結(jié)果//////////////////////////////////////////////</p><p><b>  4.2 概要設(shè)計</b></p><p>  本程序主要通過純虛函數(shù)的方法實現(xiàn)Fibonacci數(shù)列的求值,</p>

70、<p>  在定義的類中聲明純虛函數(shù),在類外用三種不同的方法實現(xiàn),</p><p>  最后用科學計數(shù)的方法打印出來。</p><p>  4.3 詳細設(shè)計及編碼</p><p>  #include <iostream></p><p>  using namespace std;</p><p&g

71、t;  class baseCla</p><p><b>  {</b></p><p><b>  public:</b></p><p>  virtual double fib(int n)=0; //定義純虛函數(shù)fib()</p><p><b>  };</b&g

72、t;</p><p>  class fib1Cla:public baseCla</p><p><b>  { </b></p><p><b>  public :</b></p><p>  virtual double fib(int n); //在派生類中說明同一個虛函數(shù)

73、fib()</p><p><b>  };</b></p><p>  class fib2Cla:public baseCla</p><p><b>  {</b></p><p><b>  public:</b></p><p>  virtu

74、al double fib(int n); </p><p><b>  };</b></p><p>  class fib3Cla:public baseCla</p><p><b>  {</b></p><p><b>  public:</b></p>

75、<p>  virtual double fib(int n); </p><p><b>  };</b></p><p>  double fib1Cla::fib (int n) //對fib1中的函數(shù)進行定義(簡單數(shù)據(jù)平移法)</p><p><b>  { </b></p

76、><p><b>  double p;</b></p><p>  double a=1,b=1;</p><p>  if(n==1||n==2)</p><p>  return 1 ;</p><p><b>  else </b></p><p>

77、;<b>  {</b></p><p>  for(int i=3;i<=n;i++)</p><p><b>  {</b></p><p><b>  p=a+b;</b></p><p><b>  a=b;</b></p>&

78、lt;p><b>  b=p;</b></p><p><b>  }</b></p><p><b>  return p;</b></p><p><b>  }</b></p><p><b>  }</b></p&

79、gt;<p>  double fib2Cla::fib (int n) //對fib2中的函數(shù)進行定義(數(shù)組法)</p><p><b>  { </b></p><p>  double a[1000];</p><p><b>  a[0]=1;</b></p>

80、;<p><b>  a[1]=1;</b></p><p>  if(n==1||n==2)</p><p>  return 1 ;</p><p><b>  else</b></p><p><b>  {</b></p><p>

81、  for(int i=2;i<=n-1;i++)</p><p>  a[i]=a[i-1]+a[i-2];</p><p>  return a[n-1];</p><p><b>  }</b></p><p><b>  }</b></p><p>  doub

82、le fib3Cla::fib (int n) </p><p><b>  {</b></p><p><b>  double p;</b></p><p>  if(n==1||n==2)</p><p><b>  p=1;</b></p><p

83、><b>  else</b></p><p>  p=fib(n-1)+fib(n-2);</p><p><b>  return p;</b></p><p><b>  }</b></p><p>  void fun( baseCla*p, int n)

84、 //自定義函數(shù)fun,形參p為指向基類的指針,其對應(yīng)實參</p><p>  //可為不同派生類對象的地址,n指明了要求出數(shù)列的第n項</p><p><b>  { </b></p><p>  double d=p->fib (n); //根據(jù)p指針不同調(diào)用不同的派生類中的虛函數(shù)fib</p>

85、<p>  cout.flags(ios::scientific);</p><p>  cout.precision(15);</p><p>  cout<<"fib("<<n<<")="<<d<<endl;</p><p><b>  }

86、</b></p><p>  void main()</p><p><b>  {</b></p><p>  fib1Cla obj1;</p><p>  fib2Cla obj2;</p><p>  fib3Cla obj3;</p><p>  co

87、ut<<"------fib1Cla--------"<<endl;//簡單變量"數(shù)據(jù)平移"求解方法,求fib(1476)</p><p>  fun(&obj1,1476);</p><p>  cout<<"------fib2Cla--------"<<endl;//數(shù)

88、組求解方法,求fib(888)</p><p>  fun(&obj2,888);</p><p>  cout<<"------fib3Cla--------"<<endl;//遞歸求解方法,求fib(35)</p><p>  fun(&obj3,35);</p><p><

89、;b>  }</b></p><p><b>  4.4 調(diào)試分析</b></p><p>  本程序的算法難度不大,主要是對純虛函數(shù)的認識和使用</p><p>  在調(diào)用三個不同的方法時,指針的使用是非常有必要的。如果指向不當就可能造成錯誤。</p><p><b>  4.5用戶使用說明

90、</b></p><p>  本程序重在利用三種不同的方法進行Fibonacci數(shù)列的求值,</p><p>  故在程序中已經(jīng)設(shè)定好了需要求解的數(shù)值,用戶只需單擊執(zhí)程序指令,程序就會自動進行運算。</p><p><b>  4.6 設(shè)計心得</b></p><p>  通過本程序的設(shè)計和編輯,我更深刻的體

91、會了面向?qū)ο笾屑兲摵瘮?shù)的使用,對面向?qū)ο缶幊痰乃枷胗辛烁羁痰恼J識,提高了我的編程能力。</p><p>  第三階段、可視化程序設(shè)計</p><p><b>  5.1需求分析</b></p><p>  根據(jù)用戶需求編寫一個計算器,用戶可以根據(jù)自己的需求進行簡單的數(shù)學計算,例如加法運算,減法運算,乘法運算,除法運算和一些高級運算如開平方,求

92、冪運算。</p><p><b>  測試 4+5=</b></p><p>  ////////////////////////////////////程序執(zhí)行結(jié)果///////////////////////////////////////////</p><p>  ////////////////////////////////////

93、//////////////////////////////////////////////////////////////////////</p><p><b>  5.2概要設(shè)計:</b></p><p>  抽象數(shù)據(jù)類型與函數(shù)定義:</p><p><b>  1.類及類函數(shù):</b></p><

94、;p>  運算類型均默認為長整型,將計算結(jié)果保留六位小數(shù)。</p><p>  2.程序流程: 首先初始化MFC模塊,創(chuàng)建可視化界面對界面的內(nèi)容進行設(shè)定,然后設(shè)計相應(yīng)的函數(shù)執(zhí)行之,最后在工程中調(diào)用各個模塊,實現(xiàn)功能。</p><p>  5.3詳細設(shè)計及編碼</p><p>  void CCalculatorDlg::OnButton1() </p&g

95、t;<p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  UpdateData();</p><p>  if(cat==1)</p><p><b>  ;<

96、/b></p><p>  else if(m_edit1=="0.")</p><p>  m_edit1="";</p><p>  m_edit1+='1';</p><p>  UpdateData(false);</p><p><b>

97、  }</b></p><p><b>  運算符:</b></p><p><b>  乘號:</b></p><p>  void CCalculatorDlg::OnBUTTONcen() </p><p><b>  {</b></p><

98、;p>  // TODO: Add your control notification handler code here</p><p>  UpdateData();</p><p>  cs1=m_edit1;</p><p>  m_edit1="";</p><p><b>  sos=3;<

99、;/b></p><p>  UpdateData(false);</p><p><b>  } </b></p><p><b>  求?!?”:</b></p><p>  void CCalculatorDlg::OnButton10() </p><p>&l

100、t;b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  UpdateData();</p><p>  cs1=m_edit1;</p><p>  m_edit1="";</p

101、><p><b>  sos=6;</b></p><p>  UpdateData(false);</p><p><b>  }</b></p><p>  開根號“sqrt”:</p><p>  void CCalculatorDlg::OnButton11() <

102、;/p><p><b>  {</b></p><p>  UpdateData();</p><p>  double f1,f3;</p><p>  cs1=m_edit1;</p><p>  f1=atof(cs1);</p><p><b>  if(f1

103、<0)</b></p><p>  MessageBox("負數(shù)沒有平方根!");</p><p><b>  else</b></p><p><b>  {</b></p><p>  f3=sqrt(f1);</p><p>  m

104、_edit1.Format("%f",f3);}</p><p>  UpdateData(false);</p><p><b>  清空鍵“AC”:</b></p><p>  void CCalculatorDlg::OnBUTTONcls() </p><p><b>  {<

105、/b></p><p>  UpdateData();</p><p>  m_edit1="";</p><p><b>  sos=0;</b></p><p>  UpdateData(false);</p><p><b>  }</b>&l

106、t;/p><p><b>  等號鍵“=”:</b></p><p>  void CCalculatorDlg::OnBUTTONcalc() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler c

107、ode here</p><p>  double f1,f2,f3;</p><p>  switch (sos)</p><p><b>  {</b></p><p><b>  case 1:</b></p><p>  UpdateData();</p>

108、<p>  cs2=m_edit1;</p><p>  if(cs1.Left(1)!='-') </p><p>  f1=atof(cs1); </p><p>  if(cs1.Left(1)=='-')</p><p><b>  {</b></p>

109、<p>  cs1=cs1.Right(cs1.GetLength()-1); </p><p>  f1=(-1)*(atof(cs1));</p><p><b>  }</b></p><p>  f2=atof(cs2);</p><p><b>  f3=f1+f2;</b>&

110、lt;/p><p>  m_edit1.Format("%f",f3);</p><p>  UpdateData(false); </p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  U

111、pdateData();</p><p>  cs2=m_edit1;</p><p>  f1=atof(cs1);</p><p>  f2=atof(cs2);</p><p><b>  f3=f1-f2;</b></p><p>  m_edit1.Format("%f&quo

112、t;,f3);</p><p>  UpdateData(false); </p><p><b>  break;</b></p><p><b>  case 3:</b></p><p>  UpdateData();</p><p>  cs2=m_edit1;<

113、;/p><p>  f1=atof(cs1);</p><p>  f2=atof(cs2);</p><p><b>  f3=f1*f2;</b></p><p>  m_edit1.Format("%f",f3);</p><p>  UpdateData(false);&l

114、t;/p><p><b>  break;</b></p><p><b>  case 4:</b></p><p>  UpdateData();</p><p>  cs2=m_edit1;</p><p>  f1=atof(cs1);</p><p&

115、gt;  f2=atof(cs2);</p><p><b>  if(f2==0)</b></p><p>  MessageBox("被除數(shù)不能為零!");</p><p><b>  else{</b></p><p><b>  f3=f1/f2;</b&

116、gt;</p><p>  m_edit1.Format("%f",f3);}</p><p>  UpdateData(false);</p><p><b>  break;</b></p><p><b>  case 6:</b></p><p>

117、  UpdateData();</p><p>  cs2=m_edit1;</p><p>  f1=atof(cs1);</p><p>  f2=atof(cs2);</p><p>  f3=int(f1)%int(f2);</p><p>  m_edit1.Format("%f",f3)

118、;</p><p>  UpdateData(false);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  正負號“+/-”:<

119、;/b></p><p>  void CCalculatorDlg::OnBUTTONfu() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  UpdateData(

120、);</p><p>  //cs1=m_edit1;</p><p>  //m_edit1="";</p><p>  if(m_edit1.Left(1)=='-') //截取m_edit1左邊第一個字符'-'</p><p>  m_edit1=m_edit1.Right(m_ed

121、it1.GetLength()-1); </p><p><b>  else</b></p><p>  m_edit1='-'+m_edit1;</p><p><b>  sos=5;</b></p><p>  UpdateData(false);</p>&

122、lt;p><b>  }</b></p><p><b>  5.4調(diào)試分析</b></p><p>  在制作計算器的過程中,因為程序中有很多頭文件,所以在寫程序時很多時候都出現(xiàn)了不能運行,提示頭文件缺失等等問題,所以我們要注意函數(shù)的連接,再者</p><p>  文件中有很多函數(shù)要用,編寫功能函數(shù)時經(jīng)常因為編寫錯

123、誤而不能運行該功能。</p><p><b>  5.5用戶使用說明</b></p><p>  用戶打開程序時,屏幕上會自動顯示出科學計算器的界面,使用鼠標,點擊要輸入的數(shù)字后運算符號,點擊后該數(shù)字后符號就會在顯示屏上顯示出來。當輸入完成后顯示屏會自動顯示出用戶剛剛輸入的表達式的值,按“AC”鍵清空顯示屏上的數(shù)字。若要繼續(xù)計算則按上述步驟繼續(xù),若要退出則按界面右上方

124、的退出圖標,或右擊MFC圖標,選擇退出后即可退出程序。</p><p><b>  5.6程序編寫心得</b></p><p>  通過這次程序的編寫和修改,我初步學會了如何利用visual c++ 6.0 提供的MFC可視化編程來實現(xiàn)可視化程序,在這個過程中我深刻地體會到了C++在程序設(shè)計中的強大功能,為今后的學習打下了良好的基礎(chǔ),通過程序的編寫我更加深刻的體會的各

125、個函數(shù),各個頭文件的作用,更深刻的明白的頭文件的作用原理。 </p><p><b>  第四階段、數(shù)據(jù)結(jié)構(gòu)</b></p><p>  6.用鏈表和數(shù)組兩種方式分別實現(xiàn)棧的出棧、入棧、取棧頂元素、判空、查找等操作。</p><p><b>  6.1需求分析</b></p><p>  分別通過數(shù)

126、組和鏈表實現(xiàn)棧的各項功能,程序自動生成一個棧,用戶根據(jù)提示進行操作。</p><p><b>  6.2概要設(shè)計</b></p><p>  本程序主要通過數(shù)據(jù)結(jié)構(gòu)中棧結(jié)構(gòu)的先進后出作用,來實現(xiàn)對數(shù)據(jù)操作的各種功能,進棧、出棧、獲取棧頂元素 、判空 、查找等。主要利用兩種不同的方法進行設(shè)計,第一種利用數(shù)組順序儲存,第二種利用定義的新結(jié)點,指針形成鏈表儲存。</p

127、><p><b>  6.3</b></p><p><b>  詳細設(shè)計及代碼</b></p><p>  6.3.1利用數(shù)組順序儲存</p><p>  #include<iostream.h></p><p>  #include<stdlib.h>

128、</p><p>  #define STACK_INIT_SIZE 100//存儲空間初始分配量</p><p>  typedef int ElemType;</p><p>  typedef struct{</p><p>  ElemType data[STACK_INIT_SIZE];</p><p&

129、gt;<b>  int top;</b></p><p>  }SeqStack;</p><p>  void InitStack(SeqStack &S)</p><p>  {//構(gòu)造一個新的棧</p><p><b>  S.top=-1;</b></p><p

130、><b>  }</b></p><p>  void GetTop(SeqStack S)</p><p><b>  {//取棧頂元素</b></p><p>  if(S.top==-1)</p><p>  cout<<"棧為空"<<endl

131、;</p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"棧頂元素為:"<< S.data[S.top]<<endl;</p><p><b>  }</b>

132、;</p><p><b>  }</b></p><p>  void Push(SeqStack &S,ElemType e)</p><p><b>  {//入棧</b></p><p>  if(S.top==STACK_INIT_SIZE-1)</p><p&

133、gt;  cout<<"棧滿"<<endl;</p><p><b>  else</b></p><p><b>  {</b></p><p><b>  S.top++;</b></p><p>  S.data[S.top]=

134、e;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void Pop(SeqStack &S)</p><p><b>  {//出棧</b></p><p>  ElemType x;<

135、;/p><p>  if(S.top==-1)</p><p>  cout<<"棧為空"<<endl;</p><p><b>  else</b></p><p><b>  {</b></p><p>  x=S.data[S.t

136、op];</p><p><b>  S.top--;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void StackEmpty(SeqStack &S)</p><p><

137、b>  {//判空</b></p><p>  if(S.top==-1)</p><p>  cout<<"棧為空"<<endl;</p><p><b>  else</b></p><p>  cout<<"棧不為空"&l

138、t;<endl;</p><p><b>  }</b></p><p>  ElemType VisitStack(SeqStack &S,ElemType &e)</p><p><b>  {//查找</b></p><p><b>  int i=0;<

139、/b></p><p>  while(i<=S.top&&S.data[i]!=e)</p><p><b>  i++;</b></p><p>  if(i<=S.top)</p><p>  return i+1;</p><p><b>  e

140、lse</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p>  ElemType x,y,

141、z;</p><p>  SeqStack s;</p><p><b>  int k;</b></p><p>  InitStack(s);</p><p><b>  do{</b></p><p>  cout<<"**************

142、***************程序功能表********************************"<<endl;</p><p>  cout<<"1.獲得棧頂元素 2.壓棧 3.刪除棧頂元素 4.判斷棧是否為空 5.查找 0.退出"<<endl;</p><p>  cout<<"*****

143、*************************請你選擇*********************************"<<endl;</p><p><b>  cin>>k;</b></p><p><b>  switch(k)</b></p><p><b>  {

144、case 0:</b></p><p>  cout<<"退出"<<endl;</p><p><b>  exit(0);</b></p><p><b>  case 1:</b></p><p>  GetTop(s);break;<

溫馨提示

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

評論

0/150

提交評論