C++设计Date类,不同格式输出日期
- 提问者网友:动次大次蹦擦擦
- 2021-02-23 16:50
- 五星知识达人网友:妄饮晩冬酒
- 2021-02-23 18:24
#include
#include
using namespace std;
class Date
{
public:
void getdata();
void print();
private:
int year;
int month;
int day;
}D;
void Date::getdata()
{
cout<<"输入年:";
cin>>year;
for (int i=0; ; )
{
cout<<"输入月:";
cin>>month;
if (month>12||month<1)
{
cout<<"输入错误,重新输入!"<
}
else
break;
}
for (int j=0; ; )
{
cout<<"输入日:";
cin>>day;
if (day>31||day<1)
{
cout<<"输入错误,重新输入!"<
}
else
break;
}
}
void Date::print()
{
string n;
switch(month)
{
case 1:n="January";break;
case 2:n="February";break;
case 3:n="March";break;
case 4:n="April";break;
case 5:n="May";break;
case 6:n="June";break;
case 7:n="July";break;
case 8:n="August";break;
case 9:n="September";break;
case 10:n="October";break;
case 11:n="November";break;
case 12:n="December";break;
}
cout<
int main()
{
D.getdata();
D.print();
return 0;
}
- 1楼网友:毛毛
- 2021-02-23 19:56
这个程序唯一难的地方是进行加一天的运算,要判断是否闰年和是否是二月份。
下面是我写的程序:
#include <iostream> using namespace std;
const int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; class date { private: int day; int month; int year;
public: date(int y=1900, int m=1, int d=1) { setdate(y,m,d); }
void setdate(int y, int m, int d); void print(); void incrementday(); bool leapyear(int y); bool endofmonth(int d); };
void date::setdate(int y, int m, int d) { year=(y>0) ? y : 1900; month=(m>=1 && m<=12) ? m : 1; if (month==2 && leapyear(y)) day=(day>=1 && day<=29) ? d : 1; else day=(d>=1 && d<=days[month])? d : 1; }
void date::print() { cout<<"日期:\n年:"<<year<<" 月:"<<month<<" 日:"<<day<<endl; }
void date::incrementday() { if (endofmonth(day) && month==12) { day=1; month=1; ++year; } else if (endofmonth(day)) { day=1; ++month; } else ++day; }
bool date::leapyear(int y) { if (y%400==0 || (y%100!=0 && y%4==0)) return true; else return false; }
bool date::endofmonth(int d) { if (month==2 && leapyear(year)) return d==29; else return d==days[month]; }
int main() { date date1,date2(2000,12,31); date1.print(); date2.print(); date2.incrementday(); date2.print(); return 0; }