-
Notifications
You must be signed in to change notification settings - Fork 1
기능 : 사용종료 임박자 보여주기
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과 비교
: 시간 차이 계산하는 함수
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;
}
- 문자열인 Reservation의 멤버인 during을 .을 기준으로 잘라서 각각 월과 일로 저장
주의점 : 문자열을 자르는
strtok
은 포인터값을 주고받으므로, 원본이 변경된다 그렇기에, strcpy로 다른 임시 저장공간에 복사하여 사용 이를 date배열에 저장 첫번째원소는 월, 두번째 원소는 년을 의미한다 -
atoi
를 이용하여, 문자열 정수로 변환 - 이를 현재 시간과 계산해서 , 시간차이를 반환한다
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일 미만으로 남은 사람을 출력한다