Ayuda con un pequeño ejercicio que estoy haciendo en C# con windows form?

Iniciado por Ila26, 3 Agosto 2014, 18:32 PM

0 Miembros y 1 Visitante están viendo este tema.

Ila26

Saludos...

Quizas para ustedes sea sencillo pero para mi no jajaj estoy aprendiendo :)

Espero que me puedan dar la mano y me expliquen que estaba haciendo mal,se los agradecere de corazon...


La aplicacion que estoy creando le pide al usuario entrar su nombre,apellido y que entre su salario y que pase la informacion a un listbox.
El sueldo tendra una deduccion de un 0.05%

txtname=pepe
txtlastname=lopez
txtsalario=(digamos 450.55)

quiero que en el lstbox me aparezca esa informacion lo unico que el salario sera diferente ya que le quitan el 0.05%

el programa ya lo habia hecho y hacia lo que queria,el problema es que lo quier hacer utilizando CLASES Y METODOS.

Aqui les dejo lo que tengo hecho hasta ahora...

Código (csharp) [Seleccionar]

private void button1_Click(object sender, EventArgs e)
        {
            talonary talonaryobj = new talonary();

            lsttalonary.Items.Add(talonaryobj.name);
            lsttalonary.Items.Add(talonaryobj.lastname);
            lsttalonary.Items.Add(talonaryobj.salary);
           



        }



ASI TENGO CONSTRUIDA LA CLASE...
Código (csharp) [Seleccionar]

public class talonary
    {
       public string name;
       public string lastname;
       public double salary;


       public talonary(string name,string lastname,double salary)
       {
           this.name = name;
           this.lastname = lastname;
           this.salary = salary;
       }
     
      double descSalary()
       {
           double salary = 0;
           salary = (salary * 0.05) - salary;
           return salary;

       }


Eleкtro

"talonary"?  :xD, menuda invención :P, supongo que intentaste traducir "talonario" al inglés, en ese caso el termino correcto es counterfoil.

Respecto a la Class, ¿podrias especificar en que necesitas ayuda?, eso no me ha quedado claro,
de todas formas si lo que buscas son que te demos consejos, entonces yo te sugiero que guardes la información a modo de base de datos (XML es un formato que me gusta, porque es legible por el humano) y la guardes en un archivo local para guardar los datos de todos los clientes, serializándolo, y acceder cuando precises (deserializando).

Te mostraría un ejemplo, pero sería en VB.NET, de todas formas en MSDN puedes encontrar ejemplos de serialización por XML como este.

Espero que te haya servido de algo,
Saludos.




EDITO:
No estoy acostumbrado a manejar C#, pero aqui tienes unas cuantas mejoras que le hice:

EDITO:
Se me olvidaba comentar que mientras la class siga igual de "simple" realmente no es necesario implementar ISerializable (ni IXmlSerializable), pero mejor tenerlo implementado de manera básica por si piensas hacerle cambios "importantes" en el futuro y lo puedas necesitar, le añadí la implementación de serialización binaria, pero como ya digo todo eso no es necesario ahora mismo, sin implementarlo puedes serializar.

Código (csharp) [Seleccionar]
#region Usings

using System;
using System.Runtime.Serialization;
using System.Security.Permissions;
using System.Xml.Serialization;
using System.Xml;

#endregion

/// <summary>
/// Class talonary (or Counterfoil? xD).
/// This class can be serialized.
/// </summary>
[Serializable]
public class talonary : ISerializable, IXmlSerializable
{

    #region Properties

    /// <summary>
    /// Gets or sets the client name.
    /// </summary>
    /// <value>The name.</value>
    public string name
    {
        get { return this._name; }
        set { this._name = value; }
    }
    private string _name;

    /// <summary>
    /// Gets or sets the client surname.
    /// </summary>
    /// <value>The surname.</value>
    public string surname
    {
        get { return this._surname; }
        set { this._surname = value; }
    }
    private string _surname;

    /// <summary>
    /// Gets or sets the client salary.
    /// </summary>
    /// <value>The salary.</value>
    public double salary
    {
        get { return this._salary; }
        set { this._salary = value; }
    }
    private double _salary;

    /// <summary>
    /// Gets the client salary.
    /// </summary>
    /// <value>The salary.</value>
    public double discountedSalary
    {
        get
        {
            return (this._salary * 0.05D) - this._salary;
        }
    }

    #endregion

    #region Constructors

    /// <summary>
    /// Prevents a default instance of the <see cref="talonary"/> class from being created.
    /// </summary>
    private talonary() { }

    /// <summary>
    /// Initializes a new instance of the <see cref="talonary"/> class.
    /// </summary>
    /// <param name="name">Indicates the client name.</param>
    /// <param name="surname">Indicates the client surname.</param>
    /// <param name="salary">Indicates the client salary.</param>
    public talonary(string name,
                    string surname,
                    double salary)
    {

        if (name == null)
        {
            throw new ArgumentNullException("name");
        }

        this._name = name;
        this._surname = surname;
        this._salary = salary;
    }

    #endregion

    #region ISerializable implementation | For Binary serialization.

    /// <summary>
    /// Populates a <see cref="T:System.Runtime.Serialization.SerializationInfo" /> with the data needed to serialize the target object.
    /// </summary>
    /// <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo" /> to populate with data.</param>
    /// <param name="context">The destination (see <see cref="T:System.Runtime.Serialization.StreamingContext" />) for this serialization.</param>
    [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
     void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
    {
        if (info == null)
        {
            throw new ArgumentNullException("info");
        }

        info.AddValue("name", this._name, typeof(string));
        info.AddValue("surname", this._surname, typeof(string));
        info.AddValue("salary", this._salary, typeof(double));
    }

    /// <summary>
    /// Initializes a new instance of the <see cref="talonary"/> class.
    /// This constructor is used to deserialize values.
    /// </summary>
    /// <param name="info">The information.</param>
    /// <param name="context">The context.</param>
    protected talonary(SerializationInfo info, StreamingContext context)
    {
        if (info == null)
        {
            throw new ArgumentNullException("info");
        }

        this._name = (string)info.GetValue("name", typeof(string));
        this._surname = (string)info.GetValue("surname", typeof(string));
        this._salary = (double)info.GetValue("salary", typeof(double));
    }

    #endregion

    #region "IXMLSerializable implementation" | For XML serialization.

    /// <summary>
    /// This method is reserved and should not be used.
    /// When implementing the IXmlSerializable interface, you should return null (Nothing in Visual Basic) from this method,
    /// and instead, if specifying a custom schema is required, apply the <see cref="T:XmlSchemaProviderAttribute"/> to the class.
    /// </summary>
    /// <returns>
    /// An <see cref="T:Xml.Schema.XmlSchema"/> that describes the XML representation of the object
    /// that is produced by the <see cref="M:IXmlSerializable.WriteXml(Xml.XmlWriter)"/> method
    /// and consumed by the <see cref="M:IXmlSerializable.ReadXml(Xml.XmlReader)"/> method.
    /// </returns>
    public System.Xml.Schema.XmlSchema GetSchema()
    {
        return null;
    }

    /// <summary>
    /// Converts an object into its XML representation.
    /// </summary>
    /// <param name="writer">The <see cref="T:Xml.XmlWriter"/> stream to which the object is serialized.</param>
    public void WriteXml(XmlWriter writer)
    {
        writer.WriteElementString("name", this._name);
        writer.WriteElementString("surname", this._surname);
        writer.WriteElementString("salary", Convert.ToString(this._salary));
    }

    /// <summary>
    /// Generates an object from its XML representation.
    /// </summary>
    /// <param name="reader">The <see cref="T:Xml.XmlReader"/> stream from which the object is deserialized.</param>
    public void ReadXml(XmlReader reader)
    {
        reader.ReadStartElement(base.GetType().Name);
        this._name = reader.ReadElementContentAsString();
        this._surname = reader.ReadElementContentAsString();
        this._salary = reader.ReadElementContentAsDouble();
    }

    #endregion

}


EDITO:
No te vendría mal leer esto, sobre la serialización XML: http://support.microsoft.com/kb/316730

Ejemplo:

Código (vbnet) [Seleccionar]

   Imports System.IO
   Imports System.Xml.Serialization
   
   Public Class TestClass : Inherits form
   
      Private Sub Test_Handler() Handles MyBase.Shown
   
          Dim Clients As New List(Of talonary)
          With Clients
              .Add(New talonary("pedro", "castaño", 10.0R))
              .Add(New talonary("manolo", "ToLoko", 150.0R))
              .Add(New talonary("Elektro", "Zero", Double.MaxValue))
          End With
   
          ' Serialización XML.
          Using Writer As New StreamWriter(".\Clients.xml")
   
              Dim Serializer As New XmlSerializer(Clients.GetType)
              Serializer.Serialize(Writer, Clients)
   
          End Using
   
          ' Deserialización XML.
          Using Reader As New StreamReader(".\Clients.xml")
   
              Dim Serializer As New XmlSerializer(Clients.GetType)
              Dim tmpClients As List(Of talonary) = Serializer.Deserialize(Reader)
   
              For Each Client As talonary In tmpClients
                  MessageBox.Show(Client.name)
              Next
   
          End Using
   
      End Sub
   
   End Class


Traducción al vuelo a C# (no lo he testeado):
Código (csharp) [Seleccionar]

   using Microsoft.VisualBasic;
   using System;
   using System.Collections;
   using System.Collections.Generic;
   using System.Data;
   using System.Diagnostics;
   using System.IO;
   using System.Xml.Serialization;
   
   public class TestClass : form
   {
   
   
   private void Test_Handler()
   {
   List<talonary> Clients = new List<talonary>();
   var _with1 = Clients;
   _with1.Add(new talonary("pedro", "castaño", 10.0));
   _with1.Add(new talonary("manolo", "ToLoko", 150.0));
   _with1.Add(new talonary("Elektro", "Zero", double.MaxValue));
   
   // Serialización XML.
   using (StreamWriter Writer = new StreamWriter(".\\Clients.xml")) {
   
   XmlSerializer Serializer = new XmlSerializer(Clients.GetType);
   Serializer.Serialize(Writer, Clients);
   
   }
   
   // Deserialización XML.
   using (StreamReader Reader = new StreamReader(".\\Clients.xml")) {
   
   XmlSerializer Serializer = new XmlSerializer(Clients.GetType);
   List<talonary> tmpClients = Serializer.Deserialize(Reader);
   
   foreach (talonary Client in tmpClients) {
   MessageBox.Show(Client.name);
   }
   
   }
   
   }
   public TestClass()
   {
   Shown += Test_Handler;
   }
   
   }
   
   //=======================================================
   //Service provided by Telerik (www.telerik.com)
   //Conversion powered by NRefactory.
   //Twitter: @telerik
   //Facebook: facebook.com/telerik
   //=======================================================

   
Saludos.