Création d'un repertoire téléphonique en vb.net

dartagnan43 Messages postés 45 Date d'inscription samedi 31 mai 2008 Statut Membre Dernière intervention 26 février 2015 - Modifié par Whismeril le 24/02/2015 à 13:56
Whismeril Messages postés 19095 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 juillet 2024 - 1 mars 2015 à 20:13
Bonjour,
Débutant en en programmation je cherche aà réaliser un petit repertoire téléphonique en vb.net
Les données seront stockées en xml serialisée et deserialisées dans un doucument texte
Voila pour l'ambition
J'ai deja esseayé de créer la classe contact et si mes proprietées sont correctes je trbuches sur ma liste clients
En fait je ne sais comment m'y prendre j'ai besoin d'aide
Imports System.IO
MustInherit Class Contact
Dim _Id As Guid
Dim _Nom As String = ""
Dim _Prenom As String = ""
Dim _Adresse As String = ""
Dim _Telephone As String = ""
Dim _Gsm As String = ""
Dim _Fax As String = ""
Dim _Mail As String = ""
Public ReadOnly Property Id As Guid
Get
_Id = New Guid
End Get
End Property

Public Property Nom(ByVal _Nom As String) As String
Get
Return _Nom
End Get
Set(value As String)
_Nom = value
End Set
End Property
Public Property Prenom(ByVal _Prenom As String) As String
Get
Return _Prenom
End Get
Set(value As String)
_Prenom = value
End Set
End Property
Public Property Adresse(ByVal _Adresse As String) As String
Get
Return _Adresse
End Get
Set(value As String)
_Adresse = value
End Set
End Property
Public Property Telephone(ByVal _Telephone As String) As String
Get
Return _Telephone
End Get
Set(value As String)
_Telephone = value
End Set
End Property
Public Property Gsm(ByVal _Gsm As String) As String
Get
Return _Gsm
End Get
Set(value As String)
_Gsm = value
End Set
End Property
Public Property Fax(ByVal _Fax As String) As String
Get
Return _Fax
End Get
Set(value As String)
_Fax = value
End Set
End Property
Public Property Mail(ByVal _Mail As String) As String
Get
Return _Mail
End Get
Set(value As String)
_Mail = value
End Set
End Property
Sub New(ByVal Nom As String, ByVal Prenom As String, ByVal Adresse As String, ByVal Telephone As String, ByVal Gsm As String, ByVal Fax As String, ByVal Mail As String)
Me._Nom = Nom
Me._Prenom = Prenom
Me._Adresse = Adresse
Me._Telephone = Telephone
Me._Gsm = Gsm
Me._Fax = Fax
Me._Mail = Mail
End Sub
Sub CreationFichier()
Dim MonFichier As IO.FileStream = New IO.FileStream("FichierSauvegarde.txt", FileMode.OpenOrCreate)
End Sub

Private Class Serialisation
Dim list As New List(Of Contact)
End Class
End Class

11 réponses

Whismeril Messages postés 19095 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 juillet 2024 660
24 févr. 2015 à 13:56
Bonjour,

j'ai modifié ton titre pour préciser que le répertoire est téléphonique pour ne pas confondre avec un repertoire de Windows. Il manquait aussi un End Class que j'ai ajouté tout à la fin dis moi si c'est pas ça.

Je ne comprends pas ta question, tu parles de xml et tu crées un ficher txt.

Tu crées aussi une classe privée de sérialisation je ne voies pas trop l'intéreêt.

Peux tu développer?


0
Whismeril Messages postés 19095 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 juillet 2024 660
24 févr. 2015 à 13:56
Et j'ai mis la la coloration syntaxique.
0
Salut Wismeril
Merci pour l'interet que tu portes a ma question
Oui il s'agit bien d'un petit repertoire telephonique que je veux developper
Ensuite j'ai pris un fichier texte car j'ai pensé pouvoir exporter et importer mes données non pas dans une base de donnée mais dans un petit fichier en serialisant et deserialisant les données en xml
J'ai cru d'apres mes dernieres recherches cela possible
avec serializetofile(.....)
sinon je crée un fichier .xml
le but etant ensuite de mettre a jour, annuler des données, consulter et trier les données depuis mon interface dans ce fichier
Les données n'excédent pas la vingtaine d'enregistrements la necessité de créer une base de donnée ne me parait pas utile
0
Whismeril Messages postés 19095 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 juillet 2024 660
24 févr. 2015 à 19:13
Pour le xml, oui c'est un fichier "texte", mais normalement on y met l'extension xml. Je n'ai pas parlé de base de données.
Par contre personnellement je préfère utiliser Linq To XML, plutôt que serializetofile.

Ça ne dit toujours pas ce que tu compte faire de ta classe privé.
Et d'ailleurs, pourquoi avoir mis ta classe MustInherit, cela t'oblige à écrire une classe héritée pour pouvoir t'en servir.

0
j'ai pensé que serialiser et deserialiser est une methode interne a la classe qui ne necessite pas qu'elle soit publique
Quand j'ouvre mon interface elle déserialise les données pour les afficher.A la fermeture au contraire je serialise pour sauvegarder
J'ai créer une class MustInherite pour avoir l'occasion d'utiliser une classe abstraite
J'ai refait une partie du code a l'aide d'ouvrages
Imports System.IO
Imports System.Xml.Serialization
MustInherit Class Contact
Dim _Id As Guid
Dim _Nom As String = ""
Dim _Prenom As String = ""
Dim _Adresse As String = ""
Dim _Telephone As String = ""
Dim _Gsm As String = ""
Dim _Fax As String = ""
Dim _Mail As String = ""
Public ReadOnly Property Id As Guid
Get
_Id = New Guid
End Get
End Property

Public Property Nom(ByVal _Nom As String) As String
Get
Return _Nom
End Get
Set(value As String)
_Nom = value
End Set
End Property
Public Property Prenom(ByVal _Prenom As String) As String
Get
Return _Prenom
End Get
Set(value As String)
_Prenom = value
End Set
End Property
Public Property Adresse(ByVal _Adresse As String) As String
Get
Return _Adresse
End Get
Set(value As String)
_Adresse = value
End Set
End Property
Public Property Telephone(ByVal _Telephone As String) As String
Get
Return _Telephone
End Get
Set(value As String)
_Telephone = value
End Set
End Property
Public Property Gsm(ByVal _Gsm As String) As String
Get
Return _Gsm
End Get
Set(value As String)
_Gsm = value
End Set
End Property
Public Property Fax(ByVal _Fax As String) As String
Get
Return _Fax
End Get
Set(value As String)
_Fax = value
End Set
End Property
Public Property Mail(ByVal _Mail As String) As String
Get
Return _Mail
End Get
Set(value As String)
_Mail = value
End Set
End Property
Sub New(ByVal Nom As String, ByVal Prenom As String, ByVal Adresse As String, ByVal Telephone As String, ByVal Gsm As String, ByVal Fax As String, ByVal Mail As String)
Me._Nom = Nom
Me._Prenom = Prenom
Me._Adresse = Adresse
Me._Telephone = Telephone
Me._Gsm = Gsm
Me._Fax = Fax
Me._Mail = Mail
End Sub
Private Function Serialisation()
Dim MonFichier As IO.FileStream = New IO.FileStream("Monrepertoire.xml", FileMode.OpenOrCreate)
Dim Malisteclient As New List(Of Contact)
Dim MyWriter As New System.IO.StreamWriter("Monrepertoire.xml")
Dim Ser As New XmlSerializer(GetType(Contact))
Ser.Serialize(MonFichier, MyWriter)

End Function
Private Function Deserialisation()

End Function


End Class

                
0
Whismeril Messages postés 19095 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 juillet 2024 660
24 févr. 2015 à 22:05
Modifier ce message en rajoutant ton code après ma réponse de 19:58 perturbe un peu la relecture du fil.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19095 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 juillet 2024 660
24 févr. 2015 à 19:58
j'ai pensé que serialiser et deserialiser est une methode interne
ok alors autant écrire une méthode alors, pas une classe.

Quand j'ouvre mon interface elle déserialise les données pour les afficher.A la fermeture au contraire je serialise pour sauvegarder
et du coup ton IHM doit d'une façon ou d'une autre signaler à la classe qu'elle doit lancer sa méthode privée... au final une méthode public est plus simple.
Tu peux choisir une méthode Shared.

J'ai créer une class MustInherite pour avoir l'occasion d'utiliser une classe abstraite
mais du coup ta méthode privée est encore moins accessible.
0
Whismeril Messages postés 19095 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 juillet 2024 660
24 févr. 2015 à 20:04
0
J'ai modifié mon code
Je regarde ton exemple et je tente de faire evoluer mon code
Merci pour ton aide
0
Whismeril,
Pardon pour mon manque de modestie en voulant faire le grand et tout traiter d'un coup: les classes abstraites, la sérialisation.... sans déja être capable de connaître les bases
j'ai analysé ton code je comprends pas tout d'ou mon meacoulpa
Je travaille doucement j'essai de construire mon code et je reviens sur le forum si je me casse les dents
Merci
0
Whismeril Messages postés 19095 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 juillet 2024 660
25 févr. 2015 à 19:28
Bonsoir,

il ne faut pas confondre audace et précipitation.
Survoler les bases (quand on se lance en autodidacte) c'est prendre le risque de se prendre une claque plus tard.
Je parle d'expérience.
Voilà un bon tuto http://plasserre.developpez.com/cours/vb-net/

Pour ce qui est de l'exemple que j'ai t'ai donné, pose toutes les questions que tu veux.
0
Slt Whismeril
Je te soumet mon nouveau code
Suis-je dans le vrai?
Imports System.IO
Imports System.Xml.Serialization
Public Class Contact
Dim MonFichier As IO.FileStream = New IO.FileStream("Monrepertoire.xml", FileMode.OpenOrCreate)
Dim Malisteclient As New List(Of Contact)
Dim _Id As Guid
Dim _Nom As String = ""
Dim _Prenom As String = ""
Dim _Adresse As String = ""
Dim _Telephone As String = ""
Dim _Gsm As String = ""
Dim _Fax As String = ""
Dim _Mail As String = ""
Public ReadOnly Property Id As Guid
Get
_Id = New Guid
End Get
End Property

Public Property Nom(ByVal _Nom As String) As String
Get
Return _Nom
End Get
Set(value As String)
_Nom = value
End Set
End Property
Public Property Prenom(ByVal _Prenom As String) As String
Get
Return _Prenom
End Get
Set(value As String)
_Prenom = value
End Set
End Property
Public Property Adresse(ByVal _Adresse As String) As String
Get
Return _Adresse
End Get
Set(value As String)
_Adresse = value
End Set
End Property
Public Property Telephone(ByVal _Telephone As String) As String
Get
Return _Telephone
End Get
Set(value As String)
_Telephone = value
End Set
End Property
Public Property Gsm(ByVal _Gsm As String) As String
Get
Return _Gsm
End Get
Set(value As String)
_Gsm = value
End Set
End Property
Public Property Fax(ByVal _Fax As String) As String
Get
Return _Fax
End Get
Set(value As String)
_Fax = value
End Set
End Property
Public Property Mail(ByVal _Mail As String) As String
Get
Return _Mail
End Get
Set(value As String)
_Mail = value
End Set
End Property
Sub New(ByVal Nom As String, ByVal Prenom As String, ByVal Adresse As String, ByVal Telephone As String, ByVal Gsm As String, ByVal Fax As String, ByVal Mail As String)
Me._Nom = Nom
Me._Prenom = Prenom
Me._Adresse = Adresse
Me._Telephone = Telephone
Me._Gsm = Gsm
Me._Fax = Fax
Me._Mail = Mail
End Sub
Public Sub Serialisation()

Dim MyWriter As New System.IO.StreamWriter("Monrepertoire.xml")
Dim Ser As New XmlSerializer(GetType(Contact))
Ser.Serialize(MonFichier, MyWriter)
End Sub
Private Function Deserialisation() As List(Of Contact)
Dim connexion As New SqlClient.SqlConnection
Dim MyData As New DataSet
Dim MyReader As Xml.XmlReader
connexion.Open()
While MyReader.Read()
MyData.ReadXml(MonFichier)
End While
Return Malisteclient
End Function


End Class

                
0
Whismeril Messages postés 19095 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 juillet 2024 660
26 févr. 2015 à 09:01
Bonjour

    Public Sub Serialisation()

        Dim MyWriter As New System.IO.StreamWriter("Monrepertoire.xml")
        Dim Ser As New XmlSerializer(GetType(Contact))
        Ser.Serialize(MonFichier, MyWriter)
    End Sub

Comme je te l'ai dit plus haut XmlSerializer j'ai abandonné depuis longtemps, mais de mémoire, il faut quand même lui donner des données à exporter.
Dans ce tuto (en c# mais le principe doit être le même c'est du .Net) http://tlevesque.developpez.com/dotnet/xml-serialization/ au paragraphe 1 A 3, il crée une liste de contact, ensuite un xmlserialiser pour une liste de contact et enfin un streamwritter vers son fichier xml.
Il donne en paramètre à son XmlSerializer, le streamwritter et la liste de contact.
Traduit par un traducteur en ligne ça donne ça:
Dim contactBook As New List(Of Person)

	Dim jean As Person =... ' inutile de s'appesantir sur l'initialisation des objets...
        Dim jacques As Person =...
        contactBoox.Add(jean)
	contactBoox.Add(jacques)

	Dim xs As New XmlSerializer(GetType(List(Of Person)))
	Using wr As New StreamWriter("contactBook.xml")
		xs.Serialize(wr, contactBook)
	End Using


Donc ta méthode est à revoir, entre autre pour lui donner à manger une liste de contact.
Pour la deserialization je ne vois pas à quoi sert la connexion sql.
0
dartagnan43 Messages postés 45 Date d'inscription samedi 31 mai 2008 Statut Membre Dernière intervention 26 février 2015 2
26 févr. 2015 à 17:59
Je souhaite connecter mon fichier client a un binding navigator plus tard
0
Whismeril Messages postés 19095 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 juillet 2024 660 > dartagnan43 Messages postés 45 Date d'inscription samedi 31 mai 2008 Statut Membre Dernière intervention 26 février 2015
26 févr. 2015 à 20:21
Ben ça marche avec une liste pas besoin de sql
0
Slt Whismeril
J'ai refait mon code est tu d'accord?
Imports System.IO
Imports System.Xml.Serialization
Public Class Contact
Dim MonFichier As IO.FileStream = New IO.FileStream("Monrepertoire.xml", FileMode.OpenOrCreate)
Dim Malisteclient As New List(Of Contact)
Private _Id As String = System.Guid.NewGuid.ToString
Private _Nom As String = ""
Private _Prenom As String = ""
Private _Adresse As String = ""
Private _Telephone As String = ""
Private _Gsm As String = ""
Private _Fax As String = ""
Private _Mail As String = ""
Public Property Id(ByVal _Id As String) As String
Get
Return _Id
End Get
Set(value As String)
_Id = value
End Set
End Property

Public Property Nom(ByVal _Nom As String) As String
Get
Return _Nom
End Get
Set(value As String)
_Nom = value
End Set
End Property
Public Property Prenom(ByVal _Prenom As String) As String
Get
Return _Prenom
End Get
Set(value As String)
_Prenom = value
End Set
End Property
Public Property Adresse(ByVal _Adresse As String) As String
Get
Return _Adresse
End Get
Set(value As String)
_Adresse = value
End Set
End Property
Public Property Telephone(ByVal _Telephone As String) As String
Get
Return _Telephone
End Get
Set(value As String)
_Telephone = value
End Set
End Property
Public Property Gsm(ByVal _Gsm As String) As String
Get
Return _Gsm
End Get
Set(value As String)
_Gsm = value
End Set
End Property
Public Property Fax(ByVal _Fax As String) As String
Get
Return _Fax
End Get
Set(value As String)
_Fax = value
End Set
End Property
Public Property Mail(ByVal _Mail As String) As String
Get
Return _Mail
End Get
Set(value As String)
_Mail = value
End Set
End Property
Public Sub New(ByVal Id As String, ByVal Nom As String, ByVal Prenom As String, ByVal Adresse As String, ByVal Telephone As String, ByVal Gsm As String, ByVal Fax As String, ByVal Mail As String)
Me._Id = Id
Me._Nom = Nom
Me._Prenom = Prenom
Me._Adresse = Adresse
Me._Telephone = Telephone
Me._Gsm = Gsm
Me._Fax = Fax
Me._Mail = Mail
End Sub
Public Sub Serialisation(ByVal Data As Data.DataTable)
Try
If IsNothing(Data) OrElse Data.Rows.Count = 0 Then
Exit Sub
End If
Data.WriteXml(MonFichier)
Catch ex As Exception
Throw
End Try
End Sub
Public Function Deserialisation() As System.Data.DataTable
Dim MyDataSet As New DataSet
Dim MyDataadapter As New SqlClient.SqlDataAdapter()
Dim MyReader As New IO.StreamReader(MonFichier)
If IO.File.Exists("Monrepertoire.xml") Then
MyDataSet.ReadXml(MyReader, XmlReadMode.InferSchema)
Dim MyDataTable As New DataTable
If Not MyDataSet Is Nothing AndAlso MyDataSet.Tables.Count = 1 Then
MyDataTable = MyDataSet.Tables(0).Copy
End If
If Not IsNothing(MyReader) Then
MyReader.Close()
MyReader.Dispose()
End If
Return MyDataTable
Else
Return Nothing
End If
End Function
Public Function ChargerContact() As System.Collections.Generic.List(Of Contact)
Dim ListesDesContacts As New List(Of Contact)
Dim MyDataContacts As Data.DataTable = Deserialisation()
If Not MyDataContacts Is Nothing Then
For Each MyDatarowContact As Data.DataRow In MyDataContacts.Rows
Dim MonContact As New Contact(MyDatarowContact("Contact_Id"), _
MyDatarowContact("Contact_Nom"), _
MyDatarowContact("Contact_Prenom"), _
MyDatarowContact("Contact_Adresse"), _
MyDatarowContact("Contact_Telephone"), _
MyDatarowContact("Contact_Gsm"), _
MyDatarowContact("Contact_Fax"), _
MyDatarowContact("Contact_Mail"))
ListesDesContacts.Add(MonContact)
Next
End If
Return ListesDesContacts
End Function


End Class<code basic>
</code>
0
Whismeril Messages postés 19095 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 juillet 2024 660
28 févr. 2015 à 19:09
Bonsoir, je n'ai pas trop le temps de tester, mais je ne vois pas l'intérêt de deserializer dans un datatable pour en faire une liste après.
Soit tu te sers du datatable ou tu deserialize direct dans une liste.
0
Whismeril Messages postés 19095 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 juillet 2024 660
1 mars 2015 à 20:13
Bonsoir, peux tu poster un fichier xml d'exemple?
0
Rejoignez-nous