Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
AllanBraulio

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

Recommended Posts

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. 

Editado por AllanBraulio
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×