Ir para conteúdo
Fórum Script Brasil
  • 0

Lista de alunos/materias


AllanBraulio

Pergunta

Gente, boa noite. Preciso muito de ajuda, pois isso aqui é um trabalho de faculdade e eu to entendendo muito pouco da materia e preciso entregar isso terça feira. Se puderem me ajudar, ficarei agradecido. Bom, vamos lá. O enunciado do meu problema é esse:

Faça um programa para controlar as informações das disciplinas de um curso de graduação. Este programa deve armazenar informações sobre os alunos matriculados e as disciplinas ofertadas pelo curso.

Para cada aluno, o programa deve permitir inserir informações sobre a matrícula, nome, data de nascimento, endereço e telefone. Para cada disciplina, deve conter informações como o código, e a descrição.

Sabe-se que cada aluno possui um valor para sua nota, que é atribuída em uma determinada disciplina do curso.

O programa deve permitir o cadastro dos alunos, disciplinas e das notas dos alunos nas disciplinas. Para isso, o usuário deve digitar via console os dados e estes devem ser armazenados em uma lista encadeada. Ao finalizar a inserção dos dados, os mesmos devem ser gravados em três arquivos diferentes, sendo um para o cadastro das disciplinas, um para o cadastro dos alunos e outro para o lançamento das notas dos alunos nas disciplinas cadastradas.

O programa deve permitir obter as seguintes informações:

  • Listar as notas de todos os alunos de uma determinada disciplina;
  • Listar quais os alunos (pelo nome) foram reprovados (leve em consideração mínimo de 60 pontos para aprovação) em uma determinada disciplina.
  • Listar a maior e a menor nota obtida em cada disciplina.

E eu fiz até agora o seguinte código:

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
using namespace std;

//LISTA
struct TitemdasMaterias{
char nomedisciplina[100];
int codigodisciplina;
char descricaodisciplina[500];
};
struct TitemdosAlunos
{
    int matricula;
    long int telefone;
    char nome[100];
    int diaN, mesN, anoN;
    char endereco[300];

    //outros componentes
};
struct TceluladosAlunos
{
    TitemdosAlunos item;
    TceluladosAlunos *prox;
};
struct TceluladasMaterias
{
    TitemdasMaterias item;
    TceluladasMaterias *prox;
};
struct TListadosAlunos
{
    TceluladosAlunos *primeiro, *ultimo;
    int tamanho;

};
struct TListadasMaterias
{
    TceluladasMaterias *primeiro, *ultimo;
    int tamanho;

};
void menu()
{
    cout << "1 - Inserir aluno" <<endl;
    cout << "2 - Pesquisar alunos" <<endl;
    cout << "3 - Imprimir alunos" <<endl;
    cout << "4 - Remover alunos" <<endl;
    cout << "5 - Inserir disciplina" << endl;
    cout << "6 - Imprimir disciplinas" << endl;
    cout << "7 - Pesquisar disciplinas" << endl;
    cout << "8 - Fazer a lista ficar fazia" << endl ;
    cout << "0 - Sair" <<endl;

}

void FLVaziadosAlunos(TListadosAlunos *Lista)
{
    Lista->tamanho = 0;
    Lista->primeiro = (TceluladosAlunos*)malloc(sizeof(TceluladosAlunos));
    Lista->ultimo = Lista->primeiro;
    Lista->primeiro->prox = NULL;
}
void FLVaziadasMaterias(TListadasMaterias *Lista)
{
    Lista->tamanho = 0;
    Lista->primeiro = (TceluladasMaterias*)malloc(sizeof(TceluladasMaterias));
    Lista->ultimo = Lista->primeiro;
    Lista->primeiro->prox = NULL;
}

int VaziadosAlunos(TListadosAlunos Lista)
{
    return(Lista.primeiro == Lista.ultimo);
}
int VaziadasMaterias(TListadasMaterias Lista)
{
    return(Lista.primeiro == Lista.ultimo);
}
void InsereAluno(TListadosAlunos *Lista, TitemdosAlunos item)
{
    TceluladosAlunos*aux;
    aux = (TceluladosAlunos*)malloc(sizeof(TceluladosAlunos));
    if ( aux == NULL )
    {
        printf ("não foi possivel alocar memoria!\n");
        exit(1);
    }

    aux->item = item;
    aux->prox = NULL;
    Lista->ultimo->prox = aux;
    Lista->tamanho++;
    Lista->ultimo = aux ;
    cout << "Cadastrado com sucesso"<<endl;
    system("pause");
    system("cls");
}
void InsereDisciplina(TListadasMaterias *Lista, TitemdasMaterias item)
{
    TceluladasMaterias*aux;
    aux = (TceluladasMaterias*)malloc(sizeof(TceluladasMaterias));
    if ( aux == NULL )
    {
        printf ("não foi possivel alocar memoria!\n");
        exit(1);
    }

    aux->item = item;
    aux->prox = NULL;
    Lista->ultimo->prox = aux;
    Lista->tamanho++;
    Lista->ultimo = aux ;
    cout << "Disciplina Cadastrada com sucesso"<<endl;
    system("pause");
    system("cls");
}

void grava_arquivo_alunos(TListadosAlunos Lista, TitemdosAlunos *item){

    TceluladosAlunos *aux;
    aux = Lista.primeiro->prox;
    FILE *arq = fopen("alunos.txt", "w");

    if(arq == NULL){
        cout <<"\nErro na gravacao do arquivo!\n";
    }else{
    while (aux != NULL){
            fprintf(arq, "%s\n", aux->item.nome);
            fprintf(arq, "%d\n", aux->item.matricula);
            fprintf(arq, "%d\n", aux->item.telefone);
            fprintf(arq, "%d/%d/%d\n", aux->item.diaN, aux->item.mesN, aux->item.anoN);
            fprintf(arq, "%s\n", aux->item.endereco);
        aux = aux ->prox;
        }

    }

    fclose(arq);
}
void grava_arquivo_disciplinas(TListadasMaterias Lista, TitemdasMaterias *item){

    TceluladasMaterias *aux;
    aux = Lista.primeiro->prox;
    FILE *arq = fopen("disciplinas.txt", "w");

    if(arq == NULL){
        cout <<"\nErro na gravacao do arquivo!\n";
    }else{
    while (aux != NULL){
            fprintf(arq, "%s\n", aux->item.nomedisciplina);
            fprintf(arq, "%d\n", aux->item.codigodisciplina);
            fprintf(arq, "%s\n", aux->item.descricaodisciplina);
        aux = aux ->prox;
        }

    }

    fclose(arq);
}
void le_arquivo_alunos(TListadosAlunos Lista, TitemdosAlunos *item){

    TceluladosAlunos *aux;
    aux = Lista.primeiro->prox;
    FILE *arq = fopen("alunos.txt", "r");

    if(arq == NULL){
        cout <<"\nErro na gravacao do arquivo!\n";
    }else{
    while (aux != NULL){

           fscanf(arq, "%s\n", aux->item.nome);
            fscanf(arq, "%d\n", aux->item.matricula);
            fscanf(arq, "%d\n", aux->item.telefone);
            fscanf(arq, "%d/%d/%d\n", aux->item.diaN, aux->item.mesN, aux->item.anoN);
            fscanf(arq, "%s\n", aux->item.endereco);

        }

    }

    fclose(arq);
}

int pesquisaAluno(TListadosAlunos Lista, TitemdosAlunos *item)
{
    TceluladosAlunos *aux;
    aux = Lista.primeiro->prox;
    while(aux!=NULL)
    {
        if(aux->item.matricula == item->matricula)
        {
            // strcmp(aux->item.nome,item->nome)
            *item = aux->item;
            return 1;
        }
        aux = aux ->prox;
    }
    return 0 ;
}
int pesquisaDisciplina(TListadasMaterias Lista, TitemdasMaterias *item)
{
    TceluladasMaterias *aux;
    aux = Lista.primeiro->prox;
    while(aux!=NULL)
    {
        if(aux->item.codigodisciplina == item->codigodisciplina)
        {
            // strcmp(aux->item.nome,item->nome)
            *item = aux->item;
            return 1;
        }
        aux = aux ->prox;
    }
    return 0 ;
}

int RemoveAluno(TListadosAlunos *Lista,TitemdosAlunos *item)
{
    TceluladosAlunos *aux,*ant;
    ant = Lista->primeiro;
    aux = Lista->primeiro->prox;
    while(aux != NULL)
    {
        if(aux->item.matricula==item->matricula)
        {
            *item = aux ->item;
            ant->prox=aux->prox;
            Lista->tamanho--;
            if(aux->prox == NULL)
                //aux==lista->ultimo
                Lista->ultimo=ant;
            free(aux);
            return 1;
        }
        ant = aux;
        aux = aux->prox;
    }
    return 0 ;
}
void ImprimeAluno(TListadosAlunos Lista)
{
    TceluladosAlunos *aux;
    aux = Lista.primeiro->prox;
    while (aux != NULL)
    {
        cout << "Nome:  " << aux->item.nome << endl ;
        cout << "Matricula: " << aux->item.matricula<<endl;
        cout << "Telefone: " << aux->item.telefone << endl ;
        cout << "Data de nascimento: ";
        printf("%d/%d/%d\n", aux->item.diaN, aux->item.mesN, aux->item.anoN);
        cout << "Endereço: " << aux->item.endereco << endl;
        cout << endl;
        cout << endl;
        aux = aux -> prox;

    }
}

void ImprimeDisciplina(TListadasMaterias Lista)
{
    TceluladasMaterias *aux;
    aux = Lista.primeiro->prox;
    while (aux != NULL)
    {
        cout << "Nome da disciplina:  " << aux->item.nomedisciplina << endl ;
        cout << "Codigo da disciplina: " << aux->item.codigodisciplina<<endl;
        cout << "Descricao da disciplina: " << aux->item.descricaodisciplina << endl ;
        aux = aux -> prox;

    }
}

int main(int argc, char *argv[])
{
    TListadosAlunos L1;
    TListadasMaterias L2;
    TitemdosAlunos Aluno;
    TitemdasMaterias Materia;
    FLVaziadosAlunos(&L1);
    FLVaziadasMaterias(&L2);

    int op;
    le_arquivo_alunos(L1, &Aluno);

    do
    {
        menu();
        cout << "Informe opcao"<<endl;
        cin >> op;
        switch(op)
        {
        case 0 :
            break;
        case 1 :
            cout << "Digite seu nome" << endl;
            fflush(stdin);
            gets(Aluno.nome);
            cout << "Digite seu numero de matricula" << endl;
            cin >> Aluno.matricula;
            cout << "Digite seu numero de telefone" << endl;
            cin >> Aluno.telefone;
            cout << "Informe a sua data de nascimento na seguinte configuracao: dd/mm/aaaa\n";
            scanf("%d/%d/%d", &Aluno.diaN, &Aluno.mesN, &Aluno.anoN);
            cout << "Endereço: " << endl;
            fflush(stdin);
            gets(Aluno.endereco);
            InsereAluno(&L1, Aluno);
            break;
        case 2 :
            cout << "Informe o matricula"<<endl;
            cin >> Aluno.matricula;
            if(pesquisaAluno(L1,&Aluno))
            {
                cout << "Nome \t" << Aluno.nome << endl;
                cout <<"Matricula\t"<< Aluno.matricula << endl;
                cout<< "Telefone\t" << Aluno.telefone << endl;
                cout << "Data de nascimento \t";
                printf("%d/%d/%d\n", Aluno.diaN, Aluno.mesN, Aluno.anoN);
                cout << "Endereco:\t" << Aluno.endereco << endl;
                system("pause");
                system("cls");
            }
            else
            {
                cout << "Inexistente" << endl;
                system("pause");
                system("cls");
            }
            break;
        case 3 :
            if(VaziadosAlunos(L1))
                cout << "A lista esta vazia" << endl;
            ImprimeAluno(L1);
            system("pause");
            system("cls");
            break;
        case 4:
            cout << "Informe o seu numero de matricula"<<endl;
            cin >> Aluno.matricula;
            if(RemoveAluno(&L1,&Aluno))
            {
                cout << "Removeu " << endl;
                cout << "Matricula: " << Aluno.matricula<<endl;
                cout << "Telefone: " << Aluno.telefone<<endl;
                cout << "Nome: " << Aluno.nome<<endl;
                cout << "Data de nascimento \t";
                printf("%d/%d/%d\n", Aluno.diaN, Aluno.mesN, Aluno.anoN);
                cout << "Endereco: " << Aluno.endereco;
                system("pause");
                system("cls");
            }
            else
            {
                cout << "Inexistente" << endl;
                system("pause");
                system("cls");
            }
            break;
        case 5 :
            cout << "Digite o nome da disciplina: " << endl;
            fflush(stdin);
            gets(Materia.nomedisciplina);
            cout << "Digite o codigo da disciplina" << endl;
            cin >> Materia.codigodisciplina;
            cout << "Descricao da disciplina: " << endl;
            fflush(stdin);
            gets(Materia.descricaodisciplina);
            InsereDisciplina(&L2, Materia);

        break;

        case 6 :
            if(VaziadasMaterias(L2))
            cout << "A lista esta vazia" << endl;
            ImprimeDisciplina(L2);
            system("pause");
            system("cls");
            break;

        case 7:
            cout << "Informe o codigo da disciplina"<<endl;
            cin >> Materia.codigodisciplina;
            if(pesquisaDisciplina(L2,&Materia))
            {
                cout << "Nome da disciplina\t" << Materia.nomedisciplina << endl;
                cout <<"Codigo da Disciplina\t"<< Materia.codigodisciplina << endl;
                cout << "Descricao:\t" << Materia.descricaodisciplina << endl;
                system("pause");
                system("cls");
            }
            else
            {
                cout << "Inexistente" << endl;
                system("pause");
                system("cls");
            }
        break;


        case 8 :
            FLVaziadosAlunos(&L1);
            cout << "Lista vazia" << endl;
            system("pause");
            system("cls");
            break;

        case 9:
        break;

        case 10:
        break;

        default :
            cout << "Opcao não existe" << endl;
        }
    }
    while(op != 0 );
    grava_arquivo_alunos(L1, &Aluno);
    grava_arquivo_disciplinas(L2, &Materia);

    return 0;
}

Bom, explicando o meu problema e o que já tem no código: As funções básicas de uma lista eu peguei do código do meu professor. O que eu fiz até agora foi cadastrar as informações dos alunos e as informações das disciplinas em duas listas separadas, uma para alunos outra para as materias. Porém, eu estou com problema na Leitura dos dados que eu cadastrei. A minha função "le_arquivo_alunos" não funciona. Ela não está lendo os dados do arquivo. Há  a função no inicio do Main do código que se chama FLVaziaDosAlunos, essa função no código do meu professor deixa a lista vazia (suspeito que seja por isso que a função de ler não está lendo os dados), porém, sem essa função de esvaziar a lista, o programa não roda. Preciso de ajuda para fazer a leitura desses dados sem esvaziar a lista. E preciso de ajuda para cadastrar as respectivas notas junto as suas disciplinas, que eu não faço nem ideia de como fazer. Alguém pode me dar uma luz? Sou muito iniciante em c++

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...