• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

N_u_n_o

ArrayList de Clientes

4 mensagens neste tópico

Boas,

Estou com um problema...estou a fazer um programa para introduzir apenas 3 dados de um cliente (Nome,Idade e Contacto) e guarda-los num ficheiro binário, a minha duvida é como é que eu posso guardar mais do que um cliente nesse ficheiro sem o substituir.

Estou a usar um control para fazer a form do cliente, também gostava de saber como fazer para por os clientes a aparecer um a um carregando num botão. 

Class Cliente

Imports System.IO
Public Class Cliente
    Dim _nome As String
    Dim _idade As Integer
    Dim _contacto As Integer

#Region "Propriedade(s)"

    Public Property Nome() As String
        Get
            Return _nome
        End Get
        Set(ByVal value As String)
            _nome = value
        End Set
    End Property

    Public Property Idade() As Integer
        Get
            Return _idade
        End Get
        Set(ByVal value As Integer)
            _idade = value
        End Set
    End Property

    Public Property Contacto() As Integer
        Get
            Return _contacto
        End Get
        Set(ByVal value As Integer)
            _contacto = value
        End Set
    End Property

#End Region

#Region "Construtor(es)"

    Public Sub New(ByVal Nome As String, ByVal Idade As Integer, ByVal Contacto As Integer)
        Me.Nome = Nome
        Me.Idade = Idade
        Me.Contacto = Contacto
    End Sub

    'Public Sub New()
    '    Me.New("Teste", 0, 0)
    'End Sub

#End Region

#Region "Metodo(s)"

    Public Function Guardar(ByVal caminho As String) As Boolean
        Dim fluxo As FileStream
        Dim escrever As BinaryWriter
        Dim resultado As Boolean = False

        If Not File.Exists(caminho) Then
            fluxo = New FileStream(caminho, FileMode.Create, FileAccess.Write)
            escrever = New BinaryWriter(fluxo)

            resultado = Guardar(escrever)

            escrever.Close()
            fluxo.Close()
        End If
        Return resultado


    End Function

    Public Function Guardar(ByVal escrever As BinaryWriter) As Boolean
        If escrever Is Nothing Then
            Return False
        End If
        escrever.Write(Nome)
        escrever.Write(Idade)
        escrever.Write(Contacto)
        Return True
    End Function

    'Metodo sem Correcção de Erro
    'Public Sub Ler(ByVal caminho As String)
    '    Dim fluxo As New FileStream(caminho, FileMode.Open, FileAccess.Read)
    '    Dim ler As BinaryReader


    '    ler = New BinaryReader(fluxo)
    '    ler.BaseStream.Seek(0, SeekOrigin.Begin)

    '    Nome = ler.ReadString()
    '    Idade = ler.ReadInt32()
    '    Contacto = ler.ReadInt32()

    '    ler.Close()
    '    fluxo.Close()
    'End Sub

    Public Function Leitura(ByVal caminho As String) As Boolean
        Dim fluxo As FileStream
        Dim ler As BinaryReader

        If File.Exists(caminho) Then
            fluxo = New FileStream(caminho, FileMode.Open, FileAccess.Read)
            ler = New BinaryReader(fluxo)

            Leitura(ler)

            ler.Close()
            fluxo.Close()
            Return True
        End If
        Return False
    End Function

    Public Function Leitura(ByVal ler) As Boolean

        If ler Is Nothing Then
            Return False
        End If
        ler.BaseStream.Seek(0, SeekOrigin.Begin)
        Nome = ler.ReadString()
        Idade = ler.ReadInt32()
        Contacto = ler.ReadInt32()
        Return True
    End Function

#End Region

End Class

[table]

[td][/td]

[/table]

Control para o Cliente

Public Class ControlClientes
    Dim C1 As Cliente
    Dim _caminho As String

    Private Sub ControlClientes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        C1 = New Cliente()
        'Determina os caracteres maximos da textbox
        TextBox3.MaxLength = 9
    End Sub

#Region "Propriedade(s)"

    Public Property Dados() As Cliente
        Get
            Return C1
        End Get
        Set(ByVal value As Cliente)
            C1 = value
        End Set
    End Property

    Public Property Caminho() As String
        Get
            Return _caminho
        End Get
        Set(ByVal value As String)
            _caminho = value
        End Set
    End Property

#End Region

#Region "Metodo(s)"

    Public Sub Guardar()

        C1.Guardar(Caminho)

    End Sub

    Public Sub Guardar(ByVal caminho As String)

        C1.Guardar(caminho)

    End Sub

    Public Sub Imprimir()

        Imprimir(C1)

    End Sub

    Public Sub Limpar()

        TextBox1.Clear()
        TextBox2.Clear()
        TextBox3.Clear()

    End Sub

    Public Sub Imprimir(ByVal C As Cliente)

        TextBox1.Text = C.Nome
        TextBox2.Text = C.Idade
        TextBox3.Text = C.Contacto

    End Sub

#End Region

#Region "Função(ões)"

    Public Function Validar() As Boolean

        'Nome
        If Not IsNumeric(TextBox1.Text) Then
            C1.Nome = TextBox1.Text
        Else
            Return False
        End If

        'Idade
        If IsNumeric(TextBox2.Text) Then
            If TextBox2.Text <= 0 Then
                'MsgBox("Idade Inválida", MsgBoxStyle.Critical, "Erro Crítico")
                Return False
            End If
            C1.Idade = TextBox2.Text
        Else
            'MsgBox("Por favor digite uma idade válida", MsgBoxStyle.Critical, "Erro Crítico")
            Return False
        End If

        'Contacto
        If IsNumeric(TextBox3.Text) Then
            C1.Contacto = TextBox3.Text
        Else
            Return False
        End If

        Return True
    End Function

#End Region

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        If Validar() Then
            Guardar()
        Else
            MsgBox("Dados inválidos, por favor digite-os outra vez.", MsgBoxStyle.Critical, " Erro de dados ")
            Limpar()
        End If

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        'Try
        C1.Leitura(Caminho)
        'Catch ex As Exception
        '    MsgBox(ex.Message)
        '    Return
        'End Try
        Imprimir()

    End Sub

End Class

Outra coisa que me acontece é dar um erro ao criar o fluxo na class cliente...o VB diz "ArgumentNullException was unhandled" - "Path cannot be null. Parameter name: path"

Desculpem o post extenso  :dontgetit: , mas já estive no google a procura e não consigo resolver este 2 problemas...

Quem poder ajudar, agradeço  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No seguntro problema basta quando fores em debug ver que a tua varivel caminho e nula dando erro a criar o filestream :D quando a segundo de momento nao tenho tempo para analizar bem dei so aqui uma passagem rapida... boa sorte :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a do filestream já resolvi...reparei hj a tarde  :wallbash:

se tiveres tempo depois diz qualquer cena... :thumbsup:

se que isto é muito fácil, mas eu não me arranjo com estruturas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ele esta a apagar o que ja tens no ficheiro porque tens ali FileMode.Create tenta FileMode.OpenOrCreate :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora