c++課程設(shè)計---重載運算符編程_第1頁
已閱讀1頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  實驗課程名稱 C++面向?qū)ο笳Z言編程 </p><p>  設(shè) 計 題 目 重載運算符編程 </p><p>  專 業(yè) 班 級 </p><p>  面向?qū)ο笳n程設(shè)計報告&l

2、t;/p><p><b>  一、設(shè)計時間</b></p><p>  2011年6月 13日-----6月17日</p><p><b>  二、設(shè)計地點</b></p><p>  湖南城市學(xué)院實驗樓計算機機房</p><p><b>  三、設(shè)計目的</b&

3、gt;</p><p>  1、《面向?qū)ο蟪绦蛟O(shè)計》是計算機科學(xué)與技術(shù)專業(yè)的必修專業(yè)基礎(chǔ)課程,其實踐性、應(yīng)用性很強。實踐教學(xué)環(huán)節(jié)是必不可少的一個重要環(huán)節(jié)。面向?qū)ο蟪绦蛟O(shè)計的設(shè)計目的是加深對理論教學(xué)內(nèi)容的理解和掌握,使學(xué)生較系統(tǒng)地掌握程序設(shè)計及其在網(wǎng)絡(luò)開發(fā)中的廣泛應(yīng)用,基本方法及技巧,為學(xué)生綜合運用所學(xué)知識,利用軟件工程為基礎(chǔ)進(jìn)行軟件開發(fā)、并在實踐應(yīng)用方面打下一定基礎(chǔ)。</p><p>  

4、2、要求學(xué)生在設(shè)計指導(dǎo)教師的幫助下自行完成各個操作環(huán)節(jié),并能實現(xiàn)且達(dá)到舉一反三的目的,完成一個項目解決一類問題。</p><p>  3、要求學(xué)生能夠全面、深入理解和熟練掌握所學(xué)內(nèi)容,并能夠用其分析、設(shè)計和解答類似問題;對此能夠較好地理解和掌握,能夠進(jìn)行簡單分析和判斷;能編寫出具有良好風(fēng)格的程序;掌握面向?qū)ο蟪绦蛟O(shè)計的基本技能和面向?qū)ο蟮母拍詈头椒ā?lt;/p><p>  4、同時培養(yǎng)學(xué)生進(jìn)

5、行分析問題、解決問題的能力;培養(yǎng)學(xué)生進(jìn)行設(shè)計分析、設(shè)計方法、設(shè)計操作與測試、設(shè)計過程的觀察、理解和歸納能力的提高。</p><p><b>  四、設(shè)計小組成員</b></p><p><b>  五、指導(dǎo)老師</b></p><p><b>  六、設(shè)計課題</b></p><p

6、>  一個日期類Date,包括年、月、日等私有成員。要求實現(xiàn)日期的基本運算,如一日期加上天數(shù),一日期減去天數(shù)、兩日期相差天數(shù)</p><p>  七、基本思路及關(guān)鍵問題的解決方法</p><p><b>  (一)基本思路:</b></p><p>  1:在Date類中設(shè)計如下重載運算符函數(shù): </p><p>

7、  Date operator+(int days); 返回一日期加一天數(shù)得到的日期 </p><p>  Date operator-(int days); 返回一日期減去天數(shù)得到的日期 </p><p>  int operator-(Date &b); 返回兩日期相差的天數(shù) </p><p>  2:在實現(xiàn)這些重載運算符函數(shù)調(diào)用以下私有成員函數(shù): &l

8、t;/p><p>  leap(int); 判斷指定的年份是否為閏年 </p><p>  dton(Date &); 將指定日期轉(zhuǎn)換為從0年0月0日起的天數(shù) </p><p>  ntod(int); 將指定的0年0月0日起的天數(shù)轉(zhuǎn)換為對應(yīng)的日期</p><p>  3:在main()中,實現(xiàn)日期的基本運算</p><

9、;p> ?。ǘ╆P(guān)鍵問題的解決辦法:</p><p>  1:閏年與非閏年的判斷,以及各月的天數(shù)的獲得問題,解決辦法是設(shè)置并引用二維數(shù)組</p><p>  2:日期基本問題的實現(xiàn)問題,解決辦法是在Date類中設(shè)計重載運算符函數(shù):Date operator+(int days)、Date operator-(int days)、int operator-(Date &b),同

10、時調(diào)用以下私有成員函數(shù)leap(int)、dton(Date &)、ntod(int)得以實現(xiàn)</p><p>  3:如何使輸入的日期有效,如2011 13 34為無效日期,解決辦法是在input()中設(shè)置if(month>12||month<1||day>day_tab[leap(year)][month-1]||year<=0),判斷日期是否為有效日期。</p>

11、<p><b>  八、流程圖</b></p><p><b>  圖 1</b></p><p>  九、調(diào)試過程中出現(xiàn)的問題及相應(yīng)解決辦法</p><p>  1:輸入無效日期時,也能得到運算結(jié)果,如輸入0 13 32時,程序沒察覺輸入錯誤,細(xì)</p><p>  心檢查發(fā)現(xiàn)if語句

12、編寫錯誤,改正后得到正確的結(jié)果;</p><p>  2:重載運算符函數(shù)的編寫,如求兩日期相差天數(shù)時,由于編寫錯誤,得到錯誤的答案,</p><p>  后通過看書,查相關(guān)資料,終于改寫成功。</p><p>  十、課程設(shè)計心得體會</p><p>  通過此次課程設(shè)計,不僅檢驗了我所學(xué)習(xí)的知識,也培養(yǎng)了我如何去把握一件事情,如何去做一件事

13、情,又如何完成一件事情。讓我發(fā)現(xiàn)了許多自己平時學(xué)習(xí)的不足和薄弱環(huán)節(jié),同時也讓我明白到c++的學(xué)習(xí)方法就是“用編程來學(xué)會編程”,通過看懂例程,然后修改、完善例程、最后自己獨立編程。在此次課程設(shè)計過程中,和同學(xué)們相互探討,相互學(xué)習(xí),相互監(jiān)督,讓我學(xué)會了合作,學(xué)會了運籌帷幄,學(xué)會了寬容,學(xué)會了理解,也學(xué)會了做人與處世。</p><p>  總之,這次課程設(shè)計,考驗了我綜合運用知識的能力,真正做到學(xué)以致用,讓我體會到了編

14、程的樂趣,以后我會再接再厲,學(xué)得更好。</p><p>  十一、源程序(每句語言要有詳細(xì)解釋)</p><p>  #include<iostream.h> </p><p>  int day_tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31}, </p><p>  {31,2

15、9,31,30,31,30,31,31,30,31,30,31}}; </p><p>  // day_tab 二維數(shù)組存放各月天數(shù),第一行對應(yīng)非閏年,第二行對應(yīng)閏年 </p><p>  class Date </p><p><b>  { </b></p><p>  int year,month,day; &l

16、t;/p><p>  int leap(int); </p><p>  int dton(Date &); </p><p>  Date ntod(int); </p><p><b>  public: </b></p><p><b>  Date(){}</b>

17、</p><p>  void input()</p><p><b>  {</b></p><p>  cin>>year>>month>>day;</p><p>  while(month>12||month<1||day>day_tab[leap(year)

18、][month-1]||day<=0||year<=0)</p><p><b>  {</b></p><p>  cout<<"invalid date!"<<endl;</p><p>  cout<<"input a date again"<&

19、lt;endl;</p><p>  cin>>year>>month>>day;</p><p><b>  }</b></p><p><b>  }</b></p><p>  Date(int y,int m,int d) </p><

20、p><b>  { </b></p><p>  year=y;month=m;day=d; </p><p><b>  } </b></p><p>  Date operator+(int days) //返回一日期加上天數(shù)得到的日期</p><p><b>  { </

21、b></p><p>  static Date date; </p><p>  int number=dton(*this)+days; </p><p>  date=ntod(number); </p><p>  return date; </p><p><b>  } </b>

22、</p><p>  Date operator-(int days) //返回一日期減去天數(shù)得到的日期</p><p><b>  { </b></p><p>  static Date date; </p><p>  int number=dton(*this); </p><p>  n

23、umber-=days; </p><p>  date=ntod(number); </p><p>  return date; </p><p><b>  } </b></p><p>  int operator-(Date &b) //返回兩日期相差的天數(shù) </p><p>&

24、lt;b>  { </b></p><p>  int days=dton(*this)-dton(b); </p><p>  if(days>=0)</p><p>  return days; </p><p><b>  else</b></p><p>  ret

25、urn -days;</p><p><b>  } </b></p><p>  void disp() </p><p><b>  { </b></p><p>  cout<<year<<"."<<month<<"

26、."<<day<<endl; </p><p><b>  } </b></p><p><b>  }; </b></p><p>  int Date::leap(int year) //判斷指定的年份是否為閏年 </p><p><b>  { &l

27、t;/b></p><p>  if(year%4==0&&year%100!=0||year%400==0) // 是閏年 </p><p>  return 1; </p><p>  else // 不是閏年 </p><p>  return 0; </p><p><b>  

28、} </b></p><p>  int Date::dton(Date &d) // 將指定日期轉(zhuǎn)換為從0年0月0日起的天數(shù)</p><p><b>  { </b></p><p>  int y,m,days=0; </p><p>  for(y=1;y<=d.year;y++) <

29、;/p><p>  if(leap(y)) </p><p>  days+=366; </p><p><b>  else </b></p><p>  days+=365; </p><p>  for(m=0;m<d.month-1;m++) </p><p> 

30、 if(leap(d.year)) </p><p>  days+=day_tab[1][m]; </p><p><b>  else </b></p><p>  days+=day_tab[0][m]; </p><p>  days+=d.day; </p><p>  return d

31、ays; </p><p><b>  } </b></p><p>  Date Date::ntod(int n) //將指定的0年0月0日起的天數(shù)轉(zhuǎn)換為對應(yīng)的日期</p><p><b>  { </b></p><p>  int y=1,m=1,d,rest=n,lp; </p>

32、;<p><b>  while(1) </b></p><p><b>  { </b></p><p>  if(leap(y)) </p><p><b>  { </b></p><p>  if(rest<=366) </p><

33、;p><b>  break; </b></p><p><b>  else </b></p><p>  rest-=366; </p><p><b>  } </b></p><p><b>  else </b></p>&l

34、t;p><b>  { </b></p><p>  if(rest<=365) </p><p><b>  break; </b></p><p><b>  else </b></p><p>  rest-=365; </p><p>

35、;<b>  } </b></p><p><b>  y++; </b></p><p><b>  } </b></p><p><b>  y--; </b></p><p>  lp=leap(y); </p><p>  

36、while(true) </p><p><b>  { </b></p><p><b>  if(lp) </b></p><p><b>  { </b></p><p>  if(rest>day_tab[1][m-1]) </p><p>

37、;  rest-=day_tab[1][m-1]; </p><p><b>  else </b></p><p><b>  break; </b></p><p><b>  } </b></p><p><b>  else </b></p&

38、gt;<p><b>  { </b></p><p>  if(rest>day_tab[0][m-1]) </p><p>  rest-=day_tab[0][m-1]; </p><p><b>  else </b></p><p><b>  break;

39、</b></p><p><b>  } </b></p><p><b>  m++; </b></p><p><b>  } </b></p><p><b>  d=rest; </b></p><p>  re

40、turn Date(y,m,d); </p><p><b>  } </b></p><p>  void main() </p><p><b>  { </b></p><p>  Date now,then;</p><p><b>  int n; <

41、;/b></p><p>  cout<<"now:"; now.input(); </p><p>  cout<<"then:"; then.input(); </p><p>  cout<<"相差天數(shù):"<<(then-now)<<e

42、ndl; </p><p>  cout<<"please input n:";</p><p><b>  cin>>n;</b></p><p>  Date d1=now+n,d2=now-n;</p><p>  cout<<"now+n:&qu

43、ot;; d1.disp(); </p><p>  cout<<"now-n:"; d2.disp(); </p><p><b>  }</b></p><p><b>  十二、實驗結(jié)果:</b></p><p>  1:日期輸入正確時:</p>

44、<p>  2:日期輸入錯誤時:</p><p><b>  參考文獻(xiàn)</b></p><p>  1:[美]Walter Savitch著,周靖譯,C++面向?qū)ο蟪绦蛟O(shè)計——基礎(chǔ)、數(shù)據(jù)結(jié)構(gòu)與編程思想,清華大學(xué)出版社,2004</p><p>  2:陳文宇,張松梅編著,C++語言教程,電子科技大學(xué)出版社,2004</p>

溫馨提示

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

評論

0/150

提交評論