Projet programmation
Résolu
Utilisateur anonyme
-
Furansujean Messages postés 61 Statut Membre -
Furansujean Messages postés 61 Statut Membre -
Bonjour,
dans le cadre d'un cours d'université j'ai un projet à faire pour créer un compte bancaire virtuel.
Mon problème est que je n'arrive pas à utiliser mon code à deux reprises, c'est à dire que je crée un fichier mais dans ma classe "__init__" je n'arrive pas à récupérer les données de mes anciens comptes créés. pouvez vous regarder mon code et m'aider à comprendre comment je peux le faire ?
Bien à vous.
Voici mon code :
dans le cadre d'un cours d'université j'ai un projet à faire pour créer un compte bancaire virtuel.
Mon problème est que je n'arrive pas à utiliser mon code à deux reprises, c'est à dire que je crée un fichier mais dans ma classe "__init__" je n'arrive pas à récupérer les données de mes anciens comptes créés. pouvez vous regarder mon code et m'aider à comprendre comment je peux le faire ?
Bien à vous.
Voici mon code :
"Import package"
import json
import os
import random
def message ():
print('\nBienvenue dans le service Ewallet: \nQue voulez-vous faire ? \n 1 : Créer un nouveaux profil \n 2 : Accéder à un compte existant \n 3 : Quitter les services de Ewallet \n \nVotre entrée :\n')
# Declaration of a global variable because the rate is fixed
rate = 0.02
Rate = rate * 100
Rate_perc = '{} %'.format(Rate)
montantDecouvert = 300
class Ewallet :
global rate
def __init__(self,Id,generatedCode,dispoAmount):
self.Id = Id
self.generatedCode = generatedCode
self.dispoAmount = dispoAmount
#print('Compte {}\nCode Pin {} \nArgentdispo {} '.format(self.Id,self.generatedCode,self.dispoAmount))
# constructeur est app automatiquement pour avoir dans la variable les diff attributs
# self pour déclarer les attributs de ma classe / element appartenant a l objet crée specifiquement
def Information (self):
info = '\nCompte : {}\nCode Pin : {} \nAmount on the account : {} \nfees Debit/Credit : {}'.format(self.Id,self.generatedCode,self.dispoAmount,Rate_perc)
print(info)
def CreditOp(self,amount):
self.dispoAmount += amount - (rate*amount) # commission taken by the bank
return self.dispoAmount
def DebitOperation(self,amount):
if self.dispoAmount > amount + (rate*amount) :
self.dispoAmount -= amount + (rate*amount)
return self.dispoAmount
else :
print("Error solde insufissant")
def codeVerification(self,code):
if (self.generatedCode == code):
return True
else :
return False
def save(self):
info = '{:<15s} ¦ {:<15d} ¦ {:<15.2f} '.format(self.Id,self.generatedCode,self.dispoAmount)
return info
# Retunr a string
class Bank :
def __init__(self):
self.Liste_Ewallet = []
def saveBank(self):
pw = open('Ewallet.txt','w+')
for index , elem in enumerate(self.Liste_Ewallet) :
id_count, code_pin, amount_dispo = 'ID Ewallet', 'Code Pin', 'Amount Available'
pw.write('{:<15} ¦ {:<15} ¦ {:<15} \n'.format(id_count,code_pin,amount_dispo))
pw.write('{}\n'.format(self.Liste_Ewallet[index].save()))
pw.write("=============================================================================\n\n")
pw.close()
def existAcc (self,Id_entered):
for index, elem in enumerate(self.Liste_Ewallet) :
if self.Liste_Ewallet[index].Id == Id_entered: # chopper le wallet donc peut avoir le id
return (True,index)
return (False,0)
def newWallet (self) :
# on peut bloquer les entrée pour que l'utilisateur il puisse pas rentrer des string chelou
client_id = input('Enter an ID to open an account \n>')
if ',' not in client_id :
cond, index = self.existAcc(client_id);
if cond == False:
client_id_clean = client_id.replace(" ","")
print('\nID accepted\n')
ok = False
initial_amount = 0;
while ok == False and initial_amount <= 0 :
try :
initial_amount = float(input('Enter an amount \n>'))
if initial_amount <= 0 :
print('\nError ! the amount entered must be positive !\n')
else :
print('Amount accepted\n')
ok = True
except :
print('\nError ! the amount entered must be positive !\n')
numerical_code = random.randrange(0,1000000)
wallet = Ewallet(client_id_clean,numerical_code,initial_amount)
self.Liste_Ewallet.append(wallet)
print('Information of the account :\n')
wallet.Information()
else:
print('\n Error ! The account already exists !')
else :
print('\n Error ! Your name must not contain "," !!') # peu le pimper
def accountOp(self):
client_id_op = input('Enter the account ID \n>')
cond, index = self.existAcc(client_id_op);
if cond == True :
print('\nAcoount found !\n')
ok = False
pin_entered = 0
while ok == False:
pin_entered = int(input('Enter the account password \n>'))
ok = True
if self.Liste_Ewallet[index].codeVerification(pin_entered):
print('\nCorrect Pin ')
print('Connexion completed \n')
print('\nQue voulez-vous faire ? \n 1 : DEBITER le compte \n 2 : CREDITER le compte \n 3 : INFOS du compte \n 4 : QUITTER le Ewallet \nEntrée :\n')
op = 0;
try :
op = int(input('>'))
except :
pass
if op == 1 :
#debit the account
ok = False
amount_deb = 0;
while ok == False and amount_deb <= 0 :
try:
amount_deb = float(input('Enter the amount to debit from the account \n>'))
except :
print()
if amount_deb <= 0 :
print('\nError ! the amount entered must be positive !\n')
else :
ok = True
self.Liste_Ewallet[index].DebitOperation(amount_deb)
self.Liste_Ewallet[index].Information()
elif op == 2 :
#credi the account
ok = False
amount_cred = 0 ;
while ok == False and amount_cred <= 0:
try :
amount_cred = float(input('Enter the credit amount \n>'))
except:
print()
if amount_cred <= 0 :
print('\nError ! the amount entered must be positive !\n')
ok = True
self.Liste_Ewallet[index].CreditOp(amount_cred)
self.Liste_Ewallet[index].Information()
elif op == 3 :
self.Liste_Ewallet[index].Information()
elif op == 4 :
print('retour menu principal')
else :
print('Error, non valid operation, retour menu principal')
else :
print('Wrong pin, retour principal menu !\n')
else :
print('Account doesnt exist, retour principal menu')
def main():
stop = False
bank = Bank() # instanciation
while stop == False:
message()
op = 0
try :
op = int(input('>'))
except:
print()
if op == 1 :
bank.newWallet()
elif op == 2 :
bank.accountOp()
elif op == 3 :
bank.saveBank()
print('Merci d avoir utilisé les services Ewallet')
stop = True
else :
print('Error ! Choix invalide')
if __name__ == "__main__":
main()
A voir également:
- Projet programmation
- Filigrane projet - Guide
- Application de programmation - Guide
- Gant projet - Télécharger - Gestion de projets
- Musique projet x ✓ - Forum Musique / Radio / Clip
- Musique de " Projet X " - Forum Musique / Radio / Clip
6 réponses
Bonsoir Yaleck,
Pour récupérer tes données sauvegardées, le plus facile serait de les stocker dans un fichier csv, l'accès sera plus facile par la suite. Pour cela tu as le module
Le format bien structuré de ton fichier Ewallet.txt tel que tu l'as conçu, je l'aurais vu davantage pour un fichier visible du client, comme un relevé de compte, donc sans le mot de passe.
Ceci étant dit, si tu souhaites conserver ton format de fichier, tu peux le relire comme indiqué ici :
https://stackoverflow.com/questions/8369219/how-to-read-a-text-file-into-a-string-variable-and-strip-newlines
mais tu auras ensuite quelques manipulations (peut-être fastidieuses à mettre en place) de chaines de caractères pour récupérer tout comme il faut.
Pour récupérer tes données sauvegardées, le plus facile serait de les stocker dans un fichier csv, l'accès sera plus facile par la suite. Pour cela tu as le module
csv. Tu trouveras des tas d'exemples sur internet. Par exemple : https://riptutorial.com/fr/csv/example/6947/lire-et-ecrire-en-python
Le format bien structuré de ton fichier Ewallet.txt tel que tu l'as conçu, je l'aurais vu davantage pour un fichier visible du client, comme un relevé de compte, donc sans le mot de passe.
Ceci étant dit, si tu souhaites conserver ton format de fichier, tu peux le relire comme indiqué ici :
https://stackoverflow.com/questions/8369219/how-to-read-a-text-file-into-a-string-variable-and-strip-newlines
mais tu auras ensuite quelques manipulations (peut-être fastidieuses à mettre en place) de chaines de caractères pour récupérer tout comme il faut.
Utilisateur anonyme
Seriez-vous disponible pour m'aider à mettre cela en place ?
Oui, n'hésite pas si tu as des questions. :-)
Comment veux-tu procéder : tu gardes le format que tu as défini dans ton fichier .txt ou tu préfères passer au format .csv ?
Comment veux-tu procéder : tu gardes le format que tu as défini dans ton fichier .txt ou tu préfères passer au format .csv ?
j'ai essayé les deux mais je n'y arrive pas, puisque mon code a besoin des classes pour les attributs. Même lorsque j'arrive à recréer une liste avec mes données, je n'arrive pas à les conserver en tant que classes Ewallet je ne peux donc pas les utiliser pour refaire mon fichier et là est tout mon problème.
Bonjour,
Je vais te proposer la version avec csv, mais tu peux aussi l'adapter avec ta structure de fichier :
Aide-toi des exemples qu'on trouve sur internet. Fais autant de
Si après tout ça, tu as toujours des blocages, poste ici l'extrait du code que tu as modifié et qui ne fonctionne pas. Je regarderai.
Courage ! :-)
Je vais te proposer la version avec csv, mais tu peux aussi l'adapter avec ta structure de fichier :
class Bank :
def __init__(self):
self.Liste_Ewallet = []
# tu ajoutes la lecture de ton fichier ici
with open('Ewallet.csv','r') as csvEwallet:
# pour chaque ligne du fichier, tu ajoutes ses éléments dans self.Liste_Ewallet. Les élements seront directement stockés dans une liste, ce qui sera facile à récupérer.
# quelques lignes de code à écrire ici
def saveBank(self):
# j'ai remplacé ta version du fichier pour une écriture dans un csv
with open('Ewallet.csv','w') as csvEwallet:
# tu parcours ta Liste_Ewallet, et tu écris dans le csv
Aide-toi des exemples qu'on trouve sur internet. Fais autant de
Si après tout ça, tu as toujours des blocages, poste ici l'extrait du code que tu as modifié et qui ne fonctionne pas. Je regarderai.
Courage ! :-)
On a essayé de garder le même format mais le problème qui arrive est que notre liste est en string et non un attribut ce qui nous empêche de les reprendre je pense que cela est pareil en cdv ou en txt. Qu'on penses tu ? On a utilisé ce code là :
def __init__(self):
if os.path.exists(r'Ewallet.txt'):
pw = open('Ewallet.txt','r')
self.Liste_Ewallet = []
file_size = os.path.getsize('Ewallet.txt')
x = 0;
wallet_pos = 1 ;
if file_size != 0:
lines = pw.readlines()
while x != len(lines):
print(wallet_pos)
self.Liste_Ewallet.append(lines[wallet_pos])
wallet_pos += 4
x += 1
if wallet_pos == len(lines) + 1:
break
else:
self.Liste_Ewallet = []
def saveBank(self):
pw = open('Ewallet.txt','w+')
for index , elem in enumerate(self.Liste_Ewallet) :
id_count, code_pin, amount_dispo = 'ID Ewallet', 'Code Pin', 'Amount Available'
pw.write('{:<15} ¦ {:<15} ¦ {:<15} \n'.format(id_count,code_pin,amount_dispo))
pw.write('{}\n'.format(self.Liste_Ewallet[index].save()))
pw.write("=============================================================================\n\n")
pw.close()
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Au moment où tu arrives à cette ligne :
tu souhaites ajouter un objet Ewallet à partir des données déjà stockés.
Il faut créer un nouveau Ewallet via l'appel de la méthode __init__:
Il faut donc commencer par remplacer ta ligne de code à la ligne 12 par :
La question qui se pose à présent est de savoir comment transmettre les données de
Pour cela tu dois passer par exemple de :
Pour répondre à cela, tu peux utiliser la fonction
En résumé, tu remplaces ta ligne 12 par (à toi de compléter):
self.Liste_Ewallet.append(lines[wallet_pos])
tu souhaites ajouter un objet Ewallet à partir des données déjà stockés.
Il faut créer un nouveau Ewallet via l'appel de la méthode __init__:
Ewallet(Id, generatedCode, dispoAmount).
Il faut donc commencer par remplacer ta ligne de code à la ligne 12 par :
self.Liste_Ewallet.append(Ewallet(Id, generatedCode, dispoAmount))
La question qui se pose à présent est de savoir comment transmettre les données de
lines[wallet_pos]vers
Id,
generatedCodeet
dispoAmount?
Pour cela tu dois passer par exemple de :
lines[wallet_pos]qui vaut
11 ¦ 156290 ¦ 11.00à :
Id, generatedCode, dispoAmount = ['11', '156290', '11.00'](et ne pas oublier ensuite de transformer en int generatedCode et en float dispoAmount).
Pour répondre à cela, tu peux utiliser la fonction
splitpour couper ta ligne au niveau des
¦comme séparateurs. Ensuite il faudra enlever les espaces à gauche et à droite : la fonction
stripfait ça.
En résumé, tu remplaces ta ligne 12 par (à toi de compléter):
#utilisation de split et strip sur la ligne lines[wallet_pos] Id, generatedCode, dispoAmount = ___ generatedCode, dispoAmount = int(generatedCode), float(dispoAmount) self.Liste_Ewallet.append(Ewallet(Id, generatedCode, dispoAmount))