C++ 日期计算器 之 超级无敌小白版
因为没有用很多更复杂的语法,看起来会更数学化一点,所以必然会比其他大佬的代码长很多。
以下代码更适合刚入门遇到写日期计算器这类问题的小白哦,想要提升找更简单方法滴大佬们转向去其他贴昂,不要浪费时间啦!!
C++一般都会在一个项目里,去分很多类去做,这样会更清楚。这道题我分了两个类哦。
#ifndef MYDATE_H
#define MYDATE_H
#include <iostream>
using namespace std;
class myDate {
private:
int year;
int month;
int day;
public:
myDate(): year(1990), month(1), day(1) {}; // 1900,1,1
myDate(int newyear, int newmonth, int newday);
bool validity(int newyear, int newmonth, int newday);
//所设置的日期是否合法?
bool setDate(int newyear, int newmonth, int newday);
// 月:1-12,日: 1--31
bool setyear(int newyear); //1900----3000
int getyear();
bool setmonth(int newmonth); //1--31
int getmonth();
bool setday(int newday);
int getday();
bool increaseday(int n); // 31+1==
bool reduceday(int n);
void display();
};
#endif
//成员函数定义
myDate::myDate(int newyear, int newmonth, int newday) {
setDate(newyear, newmonth, newday);
}
bool myDate::validity(int newyear, int newmonth, int newday) {
if (newyear >= 1900 && newyear <= 3000) {
if (newmonth == 2) {
if (((newyear % 4 == 0) && (newyear % 100 != 0)) || (newyear % 400 == 0)) {
if ((newday > 0) && (newday <= 29))
return true;
else
return false;
} else {
if ((newday > 0) && (newday <= 28))
return true;
else
return false;
}
} else if ((newmonth == 1) || (newmonth == 3) || (newmonth == 5) || (newmonth == 7) || (newmonth == 8)
|| (newmonth == 10) || (newmonth == 12)) {
if ((newday > 0) && (newday <= 31))
return true;
else
return false;
} else if ((newmonth == 4) || (newmonth == 6) || (newmonth == 9) || (newmonth == 11)) {
if ((newday > 0) && (newday <= 30))
return true;
else
return false;
} else
return false;
} else
return false;
}
bool myDate::setDate(int newyear, int newmonth, int newday) {
if (newyear >= 1900 && newyear <= 3000) {
if (newmonth == 2) {
if (((newyear % 4 == 0) && (newyear % 100 != 0)) || (newyear % 400 == 0)) {
if ((newday > 0) && (newday <= 29)) {
year = newyear;
month = newmonth;
day = newday;
return true;
} else
return false;
} else {
if ((newday > 0) && (newday <= 28)) {
year = newyear;
month = newmonth;
day = newday;
return true;
} else
return false;
}
} else if ((newmonth == 1) || (newmonth == 3) || (newmonth == 5) || (newmonth == 7) || (newmonth == 8)
|| (newmonth == 10) || (newmonth == 12)) {
if ((newday > 0) && (newday <= 31)) {
year = newyear;
month = newmonth;
day = newday;
return true;
} else
return false;
} else if ((newmonth == 4) || (newmonth == 6) || (newmonth == 9) || (newmonth == 11)) {
if ((newday > 0) && (newday <= 30)) {
year = newyear;
month = newmonth;
day = newday;
return true;
} else
return false;
} else
return false;
} else
return false;
}
bool myDate::setyear(int newyear) {
if (newyear >= 1900 && newyear <= 3000) {
if (month == 2) {
if (day == 29) {
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
return true;
year = newyear;
} else
return false;
} else {
return true;
year = newyear;
}
} else {
return true;
year = newyear;
}
} else
return false;
}
bool myDate::setmonth(int newmonth) {
if (newmonth == 2) {
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
if ((day > 0) && (day <= 29)) {
month = newmonth;
return true;
} else
return false;
} else {
if ((day > 0) && (day <= 28)) {
month = newmonth;
return true;
} else
return false;
}
} else if ((newmonth == 1) || (newmonth == 3) || (newmonth == 5) || (newmonth == 7) || (newmonth == 8)
|| (newmonth == 10)
|| (newmonth == 12)) {
if ((day > 0) && (day <= 31)) {
month = newmonth;
return true;
} else
return false;
} else if ((newmonth == 4) || (newmonth == 6) || (newmonth == 9) || (newmonth == 11)) {
if ((day > 0) && (day <= 30)) {
month = newmonth;
return true;
} else
return false;
}
}
bool myDate::setday(int newday) {
if (month == 2) {
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
if ((newday > 0) && (newday <= 29)) {
day = newday;
return true;
} else
return false;
} else {
if ((newday > 0) && (newday <= 28)) {
day = newday;
return true;
} else
return false;
}
} else if ((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10)
|| (month == 12)) {
if ((newday > 0) && (newday <= 31)) {
day = newday;
return true;
} else
return false;
} else if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) {
if ((newday > 0) && (newday <= 30)) {
day = newday;
return true;
} else
return false;
}
}
int myDate::getyear() {
return year;
}
int myDate::getmonth() {
return month;
}
int myDate::getday() {
return day;
}
void myDate::display() {
cout << getyear() << "年" << getmonth() << "月" << getday() << "日" << endl;
}
bool myDate::increaseday(int n) {
int x = 0;
int i, j, k;
int leap_year[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int normal_year[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
for (i = 1900; i < year; i++) {
if (((i % 4 == 0) && (i % 100 != 0)) || (i % 400 == 0))
x += 366;
else
x += 365;
}
if (((i % 4 == 0) && (i % 100 != 0)) || (i % 400 == 0)) {
for (j = month; j > 0; j--) {
x = x + leap_year[j - 1];
}
} else {
for (j = month; j > 0; j--)
x = x + normal_year[j - 1];
}
x = x + n - 1;
year = 1900;
month = 0;
while (x > 365) {
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
x = x - 366;
year++;
} else {
x = x - 365;
year++;
}
}
if (x <= 31) {
month = 1;
day = x;
} else if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
for (k = 0; x > 0; k++) {
month++;
x = x - leap_year[k];
}
day = x + leap_year[k];
} else {
for (k = 0; x > 0; k++) {
month++;
x = x - normal_year[k];
}
day = x + normal_year[k];
}
return true;
}
bool myDate::reduceday(int n) {
int x = 0;
int i, j, k;
int leap_year[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int normal_year[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
for (i = 1900; i < year; i++) {
if (((i % 4 == 0) && (i % 100 != 0)) || (i % 400 == 0))
x += 366;
else
x += 365;
}
if (((i % 4 == 0) && (i % 100 != 0)) || (i % 400 == 0)) {
for (j = month - 1; j > 0; j--) {
x = x + leap_year[j - 1];
}
} else {
for (j = month - 1; j > 0; j--)
x = x + normal_year[j - 1];
}
x = x - n + 1;
year = 1900;
month = 0;
while (x > 365) {
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
x = x - 366;
year++;
} else {
x = x - 365;
year++;
}
}
if (x <= 31) {
month = 1;
day = x;
} else if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
for (k = 0; x > 0; k++) {
month++;
x = x - leap_year[k];
}
day = x + leap_year[k];
} else {
for (k = 0; x > 0; k++) {
month++;
x = x - normal_year[k];
}
day = x + normal_year[k];
}
return true;
}
第二个类:
#include "myDate.h"
#include <iostream>
using namespace std;
int main() {
int n;
//1、定义对象
myDate today(2010, 4, 22);
//2、显示当前日期
today.display(); //1
//3、修改日期,使用setDate()
today.setDate(2010, 2, 28);
//4、显示当前日期
today.display(); //2
//5、修改日期,使用setXXX()
today.setday(26);
//6、显示当前日期
today.display(); //3
//7、修改日期,使用increaseday()
today.increaseday(5);
//8、显示当前日期
today.display();
//9、修改日期,使用reduceday()
today.setDate(2014, 1, 1);
today.reduceday(3);
//10、显示当前日期
today.display();
//11、使用cout输出,getXXX()获得的数据
cout << today.getyear() << "年" << today.getmonth() << "月" << today.getday() << "日" << endl;
return 0;
}
运行结果如下图: