Olá pessoal do fórum,estou fazendo um sistema de venda de passagens de onibus, utilizando structs e salvando em arquivo.txt. A principio está quase pronto o programa, porém estou apenas com dois problemas.
Opção 2: Cada onibus tem 42 lugares, vamos supor que eu gravo 3 onibus (1-brasil,2-mexico,3-eua), quando seleciono a poltrona "30" do
onibus 1, meu codigo está replicando para o onibus 2 e 3 também a mesma poltrona, e não deveria.
Opção 3: Preciso mostrar todos passageiros do onibus que o usuario digitou, porém não está aparecendo.
Opção 2: Cada onibus tem 42 lugares, vamos supor que eu gravo 3 onibus (1-brasil,2-mexico,3-eua), quando seleciono a poltrona "30" do
onibus 1, meu codigo está replicando para o onibus 2 e 3 também a mesma poltrona, e não deveria.
Opção 3: Preciso mostrar todos passageiros do onibus que o usuario digitou, porém não está aparecendo.
Código:
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #include <conio.h> struct rodoviaria { int codigo,horapartida,poltrona[42]; char destinoviagem[100],passageiro[100]; }; //função grava void grava(struct rodoviaria a[1000],int fim) { FILE *arq; int teste,i; arq = fopen("arquivo.txt","wb"); // w = cria arquivo, b = modo binario if(arq != NULL) { for(i=0;i<fim;i++) { teste = fwrite(&a[i],sizeof(struct rodoviaria),1,arq); if (teste !=1) // retorna 1 gravou e 0 senao gravou { printf("erro ao salvar"); getch(); } } fclose(arq); } else { printf("erro ao abrir arquivo"); } } //função carrega int carrega(struct rodoviaria a[1000]) // abre arquivo e carrega no vetor { FILE *arq; int teste,percorre=0; struct rodoviaria registro; arq = fopen("arquivo.txt","rb"); if(arq != NULL) { while (!feof(arq)) // diferente do fim do arquivo? { teste = fread(®istro,sizeof(struct rodoviaria),1,arq); if (teste ==1) // se conseguiu ler { a[percorre] = registro; percorre++; } } fclose(arq); } return percorre; } int main() { struct rodoviaria vet[1000]; int ultimo=0, op=0,i,j,x,codonibus=0,cont=0,lugar=0,bus=0; char nomedestino[100]; //carrega vet[i].poltrona[i]; for (i=0;i<42;i++) { cont++; vet[i].poltrona[i]= cont; } while(op !=4) { ultimo = carrega(vet); //abre arquivo e carrega para o vetor printf ("======================================MENU======================================\n"); printf ("1 - Cadastrar viagem :\n"); printf ("2 - Comprar passagem :\n"); printf ("3 - Listar Lista de passageiros :\n"); printf ("4 - Sair :\n\n"); fflush (stdin); scanf ("%d",&op); fflush (stdin); if(op==1) { printf("Informe Codigo do Onibus:"); scanf ("%d",&vet[ultimo].codigo); printf("Informe Destino de Viagem :"); fflush(stdin); fgets (vet[ultimo].destinoviagem,100,stdin); fflush(stdin); printf("Informe Horario de Partida da Viagem:"); scanf ("%d",&vet[ultimo].horapartida); ultimo++; grava(vet,ultimo); //função para gravar vetor no arquivo .txt printf("\n"); printf("Cadastro Realizado com sucesso !\n\n"); system("pause"); system("CLS"); } if(op==2) { printf("Informe Destino de Viagem :"); fflush(stdin); fgets(nomedestino,100,stdin); fflush(stdin); printf("\n"); for(i=0;i<ultimo;i++) { x = strcmp(vet[i].destinoviagem,nomedestino); if (x == 0) { printf ("=======================\n"); printf("Codigo do Onibus :%d\n",vet[i].codigo); printf("Horario de Partida :%d\n",vet[i].horapartida); printf("\n"); } } printf("Informe o codigo do onibus desejado:"); scanf("%d",&codonibus); printf("\n"); for(i=0;i<ultimo;i++) // laço no arquivo { if(vet[i].codigo == codonibus) // se codigo do arquivo == codigo digitado { //imprime destino do onibus selecionado. printf("\tDestino: %s\n",vet[i].destinoviagem); cont=-1; for (i=0;i<42;i++) { cont++; if(cont == 4) { printf("\n%d\t",vet[i].poltrona[i]); cont=0; } else { printf("%d\t",vet[i].poltrona[i]); } } printf("\n\n"); printf("Informe poltrona vaga :"); scanf ("%d",&lugar); printf("Informe nome do passageiro:"); fflush(stdin); fgets (vet[i].passageiro,100,stdin); fflush(stdin); vet[i].passageiro[j+1]; for(i=0;i<42;i++) { if (vet[i].poltrona[i] == lugar) { vet[i].poltrona[i] = 0; } } grava(vet,i); printf("\n"); // lista novamente onibus for (i=0;i<42;i++) { cont++; if(cont == 4) { printf("\n%d\t",vet[i].poltrona[i]); cont=0; } else { printf("%d\t",vet[i].poltrona[i]); } } }//if }//for "ultimo" printf("\n\n"); system("pause"); system("CLS"); }// fim op==2 if(op==3) { if(ultimo == 0) { printf("Nenhum registro foi cadastrado ainda.Favor verificar!\n"); printf("\n"); system("pause"); } else { printf("Informe Destino de Viagem :"); fflush(stdin); fgets(nomedestino,100,stdin); fflush(stdin); printf("\n"); for(i=0;i<ultimo;i++) { x = strcmp(vet[i].destinoviagem,nomedestino); if (x == 0) { printf ("=======================\n"); printf("Codigo do Onibus :%d\n",vet[i].codigo); printf("\n"); } } printf("\n"); printf("Informe codigo do onibus:"); scanf("%d",&bus); printf("\n"); for(i=0;i<ultimo;i++) { if(vet[i].codigo == bus) { printf("Passageiros desse onibus: %s\n",vet[i].passageiro); printf("\n\n\n"); } } }//else system("pause"); system("CLS"); }//fim op ==3 if(op==4) { printf("Encerrando o programa com sucesso!\n\n"); system("pause"); exit(0); } }//while }//main
Comment