Skip to content

기능 : 사용종료 임박자 보여주기

Hanss3576 edited this page May 16, 2022 · 9 revisions

사용 종료 임박의 기준을 어떻게 정할 것인가?

오늘 날짜와 예약기간을 비교했을 때, 하루 미만으로 남는 경우 종료임박자로 구분

#include <time.h> 
time_t t = time(NULL);
struct tm time_struct = *location(&t);

time.h에 있는 time_t , tm구조체 이용해서 현재 시간을 저장

  • struct tm의 구조
struct tm {
   int tm_sec;         /* 초,  range 0 to 59            */
   int tm_min;         /* 분, range 0 to 59             */
   int tm_hour;        /* 시간, range 0 to 23            */
   int tm_mday;        /* 일, range 1 to 31             */
   int tm_mon;         /* 월, range 0 to 11             */
   int tm_year;        /* 1900년 부터의 년                */
   int tm_wday;        /* 요일, range 일(0) to 토(6)      */
   int tm_yday;        /* 1년 중 경과 일, range 0 to 365  */
   int tm_isdst;       /* 써머타임                        */
};

이 구조체의 멤버인 tm_mon, tm_mday를 Reservation의 멤버인 during과 비교


calculatorTime함수

: 시간 차이 계산하는 함수

int calculatorTime(char duration[]){
    time_t t = time(NULL);
    struct tm currentTime = *localtime(&t);
    
    char *date[2] = {NULL, };
    int i = 0;
    char temp[10];
    strcpy(temp, duration);
    char *ptr = strtok(temp, ".");

    while(ptr != NULL){
        date[i] = ptr;
        i++;
        ptr = strtok(NULL, " ");
    }

    int reservation_month = atoi(date[0]);
    int reservation_day = atoi(date[1]);

    int gapOfTime = (reservation_month - currentTime.tm_mon - 1)*30 + reservation_day - currentTime.tm_mday;
    //기간 입력 형태가 5.16과 같음 즉, .을 기준으로 앞은 월 / 뒤는 일
    return gapOfTime;
}
  1. 문자열인 Reservation의 멤버인 during을 .을 기준으로 잘라서 각각 월과 일로 저장

    주의점 : 문자열을 자르는 strtok은 포인터값을 주고받으므로, 원본이 변경된다 그렇기에, strcpy로 다른 임시 저장공간에 복사하여 사용 이를 date배열에 저장 첫번째원소는 월, 두번째 원소는 년을 의미한다

  2. atoi를 이용하여, 문자열 정수로 변환
  3. 이를 현재 시간과 계산해서 , 시간차이를 반환한다

userImpendingEnd 함수

void userImpendingEnd(Reseveration *s, int count){
    
    printf("No. 이름 | 전화번호 | 자리 | 예약 기간\n");
    printf("=====================================\n");
    
    for(int i= 0 ; i < count ; i++){
        if(calculatorTime(s[i].during) < 0){
            printf("\n<<사용기간 종료된 이용자>>\n");
            readReseveration(&s[i]);
            continue;
        }
        else if(calculatorTime(s[i].during)< 3){
            printf("\n<<사용기간 3일 미만 이용자>>\n");
            readReseveration(&s[i]);
            continue;
        }
    }
}
  • calculatorTime 함수로 예약 기간과 현재 시간의 차이를 계산해서 , 종료된 사람과 3일 미만으로 남은 사람을 출력한다

결과 예시 화면

사용종료 임박자 출력