Commit dc6b1bfb authored by Oceane Bordeau's avatar Oceane Bordeau
Browse files

merge

parent fdf80580
import psycopg2
import datetime
conn = psycopg2.connect("host=%s dbname=%s user=%s password=%s" % (
"tuxa.sme.utc", "dbnf18a037", "nf18a037", "1AfyGsAH"))
......@@ -10,7 +11,7 @@ def inserer_musee():
ville = input("ville du musee")
adresse = input("adresse complete du musée : ")
cur = conn.cursor()
if nom and codep and ville and adresse :
if nom and codep and ville and adresse:
try:
sql = f"INSERT INTO MUSEE_EXT ( nom, adresse, cp, ville) VALUES ('{nom}', '{adresse}', '{codep}', '{ville}');"
cur.execute(sql)
......@@ -19,7 +20,7 @@ def inserer_musee():
except psycopg2.DataError as e:
print("echec de l'insertion")
print(e)
else :
else:
print("tentative d'ajout d'une valeur nulle, retour")
print()
......@@ -39,7 +40,7 @@ def inserer_neolitique():
def inserer_expoperm():
nom = input("Entrez le nom de l'expo")
cur = conn.cursor()
if nom :
if nom:
try:
sql = f"INSERT INTO EXPO_PERM VALUES '{nom}');"
cur.execute(sql)
......@@ -48,7 +49,7 @@ def inserer_expoperm():
except psycopg2.DataError as e:
print("echec de l'insertion")
print(e)
else :
else:
print("tentative d'ajout d'une valeur nulle, retour")
print()
......@@ -178,6 +179,7 @@ def liste_oeuvre_pretees():
print()
raw = cur.fetchone()
def liste_oeuvres_absentes():
cur = conn.cursor()
sql = "SELECT nom, COUNT(oeuvre) FROM Expo_perm JOIN Oeuvre_louvre ON Expo_perm.nom = Oeuvre_louvre.expo JOIN Restaurer ON Oeuvre_louvre.IDO = Restaurer.oeuvre JOIN Prete ON Oeuvre_louvre.IDO = Prete.IDO WHERE (Restaurer.fin > CURRENT_DATE) OR (Prete.debut < CURRENT_DATE AND Prete.fin > CURRENT_DATE) GROUP BY nom;"
......@@ -185,10 +187,12 @@ def liste_oeuvres_absentes():
raw = cur.fetchone()
print("\nListe des oeuvre absentes du Louvres actuellement :\n")
while raw:
print(f"Nom de l'exposition : {raw[0]} Nombre d'oeuvres absentes : {raw[1]}")
print(
f"Nom de l'exposition : {raw[0]} Nombre d'oeuvres absentes : {raw[1]}")
print()
raw = cur.fetchone()
def liste_oeuvre_empruntees():
cur = conn.cursor()
sql = "SELECT Oeuvre_ext.IDO, expo, fin FROM Emprunte JOIN Oeuvre_ext ON Emprunte.IDO = Oeuvre_ext.IDO WHERE Emprunte.debut < CURRENT_DATE AND Emprunte.fin > CURRENT_DATE ORDER BY fin;"
......@@ -202,6 +206,7 @@ def liste_oeuvre_empruntees():
print()
raw = cur.fetchone()
def liste_oeuvre_periode():
debut = int(input("\nEntrez l'année de début de la période\n>"))
fin = int(input("\nEntrez l'année de fin de la période\n>"))
......@@ -242,6 +247,7 @@ def liste_oeuvre_periode():
print()
raw = cur.fetchone()
def temp_moyen_pret():
cur = conn.cursor()
sql = "SELECT idm, nom, adresse, AVG(ROUND(fin - debut)) FROM Prete JOIN Musee_ext ON prete.musee = musee_ext.IDM GROUP BY idm, musee_ext adresse, nom;"
......@@ -255,6 +261,7 @@ def temp_moyen_pret():
print()
raw = cur.fetchone()
def informations_oeuvres():
cur = conn.cursor()
sql = 'SELECT O.ido, O.titre , O.prix_acq, count(R.oeuvre) as "Nombre restaurations", sum(R.montant) as "Total montant restaurations" FROM OEUVRE_LOUVRE O \
......@@ -263,7 +270,7 @@ def informations_oeuvres():
cur.execute(sql)
raw = cur.fetchone()
print("Informations sur chaque oeuvre :")
while raw :
while raw:
if raw[2] != None:
print(f"Nom de l'oeuvre : {raw[1]} (id:{raw[0]}) ")
print(f" prix d'acquisition : {raw[2]}")
......@@ -275,6 +282,7 @@ def informations_oeuvres():
print()
raw = cur.fetchone()
def insert_salle():
cur = conn.cursor()
sql = "SELECT nom FROM Expo_temp;"
......@@ -282,7 +290,7 @@ def insert_salle():
raws = cur.fetchall()
print("\n Veuillez selectionner une des expositions temporaires :\n")
for i, raw in enumerate(raws):
print(f"{i} : {raw[0]} ", end ="")
print(f"{i} : {raw[0]} ", end="")
print(">")
expo = raws[int(input())][0]
non_init_rooms = list(range(1, 21))
......@@ -301,11 +309,12 @@ def insert_salle():
del available_rooms[available_rooms.index(raw[0])]
if len(available_rooms) == 0:
print("\nAucune salle disponible\n")
else :
else:
print("\nSalles disponibles : \n")
for room in available_rooms:
print(f"{room} ", end="")
print(f"\nVeuillez choisir une salle à dédier à l'exposition {expo}\n>")
print(
f"\nVeuillez choisir une salle à dédier à l'exposition {expo}\n>")
salle = input()
if salle in non_init_rooms:
sql = f"INSERT INTO Salle VALUES ({salle}, 50);"
......@@ -327,8 +336,161 @@ def insert_salle():
conn.rollback()
print("contraintes non respectées\n")
print(f"Message système : {e}\n")
def nb_creneaux():
cur = conn.cursor()
sql = 'SELECT IDG, nom, prenom, adresse, date_embauche, COUNT(Guide.IDG) FROM Guide JOIN Affecter_perm ON Guide.IDG = Affecter_perm.guide GROUP BY IDG;'
cur.execute(sql)
raw = cur.fetchone()
i = 1
while raw:
print(f'\nGuide {i} :')
print(f' Nom : {raw[1]}')
print(f' Prenom : {raw[2]}')
print(f' Adresse : {raw[3]}')
print(f" Date d'embauche : {raw[4]}")
print(f' Nombre de créneaux attribués : {raw[5]}\n')
raw = cur.fetchone()
def nb_expos():
cur = conn.cursor()
sql = 'SELECT num, capacite, COUNT(salle) AS c, SUM(fin - debut) FROM Salle JOIN Exposer ON Salle.num = Exposer.salle JOIN Expo_temp ON Exposer.expo = Expo_temp.nom GROUP BY num ORDER BY c DESC;'
cur.execute(sql)
raw = cur.fetchone()
while raw:
print(f'\nSalle {raw[0]} :')
print(f' Capacité : {raw[1]}')
print(f" Nombre d'expositions : {raw[2]}")
print(f' Durée cumulée : {raw[3]} jours\n')
raw = cur.fetchone()
def insert_date():
andeb = int(input("Entrez l'année de début\n"))
mdeb = int(input("Entrez le mois de début\n"))
jdeb = int(input("Entrez le jour de début\n"))
anfin = int(input("Entrez l'année de fin\n"))
mfin = int(input("Entrez le mois de fin\n"))
jfin = int(input("Entrez le jour de fin\n"))
date1 = datetime.date(andeb, mdeb, jdeb)
date2 = datetime.date(anfin, mfin, jfin)
if date1 > date2:
insert_date()
else:
return [f"'{andeb}-{mdeb}-{jdeb}'", f"'{anfin}-{mfin}-{jfin}'"]
def insert_expotemp():
cur = conn.cursor()
cur1 = conn.cursor()
nom = input("\nEntrez le nom de l'exposition temporaire à ajouter\n")
date = insert_date()
try:
sql = f"INSERT INTO EXPO_TEMP VALUES ('{nom}', TO_DATE({date[0]}, 'YYYY-MM-DD'), TO_DATE({date[1]}, 'YYYY-MM-DD'));"
cur.execute(sql)
conn.commit()
except psycopg2.IntegrityError as e:
conn.rollback()
print("\nContrainte non respectée")
print("Message système :", e)
return
sql = "SELECT IDO, titre from Oeuvre_ext WHERE expo IS NULL"
cur.execute(sql)
raw = cur.fetchone()
if raw:
print('\nParmis les oeuvres extérieures suivantes qui ne sont pas dans une exposition temporaire:')
else:
print('\nAucune oeuvre extérieure est disponible pour cette exposition')
while raw:
print(f"\nIdentifiant de l'oeuvre : {raw[0]}")
print(f' Titre : {raw[1]}\n')
response = int(input(
"Voulez vous ajouter cette oeuvre à l'exposition (Si oui tapez 1, sinon tapez 0)\n"))
if response == 1:
try:
sql1 = f"UPDATE OEUVRE_EXT SET expo = '{nom}' WHERE IDO = '{raw[0]}'"
cur1.execute(sql1)
conn.commit()
except psycopg2.IntegrityError as e:
conn.rollback()
print("\nContrainte non respectée")
print("Message système :", e)
raw = cur.fetchone()
def inserer_guide():
cur = conn.cursor()
nom = input("\nEntrez le nom du guide à ajouter\n")
prenom = input("\nEntrez le prénom du guide à ajouter\n")
adresse = input("\nEntrez l'adresse du guide à ajouter\n")
an = int(input("\nEntrez l'année d'embauche du guide à ajouter\n"))
mois = int(input("\nEntrez le mois d'embauche du guide à ajouter\n"))
jour = int(input("\nEntrez le jour d'embauche du guide à ajouter\n"))
try:
sql = f"INSERT INTO Guide (nom, prenom, adresse, date_embauche) VALUES ('{nom}', '{prenom}', '{adresse}', TO_DATE('{an}-{mois}-{jour}', 'YYYY-MM-DD')) RETURNING IDG;"
cur.execute(sql)
res = cur.fetchone()[0]
conn.commit()
except psycopg2.DataError as e:
conn.rollback()
print("\nContrainte non respectée")
print("Message système :", e)
return
sql = "SELECT * FROM Expo_perm"
cur.execute(sql)
raw = cur.fetchone()
if raw:
perm = int(input(
'\nVoulez-vous ajouter à ce guide un créneau sur une exposition permanente ? (Tapez 1 si oui, sinon 0)\n'))
if perm == 1:
print('\nLes expositions permanentes sont :')
while raw:
print(f" {raw[0]}")
raw = cur.fetchone()
continu = 1
while continu == 1:
nom = input("\nQuel est le nom de l'exposition permanente ?\n")
jour = input("\nSur quel jour le créneau sera attribué ?\n")
creneau = input(
"\nQuel est le créneau à ajouter ? (9-11, 11-13, 13-15, 15-17)\n")
try:
sql = f"INSERT INTO Affecter_Perm VALUES('{nom}', {res}, '{jour}', '{creneau}')"
cur.execute(sql)
conn.commit()
except psycopg2.DataError as e:
conn.rollback()
print("\nContrainte non respectée")
print("Message système :", e)
except psycopg2.IntegrityError as e:
conn.rollback()
print("\nContrainte non respectée")
print("Message système :", e)
continu = int(
input('\nVoulez-vous ajouter un autre créneau ? (Tapez 1 si oui, 0 sinon)\n'))
sql = "SELECT nom FROM Expo_temp"
cur.execute(sql)
raw = cur.fetchone()
if raw:
temp = int(input(
'\nVoulez-vous ajouter à ce guide une exposition temporaire ? (Tapez 1 si oui, sinon 0)\n'))
if temp == 1:
print('\nLes expositions temporaires sont :')
while raw:
print(f" {raw[0]}")
raw = cur.fetchone()
nom = input("\nQuel est le nom de l'exposition temporaire ?\n")
try:
sql = f"INSERT INTO Affecter_Temp VALUES ('{nom}', {res});"
cur.execute(sql)
conn.commit()
except psycopg2.DataError as e:
conn.rollback()
print("\nContrainte non respectée")
print("Message système :", e)
def main():
cont = 1
while cont == 1:
......@@ -340,32 +502,31 @@ def main():
return 0
def menu():
print("Inserer des donées:")
print("\nListe des requêtes :")
print(" 1. Lister les guides avec leur identification, nom, prénom, et date d'embauche.")
print(" 2. Lister toutes les informations des expositions permanentes.")
print(" 3. Lister toutes les informations des expositions temporaires en cours et futures, ainsi que les identifications et noms des salles qui leur sont attribuées.")
print(" 4. Afficher les identifications des guides participant à une exposition donnée (gérer cas exposition permanente et exposition temporaire).")
print(" 5. Afficher le nombre d'oeuvres et le prix moyen d'acquisition des oeuvres d'une exposition donnée.")
print(" 6. Lister les oeuvres appartenant au Louvre (identification unique, titre, dates et type), triées dans cet ordre par type, par date, par titre.")
print(" 7. Identifier de manière unique les oeuvres actuellement prêtées (pas les prêts passés ni futurs) par le Louvre, avec la date de fin du prêt, triées par date de fin du prêt.")
print(" 8. Afficher le temps moyen des prêts avec chaque musée extérieur, identifié de manière unique et avec leur nom et adresse (groupé par musée).")
print(" 9. Indiquer pour chaque oeuvre (inclure les oeuvres appartenant à des musées extérieurs) : le prix d'acquisition, le nombre de restaurations qu'elle a subi, et le coût cumulé des restaurations.")
print(" 10. Compter le nombre d'oeuvres actuellement absentes (= en prêt ou en restauration), groupées par exposition permanente identifiée de manière unique.")
print(" 11. Identifier de manière unique les oeuvres actuellement empruntées par le Louvre, avec l'identification unique et le titre de l'exposition temporaire où elles sont exposées, avec la date de fin de l'emprunt, triées par date de fin de l'emprunt.")
print(" 12. Afficher les oeuvres ayant été créées à une période donnée, avec toutes leurs informations ainsi que l'identification unique, nom, si elles appartiennent ou non au Louvre, les durées éventuelles des expositions dans lesquelles elles sont/ont été/seront exposées.")
print(" 13. Compter le nombre de créneaux d'attribution de visite d'expositions permanentes par guide (avec toutes les informations des guides, pas de distinction par exposition).")
print(" 14. Compter le nombre d'expositions accueillies par salles, par ordre décroissant, avec la durée cumulée, ainsi que l'affichage de toutes les informations de la salle.")
print("\nInserer des données:")
print(" 20. Insertion d'un nouveau musée")
print(" 21. Insertion oeuvre néolithique")
print(" 22. Creer une nouvelle exposition permanente")
print(" 23. ")
print(" 24. Associer une salle à une exposition temporaire")
print(" 23. Insertion d'une exposition temporaire et d'oeuvres extérieures exposées")
print(" 24. Insertion d'une salle d'exposition")
print(" 25. ")
print(" 26. ")
print("Liste des requêtes :")
print("1. Lister les guides avec leur identification, nom, prénom, et date d'embauche.")
print("2. Lister toutes les informations des expositions permanentes.")
print("3. Lister toutes les informations des expositions temporaires en cours et futures, ainsi que les identifications et noms des salles qui leur sont attribuées.")
print("4. Afficher les identifications des guides participant à une exposition donnée (gérer cas exposition permanente et exposition temporaire).")
print("5. Afficher le nombre d'oeuvres et le prix moyen d'acquisition des oeuvres d'une exposition donnée.")
print("6. Lister les oeuvres appartenant au Louvre (identification unique, titre, dates et type), triées dans cet ordre par type, par date, par titre.")
print("7. Identifier de manière unique les oeuvres actuellement prêtées (pas les prêts passés ni futurs) par le Louvre, avec la date de fin du prêt, triées par date de fin du prêt.")
print("8. Afficher le temps moyen des prêts avec chaque musée extérieur, identifié de manière unique et avec leur nom et adresse (groupé par musée).")
print("9. Indiquer pour chaque oeuvre (inclure les oeuvres appartenant à des musées extérieurs) : le prix d'acquisition, le nombre de restaurations qu'elle a subi, et le coût cumulé des restaurations.")
print("10. Compter le nombre d'oeuvres actuellement absentes (= en prêt ou en restauration), groupées par exposition permanente identifiée de manière unique.")
print("11. Identifier de manière unique les oeuvres actuellement empruntées par le Louvre, avec l'identification unique et le titre de l'exposition temporaire où elles sont exposées, avec la date de fin de l'emprunt, triées par date de fin de l'emprunt.")
print("12. Afficher les oeuvres ayant été créées à une période donnée, avec toutes leurs informations ainsi que l'identification unique, nom, si elles appartiennent ou non au Louvre, les durées éventuelles des expositions dans lesquelles elles sont/ont été/seront exposées.")
print("13. Compter le nombre de créneaux d'attribution de visite d'expositions permanentes par guide (avec toutes les informations des guides, pas de distinction par exposition).")
print("14. Compter le nombre d'expositions accueillies par salles, par ordre décroissant, avec la durée cumulée, ainsi que l'affichage de toutes les informations de la salle.")
print(" 26. Insertion d'un guide et affectation à des expositions")
choice = int(input("Entrer Votre choix\n>"))
......@@ -389,7 +550,7 @@ def menu():
if choice == 7:
liste_oeuvre_pretees()
if choice == 8:
temp_moyen_pret()
......@@ -405,7 +566,13 @@ def menu():
if choice == 12:
liste_oeuvre_periode()
#requettes insertions
if choice == 13:
nb_creneaux()
if choice == 14:
nb_expos()
# requettes insertions
if choice == 20:
inserer_musee()
......@@ -415,9 +582,15 @@ def menu():
if choice == 22:
inserer_expoperm()
if choice == 23:
insert_expotemp()
if choice == 24:
insert_salle()
if choice == 26:
inserer_guide()
if __name__ == '__main__':
main()
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment