Código
#include <iostream> #include <stdlib.h> #include <string.h> using namespace std; const int MAX=32; typedef char tcad[MAX]; typedef struct tfecha{ int dia; int mes; int anyo; }; typedef struct tdomicilio{ tcad calle; int numero; tcad barrio; tcad localidad; }; typedef struct tvehiculo{ tcad marca; tcad modelo; tcad patente; }; typedef struct thorario{ tcad entrada; tcad salida; }; typedef struct tchofer{ int legajo; tcad apellido; tcad nombre; int DNI; tfecha fecha_nacimiento; tdomicilio domicilio; tvehiculo vehiculo_asignado; thorario horario_trabajo; int horas_extras; }; typedef struct tnodo *pnodo; typedef struct tnodo{ tchofer dato; pnodo sig; }; void iniciar_lista(pnodo &lista); void crear_nodo(pnodo &nuevo); void agregar_final(pnodo &lista, pnodo nuevo); void listar_choferes(pnodo lista, tcad buscado); void listar_chofer_horas_extras(pnodo lista); void nueva_cadena(tcad &cadena); int main() { int opcion; pnodo milista, nuevo; tcad buscado; iniciar_lista(milista); do{ system("cls"); cout<<"1. Agregar chofer"<<endl; cout<<"2. Listar choferes segun horario de entrada"<<endl; cout<<"3. Listar chofer con mayor cantidad de horas extras"<<endl; cout<<"4. Salir"<<endl; cin>>opcion; switch(opcion){ case 1: crear_nodo(nuevo); if(nuevo!=NULL) agregar_final(milista,nuevo); break; case 2: cout<<"Ingrese hora: "; nueva_cadena(buscado); listar_choferes(milista,buscado);break; case 3: listar_chofer_horas_extras(milista);break; case 4: cout<<"FIN DEL PROGRAMA"<<endl;break; default: cout<<"Opcion incorrecta"<<endl; } system("pause"); }while(opcion!=4); } void iniciar_lista(pnodo &lista) { lista=NULL; } void crear_nodo(pnodo &nuevo) { nuevo=new tnodo; if(nuevo!=NULL){ cout<<"Ingrese datos personales"<<endl; cout<<"Legajo: "; cin>>nuevo->dato.legajo; cout<<"Apellido: "; nueva_cadena(nuevo->dato.apellido); cout<<"Nombre: "; nueva_cadena(nuevo->dato.nombre); cout<<"DNI: "; cin>>nuevo->dato.DNI; cout<<"Fecha de nacimiento"<<endl; cout<<"Dia: "; cin>>nuevo->dato.fecha_nacimiento.dia; cout<<"Mes: "; cin>>nuevo->dato.fecha_nacimiento.mes; cout<<"Año: "; cin>>nuevo->dato.fecha_nacimiento.anyo; cout<<"Domicilio"<<endl; cout<<"Calle: "; nueva_cadena(nuevo->dato.domicilio.calle); cout<<"Numero: "; cin>>nuevo->dato.domicilio.numero; cout<<"Barrio: "; nueva_cadena(nuevo->dato.domicilio.barrio); cout<<"Localidad: "; nueva_cadena(nuevo->dato.domicilio.localidad); cout<<"Vehiculo asignado"<<endl; cout<<"Marca: "; nueva_cadena(nuevo->dato.vehiculo_asignado.marca); cout<<"Modelo: "; nueva_cadena(nuevo->dato.vehiculo_asignado.modelo); cout<<"Patente: "; nueva_cadena(nuevo->dato.vehiculo_asignado.patente); cout<<"Horario entrada: "; nueva_cadena(nuevo->dato.horario_trabajo.entrada); cout<<"Horario salida: "; nueva_cadena(nuevo->dato.horario_trabajo.salida); cout<<"Horas extras: "; cin>>nuevo->dato.horas_extras; nuevo->sig=NULL; } else cout<<"MEMORIA INSUFICIENTE"<<endl; } void agregar_final(pnodo &lista, pnodo nuevo) { pnodo i; if(lista==NULL) lista=nuevo; else{ for(i=lista;i->sig!=NULL;i=i->sig); i->sig=nuevo; } } void listar_choferes(pnodo lista, tcad buscado) { int cantidad=0; pnodo i; if(lista!=NULL){ for(i=lista;i!=NULL;i=i->sig){ if(strcmp(i->dato.horario_trabajo.entrada,buscado)==0){ cout<<"Chofer"<<endl; cout<<"Nombre: "<<i->dato.nombre<<endl; cout<<"Apellido: "<<i->dato.apellido<<endl; cout<<"Patente de vehiculo asignado: "<<i->dato.vehiculo_asignado.patente<<endl<<endl; cantidad++; } } cout<<"Cantidad de choferes: "<<cantidad<<endl; } else cout<<"LISTA VACIA"<<endl; } void listar_chofer_horas_extras(pnodo lista) { pnodo i, chofer; if(lista!=NULL){ chofer=lista; for(i=lista;i!=NULL;i=i->sig){ if(i->dato.horas_extras>chofer->dato.horas_extras) chofer=i; } cout<<"Chofer con mayor cantidad de horas extras"<<endl; cout<<"Nombre: "<<chofer->dato.nombre<<endl; cout<<"Apellido: "<<chofer->dato.apellido<<endl; cout<<"DNI: "<<chofer->dato.DNI<<endl; cout<<"Horas extras: "<<chofer->dato.horas_extras<<endl; } else cout<<"LISTA VACIA"<<endl; } void nueva_cadena(tcad &cadena) { fflush(stdin); gets(cadena); fflush(stdin); }