Está en la página 1de 13

UNIVERSIDAD DE PANAMÁ

CRUV

FACULTAD: CRUV FIEC

CARRERA: INGIENERIA EN INFORMÁTICA

TRABAJO: PROGRAMACIÓN II

TEMA: MANEJO DE ARCHIVOS EN C

INTEGRANTES:
LEONARDO BATISTA: 9-755-422
JUAN VERGARA: 9-754-1296

AÑO 2019

PRIMER SEMESTRE
INTRODUCIÓN
El programa que hemos hecho lo podemos relacionar con la vida real de la siguiente manera puede
existir una lista de empleado de una empresa x donde existan más de 100 empleados, estos con
cargos diferentes, salarios diferentes según el cargo que ejerzan en la empresa. Dado que los datos
de los empleados estén guardados en un archivo y que al dueño de la empresa necesite saber los
10 hombres que tienen mayor salario y a las 10 mujeres que tienen mayor salario ingresando el sexo
de los empleados a mostrar y luego que muestre los demás del mismo sexo. Este programa seria
perfecto para dicha solución del dueño de la empresa.
Podemos hacerle a este programa varias mejoras como hacer una especie de menú donde te de la
oportunidad de que el empleado se registre y la otra opción que muestre a las 10 mujeres y hombres
que tienen mayor salario. Donde este la sesión de registro del menú podemos agregar la fecha de
nacimiento y que el programa detecte el día que cumple el empleado y así lo empleados organizar
una fiesta sorpresa y la sección donde muestra los empleados con mayor salario y saber quién gana
más con relación a su otra compañera. En pocas palabras hacer una especie ranking de quien tiene
mayor salario y llevar un control de los trabajadores.
El objetivo del programa realizado por nosotros es entender, aplicar conocimientos adquiridos en
clase sobre el tema de manejo de archivos, mas que nada se enfoca en la lectura de un archivo y
además de eso extraer esos datos que contiene el archivo para su manipulación y devolver los datos
de salida.

La solución lograda en este programa fue mostrar los 10 primeros empleados de sexo x (F o M) con
mayor salario. En pocas palabras extraer los datos de los empleados y ordenarlo de mayor a menor,
para luego mostrar los 10 primeros con salario superior a los demás.
Descripción completa de la salida del programa
La salida del programa muestra la lista de los 10 empleados sea M o F con mayor salario.
Por lo que en pantalla se mostrará un listado de los empleados donde la salida será la siguiente
forma

********DATOS DE LOS EMPLEADOS CON MAYOR SALARIO********

Donde este es el encabezado del programa y como dice el encabezado muestra los 10 primeros
empleados con salario mayor dependiendo del sexo que se ingrese.
Luego de esto, se muestra la información de cada empleado en pequeños segmentos como el
siguiente divido por dos líneas cada información de cada empleado:
Empleado [0]:
Nombre: Juan Castillo
Edad: 45
Servicio: 15
Salario: 452.30
Sexo: M

De esta forma saldrá el listado de la de los 10 empleados con mayor salario.


NOTA: repito según el sexo indicado si el usuario Ingresa m saldrán todos los empleados
masculinos con mayor salario.
Luego que se muestran los 10 empleados se hace una pausa en el programa, para así apreciar a los
10 empleados con mayor salario. Y luego de pulsar Enter se mostrará los empleados de menor
salario. Como se muestra en la siguiente mostración.
Presione una tecla para continuar. . .

*******DATOS DE EMPLEADOS CON MENOR SALARIO*******

Empleado [0]:
Nombre: Leonardo Batista
Edad: 30
Servicio: 15
Salario: 200.00
Sexo: M
De esta forma se vería luego de pulsar Enter u otra tecla.
Funciones usadas en el programa

funciones descripción
fopen () Uso: abrir el archivo en modo lectura
Retorna: un puntero a archivo de lo
contrario un valor NULL.
fclose () Uso: cierra el archivo
Retorna: cero si la secuencia se cierra
correctamente de lo contrario si hay un
error devuelve un EOF.
feof () Uso: verifica si ha llegado al fin del
archivo.
Retorna: devuelve cero si no ha
llegado al fin del archivo de lo
contrario, devuelve un EOF.
fscanf () Uso: para leer lo que contiene el
archivo.
scanf () Uso: para capturar el sexo de los
empleados a mostrar por consola.
printf () Uso: para mostrar la información de
los empleados por consola.
Funciones creadas por el programador
ExtraerDats () Uso: como dice la función extrae los
datos de cada empleado del archivo.
Retorna: la cantidad de empleados
que se encuentra registrado en el
archivo.
Argumentos: EMP t [].
Uso de argumentos:
EMP t []: almacena los datos de los
empleados en una estructura.

ordenar (); Uso: para ordenar a los empleados


según el salario (de mayor a menor)
Retorna: no retorna ningún valor
Argumentos: EMP t [], int n, EMP
temp;
Uso de argumentos:
EMP t []: contiene los salarios de los
empleados, (usada para comparar los
salarios de los empleados).
Int n: usada para recorrer a todos los
empleados que existen en la estructura
desplegarEmp (); Uso: usada para desplegar los Datos
de cada empleado según el sexo que
indique el usuario.
Retorna: no retorna ningún valor.
Argumentos: EMP t [], int n.
Uso de argumentos:
EMP t []: contiene todos los datos de
cada empleado (usada para mostrar
en pantalla esos datos)
Int n: usada para recorrer la lista de
todos los empleados.

Estructura de datos usada en el programa:


 Typedef struct Empleados{
/*atributos*/
}EMP;

esta estructura de dato contiene el nombre del empleado, la edad, el


sexo, los años de trabajar en la y el salario que gana ese empleados
estos son los atributos que contiene la estructura empleados, ademas
es la estructura es de tipo EMP.

 EMP trabajadores [30];

Esta estructura de dato fue usada para poder almacenar cada uno de los empleados que existen en
archivo o que estén registrado en el archivo además esta estructura es de tipo EMP por lo que en
cada posición contendrá los datos de un empleado.
Código fuente
Observe que la descripción de cada segmento de código está marcada en verde.
Nota: De la línea 15 a la 38 es el cuerpo de la función principal, de la línea 41 a la 66 se encuentra el
cuerpo de la función que extrae los datos del archivo, de la línea 68 a la 86 se ejecuta la función
ordenar y de la línea 89 a la 152 se ejecuta la función desplegar. Observe estarán marcada por el
color morado.

1. #include <stdio.h>
2. #include <stdlib.h>
3.
4. typedef struct Empleados{
5. char Nom[30];
6. char Apellido[30];
7. int edad;
8. char sexo;
9. int AniosT;
10. float salario;
11. }EMP;
12.
13.
14.
15. int main(){
16.
17. //prototipos de las funciones
18. int ExtraerDats(EMP t[]);
19. void ordenar(EMP t[], int n, EMP temp);
20. void desplegarEmp(EMP t[], int n);
21.
22.
23. EMP trabajadores[30]; //arreglo para almacenar cada información de cada empleado de
la empresa
24. EMP temp; //variable de tipo estructura usada como auxiliar en la funcion ordenar
25.
26. int n_empleados,i,contador=0; //variables dentro del main
27.
28.
29.
30. n_empleados = ExtraerDats(trabajadores); //extrae los datos del archivo guardandolo en
una estructura devolviendo la cantidad de empleados que hay en el archivo

31. ordenar(trabajadores, n_empleados, temp); //ordena los empleados de salario mayor a


menor

32. desplegarEmp(trabajadores, n_empleados); // despliega los 10 primeros empleados de


segun el sexo indicado por el usuario y luego muestra los
33. // que siguen del mismo sexo.
34.
35.
36.
37. return 0;
38. }
39.
40. //funcion que extrae los datos del archivos
41. int ExtraerDats(EMP t[]){
42.
43. FILE *empl; // creando el archivo
44.
45. int i=0;
46.
47. empl = fopen("emp.txt", "r"); //abriendo el archivo
48.
49. if(empl == NULL){ //viendo si el archivo existe
50. printf("ERROR: \aEl archivo no existe. Por favor crearlo.");
51. exit(1);
52. }
53. //
54. while(feof(empl) == 0){ //recorriendo el archivo de arriba hacia abajo hasta encontrar el
final del archivo
55.
56. fscanf(empl, "%s %s %d %c %d %f", t[i].Nom, t[i].Apellido, &t[i].edad, &t[i].sexo,
&t[i].AniosT, &t[i].salario ); //leyendo cada line del archivo
//y guardando el contenido
58. i++; //contando la cantidad de empleados que existen la lista o en el archivo
59. }
60.
61.
62. fclose(empl); // después de sacar el contenido del archivo lo cerramos
63.
64.
65. return (i); //retornando la cantidad de empleados que existe en el archivo
66. }
67. //función para ordenar por salario método usado (ordenamiento por inserción)
68. void ordenar(EMP t[], int n, EMP temp){
69.
70. int i,j;
71.
72.
73. for(i=0; i<n; i++){
74. j=i+1;
75. while(j<n){
76. if(t[i].salario < t[j].salario){ //ordenamos la lista segun el salario mayor a menor
77. temp = t[i];
78. t[i] = t[j];
79. t[j] = temp;
80. }
81. j++;
82. }
83. }
84.
85. return;
86. }
87.

88. //muestra a los 10 empleados con mayor salario


89. void desplegarEmp(EMP t[], int n){
90.
91.
92. char sex;
93. int i, contador = 0;
94. int romper = 1;
95.
//si el usuario no ingresa la letra correspondiente le volverá a preguntar que ingrese la
letra correcta
96. do{
97. printf("Sexo de empleados a mostrar (M o F): ");
98. scanf(" %c", &sex); //capturando el sexo de los empleados a mostrar
99.
100. //transformando la letra m o f a mayúscula
101. if(sex == 'm' || sex == 'f'){
102. if(sex == 'm')
103. sex = 'M' + sex - 'm'; //transforma m minuscula a mayuscula
104. else
105. sex = 'F' + sex - 'f'; ////transforma f minuscula a mayuscula

106.
107. romper = 0;
108. }
109. else
110. if(sex == 'M' || sex == 'F')
111. romper = 0;
112.
113. }while(romper);
114.
115.
116.
117.
118. system("cls");
119.
120. printf("\t\t\t---------------------------------------------------------------------------------------------------------
----------\n");
121. printf("\t\t\t\t\t **********DATOS DE LOS EMPLEADOS CON MAYOR
SALARIO***********\n");
122. printf("\t\t\t---------------------------------------------------------------------------------------------------------
----------\n");
123.
124. printf("--------------------------------------------------------------------------------------------------------------
-\n");
125.
126. //mostrando los 10 primeros empleados de sexo M o F según lo indique el usuario con
mayor salario y luego mostrar los empleados faltantes de la lista
127.
128. for(i=0; i<n; i++){
129. if(sex == t[i].sexo && contador < 10){ // observando si el sexo ingresado es
igual a uno de la lista de empleado de ser así entra al cuerpo del if además verifica
cuanto a encontrado del sexo que ingreso el usuario.
130. printf("Empleado[%2d]: ",contador);
131. printf("\n\tNombre: %s %s ",t[i].Nom, t[i].Apellido);
132. printf("\n\tEdad: %2d ",t[i].edad);
133. printf("\n\tServicio: %2d ",t[i].AniosT);
134. printf("\n\tSalario: %6.2f ", t[i].salario);
135. printf("\n\tSexo: %c \n", t[i].sexo);
136. printf("--------------------------------------\n--------------------------------------\n");
137. contador++;
138.
139. if(contador == 10){ // si encontró mas de 10 empleados del mismo sexo el programa se
detiene
140. contador = 0;
141. system("pause");
142. printf("\t\t\t\t\t\t------------------------------------------------------------------------\n");
143. printf("\t\t\t\t\t **********EMPLEADO CON MENOR
SALARIO***********\n");
144. printf("\t\t\t\t\t\t------------------------------------------------------------------------\n");
145.
146. printf("--------------------------------------------------------------------------------------------------------
-------\n");
147. }//fin si secundario
148. }//fin si
149. }//fin for
150.
151.
152. return;
}
Evidencia de compilación

Evidencia de ejecución
Esquema del llamado de cada una de las funciones

funcion principal main ()

sud-programas ExtrerDats () ordenar () desplegarEmp ()

funciones de librerias fopen () feof () fclose () printf () scanf ()

fscanf ()

Conclusión
Con este programa pudimos comprender y abrirnos la mente sobre ideas de hacer programas que se
asemejan más a la vida real, también nos dimos cuenta de que la programación aprendida
anteriormente solo fue la base principal para poder entender algunos conceptos nuevos además los
programas hechos anteriormente eran muy alejados de los programas hechos por profesionales.

Ambos como estudiantes de ingeniería informática comenzamos a visualizar ideas muy asombrosas
que podemos hacer programas asombrosos con el tema aprendido. Por eso le exhorto que explique
más sobre este tema que nos interesó mucho. Le pedimos esto porque sé que en internet hay
mucha información, pero esa información es como vacía no se logra a entender del todo y llegamos
a confundir.

Como explicamos al principio a este programa se le puede hacer varias mejoras, pero como no las
pedía no se realizamos. Las mejoras que se le puede hacer a este programa la pueden encontrar en
la introducción de este trabajo, ahí están algunas ideas.

Uno de los recursos principales ofrecidos fueron las explicaciones del profesor en clase sobre la
utilidad de archivo y como es su funcionamiento, en que nos puede ser útil, también cabe destacar
sobre las fuentes ofrecidas mediante la plataforma que fueron:

http://isa.umh.es/asignaturas/ia/temas/t2.pdf

Mediante este sitio web pudimos refrescar la memoria sobre lo que es método de ordenación, y asi
poder elegir el método de ordenación, el cual empleamos para ordenar la lista de empleados con el
mayor sueldo al menor.

http://c.conclase.net/ficheros/?cap=002

http://mimosa.pntic.mec.es/~flarrosa/fichc.pdf
https://es.scribd.com/document/139088094/Manejo-de-archivos-de-datos-con-el-lenguaje-C

Con el sitio web y los 2 documento en pdf, estudiamos, analizamos y tratamos de comprender sobre
el uso de ficheros en el lenguaje c, y de como es el funcionamiento y su utilidad.

https://es.scribd.com/doc/13676497/Registros-y-Arreglos-en-C

este documento dado en la plataforma, pudimos repasar sobre el uso de vectores y el arreglos, para
poder llevar acabo nuestro programa y poder guardar los datos.

Coevaluación elaborada por Juan Vergara

La labor con mi compañero fue excelente compartimos ideas y nos aclaramos dudas entre nosotros
para poder realizar el programa, por ejemplo uno de las ayudas de mi compañero hacia mi persona
fue en el momento de ordenar en el programa ya que no tenía muy claro la idea, para mí la parte
más difícil fue el momento de implementar el método de ordenación ya que al momento de ordenar
me mandaba error y cuando se ordenó se ordenaba los salarios pero no con sus respectivos
nombres, por lo menos mi metodología fue usar recursos de la web 2.0, y de la plataforma, por los
menos pdf entregados, video por la web, uno de mis nuevos conocimiento fue el uso de los archivos
ya que no tenía idea como era su funcionamiento, esta asigna será de mucha ayuda en un futuro
cuando llegue alguna empresa y necesiten un sistema que arregla un n cantidad de empleados .

Coevaluación elaborada por Leonardo Batista

Bueno la labor de mi compañero de trabajo fue muy excelente me ayudo en todo e igual que yo a él.
Bueno apoye a mi compañero de algunos conceptos que no tenia claro, igual algunos integrantes de
otros grupos nos proporcionaron algunas ideas igual que nosotros a ellos, algunos conceptos que no
tengo claro fueron las funciones fwrite () y fread (), la parte mas difícil fue la realización de este
documento ya que hubo algunos puntos que no quedaron claros en lo que se pedía, para lograr los
objetivos de este trabajo fue consultar con mis compañeros y buscar información en internet
referente al tema estudiado, además logramos conocimientos sobre la creación de archivos
manipular datos y volverlos a guardar dentro del archivo, esta asignación nos ayuda a entender de
forma mas realista el archivamiento de datos de x empresa o de x empleado.

También podría gustarte