Advertisement
idsystems

PseIntRebel_Actividad158_Completo

Nov 21st, 2024
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.07 KB | None | 0 0
  1. Proceso Algoritmo158
  2.     Definir lContinuar Como Logico
  3.     Definir opc Como Entero
  4.     Definir aID, aMarca Como Cadena
  5.     Definir cArchivo, cRuta, cLinea Como Cadena
  6.     Definir i, aMax Como Entero
  7.     Definir lOp Como Logico
  8.    
  9.     //Archivo demo;
  10.     Archivo nArchivo;
  11.     //Ruta en donde se encuentra el archivo. Puede ser donde se ejecuta el programa
  12.     cRuta = "C:\PruebasArchivos\"    
  13.     cArchivo = cRuta + "autos2.txt" //Nombre del archivo a usar.
  14.    
  15.     //Nota: ES IMPORTANTE QUE EL ARCHIVO ESTE CREADO ANTERIORMENTE, YA QUE ESTE PROGRAMA
  16.     //NO CREA EL ARCHIVO DESDE EL INICIO, SINO QUE SUPONE QUE YA EXISTE. EN CASO CONTRARIO
  17.     //MARCARA ERROR. NO IMPORTA QUE ESTE VACIO, PERO DEBE EXISTIR Y ESTAR EN LA CARPETA DONDE
  18.     //ESTAMOS INDICANDO. EL ARCHIVO SE PUEDE CREAR CON EL BLOC DE NOTAS PORQUE ES TEXTO
  19.    
  20.     lContinuar = Verdadero
  21.     aMAX = 10    //Cantidad Maxima de Registros. Ajustar.
  22.    
  23.     //En lugar de un modulo para abrir el archivo y cargar los datos, vamos a ponerlo
  24.     //directamente en el programa principal
  25.     //Esto lo hacemos con una matriz, tomando el valor de aMAX (no registros) y 6 columnas (campos)
  26.     //Ajustar de ser necesario a las filas y columnas que deseamos.
  27.    
  28.     Dimension aRegistro[aMax,6]
  29.    
  30.     //Abrimos el archivo que hemos indicado en las constantes.
  31.     //Consideraciones:
  32.     //1. La carpeta debe existir en la computadora
  33.     //2. El archivo debe existir en dicha carpeta. Este se puede crear con el bloc de notas. Aunque este vacio
  34.     //   De preferencia llenar con al menos 2 registro o filas
  35.     //3. El final de cada linea debe ir con una coma,
  36.    
  37.     nArchivo = AbrirArchivo( cArchivo )
  38.     i = 1
  39.     Escribir "Leyendo del archivo...",i
  40.    
  41.     //Haremos un ciclo mientras no sea fin del archivo (no sabemos cantidad de registros)
  42.     Repetir
  43.         cLinea = LeerArchivo( nArchivo)     //Se extrae toda la linea del registro
  44.        
  45.         //Ahora vamos a extraer los campos separados por comas
  46.         nCampo = 1
  47.         nLetra = 1
  48.         nPos = 1
  49.         cCampo = ""
  50.        
  51.         Para j = 1 hasta longitud(cLinea)
  52.             cCampo = cCampo + subcadena( cLinea, nPos, nLetra )
  53.            
  54.             Si subcadena( cLinea, nPos, nLetra) = "," entonces
  55.                 cCampo = subcadena( cCampo, 1, longitud(cCampo)-1 )
  56.                
  57.                 aRegistro[i,nCampo] = cCampo   //subcadena( cLinea, j,1 )
  58.                 nCampo = nCampo + 1
  59.                 nPos = nLetra
  60.                 cCampo = ""
  61.             //Sino
  62.             //  cCampo = cCampo + subcadena( cLinea, nPos, nLetra )
  63.             FinSi
  64.             nLetra = nLetra + 1
  65.             nPos = nPos + 1
  66.            
  67.         FinPara
  68.        
  69.         //****************************************************
  70.         //El siguiente es un bloque de verificacion para saber
  71.         //si los datos del archivo se estan almacenando en la memoria
  72.         //interna (arreglo).
  73.         //
  74.         //Escribir "Registro No. ", i
  75.         //Escribir "ID: " + aRegistro[i,1]
  76.         //Escribir "Marca: " + aRegistro[i,2]
  77.         //Escribir "Linea: " + aRegistro[i,3]
  78.         //Escribir "Color: " + aRegistro[i,4]
  79.         //Escribir "Cantidad: " + aRegistro[i,5]
  80.         //Escribir "Precio: " + aRegistro[i,6]
  81.         //Escribir "======================="
  82.         //
  83.         //*****************************************************
  84.         i = i + 1
  85.        
  86.     Hasta Que FinDeArchivo(nArchivo)
  87.    
  88.     lOp = CerrarArchivo( nArchivo )
  89.    
  90.     //Ahora todos los registros del archivo estan en memoria.
  91.     //Comienza el ciclo principal del proggrama
  92.  
  93.     Repetir
  94.         CargarMenu()            //Carga las opciones del menu principal
  95.         Leer opc
  96.         Segun opc Hacer
  97.             1:
  98.                 IngresarInventario()       
  99.                 //ActualizarArchivo()
  100.                 //Esperar Tecla
  101.             2:
  102.                 Escribir "========= VENDER VEHICULO ========="
  103.                 VenderVehiculo(aRegistro)
  104.                 ActualizarArchivo()
  105.                 Esperar Tecla
  106.             3:
  107.                 CambiarValorVehiculo(aRegistro)       //Cambia el valor en memoria interna
  108.                 ActualizarArchivo()                   //Cambia el valor en memoria externa
  109.                 Esperar Tecla
  110.             4:
  111.                 MostrarInventario(aRegistro)
  112.                 Escribir "<<<<< Presiona una tecla para continuar >>>>>"
  113.                 Esperar Tecla
  114.             5:
  115.                 lContinuar = Falso
  116.             De otro modo:
  117.                 Escribir "Por favor ingrese una opcion entre 1 y 5"
  118.                 Esperar Tecla
  119.         FinSegun
  120.     Hasta que lContinuar = Falso
  121.     Escribir "Gracias por usar nuestro programa"
  122. FinProceso
  123.  
  124. //Procedimiento para colocar un titulo en la parte superior dependiendo de cada opcion
  125. SubProceso CrearTitulo( vTitulo)
  126.     Borrar Pantalla
  127.     Escribir "========== " + vTitulo + " ============"
  128.     Escribir " "
  129. FinSubProceso
  130.  
  131. //Procedimiento para visualizar el menu principal
  132. SubProceso CargarMenu()
  133.     CrearTitulo( "MENU PRINCIPAL")
  134.     Escribir "1. Ingresar Producto "
  135.     Escribir "2. Vender Producto"
  136.     Escribir "3. Cambiar Valor Unitario"
  137.     Escribir "4. Mostrar Inventario Actual"
  138.     Escribir "5. Salir"
  139.     Escribir ""
  140.     Escribir sin saltar "Que opcion deseas realizar?: "
  141. FinSubProceso
  142.  
  143. SubProceso IngresarInventario()
  144.     Definir vID, vMarca, vLinea, vColor, vCantidad, vPrecio Como Cadena
  145.    
  146.     CrearTitulo( "INGRESAR INVENTARIO")
  147.     Escribir "Este modulo es para registrar nuevos vehiculos"
  148.    
  149.     Escribir sin saltar "ID..........: "
  150.     Leer vID
  151.     Escribir sin saltar "Marca.......: "
  152.     Leer vMarca
  153.     Escribir sin saltar "Linea.......: "
  154.     Leer vLinea
  155.     Escribir sin saltar "Color.......: "
  156.     Leer vColor
  157.     Escribir sin saltar "Cantidad....: "
  158.     Leer vCantidad
  159.     Escribir sin saltar "Precio......: "
  160.     Leer vPrecio
  161.     Escribir "=================================="
  162.    
  163.     //Manda llamar al modulo de Grabar en el disco los datos
  164.     cRuta = "C:\PruebasArchivos\"
  165.     cArchivo = cRuta + "autos2.txt"
  166.    
  167.     nArchivo = AbrirArchivo( cArchivo )
  168.    
  169.     Escribir "Guardando datos en el archivo..."
  170.     //Construir una sola linea con la separacion de comas para que se identifique.
  171.     cRegistro = vID +"," + vMarca + "," + vLinea + "," + vColor + "," + vCantidad + "," + vPrecio + ","
  172.    
  173.     //Antes de grabar es necesario posicionarse al final del archivo porque si no grabara en la primera linea
  174.     //y va a borrar los datos
  175.    
  176.     //Escribir "Vamos a evaluar si es fin del archivo"
  177.     si FindeArchivo( nArchivo) Entonces
  178.         //Escribir "Encontro que es final del archivo, se greaba"
  179.         nRecord = EscribirArchivo( nArchivo, cRegistro)
  180.     Sino
  181.         //Escribir "No hay fin de archivo, hay que avanzar lineas hasta el final"
  182.         repetir
  183.             vLinea = LeerArchivo(nArchivo)
  184.             //Escribir "linea: " + vLinea
  185.         Hasta Que FinDeArchivo( nArchivo )
  186.         //Escribir "Alcanzo el EOF"
  187.         si FindeArchivo( nArchivo) entonces
  188.             nRecord = EscribirArchivo( nArchivo, cRegistro)
  189.         fin si
  190.     FinSi
  191.    
  192.     //nRecord = EscribirArchivo( nArchivo, cRegistro)   //Graba el registro completo
  193.    
  194.     vOp = CerrarArchivo( nArchivo )
  195.    
  196. FinSubProceso
  197.  
  198. SubProceso ActualizarArchivo()
  199.     //Este modulo sirve para actualizar el archivo de datos externo
  200.     //con los posibles valores que puedan haber cambiando en memoria interna
  201.     //Puesto que no es posible trabajar de forma directa con el archivo externo buscando
  202.     //el dato correspondiente, procederemos a BORRAR TODO EL ARCHIVO
  203.     //y lo volvemos a GRABAR con los datos que tenemos en memoria
  204.     //Es importante asegurarse de que esto es lo que deseamos.
  205.     //Debe hacerlo de forma transparente al usuario y ejecutarlo sin preguntarle nada
  206.    
  207.     //Puesto que ya viste como se graban los datos en REBEL
  208.     //puedes hacer este modulo para grabar TODA la matriz en el archivo
  209.     //En teoria deberias borrar los datos del archivo anterior
  210.     //y sustituirlos con los nuevos datos en memoria
  211.    
  212.     //¿Si puedes verdad?
  213.    
  214.    
  215. FinSubProceso
  216.  
  217. Subproceso VenderVehiculo(aRegistro por referencia)
  218.     //En este modulo vamos a VENDER un vehiculo, rebajando la CANTIDAD
  219.     //del campo asociado. Pedimos el ID del vehiculo, muestra los datos para confirmar
  220.     //e indicamos cuantos vehiculos se vendieron
  221.     //Se descuenta la cantidad y se actualiza en memoria interna
  222.     //Mas adelante se debera registrar esta operacion en el archivo exerno
  223.    
  224.     //Este modulo esta vacio a proposito para que lo elabores.
  225.     //Practicamente es igual al modulo de CambiarPrecio del vehiculo solo que hay
  226.     //que restar el valor deseado en el arreglo y columna correcta.
  227.     //
  228.     //¿Si puedes verdad?
  229.    
  230. FinSubProceso
  231.  
  232. Subproceso CambiarValorVehiculo(aRegistro por referencia )
  233.     //En este modulo vamos a cambiar el valor del precio del vehiculo
  234.     //Esto lo haremos identificando el auto por su ID, buscamos y
  235.     //pedimos el nuevo precio. Todo queda registrado en memoria interna
  236.     //mas adelante debemos GRABAR de forma permanente este cambio en el
  237.     //archivo externo
  238.    
  239.     Definir posicion Como Entero
  240.     Definir nPrecio Como Real
  241.     Definir encontrado, bandera Como Logico
  242.     posicion = 1
  243.     encontrado = falso
  244.     bandera = Falso
  245.     CrearTitulo( "CAMBIAR VALOR VEHICULO")
  246.     Escribir "¿Cual es el ID del vehiculo a cambiar el precio? "
  247.     Leer cID
  248.    
  249.     //Procedemos a buscar el ID en el arreglo
  250.     Repetir
  251.         si longitud(aRegistro[posicion,1]) = 0 Entonces
  252.             //Si encuentra una posicion vacia debemos terminar el ciclo tambien
  253.             bandera = verdadero
  254.             encontrado = Falso
  255.             Escribir "No se ha encontrado ninguna coincidencia"
  256.         FinSi
  257.         si aRegistro[posicion,1] = cID entonces
  258.             Escribir "Marca: ", aRegistro[posicion,2]
  259.             Escribir "Linea: ", aRegistro[posicion,3]
  260.             Escribir "Color: ", aRegistro[posicion,4]
  261.             Escribir "Cantidad: ", aRegistro[posicion,5]
  262.             Escribir "Precio: ", aRegistro[posicion,6]
  263.             Escribir " "
  264.             Escribir "¿Cual es el nuevo precio?"
  265.             Leer nPrecio
  266.             aRegistro[posicion,6] = ConvertirATexto(nPrecio)    //Convertir a texto el numero
  267.             Escribir "Precio actualizado!"
  268.             bandera = verdadero
  269.             encontrado = Verdadero
  270.         Sino
  271.             posicion = posicion + 1   //No lo encontro buscara en el siguiente
  272.         FinSi
  273.     Hasta Que bandera = verdadero
  274.    
  275. FinSubProceso
  276.    
  277. Subproceso MostrarInventario(aRegistro por referencia)
  278.     //Listar los productos o articulos que estan en inventario
  279.     //Los tomara de la memoria intera (arreglo) en lugar de tomarlo desde el archivo
  280.     //de manera directa
  281.    
  282.     //Definimos unas variables locales que necesitaremos
  283.     //la variable aRegistro debemos pasarla por referencia para que no pierda
  284.     //los valores del programa principal
  285.     Definir fila, cTam, cEspacios Como Entero
  286.     Definir cMarca Como Cadena
  287.     Definir bandera Como logico
  288.     fila = 1
  289.     bandera = falso
  290.     cTam = 15
  291.    
  292.     //Poner el encabezado del reporte
  293.     CrearTitulo( "MOSTRAR INVENTARIO")
  294.     Escribir " "
  295.     Escribir "ID     Marca            Linea     Color     Cantidad     Precio "
  296.     Escribir "================================================================="
  297.    
  298.     //Construir un ciclo que se repetira hasta que encuentre un valor vacio
  299.     Repetir
  300.         Si longitud(aRegistro[fila,1]) = 0 entonces
  301.             //No tiene caracteres y debemos terminar
  302.             bandera = verdadero
  303.         FinSi
  304.         cEspacios = cTam - longitud(aRegistro[fila,2])   //Calcular cuantos espacios faltan para el fijo de 15
  305.        
  306.         //Hacer un ciclo para agregar la cantidad de espacios al campo y quede alineado
  307.         para i= 1 hasta cEspacios
  308.             cMarca = cMarca + " "
  309.         FinPara
  310.         //Imprimir el registro en una sola linea
  311.         Escribir sin saltar aRegistro[fila,1] + "     "
  312.         Escribir sin saltar aRegistro[fila,2] + cMarca
  313.         Escribir sin saltar aRegistro[fila,3] + "     "
  314.         Escribir sin saltar aRegistro[fila,4] + "     "
  315.         Escribir sin saltar aRegistro[fila,5] + "     "
  316.         Escribir sin saltar aRegistro[fila,6] + "     "
  317.         fila = fila + 1
  318.         Escribir ""  //Hacer un salto de linea
  319.         cMarca = ""  //Borar los espacios que hemos puesto
  320.        
  321.     Hasta que bandera = verdadero
  322.    
  323. FinSubProceso
  324.    
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement