Está en la página 1de 29

REPRECENTACION DE LA SOLUCION

PROGRAMA SOFTI; //PROPOSITO: Programa para llevar el registro y control de artculos e inventarios de una tiTERMINAa de cmputo. //SUPOSICIONES: El mximo de registros esperados por la tiTERMINAa es de 275 artculos. Se tTERMINArn estrictamente un archivo tipo directo para artculos y otro del mismo tipo para proveedores. //LIMITANTES: El tamao del archivo de artculos es de 275 registros solamente. //CONST TIPOS //***************************************************************************** //Nodo para la Lista del Archivo de Colisiones (Articulos) tListaArt:^NodoArt VecArt[10]:tListaArt NodoArt = REGISTRO COMIENZA cve[3]: CADENA posAD: ENTERO sig: tListaArt TERMINA //*****************************************************************************

//Nodo para la lista del Archivo de Colisiones (Provedores) tListaProv: ^NodoProv VecProv [10]:tListaProv NodoProv = REGISTRO COMIENZA cve: ENTERO posAD: ENTERO sig: tListaProv TERMINA //***************************************************************************** rArticulo = REGISTRO COMIENZA cve[3]: CADENA //* clave: 1 letra mayscula y 2 nm */ nomb[15]: CADENA //* nombre */ desc[50]: CADENA //* Descripcin */ preC: REAL //* Precio de compra */ preV: REAL //* Precio de venta */ exis: ENTERO //* Existencia */ prov: ENTERO //* Clave del Proveedor*/ TERMINA //***************************************************************************** rProveedor = REGISTRO COMIENZA cve: ENTERO //* Clave: 5 dgitos */ nomb[15]: CADENA //* nombre o razn social */ dire[40]: CADENA //* Direccin */ tele[10]: CADENA //* Telfono */ mail[25]: CADENA //* Correo electrnico */ cont[50]: CADENA //* Persona de contacto */ TERMINA //***************************************************************************** tArchArts = ARCHIVO DE rArticulo tArchProvs = ARCHIVO DE rProveedor //***************************************************************************** //ESTRUCTURA //___________________________________________________________ ___________________ //TIPOS tPila = ^NodoPila NodoPila = REGISTRO COMIENZO dato: ENTERO sig: tPila TERMINA

//___________________________________________________________ ___________________ VAR PilaProv, PilaArt: tPila //Apuntadores al inicio de las pilas ListaArt: tListaArt //Apuntador al inicio de la lista de articulos ListaProv: tListaProv //Apuntador al inicio de la lista de proveedores LArt: VecArt //Vector para Arch.Cols. De artculos LProv: VecProv //Vector para Arch.Cols. De proveedores sigposA: ENTERO //Siguiente posicin disponible en el Arch.Dats.(Articulos) sigposP: ENTERO //Siguiente posicin disponible en el Arch.Dats.(Proveedores) registroArt: REGISTRO DE rArticulo //Registro de Articulos registroProv: REGISTRO DE rProveedor //Registro de Proveedores i: ENTERO //*es donde guardaremos la posicin del registros cuando verifiquemos que exista*/ resp: CADENA //es la respuesta a una pregunta clave[3]: CADENA nomarch[10]:CADENA nombre: CADENA //ENT: opc,opc2: ENTERO //SAL: //_________________________________PILA______________________ _______________________ PROCEDIMIENTO InicializaP (Val P: tPila) /* UTILIDAD: Inicializa la pila 'P'(Apunta a una direccin nula). PRE: Ninguna. POS: P apunta a una direccin nula. */ COMIENZA P = NULO TERMINA //***************************************************************************** FUNCIN PilaVacia (Val P: tPila): BOOLEANO /* UTILIDAD: Verifica si la pila 'P' esta vaca (apunta a una direccin nula).

PRE: La pila 'P' Ya est inicializada. POS: Regresa verdadero(1) o falso(0) si esta vaca o no, respectivamente. */ COMIENZA SI (P = NULO) ENTONCES REGRESA VERDADERO SINO COMIENZA REGRESA FALSO TERMINA TERMINA //***************************************************************************** PROCEDIMIENTO Apilar (Val P: tPila; x: ENTERO) /* UTILIDAD: Inserta 'x' al inicio de 'P'(apilar). PRE: La pila 'P' esta inicializada. POS: 'x' en el tope de la pila 'P'. */ var nodo: tPila COMIENZA RESERVAR(nodo) nodo^dato = x nodo^sig = NULO SI( P = NULO) ENTONCES P = nodo SINO COMIENZA nodo^sig = P P = nodo TERMINA TERMINA //***************************************************************************** FUNCIN Desapilar (Val P:tPila): ENTERO /* UTILIDAD: Elimina el tope de la pila 'P'(desapilar). PRE: La pila 'P' esta inicializada y no esta vacia. POS: La pila queda sin un elemento, el cual regresa. */ Var Paux: tPila x: ENTERO COMIENZA Paux = P x = P^dato P = P^sig LIBERAR(Paux)

REGRESA x TERMINA //___________________________________________________________ ___________________ //****************************************************************************** ****** //MODULOS GENERALES //****************************************************************************** ****** FUNCIN menupal(): ENTERO /* UTILIDAD: Muestra en pantalla el men principal del programa. PRECONDICIONES: Ninguna. POSCONDICIONES: Ninguna. */ VAR opcion: ENTERO COMIENZA ESCRIBE 'MENU PRINCIPAL' ESCRIBE '1. Menu Articulos' ESCRIBE '2. Menu Proveedores' ESCRIBE '3. Bitacora' ESCRIBE '4. Salir' ESCRIBE 'Seleccione una opcion: ' LEE (opcion) SI(opcion < 5) Y (opcion > 0) ENTONCES result=opcion SINO COMIENZA ESCRIBE 'opcion invalida' TERMINA TERMINA //***************************************************************************** FUNCIN menuart():ENTERO //*UTILIDAD: Muestra o despliega el menu de artculos del programa. //PRECONDICIONES: Ninguna. //POSCONDICIONES: Ninguna.*// VAR op: ENTERO COMIENZA ESCRIBE '------- MENU DE ARTICULOS -------' ESCRIBE 'Opciones' ESCRIBE '1.- Crear archivo de articulos' ESCRIBE '2.- Alta de articulos' ESCRIBE '3.- Eliminar articulos' ESCRIBE '4.- Modificar articulos' ESCRIBE '5.- Buscar articulos por clave'

ESCRIBE '6.- Consultar todos los articulos' ESCRIBE '7.- Regresar' ESCRIBE 'Selecciona una opcion: ' LEE (op) SI(op<8) Y (op>0) ENTONCES result=op SINO COMIENZA ESCRIBE 'opcion invalida' TERMINA TERMINA //***************************************************************************** FUNCIN menuprov():ENTERO //* //UTILIDAD: Muestra o despliega el menu de proveedores del programa. //PRECONDICIONES: Ninguna. //POSCONDICIONES: Ninguna. //*/ VAR op: ENTERO COMIENZA ESCRIBE '------- MENU DE PROVEEDORES -------' ESCRIBE 'Opciones' ESCRIBE '1.- Crear archivo de proveedores' ESCRIBE '2.- Alta de proveedores' ESCRIBE '3.- Eliminar proveedores' ESCRIBE '4.- Modificar proveedores' ESCRIBE '5.- Buscar proveedores por clave' ESCRIBE '6.- Consultar todos los proveedores' ESCRIBE '7.- Regresar' ESCRIBE 'Selecciona una opcion: ' LEE (op) SI(op<8) Y (op>0) ENTONCES result = op SINO COMIENZA ESCRIBE 'opcion invalida' TERMINA TERMINA //****************************************************************************** FUNCIN HashModulo(Ref clave: ENTERO): ENTERO /* UTILIDAD: Aplica la funcin hash Modulo del residuo a la clave 'clave'. PRECONDICIONES: La clave es de tipo ENTERO. POSCONDICIONES: Regresa un valor ENTERO. */ var

pos:ENTERO COMIENZA pos = (clave mod 10) REGRESA pos TERMINA //****************************************************************************** PROCEDIMIENTO CONSULTATOTAL ( registroProv:rProveedor , nomarch: CADENA[10]) Var aLog: tArchProvs COMIENZA ASIGNA(aLog,nomarch) ABRIR aLog PARA L/E LEE(aLog, registroProv) ESCRIBE( registroProv.cve) ESCRIBE( registroProv.nomb) ESCRIBE( registroProv.dire) ESCRIBE( registroProv.tele) ESCRIBE( registroProv.mail) ESCRIBE( registroProv.cont) CIERRA(aLog) TERMINA //****************************************************************************** //PROCEDIMIENTO Bitacora() /* UTILIDAD: Crea un archivo(secuencial) donde se iran agregando todas las ultimas fechas de acceso al programa en orden secuencial de nombre "bitacora" tipo texto("bitcora.txt") as como el numero de registros de artculos y el numero de registros de proveedores que tenan los respectivos archivos "artculos.art" y "proveedores.prv". PRECONDICIONES: Ninguna. POSCONDICIONES: Ninguna. */ PRECEDIMIENTO FH() Var h,m,s,c: FORMATO DE HORA //Variables para obtener la hora anio, mes, dia, sem: FORMATO DE FECHA //Variables para obtener la fecha D,F,L,x,y,z: CADENA B: ARCHIVO DE TEXTO COMIENZA ASIGNA(B,'Bitcora.txt') ABRIR (B) PARA L/E SI(SI EXISTE B =0) ENTONCES ABRIR(B) PARA ESCRITURA

SINO COMIENZA CREAR(B) ESCRIBE 'Bitcora de ejecucin del programa' EN B ESCRIBE 'Formato de fecha: dd/mm/aaaa' EN B ESCRIBE 'Formato de hora: hh:mm:ss' EN B ESCRIBE '**************************************' ESCRIBE '' EN B TERMINA CAPTURADIA(anio,mes,dia,sem); CAPTURAHORA(h,m,s,c); Str(dia,x)// RECUPERA DIA VARIABLE DEFINIDA Str(mes,y)// RECUPERA MES VARIABLE DEFINIDA Str(anio,z)// RECUPERA AO VARIABLE DEFINIDA F:=x+'/'+y+'/'+z D:='ltimo acceso el da: '+F Str(h,x)// RECUPERA HORA VARIABLE DEFINIDA Str(m,y)// RECUPERA MINUTO VARIABLE DEFINIDA Str(s,z)// RECUPERA SEGUNDO VARIABLE DEFINIDA L:=x+':'+y+':'+z D:=D+' a las: '+L ESCRIBE D EN B CIERRA(B) TERMINA //MODULOS PARA ARTICULOS //****************************************************************************** PROCEDIMIENTO CreaArchArts(Val nomarch[10]: CADENA) /* UTILIDAD: Crea un archivo tipo texto con el nombre 'nomarch' PRECONDICIONES: Ninguna. POSCONDICIONES: Ninguna. */ Var fich:ARCHIVO DE tArchArts COMIENZA ASIGNA(fich, nomarch) CIERRA(fich) TERMINA //****************************************************************************** PROCEDIMIENTO InicializaRegA(Val reg: rArticulo) /* UTILIDAD: Inicializa el registro con valores centinela para sus campos. PRECONDICIONES: Ninguna. POSCONDICIONES: Ninguna.

*/ COMIENZA reg.cve = '-1' reg.nomb = ' ' reg.desc = ' ' reg.preC = 0000.00 reg.preV = 0000.00 reg.exis = 0 reg.prov = 0 TERMINA //****************************************************************************** PROCEDIMIENTO LeerArticulo (Val registroArt: rArticulo) /* UTILIDAD: Lee los datos correspondientes a artculos. PRECONDICIONES: Ninguna. POSCONDICIONES: Los datos se guadaran en los camposrespectivos del registro 'registroArt'. */ COMIENZA ESCRIBE '"Ingresa la clave del producto " ' LEE( registroArt.cve) ESCRIBE '"Ingresa el nombre del producto"' LEE( registroArt.nomb) ESCRIBE '"Ingresa la descripcion del producto"' LEE( registroArt.desc ) ESCRIBE' "Ingresa el precio de compra del producto"' LEE( registroArt.preC ) ESCRIBE' "Ingresa el precio de venta del producto"' LEE( registroArt.preV ) ESCRIBE' "cantidad producto en existencia"' LEE( registroArt.exis) ESCRIBE' "Ingresa clave del proveedor"' LEE( registroArt.prov) TERMINA //****************************************************************************** FUNCIN ConvierteClave(clave[3]:CADENA): ENTERO /* UITILIDAD: Convierte una clave alfanumrica en un valor numrico de acuerdo al cdigo ascii de la letra. PRECONDICIONES: Ninguina. POSCONDICIONES: Regresa la clave transformada a numero. */ VAR x,y,z:ENTERO COMIENZA

x = (ASCII( CONVERTIRAENTERO(clave[1])))*100 //CONVIERTE CARACTER A VALOR ASCII Y = (ASCII( CONVERTIRAENTERO(clave[2]))-48)*10 Z = ASCII(CONVERTIRAENTERO(clave[3]))-48 REGRESA (x+y+z) TERMINA; //****************************************************************************** FUNCIN ExisteArt (clave[3]: CADENA): ENTERO /* UTILIDAD: Verifica que el registro con la clave "clave", exista en el Archivo de Articulos. PRECONDICIONES: Ninguna. POSCONDICIONES: Regresa la posicin del registro de clave "clave" si este existe. */ VAR L: tListaArt //apuntador de tipo Lista auxiliar band, i,cve: ENTERO COMIENZA cve = ConvierteClave(clave) ESCRIBE cve i = HashModulo(cve) L = LArt[i] band=0 MIENTRAS (L <> NULO) COMIENZA SI(L^cve = clave) ENTONCES COMIENZA pos = L^posAD band = 1 TERMINA SINO COMIENZA band = 0 TERMINA L = L^siG TERMINA ExisteArt= band TERMINA //****************************************************************************** PROCEDIMIENTO AltaArt (registroArt: rArticulo; nomarch[10]:CADENA) /* UTILIDAD: Escribe el registro 'registroArt' en el archivo de nombre 'nomarch'(se harn las modificaciones respectivas en el arreglo de listas y la pila de huecos).

PRECONDICIONES: El registro 'registroArt' y el archivo 'nomarch' existen. POSCONDICIONES: El registro queda escrito en el archivo de nombre 'nomarch'. */ Var cvehash: ENTERO nodo: tListaArt L,inicioLista: tListaArt aLog: tArchArts clave: ENTERO COMIENZA clave = ConvierteClave(registroArt.cve) ESCRIBE 'clave convertida' cvehash = HashModulo(clave) ESCRIBE cvehash RESERVAR(nodo) nodo^cve = registroArt.cve nodo^sig = NULO SI(PilaArt = NULO)ENTONCES //No hay huecos nodo^posAD = sigposA SINO COMIENZA nodo^posAD = Desapilar(PilaArt) TERMINA inicioLista = LArt[cvehash] //Vector de listas SI(inicioLista = NULO) ENTONCES //No hay colisiones(Arreglo de Listas esta vacio) COMIENZA inicioLista = nodo LArt[cvehash] = inicioLista //Enlazamos el arreglo con el nuevo nodo TERMINA SINO COMIENZA L = LArt[cvehash] ESCRIBE(L^.cve); LEE(); MIENTRAS (L^.sig <> NULO) //Con el mientras solo recorremos la lista hasta llegar al final COMIENZA ESCRIBE(L^cve) L = L^sig TERMINA L^sig = nodo //Aqu es donde agregamos el nodo al arreglo de listas TERMINA ASIGNA(aLog,nomarch)

SI (NO EXISTEARCHIVO(nomarch) )ENTONCES COMIENZA ABRIR(aLog)PARA E; // Si no existe lo creamos TERMINA SINO COMIENZA ABRIR(aLog)PARA L/E // Lo abrimos para lectura escritura TERMINA ENCUENTRA (aLog, sigposA) ESCRIBE registroArt EN aLog sigposA = sigposA + 1 //Aumentamos el contador de la siguiente posicin (articulos) CIERRA(aLog) TERMINA //****************************************************************************** FUNCIN RecuperaArt(Val clave[3]:CADENA;Val i: ENTERO; Val nomarch[10]:CADENA):rArticulo /* UTILIDAD: Se posiciona en el archivo 'nomarch' en la posicin 'i' (porque es archivo directo) verifica que el registro de dicha posicin coincida con la 'clave') y lo recupera. PRECONDICIONES: El archivo 'nomarch' existe y no esta vacio, adems de que es "archivo directo". POSCONDICIONES: Regresa el registro recuperado que es de tipo rArticulo. */ VAR rArt : rArticulo cve, cvehash, band: ENTERO aLog: tArchArts AP: tListaArt COMIENZA band = 0 cve = CONVERTIRDECADENAAENTERO(registroArt.cve) cvehash= HashModulo(cve) AP = LArt[cvehash] ASIGNA(aLog, nomarch) MIENTRAS(band=0) Y (AP^sig <> NULO) COMIENZA SI(Clave = LArt[cvehash]^cve) ENTONCES COMIENZA ABRIR aLog PARA L/E // ABRIMOS EL ARCHIVO PARA LECTURA

ENCUENTRA(aLog, AP^posAD) LEE rArt DE aLog band = 1 TERMINA SINO COMIENZA AP = AP^sig TERMINA TERMINA CIERRA(aLog) RecuperaArt := rArt TERMINA //****************************************************************************** //PROCEDIMIENTO MuestraArt(VAL registroArt: rArticulo) /* UTILIDAD: Muestra en pantalla todos los datos del registro 'registroArt'. PRECONDICIONES: El registro contiene datos validos. POSCONDICIONES: Ninguna. */ //****************************************************************************** PROCEDIMIENTO BajaArt(VAL registroArt: rArticulo; VAL nomarch[10]: CADENA) /* UTILIDAD: Elimina el registro 'registroArt' del archivo 'nomarch'(se harn las modificaciones respectivas en el arreglo de listas y la pila de huecos). PRECONDICIONES: El registro 'registroArt' y el archivo 'nomarch' existen. POSCONDICIONES: El archivo quedara sin el registro 'registroArt' el arreglo de listas modificado y la pila de huecos tTERMINAr un nuevo nodo. */ VAR posarch,i,clave,cvehash: ENTERO inicioLista,aux,aux2: tListaArt aLog: tArchArts r:rArticulo COMIENZA ASIGNA(alog,nomarch) ABRIR alog PARA L/E RESERVAR(aux) RESERVAR(aux2) aux=NUL aux2=NULO clave= CONVIERTIRDECADENAAENTERO(registroArt.cve) cvehash = HashModulo(clave)

inicioLista=LArt[cvehash] inicioLista=aux MIENTRAS(auX^cve <> registroArt.cve) COMIENZA aux2=aux aux=aux^sig TERMINA SI(aux2=NULO)ENTONCES COMIENZA posarch=aux^posAD inicioLista=aux^sig LIBERAR(aux) TERMINA SI(aux2<>NULO) Y (aux^sig <>NULO)ENTONCES COMIENZA posarch=aux^posAD aux2^sig=aux^sig LIBERAR(aux) TERMINA SI(aux2<>NULO) Y (aux^sig=NULO)ENTONCES COMIENZA posarch=aux^posAD aux2^sig=NULO LIBERAR(aux) TERMINA //EN ARCHIVO ENCUENTRA(alog,posarch) LEE r DE alog //LEE r DE alog r.cve:='-1' ESCRIBE r EN alog//ESCRIBE r EN alog CIERRA(alog) //EN PILA Apilar(PilaArt,posarch) TERMINA //****************************************************************************** PROCEDIMIENTO LeerArtMod(VAL registroArt: rArticulo) /* UTILIDAD: Lee del teclado los datos correspondientes a articulo a excepcin de la clave. PRECONDICIONES: Ninguna. POSCONDICIONES: Guardara los datos leidos en el registro 'registroArt'. */ VAR op: ENTERO COMIENZA ESCRIBE 'Que deseas modificar? '

ESCRIBE '1. Nombre' ESCRIBE '2. Descripcion' ESCRIBE '3. Precio de Compra' ESCRIBE '4. Precio de Venta' ESCRIBE '5. Existencias' ESCRIBE '6. Clave del proveedor' LEE (op) CASO op 1: COMIENZA ESCRIBE 'Ingresa el nombre del producto: ' LEE (registroArt.nomb) TERMINA 2: COMIENZA ESCRIBE 'Ingresa la descripcion del producto: ' LEE (registroArt.desc) TERMINA 3: COMIENZA ESCRIBE 'Ingresa el precio de compra del producto: ' LEE (registroArt.preC) TERMINA 4: COMIENZA ESCRIBE 'Ingresa el precio de venta del producto: ' LEE (registroArt.preV) TERMINA 5: COMIENZA ESCRIBE 'cantidad producto en existencia: ' LEE (registroArt.exis) TERMINA 6: COMIENZA ESCRIBE 'Ingresa clave del proveedor: ' LEE (registroArt.prov) TERMINA TERMINA TERMINA //****************************************************************************** //PROCEDIMIENTO ModificacionesArt(VAL registroArt: rArticulo, VAL nomarch: CADENA[10]) /* UTILIDAD: Modifica(sobreescribe) los datos del registro 'registroArt' del archivo 'nomarch'.

PRECONDICIONES: El archivo 'nomarch' existe y el registro 'registroArt' tambin existe en este archivo. POSCONDICIONES: El archivo 'nomarch' se actualiza, el registro 'registroArt' tambien. */ //****************************************************************************** PROCEDIMIENTO RecuperaListaArt() /* UTILIDAD: Del archivo de colisiones para articulos obtTERMINAr los datos y los guardara en el arreglo de listas como corresponda, adems de modificar la siguiente posicin disponible. PRECONDICIONES: Ninguna. POSCONDICIONES: Ninguna. *7 VAR A: ARCHIVO DE TIPO TEXTO aux,i:ENTERO z: ESNTERO P,Q:tListaArt //************************ COMIENZA ASIGNA(A,'Respaldo.txt') ABRIR (A) PARA L/E SI(EXISTEARCHIVO=0) ENTONCES COMIENZA MIENTRAS(NO EOF(A)) COMIENZA LEE aux DE A LEE i DE A SI(i<>0) ENTONCES COMIENZA RESERVAR(Q) LEE Q^cve DE A LEE Q^posAD DE A Q^sig=NULO LArt[aux]=Q i=i-1 MIENTRA (i<>0) COMIENZA RESERVAR(P) LEE P^cve DE A LEE P^posAD DE A P^sig=NULO Q^sig=P Q=P

i=i-1 TERMINA TERMINA TERMINA CIERRA(A) ESCRIBE'termino con exito' TERMINA TERMINA //****************************************************************************** //PROCEDIMIENTO RecuperarPilaArt() /* UTILIDAD: Del archivo de huecos para artculos obtTERMINAr los datos y los guardara en pila de huecos como corresponda. PRECONDICIONES: Ninguna. POSCONDICIONES: Ninguna. */ //****************************************************************************** PROCEDIMIENTO RespaldoArt() /* UTILIDAD: Creara el archivo de Colisiones(secuencial) rescatando los respectivos datos de el arreglo de listas. Creara el archivo de huecos(secuencial) rescatando los respectivos datos de la pila de huecos. PRECONDICIONES: Ninguna. POSCONDICIONES: Ninguna. */ VAR A: TEXTO z,aux,i:ENTERO P,Q:tListaArt COMIENZA ASIGNA A,'Respaldo.txt' ABRIR A PARA ESCRITURA i=0 aux=0 REPITE COMIENZA ESCRIBE aux EN A p=LArt[aux] MIENTRAS (p<>NULO) COMIENZA p=p^sig i=i+1 TERMINA

ESCRIBE i EN A i=0 p=LArt[aux] MIENTRAS (p<>NULO) COMIENZA ESCRIBE P^cve EN A ESCRIBE P^posAD EN A p=p^sig TERMINA TERMINA aux=aux+1 HASTA (aux>9) CIERRA A TERMINA //****************************************************************************** //MDULOS PARA PROVEEEDORES //****************************************************************************** PROCEDIMIENTO CreaArchProvs(VAL nomarch: CADENA[10]) /* UTILIDAD: Crea un archivo tipo texto con el nombre 'nomarch' PRECONDICIONES: Ninguna. POSCONDICIONES: Ninguna. */ VAR fich:tArchArts COMIENZA ASIGNAR (fich, nomarch) /* se le asigna la ruta al archivo */ TERMINA /******************************************************************************* / PROCEDIMIENTO InicializaRegP(VAL reg: rProveedor) /* UTILIDAD: Inicializa el registro con valores centinela para sus campos. PRECONDICIONES: Ninguna. POSCONDICIONES: Ninguna. */ COMIENZA reg.cve = -1 reg.nomb = '' reg.dire = ''

reg.tele = '' reg.mail = '' reg.cont = '' TERMINA /******************************************************************************/ PROCEDIMIENTO LeerProveedor(VAR registroProv: rProveedor) /* UTILIDAD: Lee los datos correspondientes a proveedor. PRECONDICIONES: Ninguna. POSCONDICIONES: Los datos se guadaran en los camposrespectivos del registro 'registroProv'. */ COMIENZA ESCRIBE "Ingresa clave del proveedor: " LEE registroProv.cve ESCRIBE "Ingresa el nombre del proveedor: " LEE registroProv.nomb ESCRIBE"Ingresa la direccion del proveedor: " LEE registroProv.dire ESCRIBE"Iingresa el telefono del proveedor: " LEE registroProv.tele ESCRIBE"Ingresa e-mail del proveedor: " LEE registroProv.mail ESCRIBE"Ingresa el nombre del contacto: " LEE registroProv.cont TERMINA //****************************************************************************** FUNCIN ExisteProv(REF clave: ENTERO; VAL pos: ENTERO): BOOLEANO /* UTILIDAD: Verifica que el registro con la clave "clave", exista en el Archivo de Proveedores. PRECONDICIONES: Ninguna. POSCONDICIONES: Regresa la posicin del registro de clave "clave" si este existe. */ VAR L: tListaProv //Lista auxiliar i: ENTERO COMIENZA i = HashModulo(clave) L = LProv[i] MIENTRAS (L <> NULO) COMIENZA

SI (L^cve = clave) ENTONCES COMIENZA pos = L^posAD ExisteProv = VERDADERO TERMINA SINO COMIENZA pos = -1 ExisteProv = FALSO TERMINA L = L^sig TERMINA TERMINA /******************************************************************************/ PROCEDIMIENTO AltaProv (registroProv: rProveedor nomarch: string[10]) /*UTILIDAD: Escribe el registro 'registroProv' en el archivo de nombre 'nomarch'(se harn las modificaciones respectivas en el arreglo de listas y la pila de huecos). PRECONDICIONES: El registro 'registroProv' y el archivo 'nomarch' existen. POSCONDICIONES: El registro queda escrito en el archivo de nombre 'nomarch'.*/ VAR cvehash: ENTERO /*Aqu guardamos la clave que nos proporcione la funcin hash*/ nodo: tListaProv /* Nodo que guardara los datos del nuevo registro en el vector de colisiones */ L,inicioLista: tListaProv /*Apuntador de tipo tLista que nos auxilia al recorrer el arreglo de listas*/ aLog: tArchProvs COMIENZA cvehash = HashModulo(registroProv.cve) RESERVA(nodo) nodo^cve = registroProv.cve nodo^sig = NULO /*guardamos los datos 'clave' y 'sig' en el nodo solo falta el campo 'posAD'*/ SI (PilaProv = NULO)ENTONCES /*No hay huecos*/ nodo^posAD = sigposP SINO COMIENZA nodo^posAD = Desapilar(PilaProv) /*La funcin Desapilar corresponde al TAD Pila*/

inicioLista = LProv[cvehash] SI (inicioLista = NULO) ENTONCES /*No hay colisiones(Arreglo de Listas esta vacio)*/ COMIENZA inicioLista = nodo LProv[cvehash] = inicioLista /*Enlazamos el arreglo con el nuevo nodo*/ TERMINA SINO COMIENZA L = LProv[cvehash] MIENTRAS (L^sig <> NULO) /*Con el mientras solo recorremos la lista hasta llegar al final */ COMIENZA L = L^sig TERMINA L^sig = nodo /*Aqu es donde agregamos el nodo al arreglo de listas*/ TERMINA TERMINA ASIGNA aLog,nomarch /*ASIGNA nomarch A aLog //Asignamos el archivo fsico al logico */ ABRIR alog PARA ESCRITURA ENCUENTRA sigposP EN aLog /*nos posicionamos en el archivo directo en la siguinte posicion disponible */ ESCRIBE registroProv EN aLog CIERRA(aLog) sigposP = sigposP + 1 /* Aumentamos el contador de la siguiente posicin (proveedores) */ TERMINA /******************************************************************************* *****/ /*FUNCION RecuperaProv(VAL clave[3]:CADENA,VALi:ENTERO,VAL nomarch[10]:CADENA):rProvedor*/ /* UTILIDAD: Se posiciona en el archivo 'nomarch' en la posicin 'i' (porque es archivo directo) verifica que el registro de dicha posicin coincida con la 'clave') y lo recupera. PRECONDICIONES: El archivo 'nomarch' existe y no esta vacio, adems de que es "archivo directo". POSCONDICIONES: Regresa el registro recuperado que es de tipo rProveedor. */ /******************************************************************************* *****/ /*PROCEDIMIENTO MuestraProv(VAL registroProv: rProveedor)*/ /*

UTILIDAD: Muestra en pantalla todos los datos del registro 'registroProv'. PRECONDICIONES: El registro contiene datos validos. POSCONDICIONES: Ninguna. */ /******************************************************************************* *****/ /*PROCEDIMIENTO BajaProv(VAL registroArt: rProveedor, VAL nomarch: CADENA[10])*/ /* UTILIDAD: Elimina el registro 'registroProv' del archivo 'nomarch'(se harn las modificaciones respectivas en el arreglo de listas y la pila de huecos). PRECONDICIONES: El registro 'registroProv' y el archivo 'nomarch' existen. POSCONDICIONES: El archivo quedara sin el registro 'registroProv' el arreglo de listas modificado y la pila de huecos tTERMINAr un nuevo nodo. */ /******************************************************************************* *****/ PROCEDIMIENTO LeerProvMod(VAR registroProv: rProveedor) /* UTILIDAD: Lee del teclado los datos correspondientes a articulo a excepcin de la clave. PRECONDICIONES: Ninguna. POSCONDICIONES: Guardara los datos leidos en el registro 'registroProv'. */ VAR op: ENTERO COMIENZA ESCRIBE "Que deseas modificar? " ESCRIBE "1. Nombre" ESCRIBE "2. Direccion" ESCRIBE "3. Telefono" ESCRIBE "4. Correo Electronico" ESCRIBE "5. Contacto" LEE op CASO op 1: COMIENZA ESCRIBE "Ingresa el nombre del proveedor: " LEE registroProv.nomb TERMINA 2: COMIENZA ESCRIBE "Ingresa la direccion del proveedor: " LEE registroProv.dire TERMINA

3: COMIENZA ESCRIBE "Iingresa el telefono del proveedor: " LEE registroProv.tele TERMINA 4: COMIENZA ESCRIBE "Ingresa e-mail del proveedor: " LEE registroProv.mail TERMINA 5: COMIENZA ESCRIBE "Ingresa el nombre del contacto: " LEE registroProv.cont TERMINA TERMINA TERMINA /******************************************************************************* ******/ /*PROCEDIMIENTO ModificacionesProv(VAL registroProv: rProveedor, VAL nomarch: CADENA[10])*/ /* UTILIDAD: Modifica(sobreescribe) los datos del registro 'registroProv' del archivo 'nomarch'. PRECONDICIONES: El archivo 'nomarch' existe y el registro 'registroProv' tambin existe en este archivo. POSCONDICIONES: El archivo 'nomarch' se actualiza, el registro 'registroProv' tambien. */ /******************************************************************************* ******/ /*FUNCION HashModuloProv(VAL clave: ENTERO): ENTERO*/ /* UTILIDAD: Aplica la funcin Hash "Modulo" a la 'clave'. PRECONDICIONES: Ninguna. POSCONDICIONES: Regresa un valor entero. */ /******************************************************************************* ******/ /*PROCEDIMIENTO RecuperarListaProv()*/ /* UTILIDAD: Del archivo de colisiones para proveedores obtTERMINAr los datos y los guardara en el arreglo de listas como corresponda, adems de modificar la siguiente posicin disponible. PRECONDICIONES: Ninguna. POSCONDICIONES: Ninguna. */

/****************************************************************************** ******/ /*PROCEDIMIENTO RecuperarPilaProv() /* UTILIDAD: Del archivo de huecos para proveedores obtendr los datos y los guardara en pila de huecos como corresponda. PRECONDICIONES: Ninguna. POSCONDICIONES: Ninguna. */ /******************************************************************************* *****/ /*PROCEDIMIENTO RespaldoProv()*/ /* UTILIDAD: Creara el archivo de Colisiones(secuencial) rescatando los respectivos datos de el arreglo de listas. Crear el archivo de huecos(secuencial) rescatando los respectivos datos de la pila de huecos. PRECONDICIONES: Ninguna. POSCONDICIONES: Ninguna. */ /*___________________________________________________________ ___________________*/ /*___________________________________________________________ ___________________*/ /*PRINCIPAL********************************************************************* / COMIENZA RecuperaListaArt() ESCRIBE" ================ TIENDA DE COMPUTO ================" REPITE opc= menupal() CASO opc 1: COMIENZA REPITE opc2=menuart() CASO opc2 1: COMIENZA ESCRIBE "------- CREAR ARCHIVO DE ARTICULOS -------" ESCRIBE "Estas seguro de crear el archivo de articulos? S/N" LEE resp SI (MAYUSCULA(resp)='S') ENTONCES COMIENZA

ESCRIBE "Escribe el nombre del archivo a crear: " LEE nombre nomarch = nombre+'.DAT' CreaArchArts(nomarch) ESCRIBE "El archivo de articulos fue creado con exito" ESCRIBE "Enter para continuar" TERMINA TERMINA 2: COMIENZA ESCRIBE "------- ALTA DE ARTICULOS -------" LeerArticulo(registroArt) SI (ExisteArt(registroArt.cve) = 1) ENTONCES ESCRIBE "El articulo ya existe en el archivo" SINO COMIENZA AltaArt (registroArt, nomarch) RespaldoArt() ESCRIBE "El articulo fue dado de alta" TERMINA ESCRIBE "Enter para continuar" TERMINA 3: COMIENZA ESCRIBE "------- ELIMINAR ARTICULOS -------" ESCRIBE "Clave del articulo a eliminar: " LEE clave {i=0 SI (ExisteArt(clave,i)) ENTONCES registroArt=RecuperaArt(clave,i,nomarch) MuestraArt(registroArt) ESCRIBE "Este es el registro a dar de baja S/N?" LEE resp SI (resp='s' or resp='S') ENTONCES COMIENZA BajaArt (registroArt, nomarch) ESCRIBE "El articulo se elimino con exito" TERMINA SINO COMIENZA ESCRIBE "El articulo no existe en el archivo" TERMINA ESCRIBE "Enter para continuar" TERMINA 4: COMIENZA

ESCRIBE "------- MODIFICAR ARTICULOS -------" ESCRIBE "Clave del articulo a modificar" LEE (clave) SI (ExisteArt(clave) = 1) ENTONCES COMIENZA ESCRIBE "seguro que deseas modificar el articulo S/N?" LEE (resp) SI (MAYUSCULAS(resp)='S')ENTONCES COMIENZA LeerArtMod(registroArt) ESCRIBE "El articulo se actualizo correctamente" TERMINA SINO COMIENZA ESCRIBE "El articulo no existe en el archivo" TERMINA ESCRIBE "Enter para continuar" TERMINA TERMINA 5: COMIENZA ESCRIBE "------- BUSCAR ARTICULOS -------" ESCRIBE "Clave del articulo a buscar" LEE clave i=0 SI (ExisteArt(clave,i)) ENTONCES COMIENZA registroArt=RecuperaArt(clave,i,nomarch) MuestraArt(registroArt) TERMINA SINO COMIENZA ESCRIBE "El articulo no existe en el archivo" TERMINA ESCRIBE "Enter para continuar" TERMINA 6: COMIENZA ESCRIBE "------- CONSULTAR ARTICULOS -------" //ConsultaTotal(nomarch, registroArt) ESCRIBE "Enter para continuar" TERMINA TERMINA HASTA opc2=7 TERMINA

/******************************************************************************* ******* **/ /******************PROVEEDORES************************************************ ***********/ 2: COMIENZA REPITE opc2=menuprov() case opc2 1: COMIENZA ESCRIBE "------- CREAR ARCHIVO DE PROVEEDORES -------" ESCRIBE "Estas seguro de crear el archivo de proveedores? S/N" LEE resp SI (MAYUSCULAS(resp)='S') ENTONCES COMIENZA ESCRIBE "Escribe el nombre del archivo a crear: " LEE nomarch CreaArchProvs(nomarch) ESCRIBE "El archivo de proveedores fue creado con exito" ESCRIBE "Enter para continuar" TERMINA TERMINA 2: COMIENZA ESCRIBE "------- ALTA DE PROVEEDORES -------" LeerProveedor(registroProv) //*SE LEE DE TECLADO* i=0 SI (ExisteProv(registroProv.cve,i)) ENTONCES ESCRIBE "El proveedor ya existe en el archivo" SINO COMIENZA AltaProv (registroProv, nomarch) ESCRIBE "El proveedor fue dado de alta" TERMINA ESCRIBE "Enter para continuar" TERMINA 3: COMIENZA ESCRIBE "------- DAR PROVEEDORES DE BAJA -------" ESCRIBE "Clave del proveedor a eliminar" LEE (clave) i=0

SI (ExisteArt(clave,i)) ENTONCES COMIENZA registroProv=RecuperaProv(clave,i,nomarch) MuestraProv(registroProv) ESCRIBE "Este es el proveedor a dar de baja S/N?) LEE (resp) SI (resp='S' or resp='s') ENTONCES COMIENZA BajaProv (registroProv, nomarch) ESCRIBE "El proveedor se elimino con exito" TERMINA SINO COMIENZA ESCRIBE "El proveedor no existe" TERMINA ESCRIBE "Enter para continuar" TERMINA TERMINA 4: COMIENZA ESCRIBE "------- MODIFICAR DATOS DE PROVEEDORES ------" ESCRIBE "Clave del proveedor a modificar" LEE (clave) i=0 SI (ExisteArt(clave,i)) ENTONCES COMIENZA registroProv=RecuperaProv(clave,i,nomarch) MuestraProv(registroProv) ESCRIBE "Este es el registro a modificar S/N?" LEE (resp) SI (resp='S' or resp='s') ENTONCES COMIENZA LeerProvMod(registroProv) ModificacionesProv (registroProv, nomarch) ESCRIBE "El proveedor se actualizo correctamente" TERMINA SINO COMIENZA ESCRIBE "El proveedor no existe" TERMINA ESCRIBE "Enter para continuar" TERMINA TERMINA 5: COMIENZA

ESCRIBE "------- CONSULTA DE PROVEEDOR -------" ESCRIBE "Clave del proveedor que deseas consultar" LEE clave i=0 SI (ExisteArt(clave,i)) ENTONCES COMIENZA registroProv RecuperaProv(clave,i,nomarch) MuestraArt(registroArt) TERMINA SINO COMIENZA ESCRIBE "El proveedor no existe" TERMINA ESCRIBE "Enter para continuar" TERMINA 6: COMIENZA ESCRIBE "------- CONSULTA DE PROVEEDORES -------" CONSULTATOTAL(registroProv, nomarch) ESCRIBE "Enter para continuar" TERMINA TERMINA HASTA(opc2=7) TERMINA 3: COMIENZA ESCRIBE "------- BITACORA -------" FH() ESCRIBE "Enter para continuar" LEE() TERMINA TERMINA HASTA opc=4 TERMINA. /******************************************************************************* *****/

También podría gustarte