Ir ao conteúdo
  • Cadastre-se

C++ Edit:Lista de alunos/materias c++


AllanBraulio

Posts recomendados

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>
#include <locale.h>

using namespace std;


void menu()
{
    cout << "1 - Inserir aluno" <<endl;
    cout << "2 - Pesquisar alunos(Por numero de matricula)" <<endl;
    cout << "3 - Imprimir alunos" <<endl;
    cout << "4 - Inserir disciplina" << endl;
    cout << "5 - Pesquisar disciplinas" << endl;
    cout << "6 - Imprimir disciplinas" << endl;
    cout << "0 - Sair" <<endl;

}

struct TitemdosAlunos
{
    int matricula;
    long int telefone;
    char nome[100];
    char datanascimento[30];
    char endereco[300];

    //outros componentes
};



struct TitemdasMaterias{
char nomedisciplina[100];
int codigodisciplina;
char descricaodisciplina[500];
};

struct TceluladasMaterias
{
    TitemdasMaterias item;
    TceluladasMaterias *prox;
};

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

};

struct TceluladosAlunos
{
    TitemdosAlunos item;
    TceluladosAlunos *prox;
};

struct TListadosAlunos
{
    TceluladosAlunos *primeiro, *ultimo;
    int tamanho;

};
void FLDisciplinaVazia(TListadasMaterias *ListaD)

{
    TceluladasMaterias *aux = (TceluladasMaterias*)malloc(sizeof(TceluladasMaterias));
    if(aux == NULL)
    {
        cout << "Erro na alocacao de memoria!\n";
    }
    else{
        ListaD -> primeiro = aux;
        aux -> prox = NULL;
        ListaD -> tamanho = 0;
        ListaD -> ultimo = aux;
    }

}

void FLAlunoVazia(TListadosAlunos *Lista)

{
    TceluladosAlunos *aux = (TceluladosAlunos*)malloc(sizeof(TceluladosAlunos));
    if(aux == NULL)
    {
        cout << "Erro na alocacao de memoria!\n";
    }else{
        aux -> prox = NULL;
        Lista -> tamanho = 0;
        Lista -> primeiro = aux;
        Lista -> ultimo = aux;
    }
}

int VerificaListaAVazia(TListadosAlunos Lista)
{
    return(Lista.primeiro == Lista.ultimo);
}
int VerificaListaDVazia(TListadasMaterias Lista)
{
    return(Lista.primeiro == Lista.ultimo);
}
void ArquivoAlunos(TListadosAlunos *Lista, TitemdosAlunos Aluno)
{
    FILE *arq = fopen("alunos.txt", "w");
    if(arq == NULL){
        cout << "Arquivo dos alunos em branco!\n";
        return ;
    }
    else
    {
        TceluladosAlunos *aux = Lista -> primeiro -> prox;
        fprintf(arq, "%d\n", Lista->tamanho);

        while(aux!=NULL){
            fprintf(arq, "%s\n", aux -> item.nome);
            fprintf(arq, "%d\n", aux -> item.matricula);
            fprintf(arq, "%s\n", aux->item.datanascimento);
            fprintf(arq, "Tel: %d\n", aux -> item.telefone);
            fprintf(arq, "Endereço: %s\n\n", aux -> item.endereco);
            aux = aux -> prox;
        }
    }
    fclose(arq);
}
void ArquivoMaterias(TListadasMaterias *Lista, TitemdasMaterias Materia)
{
    FILE *arq = fopen("materias.txt", "w");
    if(arq == NULL){
        cout << "Arquivo das disciplinas em branco!\n";
        return ;
    }
    else
    {
        TceluladasMaterias *aux = Lista -> primeiro -> prox;
        fprintf(arq, "%d\n", Lista->tamanho);

        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);
}
int InserirAluno(TListadosAlunos *Lista, TitemdosAlunos registro)

{
    TceluladosAlunos *aux = (TceluladosAlunos*)malloc(sizeof(TceluladosAlunos));
    if(aux == NULL)
    {
        cout << "Erro!\n";
        return 0;
    }
    else
    {
        aux -> item = registro;
        aux -> prox = NULL;
        Lista -> tamanho++;
        Lista -> ultimo -> prox = aux;
        Lista -> ultimo = aux;
        return 1;
        system("pause");
        system("cls");
    }
}
int InserirMateria(TListadasMaterias *Lista, TitemdasMaterias item)

{
    TceluladasMaterias *aux = (TceluladasMaterias*)malloc(sizeof(TceluladasMaterias));
    if(aux == NULL)
    {
        cout << "Erro!\n";
        return 0;
    }
    else
    {
        aux -> item = item;
        aux -> prox = NULL;
        Lista -> tamanho++;
        Lista -> ultimo -> prox = aux;
        Lista -> ultimo = aux;
        return 1;
    system("pause");
    system("cls");
    }
}

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 ;
}
void imprime(TListadosAlunos Lista){


    TceluladosAlunos *aux  = Lista.primeiro -> prox;

    while(aux!=NULL){

        cout << "\nNome do aluno: " << aux -> item.nome << endl;
        cout << "\nMatricula " << aux -> item.matricula << endl;
        cout << "\nData de nascimento do aluno: " << aux->item.datanascimento << endl;
        cout << "\nTelefone do aluno: " << aux -> item.telefone << endl;
        cout << "\nEndereco do aluno: " << aux -> item.endereco << endl;

        aux = aux -> prox;

    }

    system("pause");

}
void imprimed(TListadasMaterias Lista){

    TceluladasMaterias *aux  = Lista.primeiro -> prox;

    while(aux!=NULL){

        cout << "\nNome da disciplina: " << aux->item.nomedisciplina << endl;
        cout << "\nCodigo da disciplina " << aux->item.codigodisciplina << endl;
        cout << "\nDescricao: " << aux->item.descricaodisciplina << endl;
        aux = aux -> prox;

    }

    system("pause");

}

void LeArquivoAluno(TListadosAlunos *Lista, TitemdosAlunos *Registro){

    FILE *arq = fopen("alunos.txt", "r");

    if(arq == NULL){
        cout << "Arquivo dos alunos está em branco.\n";
       system("pause");
        return ;
    }else{
        int i, j;
        fscanf(arq, "%d\n", &i);
        j = i;
        while(i>0){
            fscanf(arq, "%s\n", &Registro->nome);
            fscanf(arq, "%d\n", &Registro->matricula);
            fscanf(arq, "%s\n", &Registro->datanascimento);
            fscanf(arq, "Tel: %d\n", &Registro->telefone);
            fscanf(arq, "Endereço: %s\n\n", &Registro->endereco);
            if(InserirAluno(Lista, *Registro)==0)
            cout << "\nErro ao armazenar.\n";
            i--;
        }
        Lista->tamanho = j;
    }
    fclose(arq);
}
void LeArquivoMaterias(TListadasMaterias *Lista, TitemdasMaterias *Registro){

    FILE *arq = fopen("materias.txt", "r");
    if(arq == NULL){
        cout << "Arquivo das disciplinas está em branco.\n";
       system("pause");
        return ;
    }else{
        int i, j;
        fscanf(arq, "%d\n", &i);
        j = i;
        while(i>0){
            fscanf(arq, "%s\n", &Registro->nomedisciplina);
            fscanf(arq, "%d\n", &Registro->codigodisciplina);
            fscanf(arq, "%s\n", &Registro->descricaodisciplina);
            if(InserirMateria(Lista, *Registro)==0)
                cout << "\nErro ao armazenar.\n";
            i--;
        }
        Lista->tamanho = j;
    }
    fclose(arq);

}
int main()

{
    setlocale(LC_ALL,"portuguese");

    int op;
    TitemdosAlunos Aluno;
    TitemdasMaterias Materia;
    TListadosAlunos L1;
    TListadasMaterias L2;

    FLAlunoVazia(&L1);
    FLDisciplinaVazia(&L2);

    LeArquivoAluno(&L1, &Aluno);
    LeArquivoMaterias(&L2, &Materia);

     do
    {
        menu();
        cout << "Informe opcao"<<endl;
        cin >> op;
        switch(op)
        {
        case 0 :
            break;
        case 1 :
            cout << "Digite o nome do aluno" << endl;
            fflush(stdin);
            gets(Aluno.nome);
            cout << "Digite o numero de matricula de aluno" << endl;
            cin >> Aluno.matricula;
            cout << "Digite o numero de telefone do aluno" << endl;
            cin >> Aluno.telefone;
            cout << "Informe data de nascimento na seguinte configuração: dd/mm/aaaa\n";
            fflush(stdin);
            gets(Aluno.datanascimento);
            cout << "Endereço do aluno: " << endl;
            fflush(stdin);
            gets(Aluno.endereco);
            InserirAluno(&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" << Aluno.datanascimento << endl;
                cout << "Endereco:\t" << Aluno.endereco << endl;
                system("pause");
                system("cls");
            }
            else
            {
                cout << "Inexistente" << endl;
                system("pause");
                system("cls");
            }
            break;
        case 3 :
             if(VerificaListaAVazia(L1))
            cout << "A lista esta vazia" << endl;
            imprime(L1);
            system("pause");
            system("cls");
            break;
        case 4:
            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);
            InserirMateria(&L2, Materia);
            break;
        case 5 :
              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 6 :
             if(VerificaListaDVazia(L2))
            cout << "A lista esta vazia" << endl;
            imprimed(L2);
            system("pause");
            system("cls");
            break;
        case 7:
        break;


        case 8 :
        break;

        case 9:
        break;

        case 10:
        break;

        default :
        cout << "Opcao invalida" << endl;
        }
    }
    while(op != 0 );


    ArquivoAlunos(&L1, Aluno);
    ArquivoMaterias(&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 matérias. Preciso de ajuda para cadastrar as notas dos alunos 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++ (Corrigi o problema que estava tendo na leitura dos arquivos), mas agora preciso comparar as informações das listas e nao sei como fazer. 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...