Page d'Accueil

Une collection d'articles

 

Introduction

Dans les leçons précédentes, nous avons appris comment créer une rangée comme liste d'articles. Comme une rangée, une collection est une série d'articles de même type. La particularité dans la création d'une rangée est que vous devez savoir à l'avance le nombre d'articles qui composeront la liste. Il y a des moments où vous ne savez pas, vous ne pouvez pas savoir, ou vous ne pouvez pas prévoir le nombre d'articles de la liste. Pour cette raison, vous pouvez vouloir créer la liste pour laquelle vous n'indiquez pas le nombre maximum des articles mais vous permettez à l'utilisateur de la liste d'ajouter, localiser, ou enlever des articles à volonté.

Avant de créer une liste, vous devriez d'abord décider probablement ou définir de quoi la liste serait faite. Aussi différent qu'ils sont, une liste peut être faite de valeurs numériques. Par exemple, une liste sera faite de nombres. Vous pouvez vouloir une liste qui est faite de noms. Une telle liste peut être créée d'une classe qui inclut une variable membre chaîne de caractères. Un autre type de liste peut contenir les objets complexes.

Étude pratiqueÉtude pratique : Présentation des collections

  1. Commencez Microsoft Visual C# et créez une nouvelle application de console appelée FlowerShop4
  2. Sauvegardez le projet, sur la barre d'outils standard, cliquez le bouton Enregistrer tout 
  3. Acceptez tous les défauts et cliquez Enregistrer
  4. Créer une nouvelle classe, dans l'explorateur de solution, droit-cliquez FlowerShop4 - > ajouter - > classe…
  5. Placez le nom de la classe Flower et cliquez ajouter
  6. Changez le fichier comme suit :
     
    using System;
    
    namespace FlowerShop4
    {
        public enum FlowerType
        {
            Roses = 1,
            Lilies,
            Daisies,
            Carnations,
            LivePlant,
            Mixed
        }
    
        public enum FlowerColor
        {
            Red = 1,
            White,
            Yellow,
            Pink,
            Orange,
            Blue,
            Lavender,
            Mixed
        }
    
        public enum FlowerArrangement
        {
            Bouquet = 1,
            Vase,
            Basket,
            Any
        }
    
        public sealed class Flower
        {
            private decimal pc;
            public FlowerType Type;
            public FlowerColor Color;
            public FlowerArrangement Arrangement;
    
            public Flower()
            {
                Type = FlowerType.Mixed;
                Color = FlowerColor.Mixed;
                Arrangement = FlowerArrangement.Vase;
                pc = 0.00M;
            }
    
            public Flower(FlowerType type, FlowerColor color,
                    FlowerArrangement argn, decimal price)
            {
                Type = type;
                Color = color;
                Arrangement = argn;
                pc = price;
            }
    
            public decimal UnitPrice
            {
                get { return pc; }
                set { pc = value; }
            }
        }
    }
  7. Créer une nouvelle classe, dans l'explorateur de solution, droit-cliquez FlowerShop4 - > ajouter - > classe…
  8. Placez le nom de la classe OrderProcessing et cliquez ajouter
  9. Changez le fichier d'OrderProcessing.cs comme suit :
     
    using System;
    
    namespace FlowerShop4
    {
        public class OrderProcessing
        {
            public Flower FlowerOrder;
            private int qty;
    
            public int Quantity
            {
                get { return qty; }
                set { qty = value; }
            }
    
            public OrderProcessing()
            {
                FlowerOrder = new Flower();
            }
    
            public decimal TotalPrice
            {
                get { return Quantity * FlowerOrder.UnitPrice; }
            }
    
            public void GetFlowerType()
            {
                int choice = 0;
    
                do
                {
                    try
                    {
                        Console.WriteLine("Enter the Type of Flower Order");
                        Console.WriteLine("1. Roses");
                        Console.WriteLine("2. Lilies");
                        Console.WriteLine("3. Daisies");
                        Console.WriteLine("4. Carnations");
                        Console.WriteLine("5. Live Plant");
                        Console.WriteLine("6. Mixed");
                        Console.Write("Your Choice: ");
                        choice = int.Parse(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
                        Console.WriteLine("You failed to enter an " +
                                          "appropriate number!");
                    }
    
                    if ((choice < 1) || (choice > 6))
                        Console.WriteLine("Invalid Value: Please enter " +
                                          "a value between 1 and 6");
                } while ((choice < 1) || (choice > 6));
    
                switch (choice)
                {
                    case 1:
                        FlowerOrder.Type = FlowerType.Roses;
                        break;
                    case 2:
                        FlowerOrder.Type = FlowerType.Lilies;
                        break;
                    case 3:
                        FlowerOrder.Type = FlowerType.Daisies;
                        break;
                    case 4:
                        FlowerOrder.Type = FlowerType.Carnations;
                        break;
                    case 5:
                        FlowerOrder.Type = FlowerType.LivePlant;
                        break;
                    default:
                        FlowerOrder.Type = FlowerType.Mixed;
                        break;
                }
            }
    
            public void GetFlowerColor()
            {
                int choice = 0;
    
                do
                {
                    try
                    {
                        Console.WriteLine("Enter the Color");
                        Console.WriteLine("1. Red");
                        Console.WriteLine("2. White");
                        Console.WriteLine("3. Yellow");
                        Console.WriteLine("4. Pink");
                        Console.WriteLine("5. Orange");
                        Console.WriteLine("6. Blue");
                        Console.WriteLine("7. Lavender");
                        Console.WriteLine("8. Mixed");
                        Console.Write("Your Choice: ");
                        choice = int.Parse(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
                        Console.WriteLine("You didn't enter an " +
                                          "appropriate number!");
                    }
    
                    if ((choice < 1) || (choice > 8))
                        Console.WriteLine("Invalid Value: Please " +
                                          "enter a value between 1 and 8");
                } while ((choice < 1) || (choice > 8));
    
                switch (choice)
                {
                    case 1:
                        FlowerOrder.Color = FlowerColor.Red;
                        break;
                    case 2:
                        FlowerOrder.Color = FlowerColor.White;
                        break;
                    case 3:
                        FlowerOrder.Color = FlowerColor.Yellow;
                        break;
                    case 4:
                        FlowerOrder.Color = FlowerColor.Pink;
                        break;
                    case 5:
                        FlowerOrder.Color = FlowerColor.Yellow;
                        break;
                    case 6:
                        FlowerOrder.Color = FlowerColor.Blue;
                        break;
                    case 7:
                        FlowerOrder.Color = FlowerColor.Lavender;
                        break;
                    default:
                        FlowerOrder.Color = FlowerColor.Mixed;
                        break;
                }
            }
    
            public void GetFlowerArrangement()
            {
                int choice = 0;
    
                do
                {
                    try
                    {
                        Console.WriteLine("Enter the Type of Arrangement");
                        Console.WriteLine("1. Bouquet");
                        Console.WriteLine("2. Vase");
                        Console.WriteLine("3. Basket");
                        Console.WriteLine("4. Mixed");
                        Console.Write("Your Choice: ");
                        choice = int.Parse(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
                        Console.WriteLine("You didn't provide an " +
                                          "acceptable number!");
                    }
    
                    if ((choice < 1) || (choice > 4))
                        Console.WriteLine("Invalid Value: Please enter " +
                                          "a value between 1 and 4");
                } while ((choice < 1) || (choice > 4));
    
                switch (choice)
                {
                    case 1:
                        FlowerOrder.Arrangement = FlowerArrangement.Bouquet;
                        break;
                    case 2:
                        FlowerOrder.Arrangement = FlowerArrangement.Vase;
                        break;
                    case 3:
                        FlowerOrder.Arrangement = FlowerArrangement.Basket;
                        break;
                    default:
                        FlowerOrder.Arrangement = FlowerArrangement.Any;
                        break;
                }
            }
    
            public void ProcessOrder()
            {
                GetFlowerType();
                GetFlowerColor();
                GetFlowerArrangement();
    
                try
                {
                    Console.Write("Enter the Unit Price: ");
                    FlowerOrder.UnitPrice = 
                        Math.Abs(decimal.Parse(Console.ReadLine()));
                }
                catch (FormatException)
                {
                    Console.WriteLine("You didn't specify a valid price!");
                }
    
                try
                {
                    Console.Write("Enter Quantity:       ");
                    Quantity = Math.Abs(int.Parse(Console.ReadLine()));
                }
                catch (FormatException)
                {
                    Console.WriteLine("The quantity you entered " +
                                      "is not acceptable!");
                }
            }
    
            public void ShowOrder()
            {
                Console.WriteLine("=======================");
                Console.WriteLine("==-=-=Flower Shop=-=-==");
                Console.WriteLine("-----------------------");
                Console.WriteLine("Flower Type:  {0}", 
                    FlowerOrder.Type);
                Console.WriteLine("Flower Color: {0}", 
                    FlowerOrder.Color);
                Console.WriteLine("Arrangement:  {0}",
                    FlowerOrder.Arrangement);
                Console.WriteLine("Price:        {0:C}",
                    FlowerOrder.UnitPrice);
                Console.WriteLine("Quantity:     {0}", Quantity);
                Console.WriteLine("Total Price:  {0:C}", TotalPrice);
                Console.WriteLine("=======================");
            }
        }
    }
  10. Accédez au fichier Program.cs et changez le comme suit :
     
    using System;
    
    namespace FlowerShop4
    {
        public class Program
        {
            static int Main(string[] args)
            {
                OrderProcessing order = new OrderProcessing();
    
                order.ProcessOrder();
                Console.WriteLine();
    
                order.ShowOrder();
                Console.WriteLine();
                return 0;
            }
        }
    }
  11. Exécutez l'application et l'examiner. Voici un exemple :
     
    Enter the Type of Flower Order
    1. Roses
    2. Lilies
    3. Daisies
    4. Carnations
    5. Live Plant
    6. Mixed
    Your Choice: 3
    Enter the Color
    1. Red
    2. White
    3. Yellow
    4. Pink
    5. Orange
    6. Blue
    7. Lavender
    8. Mixed
    Your Choice: 8
    Enter the Type of Arrangement
    1. Bouquet
    2. Vase
    3. Basket
    4. Mixed
    Your Choice: 1
    Enter the Unit Price: 45.50
    Enter Quantity:       3
    
    =======================
    ==-=-=Flower Shop=-=-==
    -----------------------
    Flower Type:  Daisies
    Flower Color: Mixed
    Arrangement:  Bouquet
    Price:        $45.50
    Quantity:     3
    Total Price:  $136.50
    =======================
    
    Press any key to continue . . .
  12. Fermez la fenêtre DOS

Mettre en application une collection

Après avoir décidé de ce que chaque article de la liste serait fait, vous pouvez créer une classe qui contrôlerait la liste. Cette classe serait responsable de toutes les opérations qui peuvent être effectuées sur la liste. Si la liste sera faite de valeurs primitives, vous pouvez directement créer un champ de type désiré. Voici un exemple :

using System;

public class Numbers
{
    public double Number;
}

public class Program
{
    static int Main(string[] args)
    {
        Numbers nbrs = new Numbers();

        return 0;
    }
}

Si la liste sera faite d'objets, vous pouvez d'abord créer une classe qui indique ces types d'articles et puis déclarez sa variable dans la classe liste. Voici un exemple d'une classe simple qui contient une valeur à double précision :

using System;

public class Number
{
    public double Item;
}

public class Numbers
{
    Number Sample;
}

public class Program
{
    static int Main(string[] args)
    {
        Numbers nbrs = new Numbers();

        return 0;
    }
}

En créant une liste, un des aspects que vous devriez prêter attention à est de maintenir le nombre d'articles dans la liste. Pour ce faire, vous pouvez créer une propriété qui contient le nombre. La valeur de cette propriété augmenterait comme les articles sont ajoutés à la liste et la valeur diminuerait comme les articles sont enlevés de la liste. Voici comment ceci peut être fait :

using System;

public class Number
{
    public double Item;
}

public class Numbers
{
    int size;
    Number Sample;

    public Numbers()
    {
        size = 0;
    }

    public int Count
    {
        get { return size; }
    }
}

public class Program
{
    static int Main(string[] args)
    {
        Numbers nbrs = new Numbers();

        Console.WriteLine("Number of Items: {0}", nbrs.Count);

        return 0;
    }
}

Ceci produirait :

Number of Items: 0
Press any key to continue . . .

Étude pratiqueÉtude pratique : Créer une collection de classe

  1. Créer une nouvelle classe, dans Affichage de classe, droit-cliquez FlowerShop4 - > ajouter - > classe…
  2. Placez le nom FlowerInventory et lcliquez Ajouter
  3. Changez la classe comme suit :
     
    using System;
    
    namespace FlowerShop4
    {
        public abstract class AFlower
        {
            protected int items;
    
            public AFlower()
            {
                items = 0;
            }
    
            public int Count
            {
                get { return items; }
            }
        }
    
        public class FlowerInventory : AFlower
        {
            public Flower Inventory;
    
            public FlowerInventory()
            {
            }
        }
    }
  4. Sauvegardez le fichier

Le début d'une collection

Une bonne collection est une liste qui peut se développer ou se rétrécir comme l'utilisateur souhaite. En créant la liste, vous n'avez pas besoin de prévoir le nombre maximum des articles qui seront ajoutés à la liste. Quand une liste débute, elle est vide ou au moins elle doit être considérer comme telle, avant que n'importe quel article lui soit ajouté. Pour indiquer ceci, vous devriez déclarer une variable membre primaire. Bien que vous puissiez l'appeler n'importe comment, ceci s'appelle habituellement Head. Ce membre peut être rendu privé si vous n'avez pas l'intention de lui accéder en dehors de la classe. Si vous voulez que les clients de la classe lui accèdent, vous pouvez le rendre le public. Voici un exemple :

public class Numbers
{
    int listSize;
    Number Sample;

    public Numbers()
    {
        size = 0;
        Head = null;
    }

    public int Count
    {
        get { return listSize; }
    }

    public Number Head;
}

Enchaînement des articles d'une collection

Nous avons vu qu'en utilisant une rangée, chaque membre peut être accédé en utilisant son index. Si les articles d'une collection ne sont pas indexés, vous devez fournir un mécanisme pour localiser un article. Pour ce faire, vous pouvez utiliser un point de départ qui détermine le début du premier. Puis, pour localiser un article, vous pouvez vérifier si un autre article suit ce point de départ. Si aucun article ne le suit, vous êtes à la fin de la liste ou la liste est vide.

Pour pouvoir scanner une liste d'un article à l'autre, vous pouvez déclarer un champ. Bien que cette variable membre puisse s'appeler quelque chose, pour clarifier, vous devez l'appeler Next. Le champ est de même type que sa classe. Voici un exemple :

public class Number
{
    public double Item;
    public Number Next;
}

Étude pratiqueÉtude pratique : Créer le contrôleur d'une liste

  1. Accédez au dossier Flower.cs et changez le comme suit :
     
    using System;
    
    namespace FlowerShop4
    {
        . . . Pad de Changement
    
        public sealed class Flower
        {
            . . . No Change
    
            public decimal UnitPrice
            {
                get { return pc; }
                set { pc = value; }
            }
    
            public Flower Next;
        }
    }
  2. Accédez au fichier FlowerInventory.cs et le changer comme suit :
     
    using System;
    
    namespace FlowerShop4
    {
        public abstract class AFlower
        {
            protected int items;
    
            public AFlower()
            {
                items = 0;
            }
    
            public int Count
            {
                get { return items; }
            }
        }
    
        public class FlowerInventory : AFlower
        {
            public Flower Head;
            public Flower Inventory;
    
            public FlowerInventory()
            {
                Head = null;
            }
        }
    }
  3. Enregistrer tout
  

Précédent Copyright © 2007, Yevol Suivant