Implementación de Listas Enlazadas en Lenguaje C para Gestión de Sueldos
#include
#include
#include
#include
#include
typedef struct prueba2{
int liquido, base;
struct prueba2 *siguiente;
}tipoNodo;
typedef tipoNodo *pNodo;
typedef tipoNodo *Lista;
int autor();
void salir();
int listaVacia(Lista lista);
void mostrar (Lista lista);
void insertarUno(Lista *lista, long liquido, long base);
void insertarDos(Lista *lista, long liquido, long base);
void insertarTres(Lista *lista, long liquido, long base);
void insertarCuatro(Lista *lista, long liquido, long base);
main(){
system("cls");
fflush(stdin);
Lista listaA = NULL;
Lista listaB = NULL;
Lista listaC = NULL;
Lista listaD = NULL;
int opción;
char rut[3][12];
char nombre[3][30];
long sbase[3];
long bono[3];
long aguinaldo[3];
long anticipo[3];
long sliquido[3];
long mitad[3];
printf("\n\t\t\t\tMENU:");
printf("\n\n\n\t1-INGRESAR DATOS A LA LISTA Y MOSTRARLOS DE MENOR A MAYOR.");
printf("\n\t2-INGRESAR DATOS A LA LISTA Y MOSTRARLOS DE MAYOR A MENOR.");
printf("\n\t3-INGRESAR DATOS A LA LISTA Y MOSTRARLOS EN EL MISMO ORDEN INGRESADO.");
printf("\n\t4-INGRESAR DATOS A LA LISTA Y MOSTRARLOS EN EL ORDEN INVERSO.");
printf("\n\t5-AUTOR.");
printf("\n\t6-SALIR.");
printf("\n\n\t\tDIGITE LA Opción QUE DESEA REALIZAR:");
printf("\n");
do{
scanf("%d",&opción);
fflush(stdin);
if(opción <1 ||="" opción="">6){
printf("\n\n\tERROR! LA Opción INGRESADA DEBE ESTAR ENTRE 1 Y 6,");
printf("\n\t\tINTENTE NUEVAMENTE...");
}
}while(opción <1 ||="" opción="">6);
system("cls");
if(opción == 5){
autor();
}
if(opción == 6){
salir();
}
system("cls");
for(int i = 0; i <3 ;="" i++){="">3>
printf("\n\n\nDATOS DEL TRABAJADOR NUMERO %d :", (i+1) );
printf("\n\n");
fflush(stdin);
printf("\nINGRESE EL RUT DEL TRABAJADOR:");
gets(rut[i]);
fflush(stdin);
printf("\nINGRESE EL NOMBRE DEL TRABAJADOR:");
gets(nombre[i]);
fflush(stdin);
printf("\nINGRESE EL SUELDO BASE DEL TRABAJADOR:");
scanf("%ld",&sbase[i]);
fflush(stdin);
bono[i] = ((sbase[i] * 20) / 100);
printf("\nINGRESE EL AGUINALDO DEL TRABAJADOR:");
scanf("%ld",&aguinaldo[i]);
fflush(stdin);
printf("\nINGRESE EL ANTICIPO DEL TRABAJADOR:");
do{
scanf("%ld",&anticipo[i]);
mitad[i] =sbase[i]/2;
if(anticipo[i] > mitad[i] ){
printf("\n\nERROR! EL ANTICIPO NO PUEDE SER MAYOR AL 50% DEL SUELDO BASE");
printf("\nPOR FAVOR INGRESE NUEVAMENTE...");
}
}while(anticipo[i] > mitad[i]);
sliquido[i] = ((sbase[i] + bono[i] + aguinaldo[i]) - anticipo[i]);
// insertar
if(opción == 1){
insertarUno(&listaA, sbase[i], sliquido[i]);
}
if(opción == 2){
insertarDos (&listaB, sbase[i], sliquido[i]);
}
if(opción == 3){
insertarTres (&listaC, sbase[i], sliquido[i]);
}
if(opción == 4){
insertarCuatro (&listaD, sbase[i], sliquido[i]);
}
}
// mostrar
if(opción == 1){
mostrar(listaA);
}
if(opción == 2){
mostrar(listaB);
}
if(opción == 3){
mostrar(listaC);
}
if(opción == 4){
mostrar(listaD);
}
getche();
}
// métodos
void insertarUno(Lista *lista, long sb, long sl){
pNodo nuevo, anterior;
nuevo = (pNodo)malloc(sizeof(tipoNodo));
nuevo -> base = sb;
nuevo -> liquido = sl;
if(listaVacia(*lista) || (*lista) -> base > sb ){
nuevo -> siguiente = *lista;
*lista = nuevo;
}else{
anterior = *lista;
while(anterior->siguiente && anterior -> siguiente -> base <= sb){="">=>
anterior = anterior -> siguiente;
}
nuevo->siguiente=anterior->siguiente;
anterior->siguiente=nuevo;
}
}
void insertarDos(Lista *lista, long sb, long sl){
pNodo nuevo, anterior;
nuevo = (pNodo)malloc(sizeof(tipoNodo));
nuevo -> base = sb;
nuevo -> liquido = sl;
if(listaVacia(*lista) || (*lista) -> base < sb="" ){="">
nuevo -> siguiente = *lista;
*lista = nuevo;
}else{
anterior = *lista;
while(anterior->siguiente && anterior -> siguiente -> base >= sb ){
anterior = anterior->siguiente;
}
nuevo->siguiente=anterior -> siguiente;
anterior->siguiente=nuevo;
}
}
void insertarTres(Lista *lista, long sb, long sl){
pNodo nuevo, ultimo;
nuevo = (pNodo)malloc(sizeof(tipoNodo));
nuevo->liquido=sl;
nuevo->base=sb;
if(listaVacia(*lista)){
nuevo -> siguiente = NULL;
*lista = nuevo;
}else{
ultimo = *lista;
while(ultimo->siguiente){
ultimo = ultimo->siguiente;
}
nuevo->siguiente=NULL;
ultimo->siguiente=nuevo;
}
}
void insertarCuatro(Lista *lista, long sb, long sl){
pNodo nuevo;
nuevo = (pNodo)malloc(sizeof(tipoNodo));
nuevo -> liquido = sl;
nuevo -> base = sb;
nuevo->siguiente =*lista;
*lista=nuevo;
}
void mostrar(Lista lista){
pNodo nodo = lista;
fflush(stdin);
system("cls");
if(listaVacia(lista)){
printf("ERROR! LA LISTA ESTA TOTALMENTE Vacía...\n");
getche();
}else{
fflush(stdin);
system("cls");
printf("\n\nA Continuación SE Imprimirán LOS SUELDOS DE LA LISTA...");
fflush(stdin);
getche();
system("cls");
fflush(stdin);
printf("\n\nSUELDOS BASES -> SUELDOS Líquidos:\n\n");
while(nodo){
printf(" %ld -> %ld ->",nodo -> base, nodo -> liquido);
nodo = nodo->siguiente;
}
printf("\n\n");
}
printf("\nPRESIONE CUALQUIER TECLA PARA VOLVER AL Menú...");
getche();
main();
}
int listaVacia(Lista lista){
return(lista == NULL);
}
int autor(){
printf("\n\n\n\t\t\tAUTOR:");
printf("\n");
printf("\n\n\tAUTOR:\t\tERICK AROS S");
printf("\n\tASIGNATURA:\tESTRUCTURA DE DATOS");
printf("\n\tSECCION:\t20");
printf("\n\tFECHA:\t\t26 DE Mayo DE 2011");
printf("\n\n\n\tPRESIONE UNA TECLA PARA VOLVER AL Menú...");
getche();
main();
}
void salir(){
char s;
printf("\n\t\t\tESTA SEGURO DE SALIR ?");
printf("\n\n\t\t\tRESPONDA CON S O N :");
do{
scanf("%c",&s);
s = tolower(s);
fflush(stdin);
system("cls");
if(s != 's' && s != 'n'){
printf("\n\n\t\t ERROR! DEBE RESPONDER CON ""S"" o ""N""");
printf("\n\t\t\tINGRESE NUEVAMENTE...");
}
}while(s != 's' && s != 'n');
if(s == 's'){
system("cls");
printf("\n\n\n\t\t GRACIAS POR UTILIZAR ESTE SOFTWARE!");
printf("\n\n\n\n\t\t\t\tADIOS.");
getche();
exit(0);
}else{
system("cls");
printf("\n\n\n\tPRESIONE UNA TECLA PARA VOLVER AL Menú...");
getche();
main();
}
}
1>1>.H>.H>.H>.H>.H>