Mudanças entre as edições de "Equipe2-2015-1"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 103: Linha 103:
 
piloto *lista;
 
piloto *lista;
 
FILE *p_arq;
 
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(){
 
void atualizar_lista(){
Linha 111: Linha 136:
 
p_arq2 = fopen ("volta1.dat","w");
 
p_arq2 = fopen ("volta1.dat","w");
 
p_arq3 = fopen ("volta2.dat","w");
 
p_arq3 = fopen ("volta2.dat","w");
if(lista!=NULL){
+
if(lista!=NULL){
 
for(p=lista;p!=NULL;p=p->prox){
 
for(p=lista;p!=NULL;p=p->prox){
fprintf(p_arq, "Nome:%s Equipe:%s\n",p->nome,p->equipe);
+
fprintf(p_arq, "%s %s\n",p->nome,p->equipe);
fprintf(p_arq2, "%d:%d:%d",p->min_v1,p->seg_v1,p->mil_v1);
+
fprintf(p_arq2, "%d:%d:%d\n",p->min_v1,p->seg_v1,p->mil_v1);
fprintf(p_arq3, "%d:%d:%d",p->min_v2,p->seg_v2,p->mil_v2);
+
fprintf(p_arq3, "%d:%d:%d\n",p->min_v2,p->seg_v2,p->mil_v2);
 
}
 
}
 
fclose(p_arq);
 
fclose(p_arq);
Linha 144: Linha 169:
 
lista->prox = novo;
 
lista->prox = novo;
 
}
 
}
atualizar_lista();
 
 
}
 
}
 
   
 
   
 
void listar_pilotos(){
 
void listar_pilotos(){
char aux;
+
piloto *p;
printf("Lista de pilotos atuais:\n");
+
printf("\nLista dos Pilotos e Equipes Cadastrados:\n");
p_arq = fopen("pilotos.dat","r");
+
printf("\n-------------------------------------------------------------------------------\n");
aux = getc(p_arq);
+
for (p = lista; p != NULL; p = p->prox) {
while(aux!=EOF){
+
printf( "%s %s\n", p->nome, p->equipe);
printf("%c",aux);
+
printf("\n-------------------------------------------------------------------------------\n");
aux=getc(p_arq);
+
}
}
 
fclose (p_arq);
 
printf("\n-----------------------------------------\n");
 
 
}
 
}
 
   
 
   
Linha 171: Linha 192:
 
pa->prox=pp->prox;
 
pa->prox=pp->prox;
 
free(pp);
 
free(pp);
 +
printf("\nPiloto removido com sucesso!\n");
 
break;
 
break;
 
}
 
}
Linha 177: Linha 199:
 
}
 
}
 
}
 
}
 
atualizar_lista();
 
 
}
 
}
 
   
 
   
Linha 186: Linha 206:
 
int segundos_corredores[50];
 
int segundos_corredores[50];
 
for(p=lista;p!=NULL;p=p->prox){
 
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);
+
//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 do corredor %s em milésimos: %d\n",p->nome,segundos_corredores[i]);
+
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++;
 
i++;
 
}
 
}
Linha 196: Linha 217:
 
int opcao;
 
int opcao;
 
lista=NULL;
 
lista=NULL;
 +
  abrir_arquivo();
 
int i=1;
 
int i=1;
 
while(i==1){
 
while(i==1){
Linha 218: Linha 240:
 
break;
 
break;
 
case 5:
 
case 5:
 +
            atualizar_lista();
 
i=0;
 
i=0;
 
break;
 
break;

Edição das 16h07min de 30 de junho de 2015

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

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; } } }