python Projet réalisé le 03-06
import os
#Si le fichier de budget n'existe pas, initialisation
def setupBudget():
try :
os.remove('depenses.txt')
except FileNotFoundError:
pass
budget = float(input("Quel est votre budget initial ? "))
with open('budget.txt','w') as f:
f.write(str(budget)+'\n')
f.write(str(budget))
print(f'Vous avez un budget de {budget} €.')
return budget
#Ajout d'une dépense
def ajoutDepense():
#Voir le budget restant
with open('budget.txt','r') as f:
lines = f.readlines()
budgetRestant = float(lines[1].strip())
with open('depenses.txt','a+') as f :
#Affichage du numéro de la dépense
f.seek(0)
lines = f.readlines()
nbDepenses = len(lines)
if(len(lines)==0):
nbDepenses = 0
print(f"Dépense n°{nbDepenses+1} :")
#Prompt libellé
libelle=input("Libellé : ")
#Prompt montant protégé contre les erreurs de valeur
while True:
try :
montant= float(input("Montant : "))
break
except ValueError:
print("Erreur lors de la saisie du montant.")
#Prompt magasin
magasin =input("Magasin : ")
#Ecriture dans le fichier
f.write(f"{libelle}|{montant}|{magasin}\n")
print()
#Affichage du budget restant
budgetRestant = budgetRestant - montant
print(f'Dépense de {montant}€ chez {magasin} ajoutée.')
print(f'Budget restant : {budgetRestant}€.')
#Actualisation du budget restant dans le fichier budget
with open('budget.txt','r+') as f:
lines = f.readlines()
lines[1] = str(budgetRestant) + '\n'
f.seek(0)
f.writelines(lines)
print()
return
#Visionnage des dépenses
def visioDepense():
#Exception fichier non-existant
if not os.path.exists('depenses.txt') or os.stat("depenses.txt").st_size == 0:
print("Vous n'avez pas de dépenses enregistrées.\n")
return
#Affichage du budget restant
with open('budget.txt','r') as f:
f.seek(0)
lines = f.readlines()
budgetInit = lines[0].strip()
budgetRestant = lines[1].strip()
print(f"Budget initial :{budgetInit}€.")
print(f"Budget restant : {budgetRestant}€.")
#Lecture des données du fichier
print("Dépenses enregistrées :\n")
with open('depenses.txt','r') as f :
lines = f.readlines()
for index, line in enumerate(lines, start=1):
libelle, montant, magasin = line.strip().split('|')
print(f"Dépense n°{index}:")
print(f" Libellé: {libelle}")
print(f" Montant: {montant}")
print(f" Magasin: {magasin}\n\n")
#Suppression d'une dépense
def supprDepense():
#Affichage des dépenses
visioDepense()
print()
#Exception si fichier vide
if os.stat("depenses.txt").st_size == 0:
print("Vous n'avez pas de dépenses enregistrées.\n")
return
#Prompt (protégé) du choix de la dépense à supprimer
while True:
try:
aSupprimer = int(input("Quelle dépense voulez-vous supprimer ?"))
break
except ValueError:
print("Choix non-valide.")
with open('depenses.txt','r+') as f:
f.seek(0)
lines = f.readlines()
nbLignes = len(lines)
if(aSupprimer>nbLignes or aSupprimer<1):
while True:
try:
aSupprimer = int(input("Quelle dépense voulez-vous supprimer ?"))
break
except ValueError:
print("Choix non-valide.")
#Récupération des infos sur la dépense
libelle, montant, magasin = lines[aSupprimer - 1].strip().split('|')
montant = float(montant)
#Suppression de la ligne
del lines[aSupprimer - 1]
#Réécriture du fichier
with open('depenses.txt', 'w') as f:
f.writelines(lines)
#Actualisation du fichier de budget (remboursement)
with open('budget.txt','r+') as f:
lines = f.readlines()
ancienBudgetRestant = float(lines[1].strip())
budgetRestantUpdate = ancienBudgetRestant + montant
lines[1] = f"{budgetRestantUpdate}\n"
f.seek(0)
f.writelines(lines)
#Confirmation
print(f'Dépense "{libelle}" supprimée. Montant remboursé : {montant}€.')
print(f'Nouveau budget restant : {budgetRestantUpdate}')
#Fonction qui clear la console, + de lisibilité
def clearConsole():
os.system('cls' if os.name == 'nt' else 'clear')
#Main
def main():
clearConsole()
#Bienvenue
print("Bienvenue dans le programme de gestion de budget.")
print('-----------\n')
#Budget initial
if not os.path.exists('budget.txt'):
budget = setupBudget()
with open('budget.txt','r+') as f:
f.seek(0)
lines = f.readlines()
budget = lines[0].strip()
budgetRestant = lines[1].strip()
#Si pas de budget trouvé, initialisation
if not budget:
clearConsole()
budget = setupBudget()
else:
#Si données trouvées, affichage et confirmation de récupération
print("Nous avons résupéré des données précédentes.")
print(f'Budget initial : {budget}€.')
print(f'Budget restant : {budgetRestant}€.')
print(' Est-ce bien cela ?')
print(f" 1- Oui, continuer avec {budgetRestant}€.")
print(f" 2- Non, recommencer à zéro.")
#Prompt protégé
while True :
try:
choix = int(input())
#Si choix recommencer, initialisation
if(choix==2):
clearConsole()
budget = setupBudget()
break
#Sinon continuer
elif(choix==1):
break
else:
print("Choix non-valide.")
except ValueError:
print("Choix non-valide.")
while(True):
#Affichage des choix
print("Que souhaitez-vous faire ? ")
print(' 1- Ajouter une dépense')
print(' 2- Visionner les dépenses')
print(' 3- Supprimer une dépense')
print(' 4- Exit')
#Choix utilisateur
try:
choice=int(input())
if choice==1:
clearConsole()
ajoutDepense()
elif choice == 2:
clearConsole()
visioDepense()
elif choice ==3:
clearConsole()
supprDepense()
elif choice==4:
clearConsole()
print("Goodbye.")
exit()
#Exception choix non-valide
else:
print('Choix non-valide.')
continue
except ValueError:
print("Choix non-valide.")
main()Ce script Python est une application de gestion de budget en ligne de commande. Il permet à l’utilisateur de suivre ses dépenses par rapport à un budget initial. Le script offre les fonctionnalités suivantes : initialiser un budget, ajouter des dépenses (avec libellé, montant et magasin), visualiser les dépenses enregistrées, et supprimer des dépenses. Les données sont stockées dans des fichiers texte (budget.txt pour le budget initial et restant, et depenses.txt pour la liste des dépenses). Le script gère les erreurs de saisie et offre une interface utilisateur simple pour interagir avec les données. Au démarrage, il vérifie si un budget a déjà été défini et permet à l’utilisateur de continuer avec le budget existant ou de recommencer à zéro.