Creative Code

[C++]디데이 계산기 본문

혼자 만든 Code

[C++]디데이 계산기

빛하루 2023. 8. 28. 20:38
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>

class Date {
	int year_;
	int month_; // 1부터 12까지.
	int day_; // 1 부터 31까지.

public:

	void SetDate(int year, int month, int date) {
		year_ = year;
		month_ = month;
		day_ = date;

	}

	void AddDay(int inc) {
		int regular_year[13] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
		int inregular_year[13] = { 0, 31, 60, 91, 121 ,152 , 182, 213, 244, 274, 305, 335, 366 };
		if (inc > 365 || inc < 1) {
			std::cout << "범위를 초과하였습니다." << std::endl;
		}
		else {
			day_ = inregular_year[month_ - 1] + day_ + inc;
			if ((year_ % 4 || year_ % 400) && ~(year_ % 100)) {

				if (day_ > 366) {
					day_ -= 366;
					year_++;
					for (int i = 0; i <= 11; i++) {
						if (regular_year[i] < day_ && regular_year[i + 1] >= day_) {
							month_ = i + 1;
							day_ = day_ - regular_year[i];
						}
					}
				}
				else {
					for (int i = 0; i <= 11; i++) {
						if (inregular_year[i] < day_ && inregular_year[i + 1] >= day_) {
							month_ = i + 1;
							day_ = day_ - inregular_year[i];
						}
					}
				}

			}
			else {
				if (day_ > 365) {
					day_ -= 365;
					year_++;
					if ((year_ % 4 || year_ % 400) && ~(year_ % 100)) {

						if (day_ > 366) {
							day_ -= 366;
							year_++;
							for (int i = 0; i <= 11; i++) {
								if (regular_year[i] < day_ && regular_year[i + 1] >= day_) {
									month_ = i + 1;
									day_ = day_ - regular_year[i];
									break;
								}
							}
						}
						else {
							for (int i = 0; i <= 11; i++) {
								if (inregular_year[i] < day_ && inregular_year[i + 1] >= day_) {
									month_ = i + 1;
									day_ = day_ - inregular_year[i];
									break;
								}
							}
						}

					}
					else {
						for (int i = 0; i <= 11; i++) {
							if (regular_year[i] < day_ && regular_year[i + 1] >= day_) {
								month_ = i + 1;
								day_ = day_ - regular_year[i];
								break;
							}
						}
					}


				}
				else {
					for (int i = 0; i <= 11; i++) {
						if (regular_year[i] < day_ && regular_year[i + 1] >= day_) {
							month_ = i + 1;
							day_ = day_ - regular_year[i];
							break;
						}
					}
				}
			}
		}
	}
	void AddMonth(int inc) {
		month_ += inc;
		if (month_ > 13) {
			int count = 0;
			while (month_ >= 1 && month_ <= 12) {
				month_ -= 12;
				count += 1;

			}
			year_ += count;
		}
	}
	void AddYear(int inc) {
		year_ += inc;
	}
	void ShowDate() {
		std::cout << "날짜 : " << year_ << " 년 " << month_ << " 월 " << day_ << " 일 " << std::endl;
	}
};

int main() {
	Date day_calculator;
	int setting_year;
	int setting_month;
	int setting_day;
	int addday;
	int addmonth;
	int addyear;


	std::cout << " Date클래스 테스트 입니다." << std::endl;
	std::cout << std::endl;

	std::cout << " 날짜를 설정해주세요 !" << std::endl;
	std::cout << " 연도 : ";
	std::cin >> setting_year;
	std::cout << " 월 : ";
	std::cin >> setting_month;
	std::cout << " 일 : ";
	std::cin >> setting_day;
	day_calculator.SetDate(setting_year, setting_month, setting_day);
	
	std::cout << "실행할 항목을 선택해주세요! " << std::endl;
	std::cout << "1. 일수 더하기" << std::endl;
	std::cout << "2. 월수 더하기" << std::endl;
	std::cout << "3. 년수 더하기" << std::endl;

	int user_select;
	std::cout << "선택 : ";
	std::cin >> user_select;
	std::cout << std::endl;
	switch (user_select) {
	case 1 :
		std::cout << std::endl;
		std::cout << "몇 일을 더할까요 : ";
		std::cin >> addday;
		day_calculator.AddDay(addday);
		std::cout << std::endl;
		day_calculator.ShowDate();
		break;
	case 2:
		std::cout << std::endl;
		std::cout << "몇 월을 더할까요 : ";
		std::cin >> addmonth;
		day_calculator.AddMonth(addmonth);
		std::cout << std::endl;
		day_calculator.ShowDate();
		break;
	case 3:
		std::cout << std::endl;
		std::cout << "몇 년을 더할까요 : ";
		std::cin >> addyear;
		day_calculator.AddYear(addyear);
		std::cout << std::endl;
		day_calculator.ShowDate();
		break;
	default:
		return 0;
	}
	return 0;
}

'혼자 만든 Code' 카테고리의 다른 글

[C]축구선수 관리 프로그램  (0) 2023.08.28
[C]디데이 계산기  (0) 2023.08.28
c  (0) 2023.08.08
[JAVA] 리모컨 프로그램  (0) 2022.07.20
[java]거주가능한 행성을 찾는 프로그램  (0) 2022.07.19