sou novo no forum e estou cursando o segundo semestre em analise e desenvolvimento de sistemas minha professora pediu para fazermos um programa do seguinte modo:
Cada grupo deve determinar os campos, tipos e tamanhos dos registros que serão utilizados na manipulação dos arquivos “Esportes.dat” e “Atletas.dat” (conforme instruções a seguir), bem como criar um programa em C para manter e consultar seus cadastros.
Arquivos e registros:
Esportes: arquivo destinado a armazenar modalidades esportivas; deve conter:
código;
nome da modalidade;
campo “excluído”, com valores “0” ou “1”;
e mais 2 (dois) campos (no mínimo).
Atletas: deve conter:
código;
nome;
código da modalidade a que se dedica;
campo “excluído”, com valores “0” ou “1”;
e mais 5 (cinco) campos (no mínimo).
O campo “excluído” deve ser utilizado para realizar a exclusão lógica do arquivo (quando “excluído” for 1, o registro deve ser desconsiderado em consultas).
Opções:
1. Inclusão de esporte (código não deve repetir)
2. Alteração de esporte pelo código
buscar o código do esporte no arquivo
exibir um a um (exceto o código), todos os dados do esporte, permitindo que o usuário possa alterá-lo
após percorrer todos os campos, solicitar confirmação das alterações
emitir mensagem final
3. Exclusão de esporte (somente se não houver atletas para o esporte)
buscar o código do esporte no arquivo
exibir dados do esporte
solicitar confirmação da exclusão
realizar a exclusão lógica – campo “excluído”
emitir mensagem final
4. Inclusão de atleta (código não deve repetir)
código do esporte deve existir no arquivo “Esportes.dat”
5. Alteração de atleta
mesmo funcionamento da opção “2”
se o código de esporte for alterado, deve existir no arquivo “Esportes.dat”
6. Exclusão de atleta( mesmo funcionamento da opção “3”)
7. Consulta de atletas por esporte
8. Encerramento do programa
eu e meu amigo desenvolvemos o seguinte codigo:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
struct regESPORTE{
int cod_mod;
int camp_exc;
int num_atletas;
char nome_mod[50];
char ambiente[50];
};
struct regATLETA{
int cod_atle;
int cod_mod_atle;
int camp_exc_atle;
char nome_atle[50];
char nacionalidade[50];
int idade;
float peso;
float altura;
char posicao[50];
};
main(){
regESPORTE esporte;
regATLETA atleta;
FILE *arq;
FILE *arq2;
int x,sair;
int opcao=0,consulta=0,aux=0,posicao=0,achou=0, cont = 0;
char opcao2;
do{//[1]
do{//[2]
printf("Banco de dados de cadastro de modalidade e Atletas\n\n\n");
Pergunta
GustavoMunhoz
Boa Noite Pessoal
sou novo no forum e estou cursando o segundo semestre em analise e desenvolvimento de sistemas minha professora pediu para fazermos um programa do seguinte modo:
Cada grupo deve determinar os campos, tipos e tamanhos dos registros que serão utilizados na manipulação dos arquivos “Esportes.dat” e “Atletas.dat” (conforme instruções a seguir), bem como criar um programa em C para manter e consultar seus cadastros.
Arquivos e registros:
Esportes: arquivo destinado a armazenar modalidades esportivas; deve conter:
código;
nome da modalidade;
campo “excluído”, com valores “0” ou “1”;
e mais 2 (dois) campos (no mínimo).
Atletas: deve conter:
código;
nome;
código da modalidade a que se dedica;
campo “excluído”, com valores “0” ou “1”;
e mais 5 (cinco) campos (no mínimo).
O campo “excluído” deve ser utilizado para realizar a exclusão lógica do arquivo (quando “excluído” for 1, o registro deve ser desconsiderado em consultas).
Opções:
1. Inclusão de esporte (código não deve repetir)
2. Alteração de esporte pelo código
buscar o código do esporte no arquivo
exibir um a um (exceto o código), todos os dados do esporte, permitindo que o usuário possa alterá-lo
após percorrer todos os campos, solicitar confirmação das alterações
emitir mensagem final
3. Exclusão de esporte (somente se não houver atletas para o esporte)
buscar o código do esporte no arquivo
exibir dados do esporte
solicitar confirmação da exclusão
realizar a exclusão lógica – campo “excluído”
emitir mensagem final
4. Inclusão de atleta (código não deve repetir)
código do esporte deve existir no arquivo “Esportes.dat”
5. Alteração de atleta
mesmo funcionamento da opção “2”
se o código de esporte for alterado, deve existir no arquivo “Esportes.dat”
6. Exclusão de atleta( mesmo funcionamento da opção “3”)
7. Consulta de atletas por esporte
8. Encerramento do programa
eu e meu amigo desenvolvemos o seguinte codigo:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
struct regESPORTE{
int cod_mod;
int camp_exc;
int num_atletas;
char nome_mod[50];
char ambiente[50];
};
struct regATLETA{
int cod_atle;
int cod_mod_atle;
int camp_exc_atle;
char nome_atle[50];
char nacionalidade[50];
int idade;
float peso;
float altura;
char posicao[50];
};
main(){
regESPORTE esporte;
regATLETA atleta;
FILE *arq;
FILE *arq2;
int x,sair;
int opcao=0,consulta=0,aux=0,posicao=0,achou=0, cont = 0;
char opcao2;
do{//[1]
do{//[2]
printf("Banco de dados de cadastro de modalidade e Atletas\n\n\n");
printf("Escolha opcao:\n\n1) Incluir esporte \n2) Alterar esporte pelo codigo \n3) Excluir esporte \n4) Incluir atleta");
printf("\n5) Alterar atleta \n6) Excluir atleta \n7) Consultar atleta por esporte \n8) Encerrar programa\n\n");
scanf("%d",&opcao);fflush(stdin);
system("cls");
}while(opcao<1||opcao>8);//[2]
switch(opcao){//[3]
case 1:
arq=fopen("C:\\Esporte.dat", "a+b");
printf("Digite o codigo do esporte: ");
scanf("%d",&esporte.cod_mod); fflush(stdin);
consulta=esporte.cod_mod;
if(arq==NULL){//[4]
printf("\nErro na abertura do arquivo\n");
consulta=0;
}//[4]
else{//[9]
x=fread(&esporte,sizeof(esporte),1,arq);
while (feof(arq)==0){//[6]
if(x!=1){//[5]
printf("\nErro no arquivo\n");
consulta=0;
}//[5]
else{//[7]
if(esporte.cod_mod==consulta){//[8]
printf("\nEsporte já cadastrado com este codigo!\n");
consulta=0;
}//[8]
}//[7]
x=fread(&esporte,sizeof(esporte),1,arq);
}//[6]
}//[9]
fclose(arq);
arq=fopen("c:\\Esporte.dat","ab");
if (esporte.cod_mod!=0&&consulta!=0){//[10]
esporte.cod_mod=consulta;
printf("Digite o nome da modalidade: ");
gets(esporte.nome_mod);
printf("Digites o numero de atletas que compoem um equipe dessa modalidade: ");
scanf("%d", &esporte.num_atletas); fflush(stdin);
printf("Digite o ambiente onde essa modalidade e praticada: ");
gets(esporte.ambiente);
esporte.camp_exc=0;
x=fwrite(&esporte,sizeof(esporte),1,arq);
system("cls");
if(x!=1) printf("\nErro na gravacao do esporte!");
fclose(arq);
} //[10]
break;
case 2:
printf("Digite o codigo do esporte: ");
scanf("%d",&consulta); fflush(stdin);
arq=fopen("c:\\Esporte.dat","rb");
if(arq==NULL) printf("\nErro na abertura do arquivo!\n");
else{ //[11]
x=fread(&esporte,sizeof(esporte),1,arq);
while(feof(arq) == 0){//[14]
if(x != 1){//[12]
printf("\nErro no arquivo\n");
}//[12]
else{
if(consulta==esporte.cod_mod){//[13]
system("cls");
printf("\n===DADOS ATUAIS===\n\n");
printf("Nome da modalidade: %s\n", esporte.nome_mod);
printf("Numero de atletas de uma equipe: %d\n", esporte.num_atletas);
printf("Ambiente onde a modalide é praticada: %s\n",esporte.ambiente);
cont = 1;
aux = ftell(arq); //
} //[13]
}//[14]
x = fread(&esporte, sizeof(esporte), 1, arq);
}//[11]
if(cont < 1){//[15]
system("cls");
printf("Codigo não encontrado!!");
getchar();
system("cls");
break;
}//[15]
// menssagem de erro caso não encontrou
fclose(arq);
arq=fopen("c:\\Esporte.dat","r+b");
if(arq== NULL){//[16]
printf("\nErro na abertura do arquivo!\n");
}//[16]
else{//[17]
printf("\n===PREENCHA A ALTERACAO===\n\n");
printf("Digite o nome da modalidade: ");
gets(esporte.nome_mod);
printf("Digite o numero de atletas de uma equipe dessa modalidade: ");
scanf("%d",&esporte.num_atletas); fflush(stdin);
printf("Digite o nome do ambiente da modalidade: ");
gets(esporte.ambiente);
printf("Deseja salvar as alteracoes? S/N ");
scanf("%c",&opcao2); fflush(stdin);
if(opcao2=='s'||opcao2=='S'&&x==1){//[18]
fseek(arq,(aux-sizeof(esporte)),SEEK_SET); //
//fseek = aux -(sizeof(esporte)
x=fwrite(&esporte,sizeof(esporte),1,arq);
system("cls");
printf("Dados da modalide alterados!\n");
}//[18]
else{//[19]
system("cls");
printf("Dados da modalide não alterados!\n");
}//[19]
fclose(arq);
system("cls");
}//[17]
break;
case 3:
printf("Digite o codigo do esporte: ");
scanf("%d",&consulta); fflush(stdin);
arq=fopen("c:\\Esporte.dat","rb");
if(arq==NULL) printf("\nErro na abertura do arquivo!\n");
else{ //[20]
x=fread(&esporte,sizeof(esporte),1,arq);
while(feof(arq) == 0){//[21]
if(x != 1) printf("\nErro no arquivo\n");
else{//[22]
if((consulta==esporte.cod_mod)&&(esporte.camp_exc == 0)){//[23]
system("cls");
printf("\n===DADOS ATUAIS===\n\n");
printf("Nome da modalidade: %s\n", esporte.nome_mod);
printf("Numero de atletas de uma equipe: %d\n", esporte.num_atletas);
printf("Ambiente onde a modalide é praticada: %s\n",esporte.ambiente);
cont = 1;
aux = ftell(arq); //
}/*[23]*/
}//[22]
x = fread(&esporte, sizeof(esporte), 1, arq);
}//[21]
if(cont < 1){//[24]
system("cls");
printf("Codigo não encontrado!!");
getchar();
system("cls");
break;
}//[24]
// menssagem de erro caso não encontrou
}//[20]
fclose(arq);
cont=0;
arq2=fopen("c:\\Atleta.dat","rb");
if(arq2==NULL) printf("\nErro na abertura do arquivo!\n");
else{//[25]
x=fread(&atleta,sizeof(atleta),1,arq2);
while(feof(arq2)==0){//[26]
if(x!=1) printf("\nErro no arquivo\n");
else{//[27]
if(consulta==atleta.cod_mod_atle) cont = 1;
}//[27]
x = fread(&atleta,sizeof(atleta),1,arq2);
}//[26]
if(cont > 0){//[28]
system("cls");
printf("não é possivel excluir, pois existem atletas cadastrados!!");
getchar();
system("cls");
break;
}//[28]
} //[25]
fclose(arq2);
arq=fopen("c:\\Esporte.dat","r+b");
if(arq== NULL) printf("\nErro na abertura do arquivo!\n");
else{//[29]
printf("Deseja salvar as alteracoes? S/N ");
scanf("%c",&opcao2); fflush(stdin);
esporte.camp_exc = 1;
if((opcao2=='s')||(opcao2=='S')){//[30]
fseek(arq,(aux-sizeof(esporte)),SEEK_SET); //
//fseek = aux -(sizeof(esporte)
x=fwrite(&esporte,sizeof(esporte),1,arq);
if (x == 1){//[31]
system("cls");
printf("Esporte excluido com sucesso!\n");
}//[31]
else{//[32]
printf("Erro na exclusao do produto!");
}//[32]
}//[30]
else{//[33]
system("cls");
printf("Esporte não exluido!\n");
system("cls");
}//[33]
}//[29]
fclose(arq);
break;
case 4:
arq2=fopen("C:\\Atleta.dat", "a+b");
printf("Digite o codigo do atleta: ");
scanf("%d",&atleta.cod_atle); fflush(stdin);
consulta=atleta.cod_atle;
if(arq2==NULL){//[34]
printf("\nErro na abertura do arquivo\n");
consulta=0;
}//[34]
else{//[35]
x=fread(&atleta,sizeof(atleta),1,arq2);
while (feof(arq2)==0){//[36]
if(x!=1){//[37]
printf("\nErro no arquivo\n");
consulta=0;
}//[37]
else{//[38]
if(atleta.cod_atle==consulta){//[39]
printf("\nAtleta já cadastrado com este codigo!\n");
consulta=0;
}//[39]
}//[38]
x=fread(&atleta,sizeof(atleta),1,arq2);
}//[36]
}//[35]
fclose(arq2);
arq2=fopen("c:\\Atleta.dat","ab");
if (atleta.cod_atle!=0&&consulta!=0){//[40]
atleta.cod_atle=consulta;
printf("Digite o nome do atleta: ");
gets(atleta.nome_atle);
printf("Digite o codigo da modalidade do atleta: ");
scanf("%d", &atleta.cod_mod_atle); fflush(stdin);
printf("qual a nacionalidade do atleta?: ");
gets(atleta.nacionalidade);
printf("Qual a peso do atleta?: ");
scanf("%f", &atleta.peso); fflush(stdin);
printf("Qual a altura do atleta?: ");
scanf("%f", &atleta.altura); fflush(stdin);
printf("Qual a posicao do atleta em seu esporte?: ");
scanf("%s", &atleta.posicao); fflush(stdin);
atleta.camp_exc_atle=0;
x=fwrite(&atleta, sizeof(atleta), 1, arq2);
system("cls");
if(x!=1) printf("\nErro na gravacao do atleta!");
}//[40]
fclose(arq2);
break;
case 5:
printf("Digite o codigo do atleta: ");
scanf("%d",&consulta); fflush(stdin);
arq=fopen("c:\\Atleta.dat","rb");
if(arq2==NULL) printf("\nErro na abertura do arquivo!\n");
else{//[41]
x=fread(&atleta,sizeof(atleta),1,arq2);
while(feof(arq2) == 0){//[42]
if(x != 1) printf("\nErro no arquivo\n");
else{//[43]
if(consulta==atleta.cod_atle){
system("cls");
printf("====DADOS ATUAIS=====");
printf("Codigo do Atleta: %d\n", atleta.cod_atle);
printf("Codigo da modalidade : %d\n",atleta.cod_mod_atle);
printf("Nome: %s\n",atleta.nome_atle);
printf("Nacionalidade: %s\n",atleta.nacionalidade);
printf("idade: %d\n",atleta.idade);
printf("peso: %f\n",atleta.peso);
printf("Altura: %f\n",atleta.altura);
printf("Posicao : %s\n",atleta.posicao);
cont = 1;
aux = ftell(arq);
}//[43]
}//[42]
x = fread(&atleta, sizeof(atleta), 1, arq2);
}//[41]
if(cont < 1){//[44]
system("cls");
printf("Codigo não encontrado!!");
getchar();
system("cls");
break;
} //[44]
fclose(arq);
arq2=fopen("c:\\Atleta.dat","r+b");
if(arq== NULL) printf("\nErro na abertura do arquivo!\n");
else{//[45]
printf("\n===PREENCHA A ALTERACAO===\n\n");
printf("Digite o nome do atleta: ");
gets(atleta.nome_atle);
printf("Digite o codigo da modalidade do atleta: ");
scanf("%d",&atleta.cod_mod_atle);fflush(stdin);
printf("qual a nacionalidade do atleta?: ");
gets(atleta.nacionalidade);
printf("Qual a peso do atleta?: ");
scanf("%d",&atleta.peso);fflush(stdin);
printf("Qual a altura do atleta?: ");
scanf("%d",&atleta.altura);fflush(stdin);
printf("Qual a idade do atleta?: ");
scanf("%d",&atleta.idade);fflush(stdin);
printf("Qual a posicao do atleta em seu esporte?: ");
gets(atleta.posicao);
printf("Deseja salvar as alteracoes? S/N ");
scanf("%c",&opcao2); fflush(stdin);
if(opcao2=='s'||opcao2=='S'&&x==1){//[46]
x=fwrite(&atleta,sizeof(atleta),1,arq2);
system("cls");
printf("Dados do atleta alterados!\n");
}//[46]
else{//[47]
system("cls");
printf("Dados do atleta não alterados!\n");
fclose(arq);
}//[47]
}//[45]
break;
case 6:
printf("Digite o codigo do atleta: ");
scanf("%d",&consulta); fflush(stdin);
arq2=fopen("c:\\Atleta.dat","rb");
if(arq2==NULL) printf("\nErro na abertura do arquivo!\n");
else{ //[20]
x=fread(&atleta,sizeof(atleta),1,arq2);
while(feof(arq2) == 0){//[21]
if(x != 1) printf("\nErro no arquivo\n");
else{//[22]
if((consulta==atleta.cod_mod_atle)&&(atleta.camp_exc_atle == 0)){//[23]
system("cls");
printf("\n===DADOS ATUAIS===\n\n");
printf("Nome do atleta: %s\n", atleta.nome_atle);
printf("Codigo da modalidade do atleta: %d\n", atleta.cod_mod_atle);
printf("Nacionalidade do atleta: %s\n", atleta.nacionalidade);
printf("Idade do atleta: %d\n", atleta.idade);
printf("Peso do atleta: %f\n", atleta.peso);
printf("Altura do atleta: %f\n", atleta.altura);
printf("Posicao do atleta: %s\n", atleta.posicao);
cont = 1;
aux = ftell(arq2); //
}/*[23]*/
}//[22]
x = fread(&esporte, sizeof(atleta), 1, arq2);
}//[21]
if(cont < 1){//[24]
system("cls");
printf("Codigo não encontrado!!");
getchar();
system("cls");
break;
}//[24]
// menssagem de erro caso não encontrou
}//[20]
fclose(arq2);
arq2=fopen("c:\\Atleta.dat","r+b");
if(arq2== NULL) printf("\nErro na abertura do arquivo!\n");
else{//[29]
printf("Deseja excluir esse atleta? S/N ");
scanf("%c",&opcao2); fflush(stdin);
atleta.camp_exc_atle = 1;
if((opcao2=='s')||(opcao2=='S')){//[30]
fseek(arq2,(aux-sizeof(atleta)),SEEK_SET); //
//fseek = aux -(sizeof(esporte)
x=fwrite(&esporte,sizeof(atleta),1,arq2);
if (x == 1){//[31]
system("cls");
printf("Esporte excluido com sucesso!\n");
}//[31]
else{//[32]
printf("Erro na exclusao do produto!");
}//[32]
}//[30]
else{//[33]
system("cls");
printf("Esporte não exluido!\n");
system("cls");
}//[33]
}//[29]
fclose(arq2);
break;
case 7:
printf("Digite o codigo do esporte para saber quais atletas a praticam: ");
scanf("%d",&consulta); fflush(stdin);
arq=fopen("c:\\Esporte.dat","rb");
if(arq==NULL) printf("\nErro na abertura do arquivo!\n");
else{//[48]
x=fread(&esporte,sizeof(esporte),1,arq);
while(feof(arq)==0){//[49]
if(x != 1) printf("\nErro no arquivo\n");
else{//[50]
if((consulta==esporte.cod_mod)&&(esporte.camp_exc == 0)){//[51]
system("cls");
printf("Modalidade: %s\n\n",esporte.nome_mod);
}/*[51]*/
if(esporte.camp_exc == 1){
printf("não existe essa modalidade ou modalidade excluida!!");
getchar();
system("cls");
break;
}
}//[50]
x = fread(&esporte, sizeof(esporte), 1, arq);
}//[49]
}//[48]
fclose(arq);
arq2=fopen("c:\\Atleta.dat","rb");
if(arq2==NULL)
printf("\nErro na abertura do arquivo!\n");
else{//[52]
x=fread(&atleta,sizeof(atleta),1,arq2);
while(feof(arq2)==0){//[53]
if(x!=1)
printf("\nErro no arquivo\n");
else{//[54]
if(esporte.camp_exc = 1)
{
break;
}else {
if((consulta==atleta.cod_mod_atle)&&(atleta.camp_exc_atle == 0)){
printf("Atleta: %s\n\n",atleta.nome_atle);
cont = 1;
}
}
}//[54]
x = fread(&atleta,sizeof(atleta),1,arq2);
}//[53]
}//[52]
getchar();
system("cls");
fclose(arq2);
break;
case 8:
exit(1);
}
}
}//[3]
}while(opcao!=8);//[1]
}
só que ele esta com uns erros nas opções 5 e 7 que não estou conseguindo solucionar
teria como alguém me ajudar?
ou me dar alguma visão do erro?
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.