Skip to content

Commit

Permalink
fixed minors bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
dedaleDev committed Apr 19, 2024
1 parent 22b83d9 commit 868f682
Show file tree
Hide file tree
Showing 6 changed files with 160 additions and 123 deletions.
28 changes: 14 additions & 14 deletions data/Livre.csv

Large diffs are not rendered by default.

3 changes: 1 addition & 2 deletions database.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ def __init__(self, host:str ="localhost", user:str="root", passwd:str="1234", po
print("Tables créées avec succès !")
else :
exit(1)
if tablesLoad != self.list_tables:
if tablesLoad != self.list_tables:#verification des tables
print("Erreur : Base de donnée corrompue ! Les tables ne correspondent pas avec le modèle UML attendu, veuillez vérifier vos tables.")
print("Tables attendues : ",self.list_tables)
print("Tables trouvées : ",tablesLoad)
Expand Down Expand Up @@ -159,7 +159,6 @@ def loadData(self) -> int:
idTable = ["data/Auteur.csv","data/Note.csv","data/Emprunt.csv"]
with open(file, 'r', encoding="utf-8") as f:
reader = csv.reader(f, delimiter=';')
id = False
next(reader)
self.cursor = self.db.cursor()
for row in reader:
Expand Down
2 changes: 1 addition & 1 deletion main.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ def search(db:database.db) -> None:
("Auteur",operationOnDataBase.searchAuteur, db),
("Point de vente",operationOnDataBase.searchPointDeVente, db),
("Editeur",operationOnDataBase.searchEditeur, db)]
if showMenu(choiceAction=choiceListSearch, title= "Que souhaitez vous rechercher ?", defaultChoice=True, question="Veuillez saisir un type de recherche ou un livre : " ) == 2 :
if showMenu(choiceAction=choiceListSearch, title= "Que souhaitez vous rechercher ?", defaultChoice=True, question="Veuillez saisir l'objet de votre recherche ou rechercher un livre : " ) == 2 :
return

def addElement(db:database.db) -> None:
Expand Down
149 changes: 144 additions & 5 deletions operationOnDataBase.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ def getAnswer(question:str, type:str, content:str, min_int:int=0, max_int:int=5,
answer = answer.split('-')
answer.reverse()
try :
if len(answer) !=3 or int(answer[2]) < 0 or int(answer[2]) > 31 or int(answer[1]) < 0 or int(answer[1]) > 12 or int(answer[0]) < 0 or int(answer[0]) > 2100:
print(f"{content.capitalize()} doit être une date valide. Veuillez réessayer.")
if len(answer) !=3 or int(answer[2]) <= 0 or int(answer[2]) > 31 or int(answer[1]) <= 0 or int(answer[1]) > 12 or int(answer[0]) <= 0 or int(answer[0]) > 2100:
print(f"{content.capitalize()} doit être une date valide (jj/mm/aaaa). Veuillez réessayer. Si vous ne connaissez pas la date exacte, entrez 1.")
else :
return f"{answer[0]}-{answer[1]}-{answer[2]}"
except :
Expand Down Expand Up @@ -175,7 +175,7 @@ def addLivre(db:database.db):
if Auteur == "N":
addAuteur(db)
continue
Auteur = searchEngine.searchAuteur(Auteur, db, True)[0]
Auteur = searchEngine.searchAuteur(Auteur, db, True)
break
except :
print("Désolé, mais aucun auteur n'a été trouvé pour ce livre.")#proposer d'en ajouter
Expand All @@ -187,6 +187,8 @@ def addLivre(db:database.db):
continue
else :
return
if len(Auteur) == 1:
Auteur = list(Auteur[0])
print(f"Vous avez selectionné l'auteur : {Auteur[2]} {Auteur[1]}")
Description = getAnswer("Entrez une description pour le livre : ", "str", "La description", 0, 1000)
if Description == None: return
Expand All @@ -206,7 +208,9 @@ def addLivre(db:database.db):
PointDeVente = getAnswer("Entrez le nom du point de vente du livre : ", "str", "Le point de vente", 1, 50)
if PointDeVente == None: return
try :
PointDeVente = searchEngine.searchPointDeVente(PointDeVente, db, True)[0]
PointDeVente = searchEngine.searchPointDeVente(PointDeVente, db, True)
if len(PointDeVente) == 1:
PointDeVente = PointDeVente[0]
break
except :
print("Désolé, mais aucun point de vente n'a été trouvé pour ce livre.")
Expand All @@ -223,7 +227,9 @@ def addLivre(db:database.db):
Editeur = getAnswer("Entrez le nom de l'éditeur du livre : ", "str", "L'éditeur", 1, 50)
if Editeur == None: return
try :
Editeur = searchEngine.searchEditeur(Editeur, db, True)[0]
Editeur = searchEngine.searchEditeur(Editeur, db, True)
if len(Editeur) == 1:
Editeur = Editeur[0]
break
except :
print("Désolé, mais aucun éditeur n'a été trouvé pour ce livre.")
Expand Down Expand Up @@ -638,6 +644,109 @@ def searchAuteur(db:database.db):
except Exception as e:
print(f"Une erreur est survenue lors de la recherche du point de vente :{e}, ligne : {e.__traceback__.tb_lineno}")

def filterLivre(livres:list, operation:str,db:database.db)-> list:
""" This function filters the books.
Args:
livres (list): The list of books.
operation (str): The operation to perform.
db (database.db): The database object.
Returns:
list: The filtered list of books.
"""
try :
result = []
if operation == "auteur":
recherche = getAnswer("Saisir un auteur pour appliquer le filtre :", "str", "L'auteur", 1, 50)
if recherche == None: return None
auteur = searchEngine.searchAuteur(recherche, db, onlyOne=True)
if result == None:
print("Oups, aucun auteur n'a été trouvé pour cette recherche. Par conséquent, aucun filtre n'a été appliqué.")
return None
if len(auteur) == 1:
auteur = auteur[0]
for i in range(len(livres)):
if livres[i][2] == auteur[0]:
result.append(livres[i])
elif operation == "genre":
recherche = getAnswer("Saisir un genre pour appliquer le filtre :", "enum", "Le genre",enum=["Historique","Romantique","Policier","Science-fiction","Fantastique","Aventure","Biographique","Autobiographique","Épistolaire","Thriller","Tragédie","Drame","Absurde","Philosophique","Politique","Légendes & Mythes","Lettres personnelles","Voyages","Journal intime","Bandes dessinées","Documentaires","Religieux"])
if recherche == None: return None
for i in range(len(livres)):
if livres[i][7] == recherche:
result.append(livres[i])
elif operation == "format":
recherche = getAnswer("Saisir un format pour appliquer le filtre :", "enum", "Le format", enum = ["Poche","Grand Format","E-book & numérique","Manga","Bande Dessinée","Magazine","CD","DVD & Blu-ray"])
if recherche == None: return None
for i in range(len(livres)):
if livres[i][8] == recherche:
result.append(livres[i])
elif operation == "statut":
recherche = getAnswer("Saisir un statut pour appliquer le filtre :", "enum", "Le statut", enum = ["Disponible", "Emprunté", "hors stock"])
if recherche == None: return None
for i in range(len(livres)):
if livres[i][6] == recherche:
result.append(livres[i])
elif operation == "éditeur":
recherche = getAnswer("Saisir un éditeur pour appliquer le filtre :", "str", "L'éditeur", 1, 50)
if recherche == None: return None
editeur = searchEngine.searchEditeur(recherche, db, onlyOne=True)
if result == None:
print("Oups, aucun éditeur n'a été trouvé pour cette recherche. Par conséquent, aucun filtre n'a été appliqué.")
return None
if len(editeur) == 1:
editeur = editeur[0]
for i in range(len(livres)):
if livres[i][11] == editeur[0]:
result.append(livres[i])
return result
except Exception as e:
print(f"Une erreur est survenue lors du filtrage des livres :{e}, ligne : {e.__traceback__.tb_lineno}")

def sortLivre(livres:list, operation:str)-> list:
""" This function sorts the books.
Args:
livres (list): The list of books.
operation (str): The operation to perform.
Returns:
list: The sorted list of books.
"""
try :
if operation == "note":
print("Tri par note")
livres.sort(key=lambda x: x[4], reverse=True)
elif operation == "ordre alphabétique":
print("Tri par ordre alphabétique")
livres.sort(key=lambda x: x[1])
elif operation == "date de parution":
print("Tri par date de parution")
#algo de tri sans utiliser sort :
try :
for i in range(len(livres)):
for j in range(i+1, len(livres)):
if int(str(livres[i][5]).split('-')[0]) > int(str(livres[j][5]).split('-')[0]) :#si l'année est plus grande
livres[i], livres[j] = livres[j], livres[i]
elif int(str(livres[i][5]).split('-')[0]) == int(str(livres[j][5]).split('-')[0]) :#si l'année est la même
if int(str(livres[i][5]).split('-')[1]) > int(str(livres[j][5]).split('-')[1]) :# mais que le mois est plus grand
livres[i], livres[j] = livres[j], livres[i]
elif int(str(livres[i][5]).split('-')[1]) == int(str(livres[j][5]).split('-')[1]) :#si le mois est le même
if int(str(livres[i][5]).split('-')[2]) > int(str(livres[j][5]).split('-')[2]) :#mais que le jour est plus grand
livres[i], livres[j] = livres[j], livres[i]
livres = livres[::-1]#on inverse la liste pour avoir le tri dans l'ordre croissant
except ValueError as e:
print(e, e.__traceback__.tb_lineno)
pass
except Exception as e:
print(f"Une erreur est survenue lors du tri par date de parution :{e}, ligne : {e.__traceback__.tb_lineno}")
print('Résultat du tri par date de parution :')
elif operation == "prix":
print("Tri par prix")
livres.sort(key=lambda x: x[9])
elif operation == "point de vente":
print("Tri par point de vente")
livres.sort(key=lambda x: x[10])
return livres
except Exception as e:
print(f"Une erreur est survenue lors du tri des livres :{e}, ligne : {e.__traceback__.tb_lineno}")

def searchLivre(db:database.db, recherche:str = None):
""" This function searches for a book in the database.
Args:
Expand All @@ -654,6 +763,36 @@ def searchLivre(db:database.db, recherche:str = None):
if input("Voulez-vous lancer une nouvelle recherche ? (Y/N) : ") == "Y":
searchLivre(db)
return
filtre = ["Tout afficher","Filtrer par auteur", "Filtrer par genre","Filtrer par format", "Filtrer par statut", "Filtrer par éditeur"]
sortResult = ["ordre alphabétique", "note", "date de parution", "prix", "point de vente"]
if len(result) > 1:
print(f"Plusieurs résultats ont été trouvés : comment souhaitez-vous procéder ?")
print("1 : Tout afficher (par défaut)\n2 : Filtrer\n3 : Trier")
entry = input("Veuillez saisir une opération : ").strip()
if entry == "2":
for i in range(len(filtre)):
print(f"{i+1} : {filtre[i]}")
try :
entry = int(input("Veuillez saisir un filtre :").strip().split()[0])
if entry > 1 and entry <=6:
print(result)
result = filterLivre(result, filtre[entry-1].split()[2],db)
print(result)
if filterLivre == None:
print("Aucun filtre n'a été appliqué.")
except :
pass
elif entry == "3":
for i in range(len(sortResult)):
print(f"{i+1} : Par {sortResult[i]}")
try :
entry = int(input("Veuillez saisir un tri :").strip().split()[0])
if entry > 1 and entry <=5:
result = sortLivre(result, sortResult[entry-1])
if sortLivre == None:
print("Aucun tri n'a été appliqué.")
except :
pass
print(f"Résultat de la recherche pour '{recherche}' :\n")
for i in range(len(result)) :
print(f"-----------------------------------")
Expand Down
90 changes: 0 additions & 90 deletions test.py
Original file line number Diff line number Diff line change
@@ -1,90 +0,0 @@
Harry Potter - Tome 2 : Harry potter et la chambre des secrets
ISBN : 2070541290
Auteur: Joanne Rowling [ d͡ʒ
Description : Cette deuxième aventure d'Harry Potter mêle avec génie humour, mystère et frisson. L'intrigue savamment ficelée et pleine de rebondissements inattendus envoûte littéralement le lecteur de la première à la dernière page. Un régal !
Note : 10.0/10
Date de parution : 0000-00-00
Statut : hors stock
Genre : Fantastique
Format : Grand Format
Prix : 22.50
Point de vente : 12, place des clercs 26000 Valence
Editeur : Gallimard
------------------------------------
Harry Potter - Tome 4 : Harry potter et la coupe de feu
ISBN : 2070543587
Auteur: Joanne Rowling [ d͡ʒ
Description : Après un horrible été chez les Dursley, Harry Potter entre en quatrième année au collège de Poudlard. À quatorze ans, il voudrait simplement être un jeune sorcier comme les autres, retrouver ses amis Ron et Hermione, assister avec eux à la Coupe du Monde de Quidditch, apprendre de nouveaux sortilèges et essayer des potions inconnues. Une grande nouvelle l'attend à son arrivée : la tenue à Poudlard d'un tournoi de magie entre les plus célèbres écoles de sorcellerie. Déjà les spectaculaires délégations étrangères font leur entrée... Harry se réjouit. Trop vite. Il va se trouver plongé au coeur des événements les plus dramatiques qu'il ait jamais eu à affronter.Envoûtant, drôle, bouleversant, ce quatrième tome est le pilier central des aventures de Harry Potter.
Note : 10.0/10
Date de parution : 0000-00-00
Statut : disponible
Genre : Fantastique
Format : Grand Format
Prix : 14.50
Point de vente : Place Charles de Gaulle à Chabeuil (Drôme)
Editeur : Gallimard
------------------------------------
Harry Potter - Tome 5 : Harry potter et l'ordre du phenix
ISBN : 2070556859
Auteur: Joanne Rowling [ d͡ʒ
Description : À quinze ans, Harry entre en cinquième année à Poudlard, mais il n'a jamais été si anxieux. L'adolescence, la perspective des examens et ces étranges cauchemars... Car Celui-Dont-On-Ne-Doit-Pas-Prononcer-Le-Nom est de retour. Le ministère de la Magie semble ne pas prendre cette menace au sérieux, contrairement à Dumbledore. La résistance s'organise alors autour de Harry qui va devoir compter sur le courage et la fidélité de ses amis de toujours...
Note : 10.0/10
Date de parution : 0000-00-00
Statut : disponible
Genre : Fantastique
Format : Grand Format
Prix : 12.99
Point de vente : Place Charles de Gaulle à Chabeuil (Drôme)
Editeur : Gallimard
------------------------------------
Harry Potter - Tome 6 : Harry potter et le prince de sang-mele
ISBN : 2070572676
Auteur: Joanne Rowling [ d͡ʒ
Description : Harry, Ron et Hermione entrent en sixième année à Poudlard ils vont vivre leur dernière année avant la majorité qui est fixée, chez les sorciers, à l'âge de dix-sept ans. Des événements particulièrement marquants vont contribuer à faire passer Harry du statut d'adolescent à celui d'homme. Ce tome, sur fond de guerre contre un Voldemort plus puissant que jamais, se révèle plus sombre que les précédents. Secrets, alliances et trahisons conduisent aux événements les plus dramatiques qu'Harry ait eu à affronter. Mais, en...
Note : 10.0/10
Date de parution : 0000-00-00
Statut : disponible
Genre : Fantastique
Format : Grand Format
Prix : 10.99
Point de vente : 31 rue Madier de Montjau26000 Valence
Editeur : Gallimard
------------------------------------
Harry Potter - Tome 7 : Harry potter et les reliques de la mort
ISBN : 2070615367
Auteur: Joanne Rowling [ d͡ʒ
Description : «Envers et contre tout» est une caractéristique-clé chez J.K. Rowling. Paradoxalement, c'est lorsqu'elle a continué à écrire avec une énergie, une passion, un engagement inentamés, en particulier à partir du tome 4 - alors qu'elle était devenue l'une des femmes les plus célèbres et riches au monde, et que chaque suite était attendue par des dizaines de millions de lecteurs du monde entier - , qu'elle force le plus l'admiration. Elle accomplit la mission qu'elle s'est donnée sans faillir, sans jamais décevoir.L'ambition de...
Note : 10.0/10
Date de parution : 2007-10-27
Statut : emprunté
Genre : Fantastique
Format : Grand Format
Prix : 15.99
Point de vente : 17, avenue Victor-Hugo Centre commercial Victor-Hugo - 26000 Valence
Editeur : Gallimard
------------------------------------
Harry Potter - : Harry Potter et le prisonnier d'Azkaban
ISBN : 2070624544
Auteur: Joanne Rowling [ d͡ʒ
Description : Harry Potter a treize ans. Après des vacances insupportables chez les horribles Dursley, il retrouve ses fidèles amis, Ron et Hermione, pour prendre le train qui les ramène au collège Poudlard. Le monde des gens ordinaires, les Moldus, comme celui des sorciers, est en émoi : aux dernières nouvelles, Sirius Black, un dangereux criminel proche de Voldemort, s'est échappé de la prison d'Azkaban. Les redoutables gardiens de la prison assureront la sécurité du collège Poudlard, car le prisonnier évadé recherche Harry Potter, responsable de l'élimination de son maître. C'est donc sous bonne garde que l'apprenti sorcier fait sa troisième rentrée. Au programme : des cours de divination, la fabrication d'une potion de ratatinage, le dressage des hippogriffes... Mais Harry est-il vraiment à l'abri du danger qui le menace ?
Note : 10.0/10
Date de parution : 1999-10-19
Statut : emprunté
Genre : Fantastique
Format : Grand Format
Prix : 9.99
Point de vente : 17, avenue Victor-Hugo Centre commercial Victor-Hugo - 26000 Valence
Editeur : Gallimard
------------------------------------
Harry Potter, tome 1 : Harry Potter à l'école des sorciers
ISBN : 9782070518425
Auteur: Joanne Rowling [ d͡ʒ
Description : Pour et Mrs Dursley, qui habitaient au 4, Privet Drive, avaient toujours affirmé avec la plus grande fierté qu'ils étaient parfaitement nor­maux, merci pour eux. Jamais quiconque n'aurait imaginé qu'ils puissent se trouver impliqués dans quoi que ce soit d'étrange ou de mystérieux. Ils n'avaient pas de temps à perdre avec des sornettes.
Note : 10.0/10
Date de parution : 0000-00-00
Statut : emprunté
Genre : Fantastique
Format : Poche
Prix : 10.99
Point de vente : 12, place des clercs 26000 Valence
Editeur : Gallimard
11 changes: 0 additions & 11 deletions test2.py
Original file line number Diff line number Diff line change
@@ -1,11 +0,0 @@
['2017010090', '1', 31, 'Miss Peregrine, changée
en oiseau, est prisonnière de son état, suite à lattaque des Es
tres. Les enfants particuliers nont plus quun espoir : trou
ver une Ombrune susceptible de rendre à la directrice de lorphelinat sa f
orme humaine. Après avoir essuyé une tempête, le petit groupe denf
ants échoue sur une rive de Grande-Bretagne, alors que la Seconde Guerre
fait rage. Aussitôt pris en chasse par des Estres, ils se réfugient, in extremis
, dans une boucle temporelle. , vit une ménagerie danimaux singuliers. P
armi eux,... ', 5.0, datetime.date(2017, 2, 1), 'hors stock', 'Policier', 'Grand For
mat', 10.99, 'Place Charles de Gaul
le à Chabeuil (Drôme)', 'Rageot']

0 comments on commit 868f682

Please sign in to comment.