Este documento presenta el desarrollo de un sistema de gestión de clientes para una empresa de turismo llamada TOURSVEN, utilizando el método MAPS y el lenguaje de programación Pascal. Se describen 8 objetivos, incluyendo el análisis del problema, el diseño de algoritmos mediante programación estructurada, pruebas de robustez y la codificación del programa final. El sistema permitirá ingresar, modificar y listar datos de clientes, así como generar reportes estadísticos.
Copyright:
Attribution Non-Commercial (BY-NC)
Formatos disponibles
Descargue como PDF, TXT o lea en línea desde Scribd
70%(10)70% encontró este documento útil (10 votos)
2K vistas47 páginas
Este documento presenta el desarrollo de un sistema de gestión de clientes para una empresa de turismo llamada TOURSVEN, utilizando el método MAPS y el lenguaje de programación Pascal. Se describen 8 objetivos, incluyendo el análisis del problema, el diseño de algoritmos mediante programación estructurada, pruebas de robustez y la codificación del programa final. El sistema permitirá ingresar, modificar y listar datos de clientes, así como generar reportes estadísticos.
Este documento presenta el desarrollo de un sistema de gestión de clientes para una empresa de turismo llamada TOURSVEN, utilizando el método MAPS y el lenguaje de programación Pascal. Se describen 8 objetivos, incluyendo el análisis del problema, el diseño de algoritmos mediante programación estructurada, pruebas de robustez y la codificación del programa final. El sistema permitirá ingresar, modificar y listar datos de clientes, así como generar reportes estadísticos.
Copyright:
Attribution Non-Commercial (BY-NC)
Formatos disponibles
Descargue como PDF, TXT o lea en línea desde Scribd
Descargar como pdf o txt
70%(10)70% encontró este documento útil (10 votos)
Este documento presenta el desarrollo de un sistema de gestión de clientes para una empresa de turismo llamada TOURSVEN, utilizando el método MAPS y el lenguaje de programación Pascal. Se describen 8 objetivos, incluyendo el análisis del problema, el diseño de algoritmos mediante programación estructurada, pruebas de robustez y la codificación del programa final. El sistema permitirá ingresar, modificar y listar datos de clientes, así como generar reportes estadísticos.
Copyright:
Attribution Non-Commercial (BY-NC)
Formatos disponibles
Descargue como PDF, TXT o lea en línea desde Scribd
Descargar como pdf o txt
Está en la página 1de 47
UNIVERSIDAD NACIONAL ABIERTA, CENTRO LOCAL METROPOLITANO
Repblica Bolivariana de Venezuela
Ministerio del PP Educacin Superior Universidad Nacional Abierta Centro Local Metropolitano
Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 2
NDICE INTRODUCCIN ........................................................................................................ 5 DESARROLLO ............................................................................................................ 6 OBJETIVOS ............................................................................................................. 6 OBJETIVO 5 ............................................................................................................ 7 ETAPA 1: EL DIALOGO ...................................................................................... 7 ETAPA 2: ESPECIFICACIONES ........................................................................ 8 ETAPA 3: LA PARTICIN ................................................................................. 10 ETAPA 4: DEFINICIN DE ABSTRACCIONES .............................................. 12 ETAPA 5: CODIFICACIN ................................................................................ 13 ETAPA 6: PRUEBA Y VERIFICACIN ............................................................ 13 ETAPA 7: PRESENTACIN ............................................................................. 13 OBJETIVO 6: PROGRAMACIN ESTRUCTURADA .......................................... 13 DECLARACIN DE DATOS Y TIPOS ............................................................. 13 ALGORITMO EN SEUDOCDIGO .................................................................. 15 PROCEDIMIENTO noms () {validacin nombre-apellidos} .......................... 15 PROCEDIMIENTO letras() {detecta letras en vez de nmeros} .................. 16 PROCEDIMIENTO valipas () {validacin #_pasaporte} ............................... 16 PROCEDIMIENTO vori () {validacin de origen} .......................................... 17 PROCEDIMIENTO letr2 () {detecta letras para fechas} ............................... 17 PROCEDIMIENTO valife () {valida fechas} ................................................... 18 PROCEDIMIENTO Ingresa () ........................................................................ 19 PROCEDIMIENTO Nap () {nombres_apellidos} ....................................... 19 PROCEDIMIENTO Npas () {numero de pasaporte} ................................. 20 PROCEDIMIENTO Fexp () {fecha_expedicion pasaporte} ....................... 21 PROCEDIMIENTO ori () {origen de pasaporte} ........................................ 21 PROCEDIMIENTO Fcv () {fecha certificado de vacuna} .......................... 22 PROCEDIMIENTO Fdim () {fecha declaracion_impuesto} ....................... 23 PROCEDIMIENTO buscali () {bsqueda lineal de nombres, necesario para los proceds. Modificar o Eliminar} ................................................................. 24 Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 3
PROCEDIMIENTO Modifica () {se modifican datos del cliente} .................. 25 PROCEDIMIENTO mnomb () .................................................................... 25 PROCEDIMIENTO mnpas ()...................................................................... 25 PROCEDIMIENTO mfex () ......................................................................... 25 PROCEDIMIENTO mdor () ........................................................................ 26 PROCEDIMIENTO mcva () ........................................................................ 26 PROCEDIMIENTO mdim () ........................................................................ 26 PROCEDIMIENTO verim () {verifica si ha ingresado clientes} .................... 28 PROCEDIMIENTO venci () {verifica si hay fechas vencidas para n_vige y reporte} ........................................................................................................... 28 PROCEDIMIENTO n_vige () {listado de no-vigentes} .................................. 28 PROCEDIMIENTO n_exp ()....................................................................... 28 PROCEDIMIENTO n_CV () ....................................................................... 29 PROCEDIMIENTO n_DI () ......................................................................... 29 PROCEDIMIENTO total_vi () ..................................................................... 30 PROCEDIMIENTO verino () .......................................................................... 31 PROCEDIMIENTO Lorden () {ordena el registro de clientes} ...................... 31 FUNCIN Indm (){encuentra el ndice del elemento menor} ................... 31 PROCEDIMIENTO Seleccs () {intercambia con elemento lista[K]} .......... 31 PROCEDIMIENTO verior () ........................................................................... 32 PROCEDIMIENTO Elimi () {elimina registro de cliente} ............................... 32 PROCEDIMIENTO veriel ()............................................................................ 33 PROCEDIMIENTO Reporte () {reporte estadstico de clientes} .................. 33 PROCEDIMIENTO sumaVZ () {suma pasaportes venezolanos y extranjeros} ................................................................................................. 34 PROCEDIMIENTO sumaCV () .................................................................. 34 PROCEDIMIENTO sumaDI () .................................................................... 35 PROCEDIMIENTO sumaRV () {suma recaudos vigentes} ....................... 35 PROCEDIMIENTO veriep () .......................................................................... 36 PROCEDIMIENTO Listado () {listado de todos los clientes y sus campos} 37 Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 4
PROCEDIMIENTO Lpas () {nmero de pasaporte} .................................. 37 PROCEDIMIENTO Lori () {lista origen de pasaporte} .............................. 37 PROCEDIMIENTO Lnom () {lista nombres_ apellidos} ............................ 37 PROCEDIMIENTO Lexp () {lista fecha exp_pasaporte} ........................... 38 PROCEDIMIENTO Lcva () ......................................................................... 38 PROCEDIMIENTO Ldim () ......................................................................... 39 PROCEDIMIENTO Verili () ............................................................................ 40 PROCEDIMIENTO Salir ................................................................................ 40 PROCEDIMIENTO Menu2 () ......................................................................... 40 PROCEDIMIENTO MenuP ............................................................................ 41 OBJETIVO 7 PRUEBA DE ROBUSTEZ Y VERIFICACIN ................................ 43 OBJETIVO 8 PROGRAMA CODIFICADO ........................................................... 47 BIBLIOGRAFA ......................................................................................................... 47
Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 5
INTRODUCCIN Este trabajo prctico se propone resolver un problema de una compaa ficticia que contiene grandes enseanzas que sirven para la formacin de los futuros Ingenieros de Sistemas. Las empresas dedicadas al turismo deben tener un sistema computarizado para lograr competir en este mercado tan dinmico y atractivo. Se trata de implementar un algoritmo que pueda ingresar datos de los clientes de la empresa TOURSVEN. Para llegar a esto, se aplica el mtodo MAPS, el cual sistemticamente nos llevar hasta el diseo final del programa, escrito en lenguaje PASCAL, y disponible para ser aplicado en el rea de trabajo. Todo esto es parte de la materia Computacin 1, relativo a los objetivos 5,6, 7 y 8. Aceptamos las observaciones hechas por nuestra asesora del centro local metropolitano.
Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 6
DESARROLLO OBJ ETIVOS 5: Se resolver el problema planteado algortmicamente usando la metodologa MAPS 6: Basndose en lo construido en el objetivo 5, se disear un algoritmo usando tcnicas de programacin estructurada, que cumplan con las especificaciones dadas, teniendo especial cuidado en hacer una buena declaracin de datos y sus tipos. 7: Se probar el algoritmo diseado en el objetivo 6 usando el concepto de Robustez. 8: Se traducir el algoritmo obtenido a lenguaje PASCAL, a fin de obtener un programa estructurado que cumpla con los requerimientos especificados, aplicando procedimientos y funciones.
Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 7
OBJ ETIVO 5 Son siglas inglesas que significan Metodologa para Solventar Problemas Algortmicos, en espaol, y es la sucesin de las siguientes etapas: Dialogo, Especificaciones, Subdivisin, Definicin de Abstracciones, Codificacin, Prueba y Verificacin, Presentacin. ETAPA 1: EL DIALOGO Se realiz una consulta al asesor de la materia en el Centro Local. Unido a la conversacin entre compaeros de estudio, se aclar la naturaleza del problema planteado. Definicin del problema: La agencia de viajes TOURSVEN se ha dado a la tarea de automatizar el proceso de venta de boletos con el fin de llevar un control de clientes que deseen viajar al exterior. Datos de Entrada: Se toma como entradas: Nombre y apellidos del cliente Nmero de pasaporte del cliente Fecha de expedicin del pasaporte Origen del pasaporte Fecha de expedicin del certificado vacuna Fecha de expedicin de declaracin de impuesto Las fechas caducan al ao, excepto la fecha de expedicin del pasaporte en caso de ser extranjero, que vence a los dos aos. Proceso: se validan los datos de entrada, de manera que slo se graban los datos vlidos segn el criterio preestablecido. Se disear un programa en Turbo Pascal 7.0, para que usando arreglos de registros, se graben y muestren los resultados requeridos. Datos de salida: previamente se mostrar: un men que permita ingresar, modificar, eliminar datos y mostrar el listado de personas registradas como clientes. Un men que permita ordenar de acuerdo al nmero de pasaporte de cada cliente, mostrar en pantalla los clientes que tienen MAPS Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 8
documentos No-vigentes, y visualizar el reporte estadstico de clientes. El reporte contiene lo siguiente: o Cuntos clientes tienen pasaporte venezolano o Cuntos clientes tienen pasaporte extranjero o Cuntos clientes tienen el certificado de vacuna vencido o Cuntos clientes tienen la declaracin de impuesto vencido o Cuntos clientes tienen todos sus recaudos vigentes Para verificar el vencimiento, se toma como datos slo el ao y el mes, y se considerar vencido el documento que en su fecha de vencimiento, el ao y el mes coincidan o sean menores al ao y mes actuales. ETAPA 2: ESPECIFICACIONES PRE-Condiciones: Nombres y apellidos de cada cliente. CRITERIO DE VALIDEZ: no puede tener nmeros al principio. Ej.: 1carlos no es vlido, en cambio carlos1 s lo es. Nmero de pasaporte de cada cliente. CRITERIO DE VALIDEZ: no puede ser letras. El rango se toma como Fecha de expedicin de pasaporte. CRITERIO DE VALIDEZ: no puede ser letras. Rangos: o o o o La fecha se introduce completa. Se colocan 4 dgitos para el ao, 2 dgitos para el mes y 2 dgitos para el da, todos separados por un espacio. Ej.: el 21 de enero de 2009 se coloca . No es vlido colocar , dado que para meses menores a 10 se completan con cero a la izquierda. Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 9
o La comparacin se hace con ayuda de un comando que muestra la fecha del reloj interno de la computadora, que normalmente estar ajustada a la fecha actual. o Si el ao es bisiesto, se aceptar el da 29 de febrero. o Normalmente el mes de febrero no acepta los das 29, 30, 31 y los meses abril, junio, septiembre, noviembre tienen 30 das. Origen del pasaporte: venezolano (v) extranjero (e). CRITERIO DE VALIDEZ: no puede ser otro carcter diferente a stos dos. Fecha de expedicin del certificado de vacuna. CRITERIO DE VALIDEZ: el mismo de la fecha de expedicin pasaporte. Fecha de declaracin de impuesto. CRITERIO DE VALIDEZ: el mismo de la fecha de expedicin pasaporte. Dado que el programa ser diseado en base a arreglos, ser fijada la capacidad mxima de stos. Ahora, en el da laboral, la cantidad de clientes vara y el usuario no puede estar todo el tiempo ajustando la capacidad mxima del arreglo de clientes. Por lo tanto, se preguntar al usuario cuntos clientes ingresar. POST-Condiciones: . Slo los datos validos se graban. . Aparece una tabla que indica los clientes registrados en el programa, con sus 6 caractersticas o campos cada uno. . Aparece una tabla conteniendo la suma de los clientes con pasaporte venezolano, los de pasaporte extranjero, con certificado de vacuna vencido, con declaracin de impuesto vencido y los que tienen todos sus recaudos vigentes. . Aparece un listado que muestra los nombres y apellidos de los clientes que tienen por lo menos un documento vencido. . Aparece un listado que muestra los nmeros de pasaporte de los clientes ordenados de mayor a menor.
Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 10
ETAPA 3: LA PARTICIN El problema global se dividir en base a las opciones del men principal y submens:
Cada una de estas opciones, incluyendo los mens, es diseada en base a los procedimientos, que responden al concepto de la programacin estructurada. 1. Ingresar (primera vez y subsiguientes): Se leer cuntos clientes se ingresar, ya que la capacidad total del array (arreglo) se fija a un cierto nmero (20), pero en el da laboral esta cantidad puede variar. Luego se leern los datos del cliente: nombre y apellidos, n de pasaporte, fecha expedicin del pasaporte, origen del pasaporte, fecha expedicin del certificado-vacuna, fecha expedicin de declaracin impuesto. Si un cliente no tiene un documento, por convencin se graba en la fecha de expedicin respectiva . Esto con el fin de alentar al cliente a que consiga sus documentos, mientras que est en un archivo de espera. Estos datos se almacenan en un arreglo de tipo registro, que lo llamamos Clien_T. este arreglo est fijado a una capacidad definida, que puede estar entre 15 a 30 clientes por da laboral. Si la cantidad de clientes ingresados es menor que la capacidad total del arreglo, se rellenan con ceros en los campos numricos y espacios vacios o cadenas nulas en los campos de caracteres. Si se desea ingresar cierta cantidad de clientes adicionales, se puede acceder nuevamente a esta opcin. Para ello, la variable de clientes adicionales (w2) se suma a la variable de clientes existentes (w): , donde n es nmero total de Actualizar Ingresar Modificar Eliminar Listado Salida _menu principal Ordenar Emitir reporte No-vigentes Emitir reporte estadistico Salida _del_programa Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 11
clientes ingresados. Esto se hace para no sobrepasar la capacidad total del arreglo de clientes. Si ocurre que la cantidad a ingresar es mayor que la capacidad del arreglo, el procedimiento no se ejecuta y se devuelve al men. Por supuesto que la capacidad total se fija a la cantidad mxima que puede haber de clientes en temporada alta. 2. Modificar (un cliente por vez): se pregunta cul cliente se desea modificar ingresando con precisin sus nombres y apellidos. El algoritmo de bsqueda detecta el cliente solicitado y se muestra un pequeo men para seleccionar qu campo ser modificado del registro del cliente. Se selecciona el campo a modificar segn sea el caso y se releen los datos a modificar. 3. Eliminar (borrar el registro del cliente): se pregunta cul cliente se debe eliminar ingresando con precisin sus nombres y apellidos. El algoritmo de bsqueda detecta el cliente solicitado y luego procede a grabar ceros en los campos numricos y espacios vacios en los campos de caracteres. El nmero de clientes se reduce en 1. 4. Listado: se muestran todos los clientes almacenados en el registro clien_T. puede estar ordenado o no, dependiendo si se utiliz la opcin ordenar. Para listar los datos, se dividi el proceso en 6 partes y se utiliz el comando gotoxy (ir_xy) para ubicar el cursor en las coordenadas de la pantalla. 5. Salida: el programa finaliza y se cierra la ventana respectiva, volviendo al men principal. 6. Ordenar: este procedimiento ordena por nmero de pasaporte de mayor a menor a todos los clientes en el arreglo. Se usa un algoritmo de seleccin de la manera siguiente: o El primer elemento de la lista de clientes se toma como el valor variable ndice-menor o Se compara con los restantes elementos de Clien_T en el campo N- pas. o Si algn elemento es menor que el ndice-menor, ste elemento se convierte en ndice-menor y se sigue comparando esta variable con los restantes elementos de Clien_T. o Si no hay elementos menores, se coloca este ndice como el ltimo de la lista ordenada y se toma el siguiente elemento de la lista sin ordenar como el nuevo ndice-menor o Se repite el procedimiento para este nuevo ndice que ya tendr elementos o As sucesivamente se van obteniendo la lista ordenada segn el campo N-pas del arreglo de clientes. Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 12
o Finalmente, se muestra el listado ordenado. 7. Reporte No-vigentes: Se detecta con esta opcin si algn cliente presenta algn recaudo no-vigente. Esto se logra comparando las fechas de vencimiento del pasaporte, certificado de vacuna y declaracin de impuesto con la fecha actual. La fecha actual se obtiene mediante un comando llamado GetDate (obtener fecha), y es la fecha del reloj interno de la computadora. La fecha de vencimiento se obtiene sumando 1 2 al ao de expedicin, segn sea el caso. Si la fecha de vencimiento de un documento es menor que la fecha actual, el documento est vencido y aparecer el nombre del cliente involucrado en el listado del reporte. En este listado slo aparecern los clientes con por lo menos un documento vencido. 8. Reporte estadstico (5 datos de salida): este procedimiento arroja un listado en pantalla con los elementos siguientes: clientes con pasaporte venezolano, clientes con pasaporte extranjero, clientes con certificado de vacuna vencido, clientes con declaracin de impuesto vencido, clientes con todos sus recaudos vigentes. Esto se logra comparando fechas de vencimiento y con una variable contadora, se va sumando de uno en uno cada resultado. 9. Salida del programa: el programa se cierra y se vuelve al sistema operativo de la computadora.
ETAPA 4: DEFINICIN DE ABSTRACCIONES En turbo-Pascal 7.0 se utilizan los siguientes comandos: Lectura (read, readln) y escritura (write, writeln) de datos Limpieza de pantalla (clrscr), ubicacin del cursor (gotoxy), leer una tecla cualquiera (readkey) Ciclos repetitivos como desde_hasta_hacer (fortodo), donde la variable se incrementa automticamente. Ciclos repetitivos como mientras_hacer (whiledo), donde hay que incrementar la variable contadora explcitamente. Ciclos repetitivos como Repetir_hasta (repeatuntil). Esta estructura se utiliza para construir el algoritmo de bsqueda, pues el ciclo se detiene al encontrar el dato y por lo menos se ejecuta una vez. Adems, es muy especial para la validacin de datos. Se utiliza un indicador de tipo booleano: al principio se almacena true (verdadero) en la variable detec, para que cambie a false si se detecta que el dato no es el correcto. Esto hace que se vuelva a repetir el ciclo de lectura de datos hasta que los datos sean los correctos. Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 13
Ciclos selectivos como Si_entonces_si-no (ifthenelse). Se ejecuta si la condicin a que hace referencia el si, es verdadera. Esto acta como un detector de datos de entrada. La condicional es de las formas lgicas ms utilizadas en los programas. Ciclos selectivos como En_caso_de_Hacer (case ofdo). Estructura utilizada con preferencia en la construccin de mens. Se realizan ciertas instrucciones dependiendo del carcter que representa una opcin del men. Incrementar (Inc): utilizado para la variable contadora de un ciclo. Equivale a la declaracin . Operadores lgicos AND, OR y NOT. Son utilizados para decidir sobre varias condiciones lgicas. Sus tablas de verdad son: Entrada X Entrada Y Salida AND Salida OR Salida NOT X Falso (false) Falso Falso Falso Verdad Falso Verdad (true) Falso Verdad Verdad Verdad Falso Falso Verdad Falso Verdad Verdad Verdad Verdad Falso
ETAPA 5: CODIFICACIN Esta etapa corresponde al objetivo 6 ETAPA 6: PRUEBA Y VERIFICACIN Esta etapa corresponde al objetivo 7 ETAPA 7: PRESENTACIN Los comentarios se aaden entre llaves { }. Esto se aade normalmente al seudocdigo del programa en su realizacin (objetivo 6 y 8). OBJ ETIVO 6: PROGRAMACIN ESTRUCTURADA DECLARACIN DE DATOS Y TIPOS
Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 14
CONSTANTES EXPLICACIN ABREVIATURA VALORES # caracteres Cad 60 Capacidad del arreglo de clientes Capcid 20 Arreglo de meses (slo para uso del comando Getdate) Mesi Rango de enero a diciembre Arreglo de das (slo para uso del comando Getdate) Das Rango de Domingo a sbado
TIPOS EXPLICACIN ABREVIATURA TIPO Rango de nmeros ordinales desde uno Rcap 1..capcid Rango de nmeros ordinales desde cero Rgs 0..capcid Tipo ordinal palabra Max Word (0..65535) Cadena de caracteres Modf String[cad] Tipo ordinal entero-largo Psp2 Longint (- 2147483648..2147483647) Tipo lgico booleano Logi Boolean (true..false) Tecla a pulsar Op Char (carcter) Registro de 6 campos Cturi Record of nom_ap, n_pas, f_exp, orig, f_cva, f_dim Nombres y apellidos Nom_ap Modf Numero de pasaporte N_pas Psp2 Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 15
Fecha expedicin pasaporte F_exp Array[1..3] of max Origen de pasaporte Orig op Fecha certificado vacuna F_cva Array[1..3] of max Fecha declaracin impuesto F_dim Array[1..3] of max Arreglo de registros Clien_T Array[rcap] of cturi Arreglo lgico booleano Vigent Array[rcap] of logi # clientes a ingresar W,w2 max Ao, mes y da proporcionado por GetDate y, m, d max nmeros para validar Vali7 Rango de 0..9 cadenas para validar Valin, valif, valia, valib Valin: string[1], valif: string[11], valia: string[4], valib: string[2]
ALGORITMO EN SEUDOCDIGO Programa Servicio_Turismo {hecho en Venezuela para la empresa TOURSVEN} PROCEDIMIENTO noms (variable L1:modf) {validacin nombre-apellidos} Variables locales e: vali7; st: valin; Comienzo e0; leer(L1); Repetir cambiar_a_cadena (e, st) Si L1[1]=st entonces Comienzo Escribir(no vlido, inserte de nuevo); leer(L1) Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 16
fin_Si Incrementar (e) hasta_que e=0 fin_noms; PROCEDIMIENTO letras(variable D: psp2) {detecta letras en vez de nmeros} Variables deti: logi; cod: max; L1: valif; Comienzo Repetir detiverdad; cod0; leer(L1) cambiar_a_entero (L1, D, cod) Si cod0 entonces Comienzo Escribir(no vlido, inserte nmero ); detifalso fin_Si hasta_que deti fin_letras PROCEDIMIENTO valipas (variable D:psp2) {validacin #_pasaporte} Variables detec: logi; Comienzo Repetir detecverdad; letras(D) {llamada al procedimiento letras} Si (D<100 000) OR (D>99 999 999) entonces Comienzo Escribir(no vlido, inserte de nuevo); detecfalso fin_Si Hasta_que detec Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 17
Fin_valipas PROCEDIMIENTO vori (variable o:op) {validacin de origen} Variable deti: logi; Comienzo detifalso Repetir Leer(o) Si (ov) AND (oe) entonces Escribir(no vlido, inserte de nuevo) Si_no detiverdad hasta_que deti Fin_vori PROCEDIMIENTO letr2 (variable d, e, f:max) {detecta letras para fechas} Variables deti: logi; cd, cd2, cd3: max; m: valia; n, p: valib; c:valif; Comienzo Repetir detiverdad; cd0; cd20; cd30 Leer (c) mcopiar_cadena(c, 1, 4); cambiar_a_entero (m, d, cd) ncopiar_cadena(c, 6, 2); cambiar_a_entero (n, e, cd2) pcopiar_cadena(c, 9, 2); cambiar_a_entero (p, f, cd3) Si [[(cd0) OR (cd20)] OR (cd30)] entonces Comienzo Escribir (no vlido, inserte nmeros); detifalso fin_Si Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 18
Hasta_que deti Fin_letr2 PROCEDIMIENTO valife (y, m, d: max; variable f1, f2, f3: max ) {valida fechas} Variable detec: logi; Comienzo Repetir detecverdad; f10; f20; f30 letr2(f1, f2, f3) {llamada a proced. letr2} 1_Si (f1<1990) OR (f1>y) entonces Comienzo Escribir (no vlido, inserte nuevo ao); detecfalso fin_1_Si 2_Si (f1=y) AND (f2>m) entonces Comienzo Escribir (no vlido, inserte nuevo mes<actual); detecfalso fin_2_Si 3_Si (f2<1) OR (f2>12) entonces Comienzo Escribir (no vlido, inserte nuevo mes); detecfalso fin_3_Si 4_Si (f3<1) OR (f3>31) entonces Comienzo Escribir (no vlido, inserte nuevo da); detecfalso fin_4_Si 5_Si [(f2=2) AND (f3=29)] AND (f1 mod 40) entonces Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 19
Comienzo Escribir (no vlido, inserte nuevo dia_feb); detecfalso fin_5_Si 6_Si (f2=2) AND (f3=30) entonces Comienzo Escribir (no vlido, inserte nuevo dia_febrero); detecfalso fin_6_Si 7_Si [(f2=2) OR (f2=4) OR (f2=6) OR (f2=9) OR (f2=11)] AND (f3=31) Entonces Comienzo Escribir (no vlido, inserte nuevo dia30); detecfalso fin_7_Si Hasta_que detec Fin_valife PROCEDIMIENTO Ingresa (variable w:max, g:clien_T) Variables w2: max PROCEDIMIENTO Nap (entradas w, w2: max; variable g: clien_T) {nombres_apellidos} Variables Q: rcap; L:modf Comienzo Qw+1 1_Mientras Q(w+w2) hacer Comienzo Escribir (introduzca apellidos y nombres de la persona numero, Q, a ingresar) Noms(L) {llama a proced. noms} Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 20
g[Q].nom_apL; Incrementar (Q) Fin_1_mientras 2_mientras Qcapcid hacer Comienzo g[Q].nom_ap {cadena nula} Incrementar (Q) Fin_2_mientras Fin_Nap PROCEDIMIENTO Npas (entradas w, w2; variable g) {numero de pasaporte} Variables D2: psp2; Q: rcap Comienzo Qw+1 1_mientras Q(w+w2) hacer Comienzo Escribir (introduzca el numero de pasaporte de la persona numero, Q, a ingresar) Valipas (D2) {llama a proced. valipas} g[Q].n_pasD2; Incrementar(Q) Fin_1_mientras 2_mientras Qcapcid hacer Comienzo g[Q].n_pas0 Incrementar (Q) Fin_2_mientras Fin_Npas Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 21
PROCEDIMIENTO Fexp (w, w2; variable g) {fecha_expedicion pasaporte} Variables S: rcap; f1, f2, f3: max Comienzo f10; f20; f30; Sw+1 1_mientras S(w+w2) hacer Comienzo Escribir (introduzca fecha_expedicion: aaaa mm dd separado por espacio de la persona numero, S, a ingresar) Valife (y, m, d, f1, f2, f3) {validacin de fechas} g[S].f_exp[1]f1; g[S].f_exp[2]f2; g[S].f_exp[3]f3 Incrementar (S) Fin_1_mientras 2_mientras Scapcid hacer Comienzo g[S].f_exp[1]0; g[S].f_exp[2]0; g[S].f_exp[3]0; Incrementar (S) Fin_2_mientras Fin_Fexp PROCEDIMIENTO ori (w, w2; variable g) {origen de pasaporte} Variables S: rcap; o: op Comienzo Sw+1 1_Mientras S(w+w2) hacer Comienzo Escribir (introduzca origen del pasaporte: v/e de la persona numero, S, a ingresar) vori(o) {llama a proced. vori, validacin de origen} Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 22
g[S].origo; Incrementar (S) Fin_1_mientras 2_mientras Scapcid hacer Comienzo g[S].orig {carcter espacio} Incrementar (S) Fin_2_mientras Fin_ori PROCEDIMIENTO Fcv (w, w2; variable g) {fecha certificado de vacuna} Variables S: rcap; g1, g2, g3: max Comienzo g10; g20; g30; Sw+1 1_mientras S (w+w2) hacer Comienzo Escribir (introduzca fecha_certificado_vacuna: aaaa mm dd separado por espacio de la persona numero, S, a ingresar) Valife (y, m, d, g1, g2, g3) {validacin de fechas} g[S].f_cva[1]g1; g[S].f_cva[2]g2; g[S].f_cva[3]g3 Incrementar (S) Fin_1_mientras 2_mientras Scapcid hacer Comienzo g[S].f_cva[1]0; g[S].f_cva[2]0; g[S].f_cva[3]0; Incrementar (S) Fin_2_mientras Fin_Fcv Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 23
PROCEDIMIENTO Fdim (w, w2; variable g) {fecha declaracion_impuesto} Variables S: rcap; h1, h2, h3: max Comienzo h10; h20; h30; Sw+1 1_mientras S (w+w2) hacer Comienzo Escribir (introduzca fecha_dec._impuesto: aaaa mm dd separado por espacio de la persona numero, S, a ingresar) Valife (y, m, d, h1, h2, h3) {validacin de fechas} g[S].f_dim[1]h1; g[S].f_dim[2]h2; g[S].f_dim[3]h3 Incrementar (S) Fin_1_mientras 2_mientras Scapcid hacer Comienzo g[S].f_dim[1]0; g[S].f_dim[2]0; g[S].f_dim[3]0; Incrementar (S) Fin_2_mientras Fin_Fdim Comienzo {programa Ingresa} Limpiar_pantalla {clrscr}; w20 Si w0 entonces Comienzo Escribir (cuntos clientes adicionales?) Leer (w2) Fin_Si Si_no comienzo Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 24
Escribir (cuntos clientes ingresar?) Leer (w2) fin_Si_no Si (w+w2) capcid entonces Comienzo Nap (w, w2, g) {llamadas a los proceds. de Ingresar} Npas (w, w2, g) Fexp (w, w2, g) Ori (w, w2, g) Fcv (w, w2, g) Fdim (w, w2, g) ww+w2 fin_si si_no escribir (nmero total de clientes sobrepasa capacidad mxima) Escribir (presione cualquier tecla) leer_tecla Fin_Ingresa PROCEDIMIENTO buscali (entradas lista: clien_T; t: modf; variable posic: rgs) {bsqueda lineal de nombres, necesario para los proceds. Modificar o Eliminar} Variables I: rcap; encont: logi Comienzo encontfalso {hasta que la persona se encuentra}; posic0; I1 Repetir Si (lista[I].nom_ap)=t entonces Comienzo Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 25
posicI; encontverdad fin_Si Incrementar (I) hasta_que (encont=verdad) OR (I=1) {si I llega al mximo valor, el incremento lo devuelve al primer valor del rango} Fin_buscali PROCEDIMIENTO Modifica (entrada y, m, d, w: max; variable k: clien_T) {se modifican datos del cliente} Variables mo: op; pmod: modf; pos: rgs PROCEDIMIENTO mnomb (pos; variable k) Variable L:modf Comienzo Escribir (inserte nuevos nombres y apellidos) Noms (L) {validacin nombres y apellidos} k[pos].nom_apL Fin_mnomb PROCEDIMIENTO mnpas (pos; variable k) Variable D2: psp2 Comienzo Escribir (inserte Nuevo numero pasaporte) Valipas (D2) {validacin # pasaporte} k[pos].n_pasD2 Fin_mnpas PROCEDIMIENTO mfex (y, m, d, pos; variable k) Variables f1, f2, f3: max Comienzo f10; f20; f30; Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 26
Escribir (introduzca nueva fecha_expedicion: aaaa mm dd separado por espacio) Valife (y, m, d, f1, f2, f3) {validacin de fechas} k[pos].f_exp[1]f1; k[pos].f_exp[2]f2; k[pos].f_exp[3]f3 Fin_mfex PROCEDIMIENTO mdor (pos; variable k) Variable o:op Comienzo Escribir (escriba nuevo origen) Vori (o) {validacin origen} k[pos].origo Fin_mdor PROCEDIMIENTO mcva (y, m, d, pos; variable k) Variables f1, f2, f3: max Comienzo f10; f20; f30; Escribir (introduzca nueva fecha_vacuna: aaaa mm dd separado por espacio) Valife (y, m, d, f1, f2, f3) {validacin de fechas} k[pos].f_cva[1]f1; k[pos].f_cva[2]f2; k[pos].f_cva[3]f3 Fin_mcva PROCEDIMIENTO mdim (y, m, d, pos; variable k) Variables f1, f2, f3: max Comienzo f10; f20; f30; Escribir (introduzca nueva fecha_declaracin: aaaa mm dd separado por espacio) Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 27
Valife (y, m, d, f1, f2, f3) {validacin de fechas} k[pos].f_dim[1]f1; k[pos].f_dim[2]f2; k[pos].f_dim[3]f3 Fin_mdim Comienzo {Modifica_principal} Escribir (ingrese apellidos_nombres del cliente) Leer (pmod) Buscali (k, pmod, pos) {bsqueda lineal} Si pos0 entonces Comienzo Escribir (qu desea modificar?: nombres (N), numero_pasaporte (P), f_expedicion (E), origen (G), f_certificado (C), f_declaracion (D)) Leer (mo) En_caso_de mo hacer n: mnomb (pos, k) p: mnpas (pos, k) e: mfex (y, m, d, pos, k) g: mdor (pos, k) c: mcva (y, m, d, pos, k) d: mdim (y, m, d, pos, k) Fin_en_caso_de Fin_Si Si_no escribir (vuelva al men principal) Escribir (1 cliente modificado de, w) escribir (presione cualquier tecla) leer_tecla Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 28
Fin_Modifica PROCEDIMIENTO verim (entradas y, m, w:max; variable p: clien_T) {verifica si ha ingresado clientes} Comienzo Si w0 entonces Modifica (w, p) Si_no escribir (ingrese clientes por favor) Leer_tecla Fin_verim PROCEDIMIENTO venci (entradas nac, y, m, a1, m1: max; variable sis, ven: logi ) {verifica si hay fechas vencidas para n_vige y reporte} Comienzo venfalso; sisverdad; a1a1+nac Si a1=nac entonces sisfalso Si (a1<y) AND (a1nac) entonces venverdad Si (a1=y) AND (m1m) entonces venverdad Fin_venci PROCEDIMIENTO n_vige (a, me: max; regi: clien_T) {listado de no-vigentes} Variable vn, vc, vd: vigent; PROCEDIMIENTO n_exp (y, m: max; k: clien_T; variable venz: vigent) Variable S: rcap; a1, t1, nac: max; indi, sis: logi Comienzo Desde S1 hasta capcid hacer Comienzo a1k[S].f_exp[1]; t1k[S].f_exp[2]; venz[S]falso 1_Si k[S].orig=v entonces {si es venezolano} Comienzo Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 29
nac1 venci (nac, y, m, a1, t1, sis, indi) {verifica fechas} venz[S]indi fin_1_Si 2_Si k[S].orig=e entonces {si es extranjero} Comienzo nac2 venci (nac, y, m, a1, t1, sis, indi) {verifica fechas} venz[S]indi fin_2_Si Fin_desde Fin_n_exp PROCEDIMIENTO n_CV (y, m: max; k: clien_T; variable venc: vigent) Variables S: rcap; cv, mv, nac: max; indi, sis: logi Comienzo Desde S1 hasta capcid hacer Comienzo cv k[S].f_cva[1]; mv k[S].f_cva[2]; nac1 venci (nac, y, m, cv, mv, sis, indi) venc[S]indi Fin_desde Fin_n_CV PROCEDIMIENTO n_DI (y, m: max; k: clien_T; variable vedi: vigent) Variables S: rcap; cd, md, nac: max; indi, sis: logi Comienzo Desde S1 hasta capcid hacer Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 30
Comienzo cd k[S].f_dim[1]; md k[S].f_dim[2]; nac1 venci (nac, y, m, cd, md, sis, indi) vedi[S]indi Fin_desde Fin_n_DI PROCEDIMIENTO total_vi (venz, venc, vedi: vigent; k: clien_T) Variable S: rcap Comienzo Desde S1 hasta capcid hacer Comienzo Si [venz[S] OR venc[S]] OR (vedi[S]) entonces Comienzo Escribir (el cliente, k[S].nom_ap, tiene recaudos no vigentes) Fin_Si Fin_desde Fin_total_vi Comienzo {n_vige principal} Limpiar_pantalla N_exp (a, me, regi, vn) N_CV (a, me, regi, vc) N_DI (a, me, regi, vd) Total_vi (vn, vc, vd, regi) escribir (presione cualquier tecla) leer_tecla Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 31
Fin_n_vige PROCEDIMIENTO verino (y, m, w: max; p: clien_T) Comienzo Si w0 entonces N_vige (y, m, p) Si_no escribir (ingrese clientes por favor) Leer_tecla Fin_verino PROCEDIMIENTO Lorden (variable list: clien_T) {ordena el registro de clientes} Variable L: rcap FUNCIN Indm (entrada K: rcap; variable lista: clien_T): max {encuentra el ndice del elemento menor} Variables imi, indi: rcap Comienzo imi1 desde indi2 hasta K hacer Si (lista[indi].n_pas)<(lista[imi].n_pas) entonces imiindi Indmimi Fin_Indm PROCEDIMIENTO Seleccs (variable lista: clien_T) {intercambia con elemento lista[K]} Variables aux2: clien_T; me: max; K: rcap Comienzo Desde Kcapcid descendiendo_hasta 2 hacer Comienzo meIndm (K, lista) Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 32
aux2[me]lista[me] lista[me]lista[K] lista[K]aux2[me] Fin_desde Fin_Seleccs Comienzo {Lorden principal} Limpiar_pantalla Seleccs (list) Escribir (lista ordenada del nmero pasaporte) Desde L1 hasta capcid hacer Escribir (L, , list[L].n_pas) escribir (presione cualquier tecla) leer_tecla Fin_Lorden PROCEDIMIENTO verior (w: max; variable p: clien_T) Comienzo Si w0 entonces Lorden (p) Si_no escribir (ingrese clientes por favor) Leer_tecla Fin_verior PROCEDIMIENTO Elimi (entrada w: max; variable k: clien_T) {elimina registro de cliente} Variable nel: modf; pos: rgs; aux: max Comienzo Limpiar_pantalla Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 33
Escribir (ingrese nombre_apellidos a eliminar) Leer (nel) Buscali (k, nel, pos) Si pos0 entonces Comienzo k[pos].nom_apeliminado; k[pos].n_pas0 k[pos].f_exp[1]0; k[pos].f_exp[2]0; k[pos].f_exp[3]0 k[pos].orig {carcter espacio} k[pos].f_cva[1]0; k[pos].f_cva[2]0; k[pos].f_cva[3]0 k[pos].f_dim[1]0; k[pos].f_dim[2]0; k[pos].f_dim[3]0; auxw 1 escribir (total clientes restantes: , aux) Fin_Si Si_no escribir (vuelva al men principal) escribir (presione cualquier tecla) leer_tecla Fin_Elimi PROCEDIMIENTO veriel (w: max; variable p: clien_T) Comienzo Si w0 entonces elimi (w, p) Si_no escribir (ingrese clientes por favor) Leer_tecla Fin_veriel PROCEDIMIENTO Reporte (y, m: max; k: clien_T) {reporte estadstico de clientes} Variables vz, ex, cv, di, suvi: rgs; vi, vi2, vi3: vigent Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 34
PROCEDIMIENTO sumaVZ (y, m: max; k: clien_T; variable sumvz, sumex: rgs; vig: vigent) {suma pasaportes venezolanos y extranjeros} Variables S: rcap; a1, t1, nac: max; indi, sis: logi Comienzo sumvz0; sumex0 desde S1 hasta capcid hacer comienzo a1k[S].f_exp[1]; t1k[S].f_exp[2] 1_Si k[S].orig=v entonces Comienzo Incrementar (sumvz); nac1; Venci (nac, y, m, a1, t1, sis, indi) {verifica fechas vencidas} Vig[S]NOT indi fin_1_Si 2_Si k[S].orig=e entonces Comienzo Incrementar (sumex); nac2; Venci (nac, y, m, a1, t1, sis, indi) {verifica fechas vencidas} Vig[S]NOT indi fin_Si_2 fin_desde Fin_sumaVZ PROCEDIMIENTO sumaCV (entradas y, m, k; variable sumcv: rgs; vig2: vigent) Variables S: rcap; cv, mv, nac: max; indi, sis: logi Comienzo sumcv0 Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 35
Desde S1 hasta capcid hacer Comienzo cvk[S].f_cva[1]; mvk[S].f_cva[2]; nac1 Venci (nac, y, m, cv, mv, sis, indi) {verifica fechas vencidas} Vig2[S](NOT indi) AND sis Si indi entonces Incrementar (sumcv) fin_desde Fin_sumaCV PROCEDIMIENTO sumaDI (entradas y, m, k; variable sumdi: rgs; vig3: vigent) Variables S: rcap; d1, md, nac: max; indi, sis: logi Comienzo sumdi0 Desde S1 hasta capcid hacer Comienzo d1k[S].f_dim[1]; mdk[S].f_dim[2]; nac1 Venci (nac, y, m, d1, md, sis, indi) {verifica fechas vencidas} Vig3[S](NOT indi) AND sis Si indi entonces Incrementar (sumdi) fin_desde Fin_sumaDI PROCEDIMIENTO sumaRV (entradas vig, vig2, vig3; variable sumvi: rgs) {suma recaudos vigentes} Variable S: rcap Comienzo sumvi0 Desde S1 hasta capcid hacer Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 36
Comienzo Si [vig[S] AND vig2[S]] AND (vig3[S]) entonces Incrementar (sumvi) fin_desde Fin_sumaRV Comienzo {Reporte principal} Limpiar_pantalla vz0; ex0; cv0; di0; suvi0 sumaVZ (y, m, k, vz, ex, vi) sumaCV (y, m, k, cv, vi2) sumaDI (y, m, k, di, vi3) sumaRV (vi, vi2, vi3, suvi) ir_xy (15, 5) {coordenadas de pantalla para la escritura} escribir (REPORTE) ir_xy (15, 6); escribir (clientes con pasaporte venezolano, vz) ir_xy (15, 7); escribir (clientes con pasaporte extranjero, ex) ir_xy (15, 8); escribir (clientes con certif_vacuna vencido, cv) ir_xy (15, 9); escribir (clientes con dec_impuesto vencido, di) ir_xy (15, 10); escribir (clientes con recaudos vigentes, suvi) escribir (presione cualquier tecla) leer_tecla Fin_Reporte PROCEDIMIENTO veriep (y, m, w: max; p: clien_T) Comienzo Si w0 entonces Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 37
Reporte (y, m, p) Si_no escribir (ingrese clientes por favor) Leer_tecla Fin_veriep PROCEDIMIENTO Listado (p: clien_T) {listado de todos los clientes y sus campos} PROCEDIMIENTO Lpas (p) {nmero de pasaporte} Variables S, q: max Comienzo Desde S1 hasta capcid hacer Comienzo qs+2 ir_xy (1, q); escribir (p[S].n_pas) Fin_desde Fin_Lpas PROCEDIMIENTO Lori (p) {lista origen de pasaporte} Variables S, q: max Comienzo Desde S1 hasta capcid hacer Comienzo qs+2 ir_xy (13, q); escribir (p[S].orig) Fin_desde Fin_Lori PROCEDIMIENTO Lnom (p) {lista nombres_ apellidos} Variables S, q: max Comienzo Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 38
Desde S1 hasta capcid hacer Comienzo qs+2 ir_xy (17, q); escribir (p[S].nom_ap) Fin_desde Fin_Lnom PROCEDIMIENTO Lexp (p) {lista fecha exp_pasaporte} Variables S, q, F: max Comienzo 1_Desde S1 hasta capcid hacer Comienzo qs+2 ir_xy (39, q) 2_desde F1 hasta 3 hacer comienzo escribir (p[S].f_exp[F]); escribir ( ) {espacio dentro de fecha} fin_2_desde Fin_1_desde Fin_Lexp PROCEDIMIENTO Lcva (p) Variables S, q, F: max Comienzo 1_Desde S1 hasta capcid hacer Comienzo qs+2 ir_xy (51, q) Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 39
2_desde F1 hasta 3 hacer comienzo escribir (p[S].f_cva[F]); escribir ( ) {espacio dentro de fecha} fin_2_desde Fin_1_desde Fin_Lcva PROCEDIMIENTO Ldim (p) Variables S, q, F: max Comienzo 1_Desde S1 hasta capcid hacer Comienzo qs+2 ir_xy (63, q) 2_desde F1 hasta 3 hacer comienzo escribir (p[S].f_dim[F]); escribir ( ) {espacio dentro de fecha} fin_2_desde Fin_1_desde Fin_Ldim Comienzo {Listado principal} Limpiar_pantalla Ir_xy (20,1); escribir (LISTADO DE CLIENTES) Ir_xy (1,2); escribir (pasaporte ori nombre_apellidos f_exp f_cva f_dim) Lpas (p) Lori (p) Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 40
Lnom (p) Lexp (p) Lcva (p) Ldim (p) escribir (presione cualquier tecla) leer_tecla Fin_Listado PROCEDIMIENTO Verili (w: max; p: clien_T) Comienzo Si w0 entonces Listado (p) Si_no escribir (ingrese clientes por favor) Leer_tecla Fin_verili PROCEDIMIENTO Salir Comienzo Ir_xy (20,19) escribir (presione cualquier tecla) leer_tecla Fin_salir PROCEDIMIENTO Menu2 (entradas y, m, d: max; variable w: max; k: clien_T) Variable opcin: op Comienzo Repetir Limpiar_pantalla Ir_xy (20,8); escribir (MEN ACTUALIZAR) Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 41
Ir_xy (20,9); escribir (presione una de estas teclas) Ir_xy (20,10); escribir (i. Ingresar clientes) Ir_xy (20,11); escribir (m. Modificar algn cliente) Ir_xy (20,12); escribir (e. Eliminar datos de cliente) Ir_xy (20,13); escribir (l. Emitir Listado) Ir_xy (20,14); escribir (s. Salir) Leer (opcin) En_caso_de opcin hacer i: Ingresa (y, m, d, w, k) m: verim (y, m, d, w, k) e: veriel (w, k) l: verili (w, k) s: Salir Si_no Comienzo ir_xy (20,18); escribir (opcin incorrecta); leer_tecla fin Fin_En_caso_de Hasta_que opcin=s Fin_Menu2 PROCEDIMIENTO MenuP Variables opcin: op; w, y, m, d, dow: max; k: clien_T Comienzo w0 repetir Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 42
limpiar_pantalla obtener_fecha (y, m, d, dow) {obtiene la fecha actual del sistema operativo de la computadora} ir_xy (10,4); escribir (Buen da!, este es Servicios_Turismo TOURSVEN, Bienvenidos) ir_xy (10,5); escribir (hoy es das[dow],,, d, /, mesi[m], /, y) ir_xy (20,8); escribir (MEN PRINCIPAL) ir_xy (20,9); escribir (presione una de estas teclas) ir_xy (20,10); escribir (a. Actualizar clientes) ir_xy (20,11); escribir (o. Ordenar clientes) ir_xy (20,12); escribir (e. Emitir fechas No-Vigentes) ir_xy (20,13); escribir (r. Emitir Reporte estadstico) ir_xy (20,14); escribir (s. Salir) leer (opcin) En_caso_de opcin hacer a. Menu2 (y, m, d, w, k) o. verior (w, k) e. verino (y, m, w, k) r. veriep (y, m, w, k) s. Salir Si_no Comienzo ir_xy (20,18); escribir (opcin incorrecta); leer_tecla fin Fin_En_caso_de Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 43
hasta_que opcin=s Fin_MenuP Comienzo {programa principal} MenuP Fin_Servicios_Turismo OBJ ETIVO 7 PRUEBA DE ROBUSTEZ Y VERIFICACIN Recordemos los conceptos de correccin, robustez, amigabilidad. Un programa es correcto si, para cualquier entrada que satisfaga la precondicin, termina generando una salida que satisface sus poscondiciones. Se dice que un programa es robusto si rene las dos condiciones siguientes: Es correcto. Para todas las entradas que no satisfacen las precondiciones, el programa termina y produce una salida que refleja el hecho de que ha ocurrido un error en la entrada. Se dice que un programa es amigable si rene los requisitos siguientes: Es correcto Para todas las entradas que no se ajusten a las precondiciones, el programa indica el tipo de error de entrada y concede al usuario la oportunidad de corregirlo y continuar. Para verificar la correccin del programa, previamente se escribe en lenguaje PASCAL y con una tabla de datos que estn dentro de las precondiciones se comprueba las salidas previamente establecidas en las poscondiciones. En este caso, se demuestra que el programa es correcto. En el enunciado del trabajo practico se muestra la necesidad de validar los datos de entrada, por lo tanto, en la elaboracin del seudocdigo se toma en cuenta los criterios de validez. El algoritmo demuestra ser correcto, debido a los rangos de validez numrica, es robusto, ya que detecta datos fuera del rango, y muestra una informacin al usuario que lo hace amigable. Mediante el procedimiento noms se detecta si el dato comienza con un nmero y luego la cadena de caracteres o si es totalmente numrico, en vez de Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 44
insertar letras al principio de cada nombre y apellido, que puede llevar nmeros en otra parte si es necesario. Se muestra un mensaje invitando a teclear el tipo de datos correcto. Con letras se toma la precaucin de avisar si estn entrando datos de tipo cadena (de caracteres). Se muestra un mensaje invitando a teclear el tipo de datos correcto, en este caso, datos numricos. Para el nmero de pasaporte, se usa el procedimiento valipas para saber si est en los rangos correctos. El procedimiento vori es el requerido para averiguar si el carcter que se ingresa es uno de los dos previamente establecidos: v si el pasaporte es origen venezolano y e si el pasaporte es de origen extranjero. Para las fechas, primero se detecta si se ingresan cadenas de caracteres o nmeros por medio del procedimiento letr2. Siendo datos numricos de fechas, es necesario si stas se ajustan a los rangos usuales de fecha, detallados anteriormente. De todo esto se encarga el procedimiento valife, que detecta adems si la fecha 29 de febrero es de un ao bisiesto, si se inserta un 31 de junio, que no existe en el calendario, y otros por el estilo. Se muestra un mensaje invitando a teclear el tipo de datos correcto, en este caso, datos numricos que se ajusten a los rangos y ajustados a la realidad. Estas verificaciones se hacen con las opciones Ingresar y Modificar del submen. Cuando no se han ingresado clientes, es necesario avisar que se debe ingresar. Para esto estn los procedimientos verim, veriel, verili, verior, verino y veriep, que revisan antes de ejecutar algn procedimiento del men que requiera del arreglo de clientes activo. Para la verificacin de la correccin y robustez, se prob con la siguiente tabla de datos: Apellidos Y nombres # pasaporte Origen de Pasaporte Fecha Exp. Pas. Fecha Certif. vac. Fecha Dec. Imp. Blanco Bitar Carlos 3411232 V 2010 07 01 2009 05 02 2009 07 11 Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 45
Bonett Borges Franco 4825316 E 2009 11 01 2010 11 01 2010 10 15 Bosch Boso Noris 5126314 E 2010 02 02 2010 01 31 2010 02 02 Cabeza Luis 5342625 V 2010 02 03 2010 01 01 2010 03 06 Cabaas Cabrera Lucia 5857324 E 2009 05 02 2009 02 02 2010 05 08 Daz Fernndez Doris Fgty 6302127 V 2009 02 25 2009 02 02 2010 05 25 Dorta Ramos Antonio 8410331 V 2010 04 05 2010 03 27 2010 04 05 Donelli Duque Jaime 8722110 V 2010 07 04 2009 04 05 2010 07 04 Egaa Egui Manuel 10328102 E 2008 02 29 2010 12 23 2010 04 15 Escobar Espaa Adela 10331127 E 2010 04 21 2009 04 29 2010 04 21 Escobar Espinoza Carlos 10630505 V 2010 05 03 2010 06 30 2010 05 04 Espin Dorta Angel 10646222 V 2010 05 05 2010 08 31 2009 12 13 Farias Garca Emilio 10725550 E 2010 10 05 2010 11 11 2010 04 04 Garca Gmez Flor 10814327 V 2010 05 13 2009 09 09 2010 10 30 Garzn Ana 11114330 V 2010 06 02 2010 08 07 2009 11 13 Garrido Gastn Ramn 11208324 V 2009 10 03 2010 10 23 2010 06 01 Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 46
Gmez Grandi Ana 11320101 V 2010 07 26 2010 12 05 2010 06 14 Gmez Espaa Juan 11342333 V 2009 09 16 2009 11 30 2010 09 29 Gonzlez Atilio 11634208 E 2010 06 31 2010 05 31 2010 06 11 Gonzlez Daz Dayana 11639420 E 2010 11 31 2009 08 25 2010 06 28 Granado Grandi Vctor 11640324 V 2010 02 30 2009 09 31 2009 02 28 Graterol Greco Oscar 11642314 V 2010 10 31 2010 10 30 2010 08 17 Hernndez Egaa Alicia 11682214 V 2011 10 02 2009 10 04 2010 12 07 Hidalgo Higuera Elio 11821666 E 2009 13 02 2009 11 24 2009 08 15 Ibarra Bigott Luisa 11842105 E 2010 03 42 2010 03 19 2010 08 15 Iglesias Karam Roman 11901104 E 2010 04 31 2010 07 30 2009 08 28 La Riva Ledezma Andrs 12103125 V 2010 09 31 2010 12 18 2010 06 18 Largo Leal Gertrudis 12114324 V 2010 02 31 2010 01 26 2009 10 23 Mndez Nez Elsi 12115001 V 1982 09 06 2010 03 27 2010 10 28 526 wakm u 2009 0 1 201051 koli
Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m 47
OBJ ETIVO 8 PROGRAMA CODIFICADO El programa est escrito en lenguaje TURBO PASCAL versin 7.0, y se entrega grabado en un CD contentivo de los archivos necesarios para su correcto funcionamiento.
BIBLIOGRAFA
Tucker, Allen y otros (2000). Fundamentos de Informtica. Editorial Mc Graw Hill. Madrid. Joyanes Aguilar, Luis (2000). Fundamentos de programacin. Editorial Mc Graw Hill. Madrid. Joyanes Aguilar, Luis (2005). Programacin en Turbo/Borland Pascal 7. Editorial Mc Graw Hill. Mxico. Albornoz, Alejandro (2000). Trabajo prctico de computacin 1. Caracas. Digitalizado por Osmer Montilla para www.admycontuna.multiply.com Digitalizado por Osmer Montilla para www.admycontuna.multiply.com w w w . a d m y c o n t u n a . m u l t i p l y . c o m