forked from Danielbet21/Amusement_Park
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTime.c
139 lines (106 loc) · 2.35 KB
/
Time.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include "Time.h"
#define DELEMETER ':'
int initTime(Time* time, int hour, int minute) {
if (!isValidTime(hour, minute)) {
return 0;
}
time->hour = hour;
time->minute = minute;
return 1;
}
int isValidTime(int hour, int minute) {
if (hour < MIN_HOUR || hour > MAX_HOUR || minute < MIN_MIN || minute > MAX_MIN) {
return 0;
}
return 1;
}
void printTime(const Time* time) {
if (!isValidTime(time->hour, time->minute)) {
printf("Invalid time\n");
return;
}
printf("%02d%c%02d", time->hour, DELEMETER, time->minute);
}
int compareTime(const Time* time1, const Time* time2) {
if (time1->hour == time2->hour && time1->minute == time2->minute) {
return 0;
}
if (time1->hour > time2->hour) {
return 1;
}
if (time1->hour < time2->hour) {
return -1;
}
if (time1->minute > time2->minute) {
return 1;
}
if (time1->minute < time2->minute) {
return -1;
}
return 0;
}
void initTimeByUser(Time* time) {
int flag = 0;
int hour, minute;
do {
if (flag > 0) {
printf("Invalid time, Please try again\n");
}
printf("Please enter Hour: ");
scanf("%d", &hour);
printf("Please enter Minute: ");
scanf("%d", &minute);
flag = 1;
} while (!initTime(time, hour, minute));
}
// save and load functions
int saveTimeToTextFile(const Time* pTime, FILE* fp) {
IS_FILE_NULL(fp);
if (writeIntToTextFile(fp, pTime->hour) == 0) {
return 0;
}
if (writeIntToTextFile(fp, pTime->minute) == 0) {
return 0;
}
return 1;
}
int loadTimeFromTextFile(Time* pTime, FILE* fp) {
IS_FILE_NULL(fp);
int tempHour, tempMinute;
if (readIntFromTextFile(fp, &tempHour) == 0) {
return 0;
}
if (readIntFromTextFile(fp, &tempMinute) == 0) {
return 0;
}
// init the time
if (!initTime(pTime, tempHour, tempMinute)) {
return 0;
}
return 1;
}
int saveTimeToBinFile(const Time* pTime, FILE* fp) {
// save compressed time to file
IS_FILE_NULL(fp);
BYTE data[2];
data[0] = (pTime->hour << 3) | (pTime->minute >> 3);
data[1] = (pTime->minute << 5);
if (fwrite(data, sizeof(BYTE), 2, fp) != 2) {
return 0;
}
return 1;
}
int loadTimeFromBinFile(Time* pTime, FILE* fp) {
// load compressed time from file
IS_FILE_NULL(fp);
BYTE data[2];
if (fread(data, sizeof(BYTE), 2, fp) != 2) {
return 0;
}
int hour = data[0] >> 3;
int minute = ((data[0] & 0x07) << 3) | (data[1] >> 5);
if (!initTime(pTime, hour, minute)) {
return 0;
}
return 1;
}