Академический Документы
Профессиональный Документы
Культура Документы
Facultad de Ciencias
ESCUELA DE INFORMATICA
Caso 4
Proyecto Final de la Materia Algoritmos Computacionales INF-322 Seccin 01 Presentado por Grupo No.4: Integrantes Giolany Brito B. Wendy Morel Gisell Portorreal Rabel Rodriguez CF-1869 93-9619 CB-7640 BH-6629
Los conceptos emitidos en el presente proyecto son de la exclusiva responsabilidad de los/as sustentantes del mismo.
NDICE
INTRODUCCIN...................................................................................................... i CAPITULO I: PLANTEAMIENTO DEL PROBLEMA................................................. 1 1.1 Descripcin de la situacin.................................................................................. 2 1.2 Describir la actividad principal de la empresa.................................................. 3 1.3 Posible solucin a la situacin............................................................................. 6 1.4 Identificacin de las variables y sus tipos............................................................ 7 1.5 Alcance del proyecto .. 8 CAPITULO II: MARCO CONCEPTUAL..................................................................... 9 2.1 Definicin de conceptos utilizados en este proyecto .......................................... 10 2.1.1 Estructura de datos.......................................................................................... 11 2.1.2 Tipo de archivo utilizado................................................................................... 11 2.1.3 Estrategia para el diseo del algoritmo ..................................................... 12 2.1.4 Objeto utilizado (Lista, Pilas, Filas, rbol) ............................................. 12 2.1.5 Mtodo de ordenacin y bsqueda.................................................................. 13 CAPITULO III: SOLUCIN DEL PROBLEMA........................................................ 14 3.1 Anlisis del problema........................................................................................... 15 3.2 Diseo del algoritmo............................................................................................. 15 3.3 Verificacin del algoritmo...................................................................................... 20 3.4 Codificacin del algoritmo y lenguaje de programacin....................................... 25 3.5 Ejecucin del programa........................................................................................ 30 3.6 Verificacin del programa..................................................................................... 31 3.7 Programa de trabajo............................................................................................. 32 CAPITULO IV: PRESENTACIN DE LA APLICACIN ................ 34 4.1 Pantalla principal y su descripcin........................................................................ 35 4.2 Pantalla de captura de datos................................................................................ 36 4.3 Pantalla de despliegue de informacin................................................................. 37 4.4 Muestra de los archivos creados.......................................................................... 38 CAPITULO V: EXPERIENCIA ADQUIRIDA............................................................... 39 CONCLUSIN............................................................................................................ 40 REFERENCIAS BIBLIOGRFICAS........................................................................... 41
INTRODUCCION
El proyecto que vamos a presentar a continuacin est basado en la automatizacin de una empresa la cual nos proponemos analizar con el fin de crear un software que contenga una base de datos en el cual se pueda tener mayor control sobre los datos del personal de dicha empresa. Para esto nos hemos basado en las diferentes tcnicas usadas para el anlisis y diseo de un algoritmo los cuales son: Planeacin del proyecto, anlisis del sistema de computacin, evaluacin y prueba del sistema para cumplir con los requerimientos necesarios de la empresa.
* Descripcin de la situacin:
Esta empresa atraviesa por una situacin catica Ya que han tenido que contratar ms personal y el control de sus empleados se sale de las manos ya que tienen un sistema de archivo manual para el registro del personal.
Misin
Ser la empresa de distribucin lder tanto en productos de consumo mayoritario como de venta al detalle.
Visin
Valores
5
Organigrama de la empresa
Con este proyecto lo que se pretende es crear un sistema para organizar los datos de los empleados y as poder lograr un pronto acceso a la base de datos del control del personal de la empresa.
Archivos:
Tambin denominados ficheros (file); es una coleccin de informacin (datos relacionados entre s), localizada o almacenada como una unidad en alguna parte de la computadora.
Archivo directo:
Se dice que un archivo es de acceso u organizacin directa cuando para acceder a un registro n cualquiera no se tiene que pasar por los n-1 registros anteriores. Los archivos directos tienen una gran ventaja (son mucho ms rpidos) cuando se comparan con los archivos de acceso u organizacin secuencial estudiados en la.
Registros: Estructura de datos formada por uno o ms elementos denominados "Campos" y estos pueden estar compuestos a su vez por "subcampos". Claves Se denomina a un campo especial del registro que sirve para identificarlo
Arreglos
10
Es un conjunto de datos o una estructura de datos homogneos que se encuentran ubicados en forma consecutiva en la memoria RAM (sirve para almacenar datos en forma temporal). Bsqueda secuencial Tambin se le conoce como bsqueda lineal. Supongamos una coleccin de registros organizados como una lista lineal. El algoritmo bsico de bsqueda secuencial consiste en empezar al inicio de la lista e ir a travs de cada registro hasta encontrar la llave indicada (k), o hasta al final de la lista.
Estticos Casi todos los tipos de datos son estticos, la excepcin son los punteros. Que un tipo de datos sea esttico quiere decir que el tamao que ocupa en memoria no puede variar durante la ejecucin del programa. Es decir, una vez declarada una variable de un tipo determinado, a sta se le asigna un trozo de memoria fijo, y este trozo no se podr aumentar ni disminuir. Transformacin de claves El mtodo de transformacin de clave consiste en transformar un numero de orden (clave) en direcciones de almacenamiento por medio de un algoritmo de conversin. Cuando las altas se realizan por mtodo transformacin de clave, la direccin donde introducir un determinado registro se conseguir por la aplicacin de la clave del algoritmo de conversin (HASH). Si encontramos que dicha direccin ya est ocupada, el nuevo registro deber ir a la zona de sinnimos o de excedentes.
Colisiones
11
En informtica, una colisin de hash es una situacin que se produce cuando dos entradas distintas a una funcin de hash producen la misma salida.
*Estructura de datos
La estructura de los datos utilizado en este programa es el esttico ya que usamos arreglos, archivos y registro, aqu el tamao de la memoria no puede variar.
12
Mediante el estudio del problema pudimos observar que nuestra empresa estudiada tenia la necesidad de una base de datos computarizada en la cual se puedan almacenar los datos de los empleados de una forma ordenada para as poder tener un acceso rpido a cada uno de los registros de la base de datos.
14
Alias= open (Empleado.dat ) Red V Alias= null F Cdigo de Empleado El archivo no existe
Read Registro, alias R F While Not (alias) No se encontr el registro CLOS E ALIAS
Registro.c odigo=codi go F
Registro.codigo Registro.nombre Registro.departamento Registro.sueldo Registro.fijo Lectura del siguiente registro completo
15
Este programa se puede verificar atreves de una prueba de escritorio aplicando cada una de las condiciones a ejecutar en dicho algoritmo y comprobando que los datos insertados por el teclado son correctos.
char departamento[15]; // Cantidad disponible en almacen float sueldo; char fijo ; }; struct tipo_registro Registro; // Declaracion global de la variable // "Registro" de tipo struct tipo_registro FILE *alias; // Declaracion global de la variable "alias" (apuntador a un // archivo long int dir_fisica; // Declaracion global de la variable para calcular // la direccion fisica void ALTA_DIRECTA(void); // Declaracion global de la rutina de Altas void CONSULTA_DIRECTA(void); // Declaracion global de la rutina de Consultas void MODIFICACION_DIRECTA(void); // Declaracion global de la rutina de Modificaciones void BAJA_LOGICA_DIRECTA(void); // Declaracion global de la rutina de Baja Logica void LISTADO_SECUENCIAL(void); // Declaracion global de la rutina de Listado void main(void) { int op; do { clrscr(); cout << "\n\n\r Programa de control de EMPLEADO en un ARCHIVO DIRECTO"; cout << "\n\n\r Curso: \"Algoritmo Computacional\""; cout << "\n\r Sustentantes :Wendy, Gisell, Giolany, Rabel"; cout << "\n\n\n\r 1.- Altas directas"; 17 // Sueldo del Empleado // Estatus fijo o provisional? [S/N]
cout << "\n\r 2.- Consultas directas"; cout << "\n\r 3.- Modificaciones directas"; cout << "\n\r 4.- Bajas de Empleado directas"; cout << "\n\r 5.- Listado Secuencial"; cout << "\n\r 0.- Salir"; cout << "\n\n\n\r Seleccione su opcion ---> "; cin >> op; switch(op) { case 1 : ALTA_DIRECTA(); break; break; case 2 : CONSULTA_DIRECTA();
case 3 : MODIFICACION_DIRECTA(); break; case 4 : BAJA_LOGICA_DIRECTA(); break; case 5 : LISTADO_SECUENCIAL(); break; } }while(op!=0); return; }
void ALTA_DIRECTA(void) { int codigo; // Variable local para el numero de producto clrscr(); cout << "\n\rALTAS DE REGISTROS DE EMPLEADO"; alias=fopen("CONTROL.DAT","rb+"); // Intenta abrir el archivo CONTROL.DAT // en modo de lectura/escritura if(alias==NULL) alias=fopen("CONTROL.DAT","wb"); // Crea el archivo en caso de no existir
18
dir_fisica=codigo*sizeof(Registro); // Calculo de la dir. fisica fseek(alias,dir_fisica,SEEK_SET); //Posicionar el apuntador del archivo fread(&Registro,sizeof(Registro),1,alias); // Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias" if(Registro.codigo==codigo) { cout << "\n\n\n\rRegistro duplicado !!!"; fclose(alias); getch(); return; } cout << "\n\rNombre: "; gets(Registro.nombre); cout << "\n\rDepartamento : "; cin >> Registro.departamento; cout << "\n\rSueldo do { cout << "\n\rFijo : "; Registro.fijo=toupper(getche()); }while(Registro.fijo!='S' && Registro.fijo!='N'); Registro.codigo=codigo; fseek(alias,dir_fisica,SEEK_SET); //Posicionar el apuntador del archivo fwrite(&Registro,sizeof(Registro),1,alias); // Grabar el Registro completo fclose(alias); // Cierra el archivo cout << "\n\n\n\rEmpleado Registrado !!!"; 19 : "; cin >> Registro.sueldo;
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>"; getch(); return; } void CONSULTA_DIRECTA(void) { int codigo; // Variable local para el numero de producto que desea consultar clrscr(); cout << "\n\rCONSULTA DE REGISTROS DE EMPLEADO"; alias=fopen("CONTROL.DAT","rb"); // Intenta abrir el archivo CONTROL.DAT // en modo de solo lectura if(alias==NULL) { cout << "\n\n\n\rNo existe el archivo !!!"; cout << "\n\r<<< Oprima cualquier tecla para continuar >>>"; getch(); return; } cout << "\n\n\n\rCodigo de Empleado: "; cin >> codigo; dir_fisica=codigo*sizeof(Registro); // Calculo de la dir. fisica fseek(alias,dir_fisica,SEEK_SET); //Posicionar el apuntador del archivo fread(&Registro,sizeof(Registro),1,alias); // Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias" if(Registro.codigo==codigo) { cout << "\n\rCodigo Nombre Departamento Sueldo Fijo"; cout << "\n\r---------------------------------------------------------------------------";
20
printf("\n\r%3d\t%30s\t%3s\t\t$%4.2f\t %c",Registro.codigo,Registro.nombre,Registro.departamento,Registro.sueldo,Regi stro.fijo); } else { cout << "\n\n\n\rNo existe ese registro !!!"; } fclose(alias); cout << "\n\n\n\n\r<<< Oprima cualquier tecla para continuar >>>"; getch(); return; } void MODIFICACION_DIRECTA(void) { int codigo; // Variable local para el numero de producto que desea modificar clrscr(); cout << "\n\rMODIFICACION DE REGISTROS DE EMPLEADO"; alias=fopen("CONTROL.DAT","rb+"); // Intenta abrir el archivo PRODUCTO.DIR // en modo de lectura/escritura if(alias==NULL) // Valida la existencia del archivo { cout << "\n\n\n\rNo existe el archivo !!!"; cout << "\n\r<<< Oprima cualquier tecla para continuar >>>"; getch(); return; } cout << "\n\n\n\rCodigo de Empleado: "; cin >> codigo;
21
dir_fisica=codigo*sizeof(Registro); // Calculo de la dir. fisica fseek(alias,dir_fisica,SEEK_SET); //Posicionar el apuntador del archivo fread(&Registro,sizeof(Registro),1,alias); // Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias" if(Registro.codigo==codigo) { cout << "\n\rCodigo Nombre Departamento Sueldo Fijo"; cout << "\n\r------------------------------------------------------------------------"; printf("\n\r%3d\t%30s\t%3s\t\t$%4.2f\t %c",Registro.codigo,Registro.nombre,Registro.departamento,Registro.sueldo,Regi stro.fijo); cout << "\n\n\n\rAnote los nuevos datos ..."; cout << "\n\rNombre: "; gets(Registro.nombre); cout << "\n\rDepartamento : "; cin >> Registro.departamento; cout << "\n\rSueldo do { cout << "\n\rFijo : "; Registro.fijo=toupper(getche()); }while(Registro.fijo!='S' && Registro.fijo!='N'); // Es necesario reposicionar el apuntador del archivo al principio del // registro que desea modificar, ya que al leer un registro, el // apuntador se posiciona en el registro siguiente // La funcion ftell(alias) devuelve la posicion donde se encuentra el // apuntador fseek(alias,dir_fisica,SEEK_SET); //Posicionar el apuntador del archivo fwrite(&Registro,sizeof(Registro),1,alias); // Graba el registro con // los nuevos campos fclose(alias); // Cierra el archivo cout << "\n\n\n\rRegistro modificado !!!"; cout << "\n\r<<< Oprima cualquier tecla para continuar >>>"; 22 : "; cin >> Registro.sueldo;
getch(); return; } else { cout << "\n\n\n\rNo se encuentra ese registro !!!"; } fclose(alias); // Cierra el archivo cout << "\n\n\n\n\r<<< Oprima cualquier tecla para continuar >>>"; getch(); return; } void BAJA_LOGICA_DIRECTA(void) { int codigo; // Variable local para el numero de producto que desea eliminar char op; clrscr(); cout << "\n\rBAJA LOGICA DE REGISTROS DE EMPLEADO"; alias=fopen("CONTROL.DAT","rb+"); // Intenta abrir el archivo PRODUCTO.DIR // en modo de lectura/escritura if(alias==NULL) // Valida la existencia del archivo { cout << "\n\n\n\rNo existe el archivo !!!"; cout << "\n\r<<< Oprima cualquier tecla para continuar >>>"; getch(); return; } cout << "\n\n\n\rNumero de Codigo: "; cin >> codigo;
23
dir_fisica=codigo*sizeof(Registro); // Calculo de la dir. fisica fseek(alias,dir_fisica,SEEK_SET); //Posicionar el apuntador del archivo fread(&Registro,sizeof(Registro),1,alias); // Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias" if(Registro.codigo==codigo) { cout << "\n\rCodigo Nombre Departamento Sueldo Fijo"; cout << "\n\r------------------------------------------------------------------------"; printf("\n\r%3d\t%30s\t%3s\t\t$%4.2f\t %c\n\n\n\n\r",Registro.codigo,Registro.nombre,Registro.departamento,Registro.su eldo,Registro.fijo); Registro.codigo=0; strcpy(Registro.nombre,""); Registro.departamento,""; Registro.sueldo=0.0; Registro.fijo=' '; // Es necesario reposicionar el apuntador del archivo al principio del // registro que desea modificar, ya que al leer un registro, el // apuntador se posiciona en el registro siguiente // La funcion ftell(alias) devuelve la posicion donde se encuentra el // apuntador do { cout << "\n\rEsta seguro que desea eliminar este registro? [S/N] ---> "; op=toupper(getche()); }while(op!='S' && op!='N'); if(op=='S') { fseek(alias,dir_fisica,SEEK_SET); //Posicionar el apuntador del archivo fwrite(&Registro,sizeof(Registro),1,alias); // Graba el registro con 24
// los nuevos campos cout << "\n\n\n\rRegistro eliminado logicamente !!!"; } else { cout << "\n\n\n\rRegistro NO eliminado !!!"; } fclose(alias); // Cierra el archivo cout << "\n\r<<< Oprima cualquier tecla para continuar >>>"; getch(); return; } else { cout << "\n\n\n\rNo se encuentra ese registro !!!"; } fclose(alias); // Cierra el archivo cout << "\n\n\n\n\r<<< Oprima cualquier tecla para continuar >>>"; getch(); return; } void LISTADO_SECUENCIAL(void) { clrscr(); cout << "\n\rLISTADO DE REGISTROS DE CODIGO"; alias=fopen("CONTROL.DAT","rb"); // Intenta abrir el archivo PRODUCTO.DIR // en modo de solo lectura if(alias==NULL) { cout << "\n\n\n\rNo existe el archivo !!!"; 25
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>"; getch(); return; } cout << "\n\rCodigo Nombre Departamento Sueldo Fijo";
cout << "\n\r---------------------------------------------------------------------------"; fread(&Registro,sizeof(Registro),1,alias); // Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias" while(!feof(alias)) // Ciclo mientras no se encuentre el final del archivo { printf("\n\r%3d\t%30s\t%3s\t\t$%4.2f\t %c",Registro.codigo,Registro.nombre,Registro.departamento,Registro.sueldo,Regi stro.fijo); fread(&Registro,sizeof(Registro),1,alias); } fclose(alias); // Cierra el archivo cout << "\n\r----------------------------------------------------------------------------"; cout << "\n\rFin del listado !!!"; cout << "\n\r<<< Oprima cualquier tecla para continuar >>>"; getch(); return; }
26
*Programa de trabajo
Implementar las rutinas necesarias para la gestin de un archivo directo con transformacin de claves para control de personal que contenga los campos Cdigo, Nombre del empleado, Departamento y Sueldo. El archivo est diseado para contener 100 registros (mas un 20% extra para colisiones). Se supone que el programa principal tiene las declaraciones principales y est abierto.
27
28
Descripcin
En la pantalla principal se despliega un men de opciones donde nos pide la opcin que queremos elegir, entre las que tenemos:
1- Altas: edicin de un registro. 2- Consulta visualizar la informacin contenida en el archivo. 3- Modificacin Cambiar total o parcial un archivo. 4- Baja Lgica es la accin de eliminar un registro de un archivo. 5- Listado secuencial muestra una lista de los todos los registros introducidos.
29
Aqu se nos pide que editemos un registro llamado cdigo de empleado que es nuestro campo clave, luego nos pide el nombre, el departamento, el sueldo, y estatus que es fijo temporero.
En esta pantalla despus de haber introducido los datos, los datos son capturados y nos pide que presionemos cualquier tecla para continuar.
30
31
32
33
*Gisell Potorreal
Mi experiencia en este trabajo fue bastante fructfera porque pude aprender muchas terminologas que yo conoca y al mismo tiempo pude compartir conocimientos con mis compaeros y aprend a conocerlos mas afondo
*Rabel Rodrguez
Este trabajo me ha servido de mucho, ya que he recibido de el la enseanza y aprendizaje para seguir avanzando en lo que es el lenguaje de programacin y parte de mi carrera a seguir, aunque nos tomo mucho sacrificio para llevarlo a cabo me llena de satisfaccin por que obtuve los conocimientos necesarios para El desarrollo de la meta a seguir. 34
Conclusin
Los nuevos sistemas de informacin son costosos en tiempos y recursos, la solucin moderna de sistemas de informacin exigen nuevas herramientas y metodologas para resolver rpida, econmica y eficiente los problemas de informacin planteados por las organizaciones. Aun ms el pleno potencial del hardware no es aprovechado plenamente y existe un considerable retraso con el software y sus aplicaciones, generando lo que se conoce como crisis del software. La creacin de este programa ha sido de gran satisfaccin ya que cumple con los requerimientos de la empresa y arroja el resultado esperado. una forma ms rpida sin necesidad de recorrer todo el dato En este se almacenan los datos en un archivo directo para as poder acceder a los datos de
35
Bibliografa
Fundamentos de programacin Algoritmos, estructura de Datos y objetos Tercera edicin. Autor: Luis Joyanes Aguilar
36
37