-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCarro.cs
More file actions
executable file
·143 lines (125 loc) · 4.91 KB
/
Carro.cs
File metadata and controls
executable file
·143 lines (125 loc) · 4.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CarroCompra
{
class Carro
{
//Instanciamos una lista de la clase Articulo.
List<Articulo> listaArticulos = new List<Articulo>();
/// <summary>
/// Metodo para buscar un articulo en la lista, utilizando
/// Equals redefinido en la clase Articulo.
/// </summary>
/// <param name="articulo"></param>
/// <returns></returns>
public Articulo BuscarArticulo(Articulo articulo)
{
foreach (Articulo articuloEnLista in listaArticulos)
{
if (articuloEnLista.Equals(articulo))
{
return articuloEnLista;
}
}
return null;
}
/// <summary>
/// Metodo para eliminar un articulo de la lista.
/// </summary>
/// <param name="articulo"></param>
public void InsertarArticulo(Articulo articulo)
{
if (listaArticulos.Contains(articulo))
{
Articulo articuloExistente = BuscarArticulo(articulo);
articuloExistente.Unidades = articuloExistente.Unidades + 1;
}
else
{
listaArticulos.Add(articulo);
}
}
/// <summary>
/// Metodo para eliminar un articulo de la lista.
/// </summary>
/// <param name="articulo"></param>
public void BorrarArticulo(Articulo articulo)
{
if (listaArticulos.Contains(articulo))
{
Articulo articuloExistente = BuscarArticulo(articulo);
articuloExistente.Unidades = articuloExistente.Unidades - 1;
if (articuloExistente.Unidades == 0)
{
listaArticulos.Remove(articuloExistente);
}
}
}
/// <summary>
/// Lista articulos carro sin ordenacion.
/// </summary>
public void MostrarListaCarro()
{
float precioTotal = 0;
foreach (Articulo articuloEnLista in listaArticulos)
{
precioTotal += articuloEnLista.Precio;
Console.WriteLine(articuloEnLista);
}
Console.WriteLine(" Total: " + precioTotal);
}
/// <summary>
/// Lista articulos carro con ordenacion por precio, con el
/// CompareTo redefinido en la clase Articulo.
/// </summary>
public void MostrarListaCarroOrdenadoPorPrecio()
{
listaArticulos.Sort();
float precioTotal = 0;
foreach (Articulo articuloEnLista in listaArticulos)
{
precioTotal += articuloEnLista.Precio;
Console.WriteLine(articuloEnLista);
}
Console.WriteLine(" Total: " + precioTotal);
}
/// <summary>
/// Lista articulos carro con ordenacion por nombre, con el metodo Comparison
/// definido aqui con delegate, y por precio con el CompareTo
/// redefinido en la clase Articulo.
/// </summary>
public void MostrarListaCarroOrdenadoPorNombrePrecio()
{
//Ordenamos directamente con el metodo delegado.
//listaArticulos.Sort(delegate (Articulo articulo1, Articulo articulo2) { return articulo1.NombreArticulo.CompareTo(articulo2.NombreArticulo); });
//Ordenamos pasandole a Sort el metodo que contiene la comparacion.
//listaArticulos.Sort(ComparaNombreArticulo);
//Otra forma de ordenar utilizando Comparison y pasandole el metodo que contiene la comparacion.
Comparison<Articulo> comparacionNombreArticulo = new Comparison<Articulo>(ComparaNombreArticulo);
listaArticulos.Sort(comparacionNombreArticulo);
float precioTotal = 0;
foreach (Articulo articuloEnLista in listaArticulos)
{
precioTotal += articuloEnLista.Precio;
Console.WriteLine(articuloEnLista);
}
Console.WriteLine(" Total: " + precioTotal);
}
/// <summary>
/// Metodo que compara nombres de articulos y posteriormente utilizar
/// este metodo en Sort con la sobrecarga Sort(Comparison<T>).
/// </summary>
/// <param name="articulo1"></param>
/// <param name="articulo2"></param>
/// <returns></returns>
private static int ComparaNombreArticulo(Articulo articulo1, Articulo articulo2)
{
return articulo1.NombreArticulo.CompareTo(articulo2.NombreArticulo);
}
}
}