- #include<stdlib.h>
- #include<stdio.h>
- #include<string>
- #include<fstream>
- #include <iostream>
- #include <cstring>
- using namespace std;
- fstream entrada;
- char* readword(){
- char* word;
- word=new char[100];
- strcpy(word,"\n");
- do{
- fgets(word,100,stdin);
- if (word[strlen(word)-1] == '\n'){
- word[strlen(word)-1] = 0;
- }
- //printf("%s",word);
- }while (fgets(word,100,stdin)=="\n") ;
- //(strcmp(noma,"")==-1 && strcmp(noma,"\n")==-1);
- printf("%s",word);
- if (word[strlen(word)-1] == '\n'){
- word[strlen(word)-1] = 0;
- }
- return word;
- }
- class Atleta{
- public:
- char nomA[100];
- int ced;
- int edad;
- char escuela[100];
- char deporte[100];
- int anosEx;
- Atleta *proxA;
- Atleta (char nom[100], int ci, int ed, char esc[100], char dep[100],int Ex){
- strcpy(nomA,nom);
- ced=ci;
- edad=ed;
- strcpy(escuela,esc);
- strcpy(deporte,dep);
- anosEx=Ex;
- proxA=NULL;
- }
- };
- class Deporte{
- public:
- char nomD[100];
- int cantA;
- int medallas;
- int cantJ;
- Deporte *proxD;
- Atleta *primAtle;
- Deporte(char nom[100], int cant, int med){
- strcpy(nomD,nom);
- cantA=0;
- cantJ=cant;
- medallas=med;
- proxD=NULL;
- primAtle=NULL;
- }
- };
- class Lista{
- private:
- Deporte* primD;
- int n_dep;
- public:
- Lista(){
- primD=NULL;
- n_dep=0;
- }
- void insertarDeporte(char nomd[100],int cant, int med){
- Deporte *punact, *punant;
- Deporte *pnodo=new Deporte(nomd,cant,med);
- punant=NULL; //apuntadores de apoyo para la insercion
- punact=primD;
- while((punact!=NULL)&&(punact->medallas > med)){ // Recorrer la lista buscando
- punant=punact;
- punact=punact->proxD;
- }
- //Actualizar los enlaces a los nodos para insertar
- if(punant==NULL){
- pnodo->proxD=primD;
- primD=pnodo;
- n_dep++;
- }else{
- punant->proxD=pnodo;
- pnodo->proxD=punact;
- n_dep++;
- }
- }
- void mostrarDeportes(){
- Deporte *punact;
- if(primD==NULL)
- printf("\n\n La lista esta vacia, no hay elementos para mostrar \n\n");
- else{
- punact=primD;
- while (punact!=NULL){
- printf("\n nombre:%s atletas:%d medallas:%d \n\n",punact->nomD, punact->cantA, punact->medallas);
- punact=punact->proxD;
- }
- }
- }
- void eliminarDeporte(char nomd[100]){
- Deporte *punact, *punant;
- if (primD==NULL)
- printf("\n La Lista de deportes esta vacia, no hay para mostrar \n\n");
- else{
- punact=primD;
- if (strcmp(primD->nomD,nomd)==0){
- printf("\n entro en el if esta de primero y lo eliminaremos");
- //eliminando el primer deporte
- primD=primD->proxD; //actualizado el inicio de la lista
- free(punact); //Liberando memoria
- punact=NULL;
- n_dep--;
- printf("\n El deporte %s fue eliminado \n\n",nomd);
- }else{
- while ( (punact!=NULL) && (strcmp(punact->nomD,nomd)) ){
- //Avanzar en la lista buscando el deporte
- punant=punact;
- punact=punact->proxD;
- }
- if (punact==NULL){
- printf("\n El deporte %s no esta en la lista \n\n",nomd);
- }else{
- punant->proxD=punact->proxD;
- free(punact); //Liberando memoria
- punact=NULL;
- n_dep--;
- printf("\n El deporte %s fue eliminado \n\n",nomd);
- }
- }
- }
- printf("\n\n\n");
- }
- void buscarDeporte(char deporte[100]){
- Deporte *punact;
- Atleta *punactA;
- int enc=0;
- punact=primD;
- while((punact!=NULL) && (enc==0)){
- if ((strcmp(punact->nomD,deporte))==0){
- enc=1;
- printf("\n\n Cantidad de atletas que lo representara: %d ", punact->cantA);
- printf("\n\n Medallas obtenidas: %d ", punact->medallas);
- punactA=punact->primAtle;
- while(punactA!=NULL){
- printf("Atletas que lo practican: \n\n");
- printf("Atleta: %s\n\n Edad %d\n\n Anos %d",punactA->nomA, punactA->edad, punactA->anosEx);
- punactA=punactA->proxA;
- }
- }
- punact=punact->proxD;
- }
- if (enc==0){
- printf("\n\n El deporte %s NO esta en la lista",deporte);
- }
- }
- void mejoresAtletas(char deporte[100]){
- Deporte *punact;
- Atleta *punactA;
- punact=primD;
- int enc=0;
- while(punact!=NULL && enc==0){
- if ((strcmp(punact->nomD,deporte))==0){
- enc=1;
- punactA=punact->primAtle;
- if (punactA==NULL){
- printf("El deporte %s no tiene atletas para mostrar \n\n", punact->nomD);
- }else{
- printf("Deporte: %s \n\n",punact->nomD);
- while(punactA!=NULL){
- if(punactA->edad<=35){
- printf("Atleta %s Edad %d Anos %d \n\n", punactA->nomA, punactA->edad, punactA->anosEx);
- }
- punactA=punactA->proxA;
- }
- }
- }
- punact=punact->proxD;
- }
- if(enc==0){
- printf(" El deporte no se encuentra en la lista, no podemos mostrar sus mejores atletas \n\n");
- }
- }
- void insertarAtleta(char noma[100],int ced, int edad, char escuela[100], char deporte[100], int anosEx){
- Deporte *punact, *punant; Atleta *punactA, *punantA;
- Atleta *pnodoA=new Atleta(noma,ced,edad,escuela,deporte,anosEx);
- Atleta *menorN=NULL; int menor, edadM;
- int enc=0, resp, cantJ, meda;
- punact=primD;
- //printf("\n %s ",noma);
- while((punact!=NULL) && (enc==0)){
- if ((strcmp(punact->nomD,deporte))==0){ //equivalente en pseudo(punact->nombre==nom)
- enc=1;
- //printf("\n\n El deporte %s esta en la lista, medallas:%d, atletas:%d ",deporte, punact->medallas, punact->cantA);
- break;
- }
- punact=punact->proxD;
- }
- if (enc==0){
- printf("Disculpe, este deporte no se encuentra registrado en la Universidad\n\n");
- printf("\nDesea agregarlo? 0=si, 1=no\n");
- scanf("%d",&resp);
- if( resp==0){
- //if(n_dep < 25){
- cout<<"Nombre del deporte: ";
- strcpy(deporte,readword());
- cout<<"Numero de atletas que lo representaran: ";
- scanf("%d",&cantJ);
- cout<<"Cant de medallas en Juviness anterior: ";
- scanf("%d",&meda);
- insertarDeporte(deporte,cantJ,meda);
- insertarAtleta(noma,ced,edad,escuela,deporte,anosEx);
- //mostrarDeportes();
- //mostrarAtletas();
- //}
- }
- } else {
- if (punact->cantA <25){
- pnodoA->proxA= NULL;
- punantA=NULL; //apuntadores de apoyo para la insercion
- punactA=punact->primAtle;
- while((punactA!=NULL)&&(punactA->anosEx > anosEx)){ // Recorrer la lista buscando
- punantA=punactA;
- punactA=punactA->proxA;
- }
- //Actualizar los enlaces a los nodos para insertar
- if(punantA==NULL){
- pnodoA->proxA=punact->primAtle;
- punact->primAtle=pnodoA;
- punact->cantA++;
- }else{
- pnodoA->proxA=punactA;
- punantA->proxA=pnodoA;
- punact->cantA++;
- }
- }else{
- punactA=punact->primAtle;
- menor=punactA->anosEx;
- while(punactA!=NULL){
- if (punactA->anosEx < menor){
- menor=punactA->anosEx;
- menorN=punactA;
- }
- punactA=punactA->proxA;
- }
- if((pnodoA->anosEx > menor) && (pnodoA->edad < 35)){
- eliminarAtleta(menorN->ced);
- pnodoA->proxA= NULL;
- punantA=NULL; //apuntadores de apoyo para la insercion
- punactA=punact->primAtle;
- while((punactA!=NULL)&&(punactA->anosEx > anosEx)){ // Recorrer la lista buscando
- punantA=punactA;
- punactA=punactA->proxA;
- }
- //Actualizar los enlaces a los nodos para insertar
- if(punantA==NULL){
- pnodoA->proxA=punact->primAtle;
- punact->primAtle=pnodoA;
- punact->cantA++;
- }else{
- pnodoA->proxA= punactA;
- punantA->proxA=pnodoA;
- punact->cantA++;
- }
- }
- }
- }
- }
- void mostrarAtletas(){
- Deporte *punact;
- Atleta *punactA;
- if (primD==NULL)
- printf("La lista de deportes esta vacia \n\n");
- else{
- punact=primD;
- while(punact!=NULL){
- printf("\nDeporte: %s \n\n", punact->nomD);
- punactA=punact->primAtle;
- if(punactA==NULL){
- printf("El deporte no posee ningun atleta \n\n");
- }
- while(punactA!=NULL){
- printf("%s \n\n", punactA->nomA);
- punactA= punactA->proxA;
- }
- punact=punact->proxD;
- }
- }
- }
- void eliminarAtleta(int ced){
- Deporte *punact, *punant;
- Atleta *punactA,*punantA ;
- int enc;
- punact=primD;
- while(punact!=NULL){
- enc=0;
- punantA=NULL;
- punactA=punact->primAtle;
- while( punactA!=NULL && enc==0){
- if (punactA->ced==ced){
- enc=1;
- if(punantA==NULL){
- punact->primAtle=punactA->proxA; //actualizado el inicio de la lista
- free(punactA); //Liberando memoria
- punactA=NULL;
- punact->cantA--;
- }else{
- punantA->proxA=punactA->proxA ;
- free(punactA);
- punactA=NULL ;
- punact->cantA--;
- }
- printf("El atleta fue encontrado en el deporte %s", punact->nomD);
- printf("...eliminando");
- break;
- }
- punantA=punactA;
- punactA=punactA->proxA;
- }
- if (enc==0) // printf("El atleta no fue encontrado en %s deporte", punact->nomD);
- punact=punact->proxD;
- }
- }
- void buscarAtleta (int ced){
- Deporte *punact; Atleta *punactA;
- punact=primD; int enc=0;
- while(punact!=NULL){
- punactA=punact->primAtle;
- while((punactA!=NULL)){
- if ((punactA->ced==ced) && (enc==0)){
- enc=1;
- printf("Nombre: %s \n\nCI: %d \n\nEdad: %d\n\n Escuela: %s \n\nDeporte: %s\n\n Anos de Experiencia: %d \n\n", punactA->nomA, punactA->ced, punactA->edad, punactA->escuela, punactA->deporte, punactA->anosEx);
- }else{
- if(punactA->ced==ced && enc==1)
- printf("Deporte: %s \n\nAnos de Experiencia: %d \n\n", punactA->deporte,punactA->anosEx);
- }
- punactA= punactA->proxA;
- }
- punact= punact->proxD;
- }
- if (enc==0){
- printf(" El atleta con cedula %d no se encuentra en ninguna lista de Atletas de ningun deporte \n\n",ced);
- }
- }
- void ordenar_deportes(){
- printf("entro al ordenar \n\n");
- Deporte *punant, *punact, *aux;
- int i=0,x;
- punact=primD; aux=punact->proxD;
- punant=NULL;
- while(i++ < n_dep){
- printf("primer while \n\n");
- while(aux->proxD!=NULL){
- printf("segundo while \n\n");
- if(aux->cantA > punact->cantA){
- printf("entro al if \n\n");
- x = aux->cantJ;
- aux->cantA= punact->cantA;
- punact->cantA=x;
- }
- aux=aux->proxD;
- }
- printf("salgo del while \n\n");
- if(aux->proxD==NULL){
- printf("entro al ultimo if \n\n");
- aux = primD;
- }
- punact=punact->proxD;
- }
- }
- int deportes_Juvines (int num){
- Deporte *punact, *punant;
- int enc=0, enc2=0, cont=0, i;
- punact=primD; punant=NULL;
- while ((punact!=NULL) && (enc==0)){
- punant=punact; punact=punact->proxD;
- if (punant->medallas==punact->medallas){
- enc=1;
- }
- }
- if (enc==1){
- printf("Antes de 'ordenar' si es que algun dia lo hace :( \n\n");
- mostrarDeportes();
- ordenar_deportes();
- printf("Despues de y que 'ordenar' \n\n");
- mostrarDeportes();
- /*punact=primD; punant=NULL;
- while((punact!=NULL) &&(enc2==0)){
- punant=punact; punact=punact->proxD;
- if(punant->cantA==punact->cantA){
- enc2=1; cont++;
- }
- }
- if(enc2==1){
- punact=primD; punant=NULL;
- for (i=1;i<=num;i++){
- //printf("%d)%s\n\n",i,punact->nomD);
- punact=punact->proxD;
- }
- for (i=0;i<cont;i++){
- //printf("Los siguientes deporten cumplen con la condicion pero superan el numero de deportes: \n\n");
- num++;
- //printf("%d)%s\n\n",num,punact->nomD);
- punact=punact->proxD;
- }
- }else{
- punact=primD; punant=NULL;
- for (i=1;i<=num;i++){
- //printf("%d)%s\n\n",i,punact->nomD);
- punact=punact->proxD;
- }
- }
- }else{
- punact=primD; punant=NULL;
- for (i=1;i<=num;i++){
- //printf("%d)%s\n\n",i,punact->nomD);
- punact=punact->proxD;
- }
- }
- return(cont);*/
- }
- }
- void mostrar_Juvines(int num){
- int cont, i; Deporte *punact, *punant;
- cont= deportes_Juvines(num);
- punact=primD; punant=NULL;
- for (i=1;i<=num;i++){
- printf("%d)%s\n\n",i,punact->nomD);
- punact=punact->proxD;
- }
- for (i=0;i<cont;i++){
- printf("Los siguientes deporten cumplen con la condicion pero superan el numero de deportes: \n\n");
- num++;
- printf("%d)%s\n\n",num,punact->nomD);
- punact=punact->proxD;
- }
- }
- void cargar_datos(){
- string x;
- char nomd[100], noma[100], escuela[100], deporte[100];
- int n_disc=0,atle1,meda1, ndep,ced,edad,anosEx;
- int n_atl=0;
- int n_atld=0;
- //Leer datos persona
- entrada.open("entrada.dat",ios::in);
- getline (entrada,x);
- n_disc=atoi(x.c_str());
- if (n_disc<0 || n_disc>20){
- do{
- //printf("Recuerde que la cantidad de disciplinas con que la universidad participa se encuentra entre 0-20");
- }while (n_disc<0 || n_disc>20);
- }else{
- for (int i=0; i<(n_disc); i++ ){
- getline(entrada,x);
- strcpy(nomd,x.c_str());
- getline(entrada,x);
- atle1=atoi(x.c_str());
- getline(entrada,x);
- meda1=atoi(x.c_str());
- insertarDeporte(nomd,atle1,meda1);
- }
- }
- getline (entrada,x);
- n_atl=atoi(x.c_str());
- for(int i=0;i<n_atl;i++){
- getline(entrada,x);
- strcpy(noma,x.c_str());
- getline(entrada,x);
- ced=atoi(x.c_str());
- getline(entrada,x);
- edad=atoi(x.c_str());
- getline(entrada,x);
- strcpy(escuela,x.c_str());
- getline(entrada,x);
- n_atld=atoi(x.c_str());
- if(n_atld<=0){
- //printf("Recuerde que el atleta debe practicar al menos un deporte \n\n");
- }else{
- for (int j=0;j<n_atld;j++){
- getline (entrada, x);
- strcpy(deporte,x.c_str());
- getline (entrada,x );
- anosEx=atoi(x.c_str());
- insertarAtleta(noma,ced,edad,escuela,deporte,anosEx);
- }
- }
- }
- entrada.close();
- //Fin leer datos
- }
- };
- typedef struct deporte{
- char nomD[100];
- int cantA;
- int medallas;
- int cantJ;
- };
- typedef struct atleta{
- char nomA[100];
- int ced;
- int edad;
- char escuela[100];
- char deporte[100];
- int anosEx;
- };
- static deporte respaldoDep[500];
- static atleta respaldoAtl[500];
- static int n_dep=0;
- static int n_atl=0;
- void cargarDatosRespaldo() {
- string x;
- entrada.open("respaldo.dat",ios::in);
- getline(entrada,x);
- n_dep = atoi(x.c_str());
- printf("Deportes en \"respaldo.in\":\n");
- for(int i=0; i<n_dep; i++) {
- getline(entrada,x);
- strcpy(respaldoDep[i].nomD, x.c_str());
- getline(entrada,x);
- respaldoDep[i].cantA = atoi(x.c_str());
- getline(entrada,x);
- respaldoDep[i].medallas = atoi(x.c_str());
- getline(entrada,x);
- respaldoDep[i].cantJ = atoi(x.c_str());
- printf("%s %d %d %d\n", respaldoDep[i].nomD, respaldoDep[i].cantA, respaldoDep[i].medallas, respaldoDep[i].cantJ);
- }
- getline(entrada,x);
- n_atl = atoi(x.c_str());
- printf("\nAtletas en \"respaldo.in\":\n");
- for(int i=0; i<n_atl; i++) {
- getline(entrada,x);
- strcpy(respaldoAtl[i].nomA, x.c_str());
- getline(entrada,x);
- respaldoAtl[i].ced = atoi(x.c_str());
- getline(entrada,x);
- respaldoAtl[i].edad = atoi(x.c_str());
- getline(entrada,x);
- strcpy(respaldoAtl[i].escuela, x.c_str());
- getline(entrada,x);
- strcpy(respaldoAtl[i].deporte, x.c_str());
- getline(entrada,x);
- respaldoAtl[i].anosEx = atoi(x.c_str());
- printf("%s %d %d %s %s %d\n", respaldoAtl[i].nomA, respaldoAtl[i].ced, respaldoAtl[i].edad, respaldoAtl[i].escuela, respaldoAtl[i].deporte, respaldoAtl[i].anosEx);
- }
- printf("\n");
- }
- int main (){
- Lista L;
- L.cargar_datos();
- //L.mostrarDeportes();
- //L.mostrarAtletas();
- //cargarDatosRespaldo();
- int meda,cantJ, edad,n_dep, anosEx, i,r,a;
- int ced,op=0, num;
- a=0;
- char nomd[100], x[100], noma[100], escuela[100], deporte[100];
- cout<<"Universidad Central de Venezuela Facultad Ciencias Escuela Computacion"<<endl;
- cout<<"Proyecto Algoritmo y Estructura de Datos: Deportes JUVINES UCV "<<endl;
- cout<<"\nMenu de Opciones>"<<endl;
- do{
- cout<<"MENU PRINCIPAL:"<<endl;
- cout<<"========================================================="<<endl;
- cout<<"1-AGREGAR INFORMACION"<<endl;
- cout<<"2-MOSTRAR INFORMACION"<<endl;
- cout<<"3-ELIMINAR INFORMACION"<<endl;
- cout<<"4-MOSTRAR RESPALDO"<<endl;
- cout<<"5-DESARROLLADORES"<<endl;
- cout<<"6-SALIR"<<endl;
- cout<<"=========================================================="<<endl;
- cin>>a;
- if(a==1){
- do{
- cout<<" "<<endl;
- cout<<"MENU AGREGAR INFORMACION"<<endl;
- cout<<"=========================================================="<<endl;
- cout<<"1-AGREGAR ATLETA"<<endl;
- cout<<"2-AGREGAR DEPORTE"<<endl;
- cout<<"3-VOLVER A PRINCIPAL"<<endl;
- cout<<"4-SALIR DE LA APLICACION"<<endl;
- cout<<"=========================================================="<<endl;
- cin>>r;
- if(r==1){
- cout<<" "<<endl;
- printf("Nombre: ");
- strcpy(noma,readword());
- cout<<"\nCedula: ";
- scanf("%d", &ced);
- cout<<"Edad: ";
- scanf("%d", &edad);
- cout<<"Escuela: ";
- scanf("%s", &escuela);
- cout<<"Num de deportes que practica: ";
- scanf("%d", &n_dep);
- if(n_dep>5) printf("El atleta no puede practicar mas de 5 deportes");
- else{
- for (i=0; i<n_dep;i++){
- printf("Nombre Deporte: ");
- strcpy(deporte,readword());
- cout<<"Anos de experiencia: ";
- scanf("%d", &anosEx);
- L.insertarAtleta(noma,ced,edad,escuela,deporte,anosEx);
- L.mostrarDeportes();
- L.mostrarAtletas();
- }
- }
- }
- if(r==2){
- do{
- cout<<"Nombre del Deporte: ";
- strcpy(deporte,readword());
- cout<<"\nNumero de medallas del anterior JUVINES: "<<endl;;
- scanf("%d",&meda);
- cout<<"Cantidad de atletas que o representaran: ";
- scanf("%d",&cantJ);
- L.insertarDeporte(deporte,cantJ,meda);
- L.mostrarDeportes();
- printf("Desea agregar otro Deporte? 0=si, 1=no");
- scanf("%d", &op);
- }while (op==0);
- }
- if(r==4){
- a=6;
- }
- }while(r!=3 && r!=4);
- }
- if (a==2){
- do{
- cout<<" "<<endl;
- cout<<"MENU MOSTRAR INFORMACION"<<endl;
- cout<<"=========================================================="<<endl;
- cout<<"1-Listado de atletas"<<endl;
- cout<<"2-Listado de mejores atletas por deporte"<<endl;
- cout<<"3-Informacion de un atleta especĂfico."<<endl;
- cout<<"4-Informacion de una deporte especifico y la cantidad de medallas obtenidas."<<endl;
- cout<<"5-Listado de deportes o disciplinas que representaran a la UCV."<<endl;
- cout<<"6-VOLVER A PRINCIPAL"<<endl;
- cout<<"7-SALIR"<<endl;
- cout<<"=========================================================="<<endl;
- cin>>r;
- if (r==1){
- printf("\n\nLista de Atletas: \n\n");
- L.mostrarAtletas();
- }
- if(r==2){
- printf("\n Deporte: \n\n");
- strcpy(deporte,readword());
- printf("\n\nLista de Mejores Atletas: \n\n");
- L.mejoresAtletas(deporte);
- }
- if(r==3){
- do{
- printf("Cedula: \n\n");
- scanf("%d",&ced);
- L.buscarAtleta(ced);
- printf("Desea la informacion de otro atleta? 0.-Si 1.-No\n\n");
- scanf("%d",&op);
- }while(op!=1);
- }
- if(r==4){
- printf("\n\nDeporte: \n\n");
- strcpy(deporte,readword());
- L.buscarDeporte(deporte);
- }
- if(r==5){
- printf("Introduzca la cantidad de deportes permitidos: \n\n");
- scanf("%d",&num);
- printf("Deportes que representaran a la UCV son: \n\n");
- L.deportes_Juvines(num);
- //L.mostrar_Juvines(num);
- //va en proceso...
- }
- if (r==7){
- a=6;
- }
- }while(r!=6 && r!=7);
- }
- if(a==3){
- do{
- cout<<" "<<endl;
- cout<<"MENU ELIMINAR"<<endl;
- cout<<"=========================================================="<<endl;
- cout<<"1-ELIMINAR ATLETA"<<endl;
- cout<<"2-ELIMINAR DEPORTE"<<endl;
- cout<<"3-VOLVER A PRINCIPAL"<<endl;
- cout<<"4-SALIR"<<endl;
- cout<<"=========================================================="<<endl;
- cin>>r;
- if(r==1){
- cout<<"Diga la cedula del atleta que desea eliminar"<<endl;
- scanf("%d", &ced);
- L.eliminarAtleta(ced);
- L.mostrarAtletas();
- }
- if(r==2){
- cout<<"Diga el nombre de la disciplina que desea eliminar"<<endl;
- strcpy(deporte,readword());
- L.eliminarDeporte(deporte);
- L.mostrarDeportes();
- }
- if(r==4){
- a=6;
- }
- }while(r!=3 && r!=4);
- }
- }while(a!=0);
- system("Pause");
- return 0;
- }