Trabajo C++

Iniciado por angel, 15 Enero 2017, 22:00 PM

0 Miembros y 1 Visitante están viendo este tema.

angel

Hola,
Necesitaria la ayuda de alguien que sepa programar en c++ para realizar esta tarea:

Escribir un programa que permita la gestión de estadísticas y obtención de datos de una carrera
ciclista de 4 etapas en la que participan 3 equipos. Cada equipo tiene hasta un máximo
de 6 ciclistas. El programa debe permitir un menu con las siguientes opciones:

1.Pedir los datos de un ciclista
2.Pedir cambiar los datos de cad etapa
3.Pedir los tiempos de una etapa para un ciclista
4.Mostrar toda la informacion de un ciclista
5.Mostrar informacion del ciclista que mas etapas ha ganado
6.Mostar informacion de una etapa
7.Mostar informacion del estado de l carrera
8.Terminar

Los equipos se identifican con la letras A, B y C. La información de cada uno de los 3 equipos
debe incluir el nombre del equipo y el nombre del entrenador del equipo. La información
de los 3 equipos se inicializará dentro del programa y es fija.
Cada ciclista se identificará mediante un código compuesto por la letra de su equipo y un
dígito. El dígito asignado a cada ciclista será el primero disponible según el orden: 1, 2, 3...
Así, el código de un ciclista puede ser: B2, identifica al segundo ciclista inscrito del equipo B.
Los ciclistas se pedirán (1) independientemente como se explica más abajo.
Las etapas se inicializarán en el programa pero podrán cambiarse durante su ejecución. Contienen
la siguiente información: distancia a recorrer, ciudad de salida, ciudad de
llegada. Se debe inicializar la estructura que se defina para almacenar la información de las
etapas con la siguiente información:

Etapa   Distancia    Origen     Destino     Hecha
1           160       malaga     cordoba      false
2           145       cordoba   sevilla         false
3           200       cadiz       huelva        false
4          125        granada   malaga       false

Los cambios en alguna de las etapas (2) se podrán hacer mientras no se haya realizado (no
debe haber ningún tiempo de ningún ciclista para esa etapa (3) como se explica más abajo).

1. Pedir los datos de un ciclista
Se debe solicitar el código del equipo primero. El programa listará su composición actual
(o una lista vacía). Si cabe algún corredor más se pedirá el nombre y los apellidos del
nuevo corredor. Cuando se introduce un ciclista, si ya se introdujo (se corrió) antes alguna
etapa deberá de pedirse para el nuevo ciclista el tiempo para cada una de las etapas
ya realizadas.

2. Pedir cambiar los datos de una etapa
Se pide un número de etapa, y si la etapa no está hecha (no se introdujo ningún tiempo)
se pide introducir distancia, origen y destino nuevos de esa etapa.

3. Pedir los tiempos de una etapa para cada ciclista
Pedir el número de la etapa para la que se van a introducir los datos y pedir y almacenar
el tiempo que ha invertido cada ciclista en cubrir esa etapa. Si la etapa ya estaba antes
hecha, se podrán cambiar todos los tiempos aquí para todos los ciclistas existentes.

4.Mostrar informacion de un ciclista
Se solicitará el código del ciclista y se mostrará el nombre y apellidos del ciclista, el
nombre del equipo al que pertenece, el tiempo total que ha empleado en cada etapa de
las que ya se tienen los datos y el tiempo medio de los todos los ciclistas cada etapa.

5. Mostrar información del ciclista que más etapas ha ganado
Mostrar los mismos datos que en el apartado 4 para el ciclista que más etapas ha ganado.

6. Mostrar información de una etapa
Solicitar el número de la etapa de la que se quiere información. Comprobar que se han
introducido tiempos y en caso de que así sea mostrar el tiempo de cada ciclista en esa
etapa. Mostrar el tiempo medio y la velocidad media de todos los ciclistas (velocidad
media = distancia de la etapa / tiempo medio). En caso de que no se hayan introducido
los datos de esa etapa, se informará de ello.

7. Mostrar información del estado de la carrera
Mostrar el número de etapas de las que ya se tienen los datos (etapas disputadas) y un
listado con el nombre y apellidos de cada ciclista y el tiempo total invertido en todas las
etapas disputadas por ese ciclista.

8. Terminar
Se solicitará confirmación de que se quiere terminar.

NORMAS
Se valorará el uso de las constantes apropiadas, el uso de nuevos tipos adecuados al programa, el uso de prototipos y un código estructurado. El nombre de las constantes, tipos, subprogramas debe ser claro y su declaración en el lugar correcto. Comentar el código en las partes que no estén claras.  Se recomienda construir tantos subprogramas auxiliares como se vean necesarios. El código deberá presentarse perfectamente y coherentemente indentado. Se podrán usar las librerías de C++ <iostream>,<array>,<string> y alguna otra si se considera necesario.


Esta en la tarea a realizar, muchas gracias!
Si alguien se anima me ayudaria mucho.


Por aqui os dejo lo que yo llevo hecho:
Código (cpp) [Seleccionar]

#include <iostream>
#include <array>
#include <string>
#include <cstdlib>

using namespace std;

typedef array<float,4>TSuma_etapa;

struct TCiclista{
   string nombre_c;
   string apellido;
   float tiempo=0.0;

};
typedef array<TCiclista,6>TCiclistas;

struct TEquipo{
   string nombre_eq;
   string nombre_en;
   TCiclistas c;
};

typedef array<TEquipo,3>TEquipos;

struct TEtapa{
   TEquipos eq;
   long int distancia;
   string origen,destino;
};

typedef array<TEtapa,4>TEtapas;

struct TCarrera{
   TEquipos eq;
   TEtapas et;

};


void inicializar_sumaetapa(TSuma_etapa &sumet){
   for(int i=0;i<4;i++){
       sumet[i]=0;
   }
}
void inicializar_datos(TCarrera &car){
   for(int i=0;i<3;i++){
       for(int j=0;j<6;j++){
           car.eq[i].c[j].nombre_c="x";
           car.eq[i].c[j].apellido="x";
       }
   }
}


//Lee nombre y apellido ciclistas
void leer_datos_ciclista(TCarrera &car){

   int pos=0,cod,tam,i;
   char letra;
   char res;


   cout<<"Introduzca el codigo del equipo: ";cin>>letra;
   cin.ignore();

       switch(letra){
           case 'A':cod=0; break;
           case 'B':cod=1; break;
           case 'C':cod=2; break;

       }
   if(letra=='A'||letra=='B'||letra=='C'){
       cout<<"Introduzca el nombre del equipo: ";getline(cin,car.eq[cod].nombre_eq);
       cout<<"Introduzca el nombre entrenador del equipo: ";getline(cin,car.eq[cod].nombre_en);
       cout<<"Situacion actual del equipo"<<endl;

       for(int i=0;i<6;i++){
           cout<<i+1<<". "<<car.eq[cod].c[i].nombre_c<<" ";
           cout<<car.eq[cod].c[i].apellido;
           cout<<endl;
       }
       i=0;
       if (car.eq[cod].c[i].nombre_c =="x"){
           cout<<"Introducir identidad del ciclista: "<<endl;
               cout<<"Nombre: ";
               getline(cin,car.eq[cod].c[i].nombre_c);

               cout<<"Apellido: ";
               getline(cin,car.eq[cod].c[i].apellido);
       }
       else{
           i++;
               cout<<"Introducir identidad del ciclista: "<<endl;
               cout<<"Nombre: ";
               getline(cin,car.eq[cod].c[i].nombre_c);

               cout<<"Apellido: ";
               getline(cin,car.eq[cod].c[i].apellido);

       }

   }

   else{
       cout<<"No existe este equipo";
       }
}



//Lee los tiempos de cierta etapa de cierto ciclista
void leer_tiempos(TCarrera &car){
   int netapa,nciclista,cod;
   char lequipo;
   cout<<"Introduzca la etapa: ";cin>>netapa;
   cout<<"Introduzca el equipo: ";cin>>lequipo;
   cout<<"Introduzca el numero del ciclista: ";cin>>nciclista;
   switch(lequipo){
           case 'A':cod=0; break;
           case 'B':cod=1; break;
           case 'C':cod=2; break;
       }

   cout<<"Introduzca el tiempo de la etapa del ciclista ";cin>>car.et[netapa-1].eq[cod].c[nciclista-1].tiempo;

}



//Muestra nombre y apellido ciclistas
void mostrar_datos_ciclista(TCarrera &car){
   int cod,numc,cont=0;
   TSuma_etapa sumaetapa;
   inicializar_sumaetapa(sumaetapa);
   char letra;
   cout<<"Introduzca la letra del equipo que desea mostrar: ";cin>>letra;
       switch(letra){
           case 'A':cod=0; break;
           case 'B':cod=1; break;
           case 'C':cod=2; break;

       }
   if(letra=='A'||letra=='B'||letra=='C'){
       cout<<"Introduzca el numero del ciclista: ";cin>>numc;

       //Muestra nombre y apellido del ciclista y nombre del equipo

           cout<<"Nombre y apellido del ciclista: "<<car.eq[cod].c[numc-1].nombre_c<<" ";
           cout<<car.eq[cod].c[numc-1].apellido<<endl;
           cout<<"Nombre del equipo: "<<car.eq[cod].nombre_eq<<endl;
           cout<<"Nombre del entrenador: "<<car.eq[cod].nombre_en<<endl;

           for(int i=0;i<4;i++){
               cout<<"Tiempo para etapa "<<i+1<<": "<<car.et[i].eq[cod].c[numc-1].tiempo<<endl;
           }

           for(int i=0;i<3;i++){
               for(int j=0;j<6;j++){
                       for(int k=0;k<6;k++){
                           if(car.et[i].eq[i].c[j].tiempo!=0){
                           cont++;
                           }
                       }
                   }
           }

          for(int i=0;i<4;i++){
               for(int j=0;j<3;j++){
                       for(int k=0;k<6;k++){
                           sumaetapa[i]+=car.et[i].eq[j].c[k].tiempo;
                   }
               }
               cout<<"Tiempo medio de todos los ciclistas de la etapa "<<i+1<<": "<<sumaetapa[i]/((cont/6))<<endl;

           }


   }

   else{
       cout<<"Este equipo no existe";
   }

}

void inicializar_etapas(TEtapas &et){
   et[0].distancia=160;et[1].distancia=145;et[2].distancia=200;et[3].distancia=125;
   et[0].origen='Malaga';et[1].origen='Cordoba';et[2].origen='Cadiz';et[3].origen='Granada';
   et[0].destino='Cordoba';et[1].destino='Sevilla';et[2].destino='Huelva';et[3].destino='Malaga';
}

void menu(){
   TCarrera car;
   char op;
   inicializar_datos(car);
   do{
   cout<<"                                    CARRERA CICLISTA "<<endl;
       cout<<"1. Introducir datos de un ciclista"<<endl;
       cout<<"3. Introducir los tiempos de una etapa para un ciclista"<<endl;
       cout<<"4. Mostrar toda la informacion de un ciclista"<<endl;
       cout<<"5. Terminar"<<endl;

       cout<<"Introduzca una opcion: ";cin>>op;
       switch(op){
           case '1':
               system("cls");
               cout<<"Introducir datos de un ciclista"<<endl<<endl;
               leer_datos_ciclista(car);
               break;
           case '3':
               system("cls");
               cout<<"Introducir los tiempos de una etapa para un ciclista"<<endl<<endl;

               leer_tiempos(car);
               break;
           case '4':
               system("cls");
               cout<<"Mostrar toda la informacion de un ciclista"<<endl<<endl;
               mostrar_datos_ciclista(car);
               break;

           case '5':
               break;

           default:
               system("cls");
               cout<<"Esta opcion es erronea";


       }
       cout<<endl;
       system("pause");
       system("cls");

       }while(op!=5);
       cout<<endl<<endl;
}

int main(){
   TCarrera car;
   menu();



   return 0;
}



[MOD] Para publicar código hay que usar las etiquetas GeSHi.

simorg

Mmmmm, Aquí no se hacen trabajos, si acaso publica lo que llevas hecho y te ayudaran en lo que sea posible.




Saludos.