PUBLICIDAD


Proyecto - Ejercicio final - Programación en C


Introducción

En este artículo juntaremos todos los conocimientos aprendidos sobre lenguaje C para crear un proyecto final completo, utilizando funciones, arreglos, estructuras de control selectivas y ciclos.

Marco teórico

Funciones: Es un subprograma que realiza una tarea en específica. Estas son muy útiles pues nos permite estructurar el programa y hacerlo mucho más entendible. Si deseas saber más sobre funciones, puedes hacerlo en este enlace: Funciones.

Ciclos Do – While: Estructura que repetirá un ciclo un número indefinido de veces mientras una condición sea verdadera. Puedes aprender más sobre esto en este artículo: Ciclos Do – While.

Switch – Case: Es una estructura de control muy parecido al If – Else anidado. Consiste en una serie de diferentes acciones que se van a ejecutar dependiendo de una condición (Una acción dependiendo la condición). En este artículo analizamos todo sobre esta estructura: Estructura de control selectiva Switch – Case.

Arreglos: Un “Arreglo” o también conocido como “Array” es un tipo de dato cuya función es guardar una serie de datos o caracteres del mismo tipo. A este se le debe declarar con un número limitado espacios de memoria. Puedes ver más sobre este tema en este enlace: Arreglos y cadenas de caracteres.

Buffer: Un buffer es un espacio de memoria donde se guardan datos temporales de entradas y salidas de datos, comúnmente del teclado o mouse.

Limpiar Buffer: En ocasiones es importante limpiar el buffer, pues si tenemos guardada información temporal ahí, el programa muchas veces lo detecta como datos de entrada, que realmente es basura, y podría provocarnos errores al momento de solicitar información de entrada. Hay varias maneras de limpiar el buffer, aquí les mostramos una:

Código:

while(getchar()!='\n');//Limpiamos buffer de entrada

Esta línea la colocamos antes de pedir información de entrada, por ejemplo:

Código:

while(getchar()!='\n');//Limpiamos buffer de entrada
printf("Ingrese el nombre del trabajador: ");
gets(nombre[x]); //Guardamos nombre	


Ejercicio

Realizar un programa en el que el usuario pueda dar de alta trabajadores, guardar datos básicos del empleado y consultarlos cuando él quiera. El programa iniciará mostrando las siguientes 5 opciones:

1 – Dar de alta trabajadores: Aquí el usuario podrá introducir los datos de 3 trabajadores. Los datos a solicitar serán su nombre, su número de empleado (clave), sueldo y horas trabajadas.

2 – Consultas generales: En este apartado el usuario podrá ver los datos de todos sus trabajadores desplegados en una misma pantalla. El orden en que los mostrara será alfabéticamente por nombre.

3 – Consultas por clave: El usuario deberá introducir la clave (matrícula) del trabajador que quiere buscar, y el programa deberá mostrar los datos de ese trabajador, en caso de que se encuentre dado de alta.

4 – Consultas por nombre: El usuario tendrá que introducir el nombre del trabajador que quiere buscar, y el programa deberá mostrar los datos de ese trabajador, en caso de que se encuentre dado de alta.

5 – Salir: Cuando el usuario quiera salir del programa deberá seleccionar esta opción, mientras no la seleccione el programa debe seguir funcionando, regresando al menú principal.

Diagrama de flujo

Función principal

Proyecto - Ejercicio final - 1

Función altas

Proyecto - Ejercicio final - 2

Función ord_nombre

Proyecto - Ejercicio final - 3

Función clave

Proyecto - Ejercicio final - 4

Función bus_nombre

Proyecto - Ejercicio final - 5


Publicidad


Programa

Código:

/* Programa final de curso Programación en Lenguaje C - Por Solución Ingenieril*/
#include <stdio.h> //Declaramos librerías
#include <stdlib.h>
#include <string.h>

void altas(); //Función para dar de alta a los trabajadores
void clave(); //Función para buscar trabajadores por clave
void bus_nombre(); //Función para buscar trabajadores por nombre
void ord_nombre(); //Función para consultar a todos los trabajadores ordenados alfabéticamente
char nombre[3][20],numero[3][6],sueldo[3][6],hor[3][6]; //Variables de cada trabajador
int y=1; //Bandera indicadora de que no han ingresado trabajador (cuando está en 1)

int main(){
	char opcion; //Variable que guardara la opción seleccionada
	
	do{ //Hacer...
		system("cls"); //Limpiamos pantalla y desplegamos menú
		printf("\n----------------------------\nBienvenido usuario\n\n");
		printf("A - Altas: Agregar a trabajadores\n");
		printf("B - Consultas generales\n");
		printf("C - Consultas por claves\n");
		printf("D - Consultas por nombres\n");
		printf("E - Salir\n\n");
		printf("Selecciona una opcion: ");
		scanf("%s",&opcion); //Guardamos la opción seleccionada por el usuario
	
		//Mandamos a llamar a la función que el usuario selecciono
		switch(opcion){ 
			case 'A':
			case 'a':
				altas();
			break;
		
			case 'b':
			case 'B':
				ord_nombre();
			break;
		
			case 'c':
			case 'C':
				clave();
			break;
		
			case 'd':
			case 'D':
				bus_nombre();
			break;
		
			case 'e':
			case 'E': //Opción para salir del programa
				printf("Saliendo del programa \n");			
			break;
		
			default: //Opción que no está disponible en el menú
				printf("Opcion no valida");
			break;
		}	
	}while(opcion!='e' && opcion!='E'); 
	//Hacer mientras el usuario no selecciona la opción de salir...
	
	getchar();
	return 0;
}

void altas(){ //Función para dar de alta a trabajadores
	int x; //Variable contadora del ciclo
	system("cls"); //Limpiamos pantalla
	
	if(y==1){ //Si el usuario no ha dado de alta trabajadores...
		for(x=0;x<3;x++){ //Ciclo que permite dar de alta 3 trabajadores
			while(getchar()!='\n');//Limpiamos buffer de entrada
			printf("Ingrese el nombre del trabajador: ");
			gets(nombre[x]); //Guardamos nombre		
			printf("Ingrese el numero del trabajador: ");
			scanf("%s",&numero[x]);		
			printf("Ingrese el sueldo del trabajador: ");
			scanf("%s",&sueldo[x]);			
			printf("Ingrese las horas trabajadas: ");
			scanf("%s",&hor[x]);
			system("cls"); //Limpiamos pantalla
		}
		y=2; //Indicamos que ya dio de alta usuarios
	}
	else{ //En caso de que ya haya dado de alta a sus trabajadores
		printf("Ya diste de alta a tus trabajadores\n");
		system("PAUSE");		
	}
}

void clave(){ //Función que buscara usuarios por clave
	int p,pos=-1; //Inicializamos variables
	char buscar[6]; //Variable que guardara trabajador a buscar
	
	system("cls"); //Limpiamos pantalla
	if(y==1) //Si no ha dado de alta usuarios...
		printf("Primero debes dar de alta a algunos usuarios\n");
	
	else{ //Si ya dio de alta usuarios...
		printf("Cual es el numero del trabajador que buscas: ");
		while(getchar()!='\n');//Limpiamos buffer de entrada	
		gets(buscar); //Guardamos número a buscar
		
		for(p=0;p<3;p++){ //Buscamos con el ciclo
			if(strcmpi(numero[p],buscar)==0){ //Comparamos los números
				pos=p; //Si encontró, guardamos la posición
			}
		}
		
		if (pos==-1){ //Si no encontró...
			printf("Numero de Trabajador no encontrado \n");
		}
		else{ //Si encontró, desplegamos los datos
			printf(" Nombre del trabajador: %s \n Numero del trabajador: %s \n Sueldo: %s \n Horas trabajadas: %s\n",nombre[pos],numero[pos],sueldo[pos],hor[pos]);
  		}
	}
	system("PAUSE");		
}

void bus_nombre(){ //Ciclo que busca a usuarios por nombre
	char buscar_nombre[20]; //Variable donde se guarda el nombre a buscar
	int q,pe=-1; //Variables auxiliares
	system("cls"); //Limpiamos pantalla
		    
	if(y==1) //Si no ha dado de alta trabajadores...
		printf("Primero debes dar de alta a algunos usuarios\n");
	
	else{ //Si ya dio de alta trabajadores...
		printf("Cual es el nombre del trabajador que buscas: ");
		while(getchar()!='\n'); //Limpiamos buffer de entrada	
		gets(buscar_nombre); //Guardamos nombre a buscar
		
		for(q=0;q<3;q++){ //Ciclo para buscar trabajador
			if(strcmpi( nombre[q],buscar_nombre)==0) //Comparamos nombres
				pe=q; //Si encontró, guardar la posición
		}
		if (pe==-1) //Si no encontró...
			printf("Trabajador no encontrado \n");

		else //Si encontró, desplegamos datos
			printf(" Nombre del trabajador: %s \n Numero del trabajador: %s \n Sueldo: %s \n Horas trabajadas: %s\n",nombre[pe],numero[pe],sueldo[pe],hor[pe]);			
	}
	system("PAUSE");
}

void ord_nombre(){ //Función que mostrara todos los trabajadores ordenados alfabéticamente
	int k,j; //Variables de ciclos auxiliares
	char aux[20], auxb[20], auxc[20], auxd[20]; //Variables donde guardaremos temporalmente los datos de usuario
	system("cls"); //Limpiamos pantalla
	
	if(y==1) //Si no ha dado de alta usuarios...
		printf("Primero debes dar de alta a algunos usuarios\n");
	
	else{ //Si ya dio de alta usuarios...
		for(k=0;k<3;k++) //Corremos el ciclo 3 veces
  			for(j=0;j<3-k;j++) {//Cada ciclo principal lo ejecutamos 3 veces
    			if(strcmp(nombre[j],nombre[j-1])<0) //Si nombre[j] es menor alfabéticamente que [j-1]...
        		{ //Pasamos todo lo que había en [j] a [j-1]... y lo que había en [j-1] a [j]
        			strcpy(aux,nombre[j]);
        			strcpy(nombre[j],nombre[j-1]);
        			strcpy(nombre[j-1],aux);
        			strcpy(auxb,numero[j]);
        			strcpy(numero[j],numero[j-1]);
        			strcpy(numero[j-1],auxb);
        			strcpy(auxc,sueldo[j]);
        			strcpy(sueldo[j],sueldo[j-1]);
        			strcpy(sueldo[j-1],auxc);
        			strcpy(auxd,hor[j]);
        			strcpy(hor[j],hor[j-1]);
        			strcpy(hor[j-1],auxd);
    	    	}
    		}
    	//Una vez ordenados...
    	system("cls"); //Limpiamos pantalla
		printf("CONSULTAS GENERALES\n ----------- \n"); 
		for(k=0;k<3;k++){ //Y mostramos todos los nombres ordenados
			printf(" Nombre del trabajador: %s \n Numero del trabajador: %s \n Sueldo: %s \n Horas trabajadas: %s\n ------- \n",nombre[k],numero[k],sueldo[k],hor[k]);
		}  
	}
	system("PAUSE");	
}

Resultados

Menú principal

Proyecto - Ejercicio final - 6

En caso de que quiera acceder a alguna función sin dar de alta usuarios

Proyecto - Ejercicio final - 7

Dando de alta usuarios

Proyecto - Ejercicio final - 8

Proyecto - Ejercicio final - 9

Proyecto - Ejercicio final - 10

En caso de querer dar de alta usuarios aun cuando ya los diste de alta anteriormente

Proyecto - Ejercicio final - 11

Seleccionando opción de consultas generales

Proyecto - Ejercicio final - 12

Buscando trabajadores por su clave

Proyecto - Ejercicio final - 13

En caso de que no encuentre un usuario por clave

Proyecto - Ejercicio final - 14

Buscando trabajadores por nombre

Proyecto - Ejercicio final - 15

En caso de que no encuentre un usuario por nombre

Proyecto - Ejercicio final - 16

Saliendo del programa

Proyecto - Ejercicio final - 17

Conclusión

En este artículo analizamos un ejemplo de un programa que utiliza muchos de los temas vistos en Programación, reafirmando los conocimientos adquiridos y mostrando cómo usar el lenguaje C para programas de gran utilidad y aplicaciones de la vida real.






Agregar comentario
1500
¿Cuanto es 5 + 3?
Comentarios
(1)
Gravatar
Jesús González dice...

Como haría para no limitar el número de trabajadores?

©2017-2021 Solución Ingenieril. Todos los derechos reservados