-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.c
233 lines (185 loc) · 7.25 KB
/
main.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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <time.h>
struct Voiture {
char immatriculation[20];
char marque[30];
int etage;
int place;
time_t entree; // Ajout de la variable pour enregistrer le temps dans le parking
};
typedef struct Voiture Voiture;
//Permet d'afficher une voiture de façon condensé.
void condenseVoiture(Voiture voiture){
int length;
length = strlen(voiture.marque);
length += strlen(voiture.immatriculation);
printf("%s : %s", voiture.marque, voiture.immatriculation);
for (int i = 0; i<17-length; i++){
printf(" ");
}
}
//Affiche les détails d'une voiture.
void afficheVoiture(Voiture voiture) {
printf("La %s immatriculée %s est garée place %d, étage %d", voiture.marque, voiture.immatriculation, voiture.place, voiture.etage);
}
//Initialise le parking avec un certain nombre de voiture.
void initialiseParking(int nbEtage, int nbPlacesEtages, int nbVoiture, Voiture *pParking){
Voiture initialisatrice;
int k = 0;
for (int i = 0;i<nbEtage;i++){
for (int j = 0; j<nbPlacesEtages; j++){
initialisatrice.etage=i;
initialisatrice.place=j;
time_t maintenant;
time(&maintenant);
initialisatrice.entree = maintenant;
if (k<nbVoiture){
strcpy(initialisatrice.immatriculation,"00-000-00");
strcpy(initialisatrice.marque, "Tesla");
} else {
strcpy(initialisatrice.immatriculation," ");
strcpy(initialisatrice.marque, " ");
}
*(pParking+i*nbPlacesEtages+j) = initialisatrice;
k++;
}
}
}
//Affiche le parking d'une façon lisible pour l'utilisateur.
void afficheParking(int nbEtage, int nbPlacesEtages, Voiture *pParking){
printf("\n\nÉtage =");
for (int j = nbPlacesEtages; j>=1; j--){
printf("=======================");
}
for (int i = nbEtage-1;i>=0;i--){
printf("\n %d | ",i);
for (int j = 0; j<nbPlacesEtages; j++){
condenseVoiture(*(pParking+i*nbPlacesEtages+j));
printf(" | ");
}
printf("\n =");
for (int j = nbPlacesEtages; j>=1; j--){
printf("=======================");
}
}
printf("\n ");
for (int j = 0; j<nbPlacesEtages; j++){
printf(" %d ",j);
}
printf("\n");
}
//Supprime une voiture du parking.
void sortDuParking(int nbEtage, int nbPlacesEtages, Voiture *pParking){
printf("\n\nÀ quel étage êtes vous garé ? ");
int etage;
scanf("%d", &etage);
printf("\nÀ quelle place êtes-vous garé ? ");
int place;
scanf("%d", &place);
if(strncmp((*(pParking+etage*nbPlacesEtages+place)).immatriculation, " ",1)==0){
printf("\nIl n'y a pas de voiture ici. Êtes vous un fantôme ?");
} else {
time_t maintenant;
time(&maintenant);
double duree = (double) difftime(maintenant, (*(pParking+etage*nbPlacesEtages+place)).entree);
double paye = duree * (1./60.);
printf("La voiture est restée dans le parking pendant %.2f secondes et doit payer %2f €.\n", duree, paye);
Voiture initialisatrice;
strcpy(initialisatrice.immatriculation, " ");
strcpy(initialisatrice.marque, " ");
initialisatrice.etage = etage;
initialisatrice.place = place;
initialisatrice.entree = 0;
*(pParking+etage*nbPlacesEtages+place) = initialisatrice;
printf("Place libérée.");
}
}
//Place la voiture à la meilleure place.
void gareVoitureAuMeilleurEndroit(int nbEtage, int nbPlacesEtages, Voiture *pParking, Voiture voiture){
char reponse[4];
for (int i = 0;i<nbEtage;i++){
printf("\nBienvenue à l'étage n°%d",i);
for (int j = 0; j<nbPlacesEtages; j++){
if(!strncmp((*(pParking+i*nbPlacesEtages+j)).immatriculation, " ",1)){
printf("\nSouhaitez vous vous garer à la place numéro %d ? (Oui/Non) ",j);
scanf("%s",reponse);
if(!strncmp(reponse, "Oui",1)){
*(pParking+i*nbPlacesEtages+j) = voiture;
printf("\nVous êtes garé.");
j=nbPlacesEtages;
i = nbEtage;
} else if (!strncmp(reponse, "Non",1)){
printf("\nD'accord, nous allons vous proposer une nouvelle place.");
} else {
printf("\nApprenez à écrire. Pour la peine, vous irez à une place suivante.");
}
}
}
printf("\nIl n'y a plus de places à cette étage...");
}
printf("\nDésolé, il n'y a plus de places dans le parking...");
}
//Ajoute une voiture créée par l'utilisateur dans le parking.
void ajouteVoiture(int nbEtage, int nbPlacesEtages, Voiture *pParking){
bool isPlaceOk = false;
int etage;
int place;
printf("\nQuel est la marque de votre voiture ?");
char marque[50];
scanf("%s", marque);
printf("\nQuelle est votre plaque d'immatriculation ? ");
char immatriculation[50];
scanf("%s", immatriculation);
time_t maintenant;
time(&maintenant);
Voiture nouvelle;
strcpy(nouvelle.immatriculation, immatriculation);
strcpy(nouvelle.marque, marque);
nouvelle.etage = etage;
nouvelle.place = place;
nouvelle.entree = maintenant; // Enregistrement du temps d'entrée
gareVoitureAuMeilleurEndroit(nbEtage,nbPlacesEtages,pParking,nouvelle);
afficheParking(nbEtage,nbPlacesEtages, pParking);
}
//Main. C'est ici que sont organisées toutes les fonctions.
int main() {
printf("Bienvenue dans mon super programme de PARKING !!!\n");
int nbVoiture = 9;
int nbEtage = 3;
int nbPlacesEtages = 5;
Voiture parking[nbEtage][nbPlacesEtages];
initialiseParking(nbEtage, nbPlacesEtages, nbVoiture, parking);
while (1 == 1) {
printf("\nMon super parking à %d places !!! Malheureusement pour vous, %d sont déjà occupées.\n", nbEtage * nbPlacesEtages, nbVoiture);
if (nbVoiture >= nbEtage * nbPlacesEtages) {
printf("\nLa BARRIÈRE est fermée.");
} else {
printf("\nLa BARRIÈRE est ouverte.");
}
afficheParking(nbEtage,nbPlacesEtages,parking);
printf("\n\nQue souhaitez-vous faire ? 'Entrer' ou 'Sortir' ? \n");
char reponse[40];
scanf("%s", reponse);
const char* entrer = "Entrer";
const char* sortir = "Sortir";
if (strncmp(entrer, reponse, 3) == 0) {
if (nbVoiture >= nbEtage * nbPlacesEtages) {
printf("\nDésolé, mais mon super parking est plein. La BARRIÈRE est fermée.\n");
} else {
ajouteVoiture(nbEtage, nbPlacesEtages, parking);
printf("\nOh non, une voiture s'ajoute dans le parking...\n");
nbVoiture++;
}
} else if (strncmp(sortir, reponse, 3) == 0) {
sortDuParking(nbEtage, nbPlacesEtages, parking);
printf("\n[Parking] Ouiii, je m'alège!!!\n\n");
nbVoiture--;
} else {
printf("\nC'est au CP qu'on apprend à écrire, recommence.\n");
}
}
return 0;
}