Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;codigo: simbolo
- ;nombre: simbolo
- ;disponibilidad : estructura: precio: numero
- ;disponibles: numero
- (define-struct producto (codigo nombre disponibilidad))
- (define-struct disponibilidad (precio unidades))
- (define lista1 (read-words/line "data/listaproductos.txt"))
- (define-struct nueva (nombre precio cantidad))
- (define listaproductos (list (make-producto 'a 'leche (make-disponibilidad 2500 50) )
- (make-producto 'b 'gaseosa (make-disponibilidad 1500 30) )
- (make-producto 'c 'gomitas (make-disponibilidad 2700 20) )
- (make-producto 'd 'helado (make-disponibilidad 5000 40) )
- )
- )
- (define listaproductos2 (list (make-producto 'e 'huevos (make-disponibilidad 9000 40) )
- (make-producto 'f 'frutiño (make-disponibilidad 500 20) )
- (make-producto 'g 'chocolate (make-disponibilidad 3000 35) )
- (make-producto 'h 'chocorramo (make-disponibilidad 50000 10) )
- )
- )
- (define lista3 (list
- (make-producto "i" "vino" (make-disponibilidad 70000 15))
- (make-producto "j" "naranja" (make-disponibilidad 6000 60))
- (make-producto "k" "Jugos" (make-disponibilidad 2000 20))
- (make-producto "l" "tomate" (make-disponibilidad 300 100))
- (make-producto "m" "escoba" (make-disponibilidad 12000 50))
- (make-producto "n" "pan" (make-disponibilidad 1000 500))
- (make-producto "o" "vodka" (make-disponibilidad 34000 20))
- (make-producto "p" "SalsaTomate" (make-disponibilidad 3000 20))
- (make-producto "q" "RedBull" (make-disponibilidad 6000 80))
- (make-producto "r" "Monster" (make-disponibilidad 8000 40))
- (make-producto "s" "limon" (make-disponibilidad 2000 90))
- (make-producto "t" "Vive100" (make-disponibilidad 1500 15))
- (make-producto "u" "yogurt" (make-disponibilidad 6000 30))
- (make-producto "v" "cerveza" (make-disponibilidad 2500 100))
- (make-producto "w" "avena" (make-disponibilidad 900 200))
- (make-producto "x" "queso" (make-disponibilidad 5000 22))
- (make-producto "y" "salchichon" (make-disponibilidad 9000 9))
- (make-producto "z" "sandia" (make-disponibilidad 5000 14))))
- (define lsst3 (list
- (list "i" "vino" "70000" "15")
- (list "j" "naranja" "6000" "60")
- (list "k" "Jugos" "2000" "20")
- (list "l" "tomate" "300" "100")
- (list "m" "escoba" "12000" "50")
- (list "n" "pan" "1000" "500")
- (list "o" "vodka" "34000" "20")
- (list "p" "SalsaTomate" "3000" "20")
- (list "q" "RedBull" "6000" "80")
- (list "r" "Monster" "8000" "40")
- (list "s" "limon" "2000" "90")
- (list "t" "Vive100" "1500" "15")
- (list "u" "yogurt" "6000" "30")
- (list "v" "cerveza" "2500" "100")
- (list "w" "avena" "900" "200")
- (list "x" "queso" "5000" "22")
- (list "y" "salchichon" "9000" "9")
- (list "z" "sandia" "5000" "14")))
- ;Autores: Diego Fernando Llanos Mondragón, 202060029. Juan Felipe Arango Guzmán, 202060066. Juan Sebastian Grajales Samudio, 202059897.
- ;Fecha: work in progress
- ;1
- ;contrato: consultar: lista de productos, simbolo -> estructura nueva
- ;propósito: retornar la información de un producto según el código ingresado a buscar, junto con su precio y cantidad
- ;Ejemplos:
- ;(consultar listaproductos 'a) (make-nueva 'leche 2500 50)
- ;(consultar listaproductos2 'h) (make-nueva 'chocorramo 50000 10)
- ;(consultar listaproductos 'd) (make-nueva 'helado 5000 40)
- ;(consultar listaproductos2 'f) (make-nueva 'frutiño 500 20)
- ;Definición:
- (define (consultar lista codigo)
- (cond
- [(not (cons? lista)) (error "El primer dato debe ser una lista de productos")]
- [(not (symbol? codigo)) (error "El segundo dato debe ser un simbolo")]
- [(empty? lista) (error "La lista esta vacia")]
- [(equal? codigo (producto-codigo (first lista)) )
- (make-nueva (producto-nombre (first lista))
- (disponibilidad-precio (producto-disponibilidad (first lista)))
- (disponibilidad-unidades (producto-disponibilidad (first lista)))
- )]
- [else (consultar (rest lista) codigo)]
- )
- )
- ;Pruebas:
- (check-expect (consultar listaproductos 'a) (make-nueva 'leche 2500 50))
- (check-expect (consultar listaproductos2 'h) (make-nueva 'chocorramo 50000 10))
- (check-expect (consultar listaproductos 'd) (make-nueva 'helado 5000 40))
- (check-expect (consultar listaproductos2 'f) (make-nueva 'frutiño 500 20))
- ;2
- ;Contrato: cargarProductos: lista de lista de productos -> lista de productos
- ;Proposito: Cargar la informacion de un archivo de texto convirtiendola en una lista de estructuras
- ;Ejemplos:
- ; (cargarProducto lista1)
- ; (list
- ; (make-producto "i" "vino" (make-disponibilidad 70000 15))
- ; (make-producto "j" "naranja" (make-disponibilidad 6000 60))
- ; (make-producto "k" "Jugos" (make-disponibilidad 2000 20))
- ; (make-producto "l" "tomate" (make-disponibilidad 300 100))
- ; (make-producto "m" "escoba" (make-disponibilidad 12000 50))
- ; (make-producto "n" "pan" (make-disponibilidad 1000 500))
- ; (make-producto "o" "vodka" (make-disponibilidad 34000 20))
- ; (make-producto "p" "SalsaTomate" (make-disponibilidad 3000 20))
- ; (make-producto "q" "RedBull" (make-disponibilidad 6000 80))
- ; (make-producto "r" "Monster" (make-disponibilidad 8000 40))
- ; (make-producto "s" "limon" (make-disponibilidad 2000 90))
- ; (make-producto "t" "Vive100" (make-disponibilidad 1500 15))
- ; (make-producto "u" "yogurt" (make-disponibilidad 6000 30))
- ; (make-producto "v" "cerveza" (make-disponibilidad 2500 100))
- ; (make-producto "w" "avena" (make-disponibilidad 900 200))
- ; (make-producto "x" "queso" (make-disponibilidad 5000 22))
- ; (make-producto "y" "salchichon" (make-disponibilidad 9000 9))
- ; (make-producto "z" "sandia" (make-disponibilidad 5000 14)))
- ; (cargarProducto
- ; (list
- ; (list "a" "leche" "2500" "20")
- ; (list "b" "cerveza" "2500" "30")
- ; (list "c" "jabon" "2000" "15")))
- ; (list
- ; (make-producto "a"
- ; "leche"
- ; (make-disponibilidad 2500
- ; 20))
- ; (make-producto "b"
- ; "cerveza"
- ; (make-disponibilidad 2500
- ; 30))
- ; (make-producto "c"
- ; "jabon"
- ; (make-disponibilidad 2000
- ; 15))
- ;Definicion:
- (define (cargarProducto lsst)
- (cond
- [(empty? lsst) empty]
- [(cons? (first lsst))
- (cons (make-producto (first (first lsst))
- (first (rest (first lsst)))
- (make-disponibilidad (string->number(first (rest (rest (first lsst)))))
- (string->number(first (rest (rest (rest (first lsst))))))
- )
- ) (cargarProducto (rest lsst)))]
- [else (cargarProducto (rest lsst))]
- )
- )
- ;Pruebas:
- (check-expect (cargarProducto lsst3) (list
- (make-producto "i" "vino" (make-disponibilidad 70000 15))
- (make-producto "j" "naranja" (make-disponibilidad 6000 60))
- (make-producto "k" "Jugos" (make-disponibilidad 2000 20))
- (make-producto "l" "tomate" (make-disponibilidad 300 100))
- (make-producto "m" "escoba" (make-disponibilidad 12000 50))
- (make-producto "n" "pan" (make-disponibilidad 1000 500))
- (make-producto "o" "vodka" (make-disponibilidad 34000 20))
- (make-producto "p" "SalsaTomate" (make-disponibilidad 3000 20))
- (make-producto "q" "RedBull" (make-disponibilidad 6000 80))
- (make-producto "r" "Monster" (make-disponibilidad 8000 40))
- (make-producto "s" "limon" (make-disponibilidad 2000 90))
- (make-producto "t" "Vive100" (make-disponibilidad 1500 15))
- (make-producto "u" "yogurt" (make-disponibilidad 6000 30))
- (make-producto "v" "cerveza" (make-disponibilidad 2500 100))
- (make-producto "w" "avena" (make-disponibilidad 900 200))
- (make-producto "x" "queso" (make-disponibilidad 5000 22))
- (make-producto "y" "salchichon" (make-disponibilidad 9000 9))
- (make-producto "z" "sandia" (make-disponibilidad 5000 14))))
- (check-expect (cargarProducto (list
- (list "a" "leche" "2500" "20")
- (list "b" "cerveza" "2500" "30")
- (list "c" "jabon" "2000" "15")))
- (list
- (make-producto "a"
- "leche"
- (make-disponibilidad 2500
- 20))
- (make-producto "b"
- "cerveza"
- (make-disponibilidad 2500
- 30))
- (make-producto "c"
- "jabon"
- (make-disponibilidad 2000
- 15))
- )
- )
- ;3
- ;Contrato: venderProducto: listaproductos, producto-> listaproductos actulizada
- ;Proposito: Actualiza la lista de productos restando de la estructura la cantidad a vender y si se venden todos los producto lo elimina de la lista
- ;Ejemplos:
- ; ej1 (venderProducto (list(make-producto "ab" "cola" (make-disponibilidad 5000 20))
- ; (make-producto "ac" "pola" (make-disponibilidad 7000 30))
- ; (make-producto "az" "hola" (make-disponibilidad 70000 60))) (make-producto "az" "hola" (make-disponibilidad 70000 30)))
- ; (list(make-producto "ab" "cola" (make-disponibilidad 5000 20))
- ; (make-producto "ac" "pola" (make-disponibilidad 7000 30))
- ; (make-producto "az" "hola" (make-disponibilidad 70000 30)))
- ; ej2 (venderProducto lista3 (make-producto "i" "vino" (make-disponibilidad 70000 12)))
- ; (list (make-producto "i" "vino" (make-disponibilidad 70000 3))
- ; (make-producto "j" "naranja" (make-disponibilidad 6000 60))
- ; (make-producto "k" "Jugos" (make-disponibilidad 2000 20))
- ; (make-producto "l" "tomate" (make-disponibilidad 300 100))
- ; (make-producto "m" "escoba" (make-disponibilidad 12000 50))
- ; (make-producto "n" "pan" (make-disponibilidad 1000 500))
- ; (make-producto "o" "vodka" (make-disponibilidad 34000 20))
- ; (make-producto "p" "SalsaTomate" (make-disponibilidad 3000 20))
- ; (make-producto "q" "RedBull" (make-disponibilidad 6000 80))
- ; (make-producto "r" "Monster" (make-disponibilidad 8000 40))
- ; (make-producto "s" "limon" (make-disponibilidad 2000 90))
- ; (make-producto "t" "Vive100" (make-disponibilidad 1500 15))
- ; (make-producto "u" "yogurt" (make-disponibilidad 6000 30))
- ; (make-producto "v" "cerveza" (make-disponibilidad 2500 100))
- ; (make-producto "w" "avena" (make-disponibilidad 900 200))
- ; (make-producto "x" "queso" (make-disponibilidad 5000 22))
- ; (make-producto "y" "salchichon" (make-disponibilidad 9000 9))
- ; (make-producto "z" "sandia" (make-disponibilidad 5000 14)))
- ; ej3 (venderProducto lista3 (make-producto "m" "escoba" (make-disponibilidad 12000 50)))
- ; (list(make-producto "i" "vino" (make-disponibilidad 70000 15))
- ; (make-producto "j" "naranja" (make-disponibilidad 6000 60))
- ; (make-producto "k" "Jugos" (make-disponibilidad 2000 20))
- ; (make-producto "l" "tomate" (make-disponibilidad 300 100))
- ; (make-producto "n" "pan" (make-disponibilidad 1000 500))
- ; (make-producto "o" "vodka" (make-disponibilidad 34000 20))
- ; (make-producto "p" "SalsaTomate" (make-disponibilidad 3000 20))
- ; (make-producto "q" "RedBull" (make-disponibilidad 6000 80))
- ; (make-producto "r" "Monster" (make-disponibilidad 8000 40))
- ; (make-producto "s" "limon" (make-disponibilidad 2000 90))
- ; (make-producto "t" "Vive100" (make-disponibilidad 1500 15))
- ; (make-producto "u" "yogurt" (make-disponibilidad 6000 30))
- ; (make-producto "v" "cerveza" (make-disponibilidad 2500 100))
- ; (make-producto "w" "avena" (make-disponibilidad 900 200))
- ; (make-producto "x" "queso" (make-disponibilidad 5000 22))
- ; (make-producto "y" "salchichon" (make-disponibilidad 9000 9))
- ; (make-producto "z" "sandia" (make-disponibilidad 5000 14)))
- ;Definicion:
- (define (venderProducto lst producto)
- (cond
- [(empty? lst) empty]
- [(equal? (producto-codigo (first lst)) (producto-codigo producto))
- (cond
- [(<= (- (disponibilidad-unidades (producto-disponibilidad (first lst)))
- (disponibilidad-unidades (producto-disponibilidad producto))) 0)
- (rest lst)]
- [else (cons (make-producto
- (producto-codigo (first lst))
- (producto-nombre (first lst))
- (make-disponibilidad
- (disponibilidad-precio (producto-disponibilidad (first lst)))
- (- (disponibilidad-unidades (producto-disponibilidad (first lst)))
- (disponibilidad-unidades (producto-disponibilidad producto))) ))
- (venderProducto (rest lst) producto))]
- )
- ]
- [else (cons (first lst) (venderProducto (rest lst)producto) )]
- )
- )
- ;Pruebas:
- (check-expect (venderProducto (list(make-producto "ab" "cola" (make-disponibilidad 5000 20))
- (make-producto "ac" "pola" (make-disponibilidad 7000 30))
- (make-producto "az" "hola" (make-disponibilidad 70000 60))) (make-producto "az" "hola" (make-disponibilidad 70000 30)))
- (list(make-producto "ab" "cola" (make-disponibilidad 5000 20))
- (make-producto "ac" "pola" (make-disponibilidad 7000 30))
- (make-producto "az" "hola" (make-disponibilidad 70000 30))))
- (check-expect (venderProducto lista3 (make-producto "i" "vino" (make-disponibilidad 70000 12)))
- (list (make-producto "i" "vino" (make-disponibilidad 70000 3))
- (make-producto "j" "naranja" (make-disponibilidad 6000 60))
- (make-producto "k" "Jugos" (make-disponibilidad 2000 20))
- (make-producto "l" "tomate" (make-disponibilidad 300 100))
- (make-producto "m" "escoba" (make-disponibilidad 12000 50))
- (make-producto "n" "pan" (make-disponibilidad 1000 500))
- (make-producto "o" "vodka" (make-disponibilidad 34000 20))
- (make-producto "p" "SalsaTomate" (make-disponibilidad 3000 20))
- (make-producto "q" "RedBull" (make-disponibilidad 6000 80))
- (make-producto "r" "Monster" (make-disponibilidad 8000 40))
- (make-producto "s" "limon" (make-disponibilidad 2000 90))
- (make-producto "t" "Vive100" (make-disponibilidad 1500 15))
- (make-producto "u" "yogurt" (make-disponibilidad 6000 30))
- (make-producto "v" "cerveza" (make-disponibilidad 2500 100))
- (make-producto "w" "avena" (make-disponibilidad 900 200))
- (make-producto "x" "queso" (make-disponibilidad 5000 22))
- (make-producto "y" "salchichon" (make-disponibilidad 9000 9))
- (make-producto "z" "sandia" (make-disponibilidad 5000 14))))
- (check-expect (venderProducto lista3 (make-producto "m" "escoba" (make-disponibilidad 12000 50)))
- (list(make-producto "i" "vino" (make-disponibilidad 70000 15))
- (make-producto "j" "naranja" (make-disponibilidad 6000 60))
- (make-producto "k" "Jugos" (make-disponibilidad 2000 20))
- (make-producto "l" "tomate" (make-disponibilidad 300 100))
- (make-producto "n" "pan" (make-disponibilidad 1000 500))
- (make-producto "o" "vodka" (make-disponibilidad 34000 20))
- (make-producto "p" "SalsaTomate" (make-disponibilidad 3000 20))
- (make-producto "q" "RedBull" (make-disponibilidad 6000 80))
- (make-producto "r" "Monster" (make-disponibilidad 8000 40))
- (make-producto "s" "limon" (make-disponibilidad 2000 90))
- (make-producto "t" "Vive100" (make-disponibilidad 1500 15))
- (make-producto "u" "yogurt" (make-disponibilidad 6000 30))
- (make-producto "v" "cerveza" (make-disponibilidad 2500 100))
- (make-producto "w" "avena" (make-disponibilidad 900 200))
- (make-producto "x" "queso" (make-disponibilidad 5000 22))
- (make-producto "y" "salchichon" (make-disponibilidad 9000 9))
- (make-producto "z" "sandia" (make-disponibilidad 5000 14))))
- ;Contrato: lista-to-text: listaproductos actualizada -> string
- ;Definiciones:
- (define (lst-to-text lst)
- (cond
- [(empty? lst) " "]
- [else (string-append
- (producto-codigo (first lst))
- " "
- (producto-nombre (first lst))
- " "
- (number->string (disponibilidad-precio (producto-disponibilidad (first lst))))
- " "
- (number->string (disponibilidad-unidades (producto-disponibilidad (first lst))))
- "\n"
- (lst-to-text (rest lst))
- )]
- ))
- ;Pruebas:
- (check-expect (lst-to-text lista3) "i vino 70000 15\nj naranja 6000 60\nk Jugos 2000 20\nl tomate 300 100\nm escoba 12000 50\nn pan 1000 500\no vodka 34000 20\np SalsaTomate 3000 20\nq RedBull 6000 80\nr Monster 8000 40\ns limon 2000 90\nt Vive100 1500 15\nu yogurt 6000 30\nv cerveza 2500 100\nw avena 900 200\nx queso 5000 22\ny salchichon 9000 9\nz sandia 5000 14\n ")
- ;Contrato: almacenar: string -> archivo.txt
- ;Definiciones:
- (define (almacenar lst producto)
- (write-file "listaproductosActualizada.txt" (lst-to-text (venderProducto lst producto)) )
- )
- (almacenar lista3 (make-producto "n" "pan" (make-disponibilidad 1000 50)))
Add Comment
Please, Sign In to add comment