亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++實現(xiàn)萬年歷功能

 更新時間:2019年10月30日 09:59:38   作者:pointer_y  
這篇文章主要為大家詳細介紹了C++實現(xiàn)萬年歷功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C++實現(xiàn)萬年歷的具體代碼,供大家參考,具體內(nèi)容如下

1.此萬年歷功能

1>日期加減天數(shù)

2>日期與日期之間的差值

3>輸入年月顯示當月日歷

2.代碼實現(xiàn)

#include<iostream>
#include<iomanip>
using namespace std;
 
class Date
{
public:
 Date(int year = 1990, int month = 1, int day = 1) //構(gòu)造函數(shù)
 :_year(year), _month(month), _day(day)
 {
 if (JudgeRightDate())   //判斷傳入的值是否是合法的,不合法則置成1990年1月1日
 {
  _year = 1990;
  _month = 1;
  _day = 1;
 }
 }
 
 bool JudgeRightDate()  //判斷值是否合法函數(shù)
 {
 if (_year < 1 || ((_month< 1)||_month>12) ||
  (_day<1)||_day>GetMonthDay(_year,_month))
 {
  return true;
 }
 else
 {
  return false;
 }
 }
 
 int JudgeYear(int year)  //判斷是否是閏年的函數(shù)
 {
 if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
 {
  return 1;
 }
 else
  return 0;
 }
 
 int GetMonthDay(int year, int month) //通過年和月得到對應(yīng)的天數(shù)
 {
 int arr[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
 int days = arr[month];
 if (month == 2)
 {
  days += JudgeYear(year);  //如果是閏年的二月則天數(shù)加1
 }
 return days;
 }
 
 
 Date operator +(int days)  //日期加天數(shù)函數(shù),重載“+”實現(xiàn)
 {
 _day += days;      //先將天數(shù)全部加到所給日期的“天”上
 GetRightDate(_year, _month, _day); //再通過計算得到正確的日期。
 return *this;
 }
 
 void GetRightDate(int &year, int &month, int &day)  //計算出正確的日期
 {
 if (day <= 0)
 {
  while (day <= 0)
  {
  month--;
  day += GetMonthDay(year, month);
  if (month < 1)
  {
   year--;
   month = 13;
  }
  }
 }
 else
 {
  while (day>GetMonthDay(year, month))
  {
  day -= GetMonthDay(year, month);
  month++;
  if (month > 12)
  {
   year++;
   month = 1;
  }
  }
 }
 }
 
 Date operator -(int days)  //重載“-”實現(xiàn)日期減天數(shù)
 {
 _day -= days;
 GetRightDate(_year, _month, _day);
 return *this;
 }
 
 bool operator >(const Date &d)  //判斷兩個日期的大小
 {
 if (_year > d._year)
 {
  return true;
 }
 else if (_year == d._year)
 {
  if (_month > d._month)
  {
  return true;
  }
  else if (_month==d._month)
  {
  if (_day > d._day)
  {
   return true;
  }
  }
 }
 return false;
 }
 
 bool operator ==(const Date &d)  //判斷兩個日期是否相等
 {
 if (_year == d._year && _month == d._month && _day == d._day)
 {
  return true;
 }
 else
  return false;
 }
 
 int operator -( Date &d) //計算日期差函數(shù),重載“-”實現(xiàn)
 {
 int count = 0;
 Date tmp(*this);
 if (*this > d)
 {
  tmp = d;
  d = *this;
  *this = tmp;
 }
 while (!(*this==d))
 {
  count++;
  *this =*this+1;
 }
 return count;
 }
 
 
 void print()    //打印函數(shù)
 {
 cout << _year << "-" << _month << "-" << _day;
 }
 
 
 int week()  //求出日期對應(yīng)的星期函數(shù)
 {
 int w = 0;
 int y = _year;
 int m = _month;
 if (m == 1 || m == 2)
 {
  m = _month + 12;
  y = _year - 1;
 }
 w = _day + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400;
 w = w % 7 + 1;
 return w;
 }
 
 void print_week()
 {
 cout << "星期日 星期一 星期二 星期三 星期四 星期五 星期六" << endl;
 }
 
 void print_day() //根據(jù)日期和星期,正確的輸出日歷
 {
 int line = 1;
 int days = GetMonthDay(_year,_day);
 int w = week();
 if (w != 7)
 {
  for (int blank = w - 1; blank; --blank, ++line)
  {
  cout << setw(7) << "";
  }
 }
 for (int d = 1; d <= days; ++d, ++line)
 {
  cout << setw(7) << d;
  if (line % 7 == 0)
  {
  cout << endl;
  }
 }
 cout << endl;
 }
 
private:
 int _year;
 int _month;
 int _day;
};
void menu()
{
 cout << setw(40) <<"萬年歷"<< endl;
 cout << "1.日期加減天數(shù)" << endl;
 cout << "2.日期減日期" << endl;
 cout << "3.輸入年月顯示當月日歷" << endl;
}
void choice()
{
 int num = 0;
 int year, month, day, days;
 char ch = '+';
 cin >> num;
 if (num == 1)
 {
 cout << "請輸入日期:" << endl;
 cin >> year >> month >> day;
 cout << "請輸入天數(shù):" << endl;
 cin >> days;
 cout << "請輸入'+'或者'-':" << endl;
 cin >> ch;
 Date d1(year, month, day);
 Date d2;
 if (ch == '+')
 {
  d2 = d1 + days;
 }
 else if (ch == '-')
 {
  d2 = d1 - days;
 }
 else
 {
  cout << "無效的輸入!" << endl;
 }
 cout << "計算后的日期為:";
 d2.print();
 cout << endl;
 }
 else if (num==2)
 {
 cout << "請輸入日期:" << endl;
 cin >> year >> month >> day;
 Date d3(year, month, day);
 cout << "請輸入日期:" << endl;
 cin >> year >> month >> day;
 Date d4(year, month, day);
 int ret = d3 - d4;
 cout << "期間相差:" << ret << endl;
 }
 else if (num == 3)
 {
 cout << "請輸入年月:" << endl;
 cin >> year >> month;
 Date d5(year, month);
 d5.print_week();
 d5.print_day();
 }
}
int main()
{
 menu();
 choice();
 system("pause");
 return 0;
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++實現(xiàn)LeetCode(206.倒置鏈表)

    C++實現(xiàn)LeetCode(206.倒置鏈表)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(206.倒置鏈表),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言FlappyBird飛揚的小鳥實現(xiàn)開發(fā)流程

    C語言FlappyBird飛揚的小鳥實現(xiàn)開發(fā)流程

    因為在家宅了好多天,隨手玩了下自己以前做的一些小游戲,說真的,有幾個游戲做的是真的劣質(zhì),譬如 flappybird 真的讓我難以忍受,于是重做了一波分享給大家
    2022-11-11
  • 解析VScode在Windows環(huán)境下c_cpp_properties.json文件配置問題(推薦)

    解析VScode在Windows環(huán)境下c_cpp_properties.json文件配置問題(推薦)

    這篇文章主要介紹了解析VScode在Windows環(huán)境下c_cpp_properties.json文件配置問題,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • C語言簡明分析指針與引用的具體用法

    C語言簡明分析指針與引用的具體用法

    指針是一個實體,引用是一個別名;在匯編上,引用的底層是以指針的方式實現(xiàn)的,定義一個引用變量,相當于定義了一個指針,然后把引用內(nèi)存的地址寫到這個指針里面,當通過引用變量修改它所引用的內(nèi)存時,它先訪問了指針里面的地址,然后在這個地址的內(nèi)存里面對值進行修改
    2022-05-05
  • 常用排序算法的C語言版實現(xiàn)示例整理

    常用排序算法的C語言版實現(xiàn)示例整理

    這篇文章主要介紹了常用排序算法的C語言版實現(xiàn)示例整理,包括快速排序及冒泡排序等,基本上都給出了時間復(fù)雜度,需要的朋友可以參考下
    2016-03-03
  • C++98/11/17表達式類別(小結(jié))

    C++98/11/17表達式類別(小結(jié))

    這篇文章主要介紹了C++98/11/17表達式類別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2020-05-05
  • C++保存txt文件實現(xiàn)方法代碼實例

    C++保存txt文件實現(xiàn)方法代碼實例

    這篇文章主要介紹了C++保存txt文件實現(xiàn)方法代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-11-11
  • Qt數(shù)據(jù)庫應(yīng)用之實現(xiàn)圖片轉(zhuǎn)pdf

    Qt數(shù)據(jù)庫應(yīng)用之實現(xiàn)圖片轉(zhuǎn)pdf

    這篇文章主要為大家詳細介紹了如何利用Qt實現(xiàn)圖片轉(zhuǎn)pdf功能,文中的示例代碼講解詳細,對我們學(xué)習或工作有一定參考價值,需要的可以了解一下
    2022-06-06
  • C++11 智能指針的具體使用

    C++11 智能指針的具體使用

    本文主要介紹了C++11 智能指針的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • VS2019配置OpenCV時找不到Microsoft.Cpp.x64.user的解決方法

    VS2019配置OpenCV時找不到Microsoft.Cpp.x64.user的解決方法

    這篇文章主要介紹了VS2019配置OpenCV時找不到Microsoft.Cpp.x64.user的解決方法,需要的朋友可以參考下
    2020-02-02

最新評論