fonction.py 17.9 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
import psycopg2

def listeAbonne(conn):
    cur = conn.cursor()
    sql = "SELECT * FROM abonne"
    cur.execute(sql)
    raw = cur.fetchone()
    while raw:
        print (raw[1], end=" ")
        print (raw[2])
        raw = cur.fetchone()

Pierre-Guerin's avatar
Pierre-Guerin committed
13
14
15
    print(" ")
    print(" ")

16
17
18
19
20
21
22
23
24

def ajouterAbonne(conn,facteurPrix):
    cur = conn.cursor()
    sql = "SELECT MAX(id) FROM utilisateur"
    cur.execute(sql)
    raw = cur.fetchone()
    idUtilisateur = int(raw[0])
    idUtilisateur += 1

Pierre-Guerin's avatar
Pierre-Guerin committed
25
26
27
28
29
30
    #ajout dans tables utilisateur
    sql = f"INSERT INTO utilisateur VALUES ( {idUtilisateur} )"
    cur.execute(sql)
    conn.commit()


31
32
33
34
35
36
    sql = "SELECT MAX(num_abo) FROM abonnement"
    cur.execute(sql)
    raw = cur.fetchone()
    num_abo = int(raw[0])
    num_abo += 1

37
    nbreVehicule = int(input("Combien de véhicules avez-vous? ,"))
38
39
40
41
42
43
    for i in range(nbreVehicule):
        immat = input("Immatriculation du véhicule: ")
        modele = input("Modèle du véhicule: ")
        marque = input("Marque du véhicule: ")
        verif = 0
        while verif !=1:
44
45
            typev = input("Type du véhicule (vehicule simple, 2 roues, camion)")
            if (typev == "vehicule simple"  or typev == "2 roues" or typev == "camion"):
46
47
48
                verif = 1
            else:
                print("Le type du véhicule n'est pas valide")
49
        sql = f"INSERT INTO vehicule VALUES ('{immat}', '{modele}', '{marque}', '{typev}', {idUtilisateur})"
50
51
52
53
54
55
56
57
        cur.execute(sql)
        conn.commit()
    nom = input("Quel est votre nom: ")
    prenom = input("Quel est votre prenom: ")
    mail = input("Quel est votre mail: ")
    mdp = input("Mot de passe de votre compte: ")

    #ajout dans la table compte
58
    sql = f"INSERT INTO compte VALUES ('{mail}','{mdp}', True)"
59
60
61
62
    cur.execute(sql)
    conn.commit()

    #ajout dans la table abonne
63
    sql = f"INSERT INTO abonne VALUES ({idUtilisateur}, '{nom}', '{prenom}',1, '{mail}')"
64
65
66
67
68
69
70
71
72
73
74
    cur.execute(sql)
    conn.commit()

    #Ajout dans la table abonnement
    print("Les parkings suivants sont disponible: ")
    sql = "SELECT * FROM parking"
    cur.execute(sql)
    raw = cur.fetchone()
    while raw:
        print (raw[0])
        raw = cur.fetchone()
Pierre-Guerin's avatar
Pierre-Guerin committed
75
    print(" ")
76
77
    parking = input("Dans quel parking voulez-vous prendre un abonnement ?")
    try:
78
79
        sql = f"SELECT zone.prix FROM zone INNER JOIN parking ON parking.zone=zone.nom WHERE parking.nom = '{parking}'"
        cur.execute(sql)
80
        raw = cur.fetchone()
81
        prix = float(raw[0])
82
83
84
85
86
87
        prix = prix * facteurPrix
    except Exception as e:
        print(e)


    try:
88
        sql = f"INSERT INTO abonnement VALUES ({num_abo},{prix},30,date_format(CURDATE()+30,'%d/%m/%Y'),'{parking}',{num_abo})"
89
90
91
92
        cur.execute(sql)
        conn.commit()
    except Exception as e:
        print(e)
93
        
Pierre-Guerin's avatar
Pierre-Guerin committed
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
def nbPlacesDansParking(conn):
    #affiche les parkings disponibles
    print("Vous pouvez consulter  les places disponibles pour les parkings suivants: ")
    sql = "SELECT * FROM parking"
    cur.execute(sql)
    raw = cur.fetchone()
    while raw:
        print (raw[0])
        raw = cur.fetchone()
    print(" ")
    nomParking = input("Parmis ces parkings, lequel vous intéresse?: ")
    sql = f"SELECT * FROM parking WHERE parking.nom = '{nomParking}'"
    cur.execute(sql)
    raw = cur.fetchone()
    if not raw:
        print("Le parking n'éxiste pas")
        return



114
115
116
117
118
119
120
121
    try:
        cur = conn.cursor()
        sql = f"SELECT SUM(NbreDeuxRouesCouvertes + NbreDeuxRouesAir + NbreCamionCouvertes + NbreCamionAir + NbreSimpleCouvertes + NbreSimpleAir) FROM parking WHERE parking.nom = '{nomParking}'"
        cur.execute(sql)
        nb = cur.fetchone()[0]
        print (f"Il y a {nb} places libres dans le parking {nomParking}")
    except Exception as e:
        print("Erreur; veuillez verifier votre saisie")
122
        print(f"Message systeme: {e}")
123
        print("Retour au menu")
Pierre-Guerin's avatar
Pierre-Guerin committed
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

def supprimerOccasionnel(conn):
    cur = conn.cursor()
    #recherche vehicule pour connaitre l'id de l'utilisateur
    tmp = 0
    while tmp == 0:
        try:
            im = input("veuillez rentrer l'immatriculation d'un de vos véhicule")
            sql = f"SELECT * FROM vehicule WHERE immat = '{im}'"
            cur.execute(sql)
            raw = cur.fetchone()
        except Exception as e:
            print("Erreur; veuillez verifier votre saisie")
            print(f"Message systeme: {e}")
            print("Retour au menu")
            return

        if raw:
            idUtilisateur = raw[4]
            tmp = 1
        else:
            print("Ce véhicule n'éxiste pas")
    
    #suppresion de ses véhicules:
    sql = f"DELETE FROM vehicule WHERE(proprietaire='{idUtilisateur}')"
    cur.execute(sql)
    conn.commit()
    
    #supprime réservation si nécessaire
    reponse = int(input("Avez-vous déjà réalisé une reservation? (1:oui , 2:non) "))
    if reponse == 1:
        mail = input("veuillez saisir votre adresse mail")
        try:
            sql = f"SELECT * FROM compte WHERE(mail='{mail}')"
            cur.execute(sql)
        except Exception as e:
            print("Erreur; veuillez verifier votre saisie")
            print(f"Message systeme: {e}")
            print("Retour au menu")
            return

        sql = f"DELETE FROM occasionnel WHERE(compte='{mail}')"
        cur.execute(sql)
        conn.commit()
        sql = f"DELETE FROM compte WHERE(mail='{mail}')"
        cur.execute(sql)
        conn.commit()
    else:
        sql = f"DELETE FROM occasionnel WHERE(id='{idUtilisateur}')"
        cur.execute(sql)
        conn.commit()

    



180
181
182
183
184
185
186
187
def supprimerAbonne(conn, mail):
    try:
        cur = conn.cursor()
        sql = f"SELECT id FROM abonne WHERE(compte='{mail}')"
        cur.execute(sql)
        ident = cur.fetchone()[0]
    except Exception as e:
        print("Erreur; veuillez verifier votre saisie")
188
        print(f"Message systeme: {e}")
189
190
191
192
193
194
195
        print("Retour au menu")
        return
    try:
        sql = f"SELECT * FROM compte WHERE(mail='{mail}')"
        cur.execute(sql)
    except Exception as e:
        print("Erreur; veuillez verifier votre saisie")
196
        print(f"Message systeme: {e}")
197
198
199
200
201
202
203
        print("Retour au menu")
        return
    try:
        sql = f"SELECT * FROM abonnement WHERE(abonne='{ident}')"
        cur.execute(sql)
    except Exception as e:
        print("Erreur; veuillez verifier votre saisie")
204
        print(f"Message systeme: {e}")
205
206
207
208
209
210
211
212
213
        print("Retour au menu")
        return
    try:
        sql = f"SELECT * FROM reservation WHERE(compte='{mail}')"
        cur.execute(sql)
        sql = f"DELETE FROM reservation WHERE (compte='{mail}')"
        cur.execute(sql)
    except Exception as e:
        print("Erreur; veuillez verifier votre saisie")
214
        print(f"Message systeme: {e}")
215
216
217
218
        print("Retour au menu")
        return
    sql = f"DELETE FROM abonnement WHERE(abonne='{ident}')"
    cur.execute(sql)
Pierre-Guerin's avatar
Pierre-Guerin committed
219
    conn.commit()
220
221
    sql = f"DELETE FROM abonne WHERE(compte='{mail}')"
    cur.execute(sql)
Pierre-Guerin's avatar
Pierre-Guerin committed
222
    conn.commit()
223
224
    sql = f"DELETE FROM compte WHERE(mail='{mail}')"
    cur.execute(sql)
Pierre-Guerin's avatar
Pierre-Guerin committed
225
    conn.commit()
226
227
228
229
230
231

def ajouterZone(conn, nomZone, prix):
    try:
        cur = conn.cursor()
        sql = f"INSERT INTO zone VALUES ('{nomZone}', {prix})"
        cur.execute(sql)
232
        conn.commit()
233
234
    except Exception as e:
        print("Erreur; veuillez verifier votre saisie")
235
        print(f"Message systeme: {e}")
236
        print("Retour au menu")
237
238
239
240
241
242
243
244
245
246

def afficherZones(conn):
    cur = conn.cursor()
    sql = "SELECT * FROM zone"
    cur.execute(sql)
    raw = cur.fetchone()
    while raw:
        print ("Nom: ", raw[0], end=" ")
        print ("prix: ", raw[1],"€")
        raw = cur.fetchone()
Pierre-Guerin's avatar
Pierre-Guerin committed
247
    print(" ")
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266

def ajouterParking(conn):
    park = input("Quel est le nom du parking que vous voulez ajouter: ")
    sql = f"SELECT * FROM parking WHERE(nom='{park}')"
    cur = conn.cursor()
    cur.execute(sql)
    raw = cur.fetchone()

    if (raw):
        print("Le parking éxiste déjà")
    else:
        afficherZones(conn)
        zone = input("Dans quelle zone voulez vous mettre votre parking: ")

        sql = f"SELECT * FROM zone WHERE(nom='{zone}')"
        cur = conn.cursor()
        cur.execute(sql)
        raw = cur.fetchone()

Pierre-Guerin's avatar
Pierre-Guerin committed
267
        if not raw:
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
            print("La zone n'éxiste pas")
            return
        
        tmp = 0 
        while tmp == 0:
            NbreDeuxRouesCouvertes = int(input("Nombre de place pour deux roues couvertes: "))
            if NbreDeuxRouesCouvertes>0:
                tmp = 1
            else:
                print("La valeur saisie doit être strictement positive")

        tmp = 0 
        while tmp == 0:
            NbreDeuxRouesAir = int(input("Nombre de place pour deux roues couvertes: "))
            if NbreDeuxRouesAir>0:
                tmp = 1
            else:
                print("La valeur saisie doit être strictement positive")

        tmp = 0 
        while tmp == 0:
            NbreCamionCouvertes = int(input("Nombre de place pour deux roues couvertes: "))
            if NbreCamionCouvertes>0:
                tmp = 1
            else:
                print("La valeur saisie doit être strictement positive")
         
        tmp = 0 
        while tmp == 0:
            NbreCamionAir = int(input("Nombre de place pour deux roues couvertes: "))
            if NbreCamionAir>0:
                tmp = 1
            else:
                print("La valeur saisie doit être strictement positive")
        
        tmp = 0 
        while tmp == 0:
            NbreSimpleCouvertes = int(input("Nombre de place pour deux roues couvertes: "))
            if NbreSimpleCouvertes>0:
                tmp = 1
            else:
                print("La valeur saisie doit être strictement positive")

        tmp = 0 
        while tmp == 0:
            NbreSimpleAir = int(input("Nombre de place pour deux roues couvertes: "))
            if NbreSimpleAir>0:
                tmp = 1
            else:
                print("La valeur saisie doit être strictement positive")
        
        sql = f"INSERT INTO parking VALUES ('{park}', '{zone}', NbreDeuxRouesCouvertes, NbreDeuxRouesAir,NbreCamionCouvertes,NbreCamionAir,NbreSimpleCouvertes,NbreSimpleAir)"
        cur.execute(sql)
        conn.commit()
322
323
324
325
326
327
328
329
330
331
332
    
def supprimerBDD(conn):
    try:
        cur = conn.cursor()
        sql = "DROP VIEW comptes_doubles;\nDROP TABLE reservation;\nDROP TABLE place;\nDROP TABLE abonnement;\nDROP TABLE abonne;\nDROP TABLE ticket;\nDROP TABLE occasionnel;\nDROP TABLE compte;\nDROP TABLE parking;\nDROP TABLE zone;\nDROP TABLE vehicule;\nDROP TABLE utilisateur;\n\nDROP TYPE typeVehicule;\nDROP TYPE typePaiement;"
        cur.execute(sql)
        conn.commit()
        print("Base de donees supprimee \n\n")
    except Exception as e:
        print(f"Message systeme: {e}")
        print("Retour au menu")
333

Louis Lechevalier's avatar
Louis Lechevalier committed
334
335
336
337
338
339
def modifierTarifZone(conn, nomZone, nouveauTarif):
    try:
        cur = conn.cursor()
        sql=f"UPDATE zone SET prix ={nouveauTarif} WHERE nom = '{nomZone}'"
        cur = conn.cursor()
        cur.execute(sql)
340
        conn.commit()
Louis Lechevalier's avatar
Louis Lechevalier committed
341
342
343
344
    except Exception as e:
        print("Erreur; veuillez verifier votre saisie")
        print(f"Message systeme: {e}")
        print("Retour au menu")
345

Louis Lechevalier's avatar
Louis Lechevalier committed
346
def modifierZoneParking(conn,nomParking,nomZone):
347
348
    try:
        cur = conn.cursor()
Louis Lechevalier's avatar
Louis Lechevalier committed
349
350
        sql=f"UPDATE parking SET zone ='{nomZone}' WHERE nom = '{nomParking}'"
        cur = conn.cursor()
351
        cur.execute(sql)
352
        conn.commit()
353
    except Exception as e:
Louis Lechevalier's avatar
Louis Lechevalier committed
354
        print("Erreur; veuillez verifier votre saisie")
355
356
        print(f"Message systeme: {e}")
        print("Retour au menu")
Louis Lechevalier's avatar
Louis Lechevalier committed
357

358
def reservationAbonne(conn, date, typeFournisseurPlace, compte, typeVehicule, nomParking):
Louis Lechevalier's avatar
Louis Lechevalier committed
359
360
361
362
363
364
365
366
367
368
369
    try:
        cur = conn.cursor()
        sql=f"INSERT INTO reservation ('{date}','{typeFournisseurPlace}','{compte}','{typeVehicule}','{nomParking}')"
        cur = conn.cursor()
        cur.execute(sql)
    except Exception as e:
        print("Erreur; veuillez verifier votre saisie")
        print(f"Message systeme: {e}")
        print("Retour au menu")


Pierre-Guerin's avatar
Pierre-Guerin committed
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
def nombrePlacesPrises(conn):
    tmp = 0
    while tmp == 0:
        num = int(input("Sur quel type de tickets voulez-vous avoir une statistique? (1:abonne, 2:guichet, 3:automate"))
        if num == 1 or num == 2 or num == 3:
            tmp = 1
        else:
            print("Veuillez renseigner un chiffre entre 1 et 3")
      
    if num == 1:
        typeTransaction = "abonne"

    if num == 2:
        typeTransaction = "guichet"

    if num == 3:
        typeTransaction = "automate"
    
    cur = conn.cursor()

    #compte nombre de billets du type voulu
    sql = f"SELECT COUNT(*) FROM ticket WHERE type_transac = '{typeTransaction}'"
    cur.execute(sql)
    raw = cur.fetchone()
    print("Nombre de tickets pris par un ",typeTransaction," est ",raw[0]) 

396
def NbreTicketsParkings(conn):
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
    tmp = 0
    while tmp == 0:
        num = int(input("Sur quel type de tickets voulez-vous avoir une statistique? (1:abonne, 2:guichet, 3:automate"))
        if num == 1 or num == 2 or num == 3:
            tmp = 1
        else:
            print("Veuillez renseigner un chiffre entre 1 et 3")
      
    if num == 1:
        typeTransaction = "abonne"

    if num == 2:
        typeTransaction = "guichet"

    if num == 3:
        typeTransaction = "automate"
    
    cur = conn.cursor()
415
416

    #compte nombre de billets du type voulu
417
418
419
    sql = f"SELECT COUNT(*) FROM ticket WHERE type_transac = '{typeTransaction}'"
    cur.execute(sql)
    raw = cur.fetchone()
420
    print("Nombre de tickets pris par un ",typeTransaction," est ",raw[0]) 
421
    nombre = int(raw[0])
422
423
424

    #compte nombre de places totales
    sql = "SELECT COUNT(*) FROM ticket"
425
426
427
    cur.execute(sql)
    raw = cur.fetchone()
    nombreTotal = int(raw[0])
428
429
430

    #calcul le pourcentage
    pourcentage = nombre/nombreTotal * 100
Pierre-Guerin's avatar
Pierre-Guerin committed
431
    print("Cela représente ", pourcentage, " % des places totales")
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460

def NbreTicketsParkingsParticulier(conn):
    tmp = 0
    while tmp == 0:
        num = int(input("Sur quel type de tickets voulez-vous avoir une statistique? (1:abonne, 2:guichet, 3:automate)"))
        if num == 1 or num == 2 or num == 3:
            tmp = 1
        else:
            print("Veuillez renseigner un chiffre entre 1 et 3")
      
    if num == 1:
        typeTransaction = "abonne"

    if num == 2:
        typeTransaction = "guichet"

    if num == 3:
        typeTransaction = "automate"

    cur = conn.cursor()

    #affichage des parkings disponibles
    sql = "SELECT * FROM parking"
    cur.execute(sql)
    print("Parking disponibles: ")
    raw = cur.fetchone()
    while raw:
        print(raw[0])
        raw = cur.fetchone()
Pierre-Guerin's avatar
Pierre-Guerin committed
461
    print(" ")
462
463
464
465
466
467
468
469
470
471
472
473
474
    #choix du parking voulu
    tmp = 0
    while tmp == 0:
        park = input("Sur quel type parking voulez-vous avoir une statistique? ")
        sql = f"SELECT * FROM parking WHERE nom = '{park}'"
        cur.execute(sql)
        raw = cur.fetchone()
        if raw:
            tmp = 1
        else:
            print("Ce parking n'éxiste pas")

    #compte nombre de billets du type voulu dans le parking
Pierre-Guerin's avatar
Pierre-Guerin committed
475
    sql = f"SELECT COUNT(*) FROM ticket WHERE type_transac = '{typeTransaction}' AND parking = '{park}'"
476
477
478
479
480
481
    cur.execute(sql)
    raw = cur.fetchone()
    print("Nombre de tickets pris par un ",typeTransaction," est ",raw[0]) 
    nombre = int(raw[0])

    #compte nombre de places totales dans ce parking
Pierre-Guerin's avatar
Pierre-Guerin committed
482
    sql = f"SELECT COUNT(*) FROM ticket WHERE parking = '{park}'"
483
484
485
486
487
    cur.execute(sql)
    raw = cur.fetchone()
    nombreTotal = int(raw[0])

    #calcul le pourcentage
488
    pourcentage = nombre/nombreTotal * 100
Pierre-Guerin's avatar
Pierre-Guerin committed
489
    print("Cela représente ", pourcentage, " % des places totales")
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524

def reservationOccasionnel(conn, date, typeFournisseurPlace, typeVehicule, nomParking):
    try:
        cur = conn.cursor()
        sql = f"INSERT INTO reservation ('{date}','{typeFournisseurPlace}','{typeVehicule}','{nomParking}')"
        cur = conn.cursor()
        cur.execute(sql)
    except Exception as e:
        print("Erreur; veuillez verifier votre saisie")
        print(f"Message systeme: {e}")
        print("Retour au menu")

def ajouterVehicule(conn):
    immat = input("Entrez l'immatriculation du vehicule: ")
    modele = input("Entrez le modele du vehicule: ")
    marque = input("Entrez la marque du vehicule: ")
    type = 0
    while type not in [1,2,3]:
        type = int(input("Entrez le type du vehicule: (1:véhicule simple, 2:deux roues, 3:camion)"))
        if type == 1:
            type = "véhicule simple"
        elif type == 2:
            type = "2 roues"
        elif type == 3:
            type = "camion"
    proprio = int(input("Entrez l'id du propriétaire: "))
    cur = conn.cursor()
    sql = f"INSERT INTO vehicule ('{immat}','{modele}','{marque}','{type}','{proprio}')"
    cur.execute(sql)

def majFidelite(conn, facteurReduc, idAbonne):
    cur = conn.cursor()
    sql = f"UPDATE abonne SET facteur_reduc = '{facteurReduc}' WHERE id = '{idAbonne}'"
    cur.execute(sql)
    
Pierre-Guerin's avatar
Pierre-Guerin committed
525
526
527
528
529
530
531
532
533
def nombreOccasionnel(conn):
    cur = conn.cursor()
    try:
        sql = "SELECT COUNT(*) FROM occasionnel"
        cur.execute(sql)
    except Exception as e:
        print(f"Message systeme: {e}")
        print("Retour au menu")

534

Pierre-Guerin's avatar
Pierre-Guerin committed
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
def nombreAbonne(conn):
    cur = conn.cursor()
    try:
        sql = "SELECT COUNT(*) FROM abonne"
        cur.execute(sql)
    except Exception as e:
        print(f"Message systeme: {e}")
        print("Retour au menu")

def nombreUtilisateurs(conn):
        cur = conn.cursor()
    try:
        sql = "SELECT COUNT(*) FROM utilisateur"
        cur.execute(sql)
    except Exception as e:
        print(f"Message systeme: {e}")
        print("Retour au menu")

def nombrePlacesLibres(conn):
    #affiche les parkings disponibles
    print("Vous pouvez consulter  les places disponibles pour les parkings suivants: ")
    sql = "SELECT * FROM parking"
    cur.execute(sql)
    raw = cur.fetchone()
    while raw:
        print (raw[0])
        raw = cur.fetchone()
    print(" ")
    park = input("Parmis ces parkings, lequel vous intéresse?: ")

    #Choix du type de vehicule 
    typeV = input("Quel type de place vous intéresse: 2 roues / camion / vehicule simple")