Algo muy interesante que estamos viendo en los últimos conceptos es que podemos definir elementos de un array que sean también estructuras de datos. En general veremos que podemos anidar una estructura de datos dentro de otra estructura de datos.
Hemos dicho que un maps consta de claves y valores para esas claves. Desarrollaremos problemas donde los valores para esas claves sean structs.
Confeccionar un programa que permita cargar un código de producto como clave en un map. Guardar para dicha clave el nombre del producto, su precio y cantidad en stock (definir un struct para estos valores)
Implementar las siguientes actividades:
1) Carga de datos en el maps.
2) Listado completo de productos.
3) Consulta de un producto por su clave, mostrar el nombre, precio y stock.
4) Listado de todos los productos que tengan un stock con valor cero.
package main
import "fmt"
type Producto struct {
descripcion string
precio float64
stock int
}
func cargar(productos map[int]Producto) {
var codigo int
var opcion string
var pro Producto
for {
fmt.Print("Ingrese el codigo del producto:")
fmt.Scan(&codigo)
fmt.Print("Ingrese la descripcion:")
fmt.Scan(&pro.descripcion)
fmt.Print("Ingrese el precio:")
fmt.Scan(&pro.precio)
fmt.Print("Ingrese el stock actual:")
fmt.Scan(&pro.stock)
productos[codigo] = pro
fmt.Print("Desea cargar otro producto[s/n]?")
fmt.Scan(&opcion)
if opcion == "n" {
break;
}
}
}
func imprimir(productos map[int]Producto) {
fmt.Println("Listado completo")
for codigo, producto := range productos {
fmt.Println("Código:", codigo)
fmt.Println("Descripcion:", producto.descripcion)
fmt.Println("Precio:", producto.precio)
fmt.Println("Stock:", producto.stock)
fmt.Println("-----------------------")
}
}
func consulta(productos map[int]Producto) {
var codigo int
fmt.Print("Ingrese el código de artículo a consultar:")
fmt.Scan(&codigo)
producto, existe := productos[codigo]
if existe {
fmt.Println("Descripcion:", producto.descripcion)
fmt.Println("Precio:", producto.precio)
fmt.Println("Stock:", producto.stock)
} else {
fmt.Println("No existe")
}
}
func stockCero(productos map[int]Producto) {
fmt.Println("Listado de articulos con stock en cero:")
for codigo, producto := range productos {
if producto.stock == 0 {
fmt.Println("Código:", codigo, " Datos:", producto)
}
}
}
func main() {
productos := make(map[int]Producto)
cargar(productos)
imprimir(productos)
consulta(productos)
stockCero(productos)
}
En la función main creamos un map cuya clave es un int y su valor es un struct de tipo "Producto:"
func main() {
productos := make(map[int]Producto)
cargar(productos)
imprimir(productos)
consulta(productos)
stockCero(productos)
}
La función de cargar recibe el map. Cargamos por teclado un entero que representa el código de producto y un struct de tipo "Producto". Almacenamos en el map el registro cargado por teclado:
func cargar(productos map[int]Producto) {
var codigo int
var opcion string
var pro Producto
for {
fmt.Print("Ingrese el codigo del producto:")
fmt.Scan(&codigo)
fmt.Print("Ingrese la descripcion:")
fmt.Scan(&pro.descripcion)
fmt.Print("Ingrese el precio:")
fmt.Scan(&pro.precio)
fmt.Print("Ingrese el stock actual:")
fmt.Scan(&pro.stock)
productos[codigo] = pro
fmt.Print("Desea cargar otro producto[s/n]?")
fmt.Scan(&opcion)
if opcion == "n" {
break;
}
}
}
El listado completo lo hacemos mediante un for range:
func imprimir(productos map[int]Producto) {
fmt.Println("Listado completo")
for codigo, producto := range productos {
fmt.Println("Código:", codigo)
fmt.Println("Descripcion:", producto.descripcion)
fmt.Println("Precio:", producto.precio)
fmt.Println("Stock:", producto.stock)
fmt.Println("-----------------------")
}
}
Para la consulta ingresamos un código de producto y si existe pasamos a mostrar todos los datos de ese producto en particular:
func consulta(productos map[int]Producto) {
var codigo int
fmt.Print("Ingrese el código de artículo a consultar:")
fmt.Scan(&codigo)
producto, existe := productos[codigo]
if existe {
fmt.Println("Descripcion:", producto.descripcion)
fmt.Println("Precio:", producto.precio)
fmt.Println("Stock:", producto.stock)
} else {
fmt.Println("No existe")
}
}
El listado de productos con stock en cero es similar al listado completo pero en este caso lo mostramos solo si el stock es cero:
func stockCero(productos map[int]Producto) {
fmt.Println("Listado de articulos con stock en cero:")
for codigo, producto := range productos {
if producto.stock == 0 {
fmt.Println("Código:", codigo, " Datos:", producto)
}
}
}
ejercicio134.go
package main
import "fmt"
type Colegio struct {
nombre string
nromesa int
}
func cargar(personas map[int]Colegio) {
var dni int
var opcion string
var colegio Colegio
for {
fmt.Print("Ingrese el dni del votante:")
fmt.Scan(&dni)
fmt.Print("Ingrese el nombre del colegio donde vota:")
fmt.Scan(&colegio.nombre)
fmt.Print("Ingrese número de mesa:")
fmt.Scan(&colegio.nromesa)
personas[dni] = colegio
fmt.Print("Desea cargar otro votante[s/n]?")
fmt.Scan(&opcion)
if opcion == "n" {
break;
}
}
}
func listar(personas map[int]Colegio) {
fmt.Println("Listado completo de votantes")
for dni, colegio := range personas {
fmt.Println("Dni:", dni)
fmt.Println("Nombre del colegio:", colegio.nombre)
fmt.Println("Número de mesa:", colegio.nromesa)
fmt.Println("-----------------------")
}
}
func consultaMesa(personas map[int]Colegio) {
var dni int
fmt.Print("Ingrese el dni a consultar:")
fmt.Scan(&dni)
colegio, existe := personas[dni]
if existe {
fmt.Println("Nombre del colegio:", colegio.nombre)
fmt.Println("Número de mesa:", colegio.nromesa)
} else {
fmt.Println("No existe")
}
}
func main() {
personas := make(map[int]Colegio)
cargar(personas)
listar(personas)
consultaMesa(personas)
}