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.
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
|
|---|
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.
Función principal

Función altas

Función ord_nombre

Función clave

Función bus_nombre

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");
}
|
|---|
Menú principal

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

Dando de alta usuarios



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

Seleccionando opción de consultas generales

Buscando trabajadores por su clave

En caso de que no encuentre un usuario por clave

Buscando trabajadores por nombre

En caso de que no encuentre un usuario por nombre

Saliendo del programa

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.
Como haría para no limitar el número de trabajadores?