Programing/C- programing

C++ class date 코드

sosal 2009. 10. 15. 18:49
반응형

/*
 http://sosal.tistory.com/
 * made by so_Sal
 */



#include <iostream>
#include <ctime>

using namespace std;

class date{
private:
 int year, month, day; // default is private
 int max_day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; 
 //각 month의 최대 day입니다.
public:
 date();   //생성자 함수
 void set_date(int y, int m, int d);
 void prev_day();
 void next_day();
 void print_date(); // 모든 함수는 main함수 아래에 정의되어 있습니다.
};

int main(){
 date t; //date 클레스의 객체 t를 하나 선언합니다.
 int s;  //s는 메뉴 번호를 입력받을 번호
 
 while(true){ //menu함수를 따로 만들지 않고 메인에서 구성하였습니다.
  cout<<"menu   ::   1(show)     2(set)     3(prev day)   4(next day)   5(quit)"<<endl;
  cin >> s;
  if (s==5) break;
  switch (s){ //입력받은 번호에 따른 결과값입니다.
   case 1:
    t.print_date();
    break;
   case 2:
    cout<<"enter\tyear,\tmonth,\tday\n"<<endl;
    int y,m,d;
    cin >>y>>m>>d;
    t.set_date(y,m,d); //입력받은 변수를 date객체 t에 set_date
           //함수를 이용하여 객체에 전달
    break;
   case 3:
    t.prev_day();
    break;
   case 4:
    t.next_day();
    break;
  } //입력받은 s에 따라서 case 구조를 이용하여 객체 내의 함수를 호출합니다.
 }
 return 0;
}

date::date()
{
 time_t cur_time;    // 현재시각이 들어가는 timne_t형식의 자료형 cur_time 변수
 struct tm* pTime;    // 시간 구조체
 time(&cur_time);    // 현재 시각..
 pTime = localtime(&cur_time);// 로컬의 시간을 넣음
 
 year = pTime->tm_year+1900;  // year
 month = pTime->tm_mon+1;  // month
 day = pTime->tm_mday;   // day
 
 //0번째 달은 쓰지 않음으로 13개의 배열에 0번을 0으로..
}
//생성자 함수 :: 현재 로컬의 시간을 private 변수에 담아주는 역할

void date::set_date(int y, int m, int d){
 year = y;
 month = m;
 day = d;
}
//현재

void date::prev_day(){
 
 day-=1; //하루 전날로 돌린다.
 if (day<=0){ // month should decreased
  day = max_day[month-1];
  month -= 1;
  if (month <= 0) { // year must be increased
   month = 12;
   year -= 1;
   day = max_day[month];
  }
 }
}//날짜를 하루 전으로 바꿈. 1일일때 if절 안에서 day에 따른 month year 변화

void date::next_day(){
 
 day+=1;
 if (day >max_day[month]){ // month should increased
  day = 1;
  month += 1;
  if (month > 12) { // year must be increased
   month = 1;
   year += 1;
  }
 }
}//날짜를 하루 앞으로 바꿈.

void date::print_date()
{
 //printf("year: %d month: %d day: %d\n",year, month,day);
 cout<<"Year :: "<<year<<" Month ::"<<month<<" Day :: "<<day<<endl;
}