2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩15頁未讀, 繼續(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>  日期類設(shè)計(jì)報(bào)告</b></p><p><b>  設(shè)計(jì)題目</b></p><p>  設(shè)計(jì)一個(gè)日期類,(學(xué)號(hào)尾號(hào)2、5、8完成)要求:</p><p><b>  設(shè)計(jì)要求</b></p><p>  重載帶參數(shù)構(gòu)造函數(shù)(int year ,i

2、nt month, int day)和默認(rèn)構(gòu)造函數(shù),前者要求不合要求的數(shù)據(jù)(年月日超出范圍)拋出異常</p><p>  計(jì)算出該日是星期幾,(網(wǎng)上找公式)。</p><p>  重載“+”操作,一個(gè)日期對(duì)象和天數(shù)相加(符合交換律)。</p><p>  重載“-”操作,兩天日期對(duì)象相減返回相差天數(shù)。 </p><p>  重載“+=”操作當(dāng)

3、前日期加天數(shù)</p><p><b>  重載輸入輸出操作。</b></p><p><b>  設(shè)計(jì)分析</b></p><p>  由題中要求可以知道,首先要設(shè)計(jì)一個(gè)日期類(class Cdate),還要有構(gòu)造函數(shù),明白函數(shù)的帶參與不帶參的區(qū)別;而且在日期類之中需要設(shè)計(jì)正確的日期格式,若不正確則實(shí)現(xiàn)拋出異常,C++中對(duì)

4、異常的處理分為拋出異常、捕獲異常、處理異常;在此處只要求拋出異常即可,接下來的實(shí)現(xiàn)輸入日期計(jì)算星期幾的代碼,。由題可以進(jìn)行網(wǎng)上的搜索,這個(gè)應(yīng)該行對(duì)簡(jiǎn)單!之后就是重載的操作啦??!</p><p>  設(shè)計(jì)主要模塊(代碼實(shí)現(xiàn))</p><p><b>  定義一個(gè)日期類</b></p><p>  class CDate</p>&l

5、t;p><b>  {</b></p><p><b>  public:</b></p><p><b>  CDate(){}</b></p><p>  CDate(int y,int m,int d);</p><p>  void fun();</p>

6、;<p>  void display();</p><p>  friend CDate operator + (int d,CDate dt);</p><p>  friend CDate operator - (CDate &dt1,CDate &dt2);</p><p>  friend CDate &operato

7、r += (CDate &a1,int d);</p><p>  friend std::ostream& operator<< ( std::ostream& os, CDate& dt );</p><p>  friend std::istream& operator>> ( std::istream& is,

8、 CDate& dt );</p><p>  bool isleapyear();// 潤年的判定</p><p>  bool status;</p><p>  bool check();</p><p>  void gettian();</p><p><b>  private:<

9、/b></p><p>  int year,month,day,day1;</p><p>  int d,D,D1,D2,D3;</p><p><b>  };</b></p><p>  CDate::CDate (int y,int m,int d):year(y),month(m),day(d){}&l

10、t;/p><p><b>  實(shí)現(xiàn)計(jì)算星期幾:</b></p><p>  #include <iostream>using namespace std;class Date{int year,month,day;bool isleap(int i) const{return i%400==0||i%4==0&&i%1

11、00!=0;//閏年的判定}public:Date(int y, int m, int d): year(y), month(m), day(d) {}void print() const{char* s[] = {"星期日,"星期一","星期二","星期三","星期四","星期五","星期

12、六"};int d[13] = {0,31,28,31,30,31,30,31,31,30,31,30};int sum = 0;int i;if(isleap(year))d[2] ++;for(i=1;i<year;i++)sum += 365 + isleap(i);for(i=1;i<month;i++)sum += d[i];sum<

13、/p><p>  重載日期加減的操作:</p><p>  CDate operator - (CDate &dt1,CDate &dt2) //重載-計(jì)算兩日期對(duì)象的天數(shù)差;</p><p><b>  {</b></p><p>  CDate d

14、t3;</p><p>  if(dt1.year%4==0&&dt1.year%100!=0||dt1.year%400==0){mon_day[1]=29;}</p><p>  if(dt2.year%4==0&&dt2.year%100!=0||dt2.year%400==0){mon_day[1]=29;}</p><p>

15、  dt1.D =(dt1.year-1)*365+(dt1.year-1)/4-(dt1.year-1)/100+(dt1.year-1)/400+dt1.D1 +dt1.day ; </p><p>  for(int i=0;i<=dt1.month -1;i++)</p><p><b>  {</b></p><

16、;p>  dt1.D1 +=mon_day[i];</p><p><b>  }</b></p><p>  dt2.D2 =(dt2.year -1)*365+(dt2.year-1)/4-(dt2.year-1)/100+(dt2.year-1)/400+dt2.D3 +dt2.day ;</p><p>  for(int j=

17、0;j<=dt2.month -1;j++)</p><p><b>  {</b></p><p>  dt2.D3 +=mon_day[j];</p><p><b>  }</b></p><p>  dt3.d =dt1.D -dt2.D2 ;</p><p>

18、  return dt3;</p><p><b>  }</b></p><p><b>  調(diào)試運(yùn)行圖示</b></p><p>  1.判斷日期格式是否正確</p><p>  2,輸入日期并且計(jì)算星期幾,返回與系統(tǒng)中初始設(shè)定日期的相差天數(shù):</p><p><b

19、>  源代碼附錄:</b></p><p>  #include <iostream></p><p>  #include <stdio.h></p><p>  #include <string.h></p><p>  using namespace std;</p>

20、<p>  class CDate; //聲明類;</p><p>  CDate operator + (int d,CDate dt); //必須在此先聲明重載 </p><p>  CDate operator -(CDate &dt1,CDate &dt2);</p>&l

21、t;p>  CDate &operator += (CDate &a1,int d);</p><p>  CDate &operator << (CDate &a1,int d);</p><p>  std::ostream& operator<< ( std::ostream& os, CDate&

22、 dt );</p><p>  std::istream& operator>> ( std::istream& is, CDate& dt );</p><p>  char *week[]={"星期日","星期一","星期二","星期三","星期四"

23、,"星期五","星期六"}; //指針數(shù)組,保存星期;</p><p>  int mon_day[]={31,28,31,30,31,30,31,31,30,31,30,31}; //數(shù)組,保存每月天數(shù);</p><p>  class CDate</p><p><b>  {</b><

24、/p><p><b>  public:</b></p><p><b>  CDate(){}</b></p><p>  CDate(int y,int m,int d);</p><p>  void fun();</p><p>  void display();<

25、/p><p>  friend CDate operator + (int d,CDate dt);</p><p>  friend CDate operator - (CDate &dt1,CDate &dt2);</p><p>  friend CDate &operator += (CDate &a1,int d);</p

26、><p>  friend std::ostream& operator<< ( std::ostream& os, CDate& dt );</p><p>  friend std::istream& operator>> ( std::istream& is, CDate& dt );</p><

27、p>  bool isleapyear();// 潤年的判定</p><p>  bool status;</p><p>  bool check();</p><p>  void gettian();</p><p><b>  private:</b></p><p>  int

28、year,month,day,day1;</p><p>  int d,D,D1,D2,D3;</p><p><b>  };</b></p><p>  CDate::CDate (int y,int m,int d):year(y),month(m),day(d){}</p><p>  void CDate::

29、gettian ()</p><p><b>  {</b></p><p>  cout<<"兩天日期對(duì)象相減返回相差天數(shù):"<<d<<endl;</p><p><b>  }</b></p><p>  bool CDate::islea

30、pyear()</p><p><b>  {</b></p><p>  return (((year % 4) == 0) && ((year % 100) != 0) || ((year % 400) == 0));</p><p><b>  }</b></p><p>  

31、bool CDate::check()</p><p><b>  {</b></p><p>  if (year < 0)</p><p><b>  {</b></p><p>  status = false;</p><p>  return status;&

32、lt;/p><p><b>  }</b></p><p>  if ((month < 1) || (month > 12))</p><p><b>  {</b></p><p>  status = false;</p><p>  return status

33、;</p><p><b>  }</b></p><p>  switch (month)</p><p><b>  {</b></p><p><b>  case 1:</b></p><p><b>  case 3:</b&g

34、t;</p><p><b>  case 5:</b></p><p><b>  case 7:</b></p><p><b>  case 8:</b></p><p><b>  case 10:</b></p><p>

35、<b>  case 12:</b></p><p>  if ((day < 1) || (day> 31))</p><p>  status = false;</p><p><b>  break;</b></p><p><b>  case 2:</b>

36、</p><p>  if (isleapyear())</p><p><b>  {</b></p><p>  if ((day < 1) || (day > 29))</p><p>  status = false;</p><p><b>  }</b>

37、;</p><p><b>  else</b></p><p><b>  {</b></p><p>  if ((day < 1) || (day > 28))</p><p>  status = false;</p><p><b>  }&l

38、t;/b></p><p><b>  break;</b></p><p><b>  case 4:</b></p><p><b>  case 6:</b></p><p><b>  case 9:</b></p><p

39、><b>  case 11:</b></p><p>  if ((day < 1) || (day> 30))</p><p>  status = false;</p><p><b>  break;</b></p><p><b>  default:</

40、b></p><p>  status = false;</p><p><b>  }</b></p><p>  if (status)</p><p>  {cout<<year<<"/"<<month<<"/"<&

41、lt;day<<endl;</p><p>  cout<<"恭喜日期正確了!"<<endl;}</p><p>  return status;</p><p><b>  }</b></p><p>  void CDate::fun ()</p>

42、<p><b>  {</b></p><p>  int C,W,y;</p><p>  cout<<"請(qǐng)輸入日期!"<<endl;</p><p><b>  {</b></p><p>  cout<<"年份

43、:";</p><p>  cin>>year;</p><p>  cout<<"月份:";</p><p>  cin>>month;</p><p>  cout<<"日期:";</p><p>  cin>

44、;>day;</p><p><b>  {</b></p><p>  if(year<=0||month<=0||month>12||day<=0||day>31)</p><p><b>  {</b></p><p>  cout<<&qu

45、ot;請(qǐng)輸入正確的日期!"<<endl;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  if(month==1||month==2)</p>

46、<p><b>  {</b></p><p>  month+=12;</p><p><b>  --year;</b></p><p><b>  }</b></p><p><b>  else</b></p><p&

47、gt;<b>  {</b></p><p><b>  }</b></p><p>  C=year/100;</p><p>  y=year%100;</p><p>  W=(((C/4)-2*C+y+(y/4)+(13*(month+1)/5)+day-1)+700)%7;</p&g

48、t;<p>  cout<<"今天是"<<week[W]<<endl;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>

49、<b>  }</b></p><p>  void CDate::display ()</p><p><b>  {</b></p><p>  if(year<=0||month<=0||month>12||day<=0||day>31)</p><p><

50、b>  {</b></p><p>  cout<<"請(qǐng)輸入正確的日期!"<<endl;</p><p><b>  }</b></p><p>  else cout<<year<<"/"<<month<<&quo

51、t;/"<<day<<endl;</p><p><b>  }</b></p><p>  CDate operator + (int d,CDate dt)</p><p><b>  {</b></p><p>  dt.day=dt.day+d;</p

52、><p>  while(dt.day>mon_day[dt.month-1])</p><p><b>  {</b></p><p>  if(dt.year%4==0&&dt.year%100!=0||dt.year%400==0){mon_day[1]=29;}</p><p>  dt.day

53、-=mon_day[dt.month-1];</p><p>  if(++dt.month==13)</p><p><b>  {</b></p><p>  dt.month=1;</p><p>  dt.year++;</p><p><b>  }</b><

54、/p><p><b>  }</b></p><p>  return dt;</p><p><b>  }</b></p><p>  CDate operator - (CDate &dt1,CDate &dt2) //重載

55、-計(jì)算兩日期對(duì)象的天數(shù)差;</p><p><b>  {</b></p><p>  CDate dt3;</p><p>  if(dt1.year%4==0&&dt1.year%100!=0||dt1.year%400==0){mon_day[1]=29;}</p><p>  if(dt2.yea

56、r%4==0&&dt2.year%100!=0||dt2.year%400==0){mon_day[1]=29;}</p><p>  dt1.D =(dt1.year-1)*365+(dt1.year-1)/4-(dt1.year-1)/100+(dt1.year-1)/400+dt1.D1 +dt1.day ; </p><p>  for(int

57、 i=0;i<=dt1.month -1;i++)</p><p><b>  {</b></p><p>  dt1.D1 +=mon_day[i];</p><p><b>  }</b></p><p>  dt2.D2 =(dt2.year -1)*365+(dt2.year-1)/

58、4-(dt2.year-1)/100+(dt2.year-1)/400+dt2.D3 +dt2.day ;</p><p>  for(int j=0;j<=dt2.month -1;j++)</p><p><b>  {</b></p><p>  dt2.D3 +=mon_day[j];</p><p>&l

59、t;b>  }</b></p><p>  dt3.d =dt1.D -dt2.D2 ;</p><p>  return dt3;</p><p><b>  }</b></p><p>  CDate &operator += (CDate &a1,int d)</p>

60、<p><b>  {</b></p><p>  if(a1.year%4==0&&a1.year%100!=0||a1.year%400==0){mon_day[1]=29;}</p><p>  a1.day+=d;</p><p>  while(a1.day>mon_day[a1.month-1])&

61、lt;/p><p><b>  {</b></p><p>  a1.day-=mon_day[a1.month-1];</p><p>  if(++a1.month==13)</p><p><b>  {</b></p><p>  a1.month=1;</p>

62、;<p>  a1.year++;</p><p><b>  }</b></p><p><b>  }</b></p><p>  return a1;</p><p><b>  }</b></p><p>  std::ostrea

63、m& operator<< ( std::ostream& os, CDate& dt ){ os << dt.year << '/' << dt.month << '/' << dt.day ; return os;}</p><p>  std::istream&

64、 operator>> ( std::istream& is, CDate& dt ){ is >> dt.year >> dt.month >> dt.day ; return is;}</p><p>  int _tmain(int argc, _TCHAR* argv[])</p><p><b&

65、gt;  {</b></p><p>  CDate b2(2013,2,29);</p><p>  b2.check ();</p><p>  CDate b5(2013,6,9);</p><p>  b5.check ();</p><p>  //b2.display ();</p>

66、<p>  // CDate b1(-1231,10,17);</p><p>  //b1.display ();</p><p>  //cout<<"****************"<<endl;</p><p>  //b1.fun ();</p><p>  //CDate

67、 b3(1992,10,17);</p><p>  // CDate b4;</p><p>  //b4=12+b3;</p><p>  //b4.display ();</p><p>  //CDate dt1(2001,1,1);</p><p>  //CDate dt2(2000,1,1);</p

68、><p>  //CDate dt3;</p><p>  //dt3=dt1-dt2;</p><p>  //dt3.gettian ();</p><p>  //CDate a1(1992,10,17);</p><p><b>  //a1+=2;</b></p><p&

69、gt;  //a1.display ();</p><p>  //CDate dt( 1992,10,17); </p><p>  //std::cout << dt<<endl;</p><p>  //cout<<"請(qǐng)輸入日期:";</p><p>  //std::cin>

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲(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)論