Equipe2-2015-1

De MediaWiki do Campus São José
Ir para: navegação, pesquisa

Integrantes

ADONIS ANDREAS MARINOS

ANDERSON GASPAR DE MEDEIROS

DANIEL TREVISAN TATSCH

Descrição da atividade principal

Um sistema de telemetria recebe, a cada volta de uma corrida, um arquivo de dados contendo informações sobre o tempo da volta e o número do carro do piloto em uma corrida. Implemente um sistema que importe esses arquivos e atualize os dados de tempos de todos os pilotos. No entanto, é preciso ter um cadastro de pilotos com seus respectivos números dos carros. A cada volta, ou seja, a cada arquivo lido, é preciso apresentar na tela a posição dos pilotos na corrida. Portanto é preciso cadastrar novos pilotos, remover pilotos e imprimir classificação dos pilotos. O sistema deve conter um menu de opções para realizar as atividades, em loop contínuo e com opção para sair.

Descrição da atividade específica

Fazer uso
  1. Comando swith
  2. Lista encadeada
  3. Ponteiros
  4. Alocação Dinâmica de Memória
  5. Funções para tratamento de arquivo


Exemplo da estrutura (encadeada)
struct TPiloto{
  int numero;
  char nome[40];
  char equipe[20];
  struct TPiloto *prox;
};
Exemplo de arquivo (pilotos.dat)
cat pilotos.dat
1 JOAO GS-SPORT
2 SANTOS KS-RACING
3 SILVA JM-SPORTS
4 WAGNER TK-COMPETITION
5 BELLO GS-SPORT
Exemplo de voltas (volta1.dat)
cat volta1.dat
1 1:15:290
2 1:15:370
3 1:15:900
4 1:16:120
5 1:16:320
Exemplo de voltas (volta2.dat)
cat volta2.dat
2 1:15:190
1 1:15:470
3 1:15:900
5 1:15:120
4 1:16:050

[...]

Atividades

Distribuição

ADONIS ANDREAS MARINOS - Desenvolvimento da interface e criação do código principal do programa;

ANDERSON GASPAR DE MEDEIROS - Desenvolvimento de funções auxiliares; - Desenvolver a interface do programa no terminal;

DANIEL TREVISAN TATSCH - Desenvolvimento de funções auxiliares; - Realizar testes e detectando os possíveis bugs e erros no programa;

Desenvolvimento

O foram desenvolvidos subsistemas lógicos que contemplam as operações de lista pilotos, adicionar e remover, e a classificação. E um sistema principal que gerência todo o programa.

Conclusão

No desenvolvimento desse projeto nos deparamos com algumas dificuldades, que foram superadas com muita pesquisa e persistência em adquirir o conhecimento. Em relação trabalho e o comprometimento, todos desempenharam um ótimo papel para a conclusão do projeto. De acordo com o esforço de cada um em relação a confecção do projeto, as notas são:

Adonis: 10,0 Daniel: 10,0 Anderson: 10,0

Avaliação (professor)

Caros alunos!

Eu esperava muito mais do trabalho de vocês. Muito mais mesmo. O desempenho que vocês vinham tendo na disciplina não refletiu o que eu esperava do trabalho. O programa não atendeu aos requisitos iniciais, porém, foram feitas novas implementações interessantes. Ainda faltou um cuidado maior com a wiki, o código fonte não está comentado, entre outros problemas identificados que conversamos na apresentação.

Por isso minha nota para a equipe toda é: 7.

Douglas A.

Código fonte

<syntaxhighlight lang=c>

  1. include <stdio.h>
  2. include <stdlib.h>
  3. include <string.h>

typedef struct Tcorredor{ char nome[50]; char equipe[50]; int min_v1; int seg_v1; int mil_v1; int min_v2; int seg_v2; int mil_v2; struct Tcorredor *prox; } piloto;

piloto *lista; FILE *p_arq;

void abrir_arquivo() {

  FILE *fp;

int res;

if ((fp = fopen("pilotos.dat", "r")) == NULL) { printf("Falha na abertura do arquivo.\n"); return; } while(1) {

   	piloto *novo = malloc(sizeof(piloto));

if((res = fscanf(fp,"%s %s", novo->nome, novo->equipe)) == EOF) { break; } if(lista == NULL) { lista = novo; }else { novo->prox = lista->prox; lista->prox = novo; } } fclose(fp); }


void atualizar_lista(){ piloto *p; FILE *p_arq2; FILE *p_arq3; p_arq = fopen ("pilotos.dat","w"); p_arq2 = fopen ("volta1.dat","w"); p_arq3 = fopen ("volta2.dat","w"); if(lista!=NULL){ for(p=lista;p!=NULL;p=p->prox){ fprintf(p_arq, "%s %s\n",p->nome,p->equipe); fprintf(p_arq2, "%d:%d:%d\n",p->min_v1,p->seg_v1,p->mil_v1); fprintf(p_arq3, "%d:%d:%d\n",p->min_v2,p->seg_v2,p->mil_v2); } fclose(p_arq); fclose(p_arq2); fclose(p_arq3); } }

void add_piloto(){ piloto *novo; novo = (piloto*) malloc(sizeof(piloto)); printf("Entre com o nome do novo piloto:\n"); scanf("%s",novo->nome); printf("Entre com a equipe do novo corredor:\n"); scanf("%s",novo->equipe); printf("Entre com o tempo da primeria volta: \n(Primeiro minutos, depois segundos e milésimos)\n"); scanf("%d",&novo->min_v1); scanf("%d",&novo->seg_v1); scanf("%d",&novo->mil_v1); printf("Entre com o tempo da segunda volta:\n"); scanf("%d",&novo->min_v2); scanf("%d",&novo->seg_v2); scanf("%d",&novo->mil_v2); if(lista==NULL){ lista = novo; }else{ novo->prox = lista->prox; lista->prox = novo; } }

void listar_pilotos(){ piloto *p; printf("\nLista dos Pilotos e Equipes Cadastrados:\n"); printf("\n-------------------------------------------------------------------------------\n"); for (p = lista; p != NULL; p = p->prox) { printf( "%s %s\n", p->nome, p->equipe); printf("\n-------------------------------------------------------------------------------\n"); } }

void deletar_piloto(){ piloto *pa; // anterio piloto *pp; // proximo char nome_del[50]; printf("Digite o nome do corredor que deseja apagar:\n"); scanf("%s",nome_del);

    pa=lista;

for(pp=lista->prox;pp!=NULL;pp=pp->prox){ if(strcmp(nome_del,pp->nome)==0){ pa->prox=pp->prox; free(pp); printf("\nPiloto removido com sucesso!\n"); break; } else{ pa=pp; } } }

void estatistica(){ piloto *p; int i=0; int segundos_corredores[50]; for(p=lista;p!=NULL;p=p->prox){ //segundos_corredores[i]=(p->min_v1*60000+p->min_v2*60000+p->seg_v1*1000+p->seg_v2*1000+p->mil_v1+p->mil_v2); printf("TEMPO CORREDOR %s PRIMEIRA VOLTA-> %d:%d:%d\n",p->nome,p->min_v1,p->seg_v1,p->mil_v1); printf("TEMPO CORREDOR %s SEGUNDA VOLTA-> %d:%d:%d\n",p->nome,p->min_v2,p->seg_v2,p->mil_v2); i++; } printf("\n\n\n"); }

void main(){ int opcao; lista=NULL;

  abrir_arquivo();

int i=1; while(i==1){ printf("O que deseja fazer: \n1-Ver lista de pilotos \n2-Adicionar piloto \n3-Remover piloto \n4-Estatística \n5-Sair\n"); scanf("%d",&opcao); switch(opcao){ case 1: system("clear"); listar_pilotos(); break; case 2: system("clear"); add_piloto(); break; case 3: system("clear"); deletar_piloto(); break; case 4: system ("clear"); estatistica(); break; case 5:

           atualizar_lista();

i=0; break; } } }