Jump to content
M0Lh0DES0jA

Projeto em C

Recommended Posts

M0Lh0DES0jA

Boas pessoal, estou a fazer um projeto em C mais um amigo meu para a disciplina de Algortimos do curso Tecnologias de Programação e Sistemas de Informação. Este é o enunciado do projeto:

"Implementar uma aplicação para fazer a gestão de frequência de um curso.

- Deverá ser possível registar alunos (nºaluno,nome, morada,contacto,data de nascimento).

- Devera ser possível registar os módulos existentes. Para cada modulo será registado o numero de horas, a data de inicio a data de fim e o numero de faltas.

- Deverá ser possível introduzir a nota de um módulo e actualizar o número de faltas.

- Devera ser possível obter um relatório com a nota do aluno e as faltas das disciplinas concluídas.

- Devera ser possível saber quais as disciplinas em um aluno reprovou, quer por nota, quer por numero de faltas.

- Devera ser possível obter por aluno uma listagem dos módulos concluídos."

Será que me podem ajudar no seguinte ponto: "Deverá ser possível introduzir a nota de um módulo e actualizar o número de faltas."

Até agora nas aulas dei em C as estruturas de seleção, repetição, funções, array's, estruturas, strings e caracteres.

O programa já regista os alunos e os modulos, agora a listagem dos mesmos nao faz. Neste ponto: Deverá ser possível introduzir a nota de um módulo e actualizar o número de faltas, a minha professora diz que temos que fazer uma pesquisa, ou seja pesquisar o aluno pelo o numero, para o registo do aluno aparecer no ecrã e perguntar se queremos actualizar as faltas e/ou a nota do modulo.

A minha professora deu nos este codigo para isso, só que está a dar erro no projeto.

int pesquisaSequencial (int v[], int limite, int valorP) {
int i = 0;
while (i < limite && v[i] != valorP)
i++;
if (i < limite)
return i ; //devolve índice onde se encontra
return
-
1; //valor que indica insucesso na procura
}

Estou a usar o CodeBlocks. Obrigado!

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites
HappyHippyHippo

que erro é apresentado ?

código correctamente indentado:

int pesquisaSequencial (int v[], int limite, int valorP) {
 int i = 0;

 while (i < limite && v[i] != valorP)
   i++;

 if (i < limite)
   return i ; //devolve índice onde se encontra

 return -1; //valor que indica insucesso na procura
}


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
M0Lh0DES0jA

O programa corre mas quando retiro o /*-*/ ele apresenta alguns erros aqui:

/* float mostrarpesq (int v[], int limite, int valorP)
{
int valor;
printf("valor a pesquisar? ");
scanf("%d", &valor);
int indPesq = pesquisa (tabelaAluno,  );
if (indPesq != -1)
printf ("Valor %d encontrado na posicao %d\n", vetor[i], indPesq+1);
else
printf ("Valor %d nao encontrado\n", valor);
}
int pesquisa (struct Aluno tabelaAluno[], int limite, int valorP)
{
int i = 0;
while (i < contaluno && [i] != valorP)
i++;
if (i < limite)
return i ; //devolve índice onde se encontra
return -1; //valor que indica insucesso na procura
} */

O nosso projeto encontra-se assim:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#define TAMANHO 100
struct Aluno
{
   int num_aluno;
   char nome[100];
   char morada[100];
   int  contacto;
   int data_nascimento;
   char mod[100];
   int nota;
   int falta;
};

struct Modulo
{
   int horas;
   int ini;
   int fim;
   int faltas;
};
struct Aluno tabelaAluno[100];
struct Modulo tabelaModulo[10];
/* float mostrarpesq (int v[], int limite, int valorP)
{
int valor;
printf("valor a pesquisar? ");
scanf("%d", &valor);
int indPesq = pesquisa (tabelaAluno,  );
if (indPesq != -1)
printf ("Valor %d encontrado na posicao %d\n", vetor[i], indPesq+1);
else
printf ("Valor %d nao encontrado\n", valor);
}
int pesquisa (struct Aluno tabelaAluno[], int limite, int valorP)
{
int i = 0;
while (i < contaluno && [i] != valorP)
i++;
if (i < limite)
return i ; //devolve índice onde se encontra
return -1; //valor que indica insucesso na procura
} */

void criar_mod (int numeroMod, struct Modulo tabelaModulo[])
{
   fflush(stdin);
   printf( "\n Numero de Horas: \n");
   scanf( "\n %d", &tabelaModulo[numeroMod].horas);
   fflush(stdin);
   printf("\n Data de Inicio do Modulo: \n");
   scanf( "\n %d", &tabelaModulo[numeroMod].ini);
   fflush(stdin);
   printf("\n Data de Fim do Modulo: \n");
   scanf( "\n %d", &tabelaModulo[numeroMod].fim);
   fflush(stdin);
   printf("\n Faltas: \n");
   scanf( "\n %d", &tabelaModulo[numeroMod].faltas);
}
void criar (int numeroAluno, struct Aluno tabelaAluno[])
{
   fflush(stdin);
   printf( "\n Numero de Aluno: \n");
   scanf( "\n %d", &tabelaAluno[numeroAluno].num_aluno);
   fflush(stdin);
   printf("\n Nome: \n");
   gets(tabelaAluno[numeroAluno].nome);
   fflush(stdin);
   printf("\n Morada: \n");
   gets(tabelaAluno[numeroAluno].morada);
   fflush(stdin);
   printf( "\n Data de Nascimento: \n");
   scanf( "\n %d", &tabelaAluno[numeroAluno].data_nascimento);
   fflush(stdin);
   printf("\n Contacto: \n");
   scanf( "\n %d", &tabelaAluno[numeroAluno].contacto);
   fflush(stdin);
   printf( "\n Modulo: \n");
   gets(tabelaAluno[numeroAluno].mod);
   fflush(stdin);
   printf( "\n Faltas: \n");
   gets(tabelaAluno[numeroAluno].falta);
}
void mostrarAluno (int numeroAluno, struct Aluno tabelaAluno[])
{
   printf("\n \t Numero de Aluno: %s\n\n ", tabelaAluno[numeroAluno].num_aluno);
   printf("\n \t Nome: %s\n\n ", tabelaAluno[numeroAluno].nome);
   printf("\n \t Morada: %s\n\n ", tabelaAluno[numeroAluno].morada);
   printf("\n \t Data de Nascimento: %d\n\n ", tabelaAluno[numeroAluno].data_nascimento);
   printf("\n \t Contacto: %d\n\n", tabelaAluno[numeroAluno].contacto );
   printf("\n \t Modulo: %s\n\n", tabelaAluno[numeroAluno].mod );
   printf("\n \t Nota: %s\n\n", tabelaAluno[numeroAluno].nota);
   printf("\n \t Faltas: %s\n\n", tabelaAluno[numeroAluno].falta);
}
float listar ( int numeroAluno, struct Aluno tabelaAluno[])
{
   int i;
   system("cls");
   for(i=0; i<numeroAluno; i++)
   {
       printf("\n \t Numero de Aluno: %s\n\n ", tabelaAluno[i].num_aluno);
       printf("\n \t Nome: %s\n\n ", tabelaAluno[i].nome);
       printf("\n \t Morada: %s\n\n ", tabelaAluno[i].morada);
       printf("\n \t Data de Nascimento: %s\n\n ", tabelaAluno[i].data_nascimento);
       printf("\n \t Contacto: %d\n\n", tabelaAluno[i].contacto );
       printf("\n \t Modulo: %s\n\n", tabelaAluno[i].mod );
       printf("\n \t Notas: %s\n\n", tabelaAluno[i].nota );
       printf("\n \t Faltas: %s\n\n", tabelaAluno[i].falta );
       printf("\n \t --------------------------------------------------------------------- \t \n\n ");
   }
   system("pause");
}
int numeroAluno=0;
int numeroMod=0;
int contaluno=0;
int main()
{
   int menu2, i, flag;
   system ("color 21");
   int opcao=1;
   while (opcao!=8)
   {
       system("cls");
       printf("\n\n----------------------------MENU------------------------------\n");
       printf("\n|                     1 - Registar Aluno!\n");
       printf("\n|                     2 - Registar Modulo!\n");
       printf("\n|                     3 - Alterar Faltas e Notas do Aluno!\n");
       printf("\n|                     4 - Guardar!\n");
       printf("\n|                     5 - \n");
       printf("\n|                     6 - Listar tudo!\n");
       printf("\n|                     8 - Sair\n");
       printf("\n\n--------------------------------------------------------------\n");

       printf("\n Escolha uma opcao acima indicada -> ");
       scanf("%d",&opcao);

       switch (opcao)
       {
       case 1:
       {
// O comando system("cls"); limpar o ecrã.
           system("cls");
           criar ( numeroAluno, tabelaAluno);
           numeroAluno++;
           break;
       }
       case 2:
       {
           system("cls");
           criar_mod( numeroMod, tabelaModulo);
           numeroMod++;
           break;
       }
       case 3:
       {
           system("cls");
           printf("\n Candidato que pretende alterar: \n");
           scanf("%d", &numeroAluno);
           mostrarAluno(numeroAluno-1, tabelaAluno);
           printf("\n Dados a alterar: \n");
           printf("\n 1 - Faltas ");
           printf("\n 2 - Notas ");
           printf("\n\n 0 - Voltar \n\n");
           scanf("%d", &menu2);
           switch (menu2)
           {
           case 1:
               fflush(stdin);
               gets(tabelaAluno[numeroAluno-1].falta);
               for (i=0; tabelaAluno[numeroAluno-1].falta/*[i]*/ != '\0'; i++)
               {
                   tabelaAluno[numeroAluno-1].falta/*[i]*/ = toupper(tabelaAluno[numeroAluno-1].falta/*[i]*/);
               }
               break;
           case 2:
               fflush(stdin);
               gets(tabelaAluno[numeroAluno-1].nota);
               for(i=0; i<strlen(tabelaAluno[numeroAluno-1].nota) && flag ==0; i++)
               {
                   if (isalpha(tabelaAluno[numeroAluno-1].nota/*[i]*/))
                   {
                       printf("\n Numero invalido ");
                       flag = 1;
                   }
               }
               break;
           default:
               menu2=0;
               printf("\n Opcao Invalida! \n");
               break;
           }
           break;
       }
       case 4:
       {
           system("cls");
           int l;
           l=0;
           FILE *listasaida;
           listasaida = fopen("Alunos.txt", "w");
           fprintf(listasaida, "%d\n", numeroAluno);
           for(l=0; l <numeroAluno; l++)
           {
               fprintf(listasaida, "%s\n%d\n%s\n%d\n%d\n%s\n%d\n%d\n",
                       tabelaAluno[l].nome,
                       tabelaAluno[l].num_aluno,
                       tabelaAluno[l].morada,
                       tabelaAluno[l].contacto,
                       tabelaAluno[l].data_nascimento,
                       tabelaAluno[l].mod,
                       tabelaAluno[l].nota,
                       tabelaAluno[l].falta);

           }
           fclose(listasaida);
       }
       break;

       case 5:
       {
           system("cls");
           printf("\n\n 5 -  ");
           break;
       }

       case 6:
       {
           system("cls");
           printf("\n\n 6 - Listar Tudo!  ");
           break;
       }

       case 7:
       {
           system("cls");
           listar ( numeroAluno, tabelaAluno );
           numeroAluno++;
           break;
       }
       case 8:
       {
           system("cls");
           break;
       }

// Opção Padrão.
       default:
       {
           system("cls");
// Se for escolhida a opção 5, ele salta o while utilizando continue para isso.
           if( opcao==8)
           {
               return opcao;
           }
// Caso o utilizador digite um numero acima de 8, o programa irá informar que nao existe essa opção.
           printf("\n\n Nenhuma Opcao foi Escolhida! ");
           break;
       }
       }
   }
   if( opcao==8)
       printf("\n\n O Programa foi Fechado!");
   getch();

}

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites
HappyHippyHippo

1~ dizes que apresenta erros num código que nem te deste ao trabalho de apresentar no teu primeiro post

2- ignoras completamente a primeira pergunta que te é feita:

que erro é apresentado ?

isso assim não vai a lado nenhum ...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
M0Lh0DES0jA

Peço desculpa, passou me ao lado!

Os erros sao os seguintes:

gxaw.png

São os erros apenas da função pesquisa.

Obrigado.

Share this post


Link to post
Share on other sites
thoga31

Basta ler os erros para se perceber o que está errado...

int indPesq = pesquisa (tabelaAluno, /* Olá mãe, estava aqui! */ );

Pois, isto assim é óbvio que dá falta de tokens pelo compilador... Com um argumento desaparecido...

printf ("Valor %d encontrado na posicao %d\n", vetor[i] /* Who am I? */ , indPesq+1);

Onde declaraste "vetor"? E onde declaraste "i"?

while (i < contaluno /* Mais um paraquedista */ && [i] != valorP)

E onde está "contaluno" declarado?

while (i < contaluno && [i] != valorP)
//                      ^^^
//                      |||
//                      |||
//                   o que é isto?

Edited by thoga31

Knowledge is free!

Share this post


Link to post
Share on other sites
cdgramos

duas coisas à parte da tua dúvida que acho importante corrigires também:

1)

system("cls");

isto normalmente só funciona em Windows, e provavelmente o teu prof usa linux. Podes usar macros para verificar o sistema operativo e usares o system("cls"); e system("clear"); conforme o SO.

Ou então fazes um ciclo for e imprimes um monte de \n que faz o mesmo e é o melhor :P

2)

fflush(stdin);

estás a usar esta função porque no scanf apenas lês o inteiro e o \n fica no buffer, mas a função fflush não é aconselhável (foi desenhava para buffers de output e não de input), ela até pode funcionar bem no teu PC mas o comportamento da função para buffers de entrada é imprevisível.

Tenta

scanf("%d ", &menu2);

OU

scanf("%d", &menu2);
scanf("\n");

Pequenas coisas que quando mais cedo corrigires melhor :P

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.