Skip to content

Commit

Permalink
Lista com Arranjo/exercicios
Browse files Browse the repository at this point in the history
  • Loading branch information
VivianMachado0 authored Jan 17, 2023
1 parent db09b77 commit eade5b4
Show file tree
Hide file tree
Showing 4 changed files with 371 additions and 0 deletions.
160 changes: 160 additions & 0 deletions funcoes.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
#include <iostream>
#include <windows.h>
#include "lista.hpp"

#define MAXTAM 5

using namespace std;

void CriaListaVazia(TipoLista *lista)
{
if (!listaCriada)
{
lista->tamanho = 0;
lista->Primeiro = 0;
lista->Ultimo = lista->Primeiro;
cout << "Lista criada com sucesso!";
listaCriada = true;
}
else
{
cout << "Lista já existe!";
}
Sleep(1500);
}

int VerificaListaVazia(TipoLista *lista)
{
return (lista->Primeiro == lista->Ultimo);
}

int VerificaListaCheia(TipoLista *lista)
{
return (lista->Ultimo == MAXTAM);
}

int TamanhoLista(TipoLista *lista)
{
return lista->tamanho;
}

int InsereItem(TipoLista *lista, TipoItem item)
{
if (VerificaListaCheia(lista))
{
return -1;
}

strcpy(lista->Item[lista->Ultimo].matricula, item.matricula);
strcpy(lista->Item[lista->Ultimo].nome, item.nome);
lista->Item[lista->Ultimo].turma = item.turma;
lista->Item[lista->Ultimo].p1 = item.p1;
lista->Item[lista->Ultimo].p2 = item.p2;
lista->Item[lista->Ultimo].p3 = item.p3;
lista->tamanho++;
lista->Ultimo++;
return 1;
}

void ImprimeLista(TipoLista lista)
{
if (listaCriada)
{
int Aux;
for (Aux = lista.Primeiro; Aux <= (lista.Ultimo - 1); Aux++)
{
cout << "Matricula: " << lista.Item[Aux].matricula << endl;
cout << "Nome: " << lista.Item[Aux].nome << endl;
cout << "Turma: " << lista.Item[Aux].turma << endl;
cout << "P1: " << lista.Item[Aux].p1 << endl;
cout << "P2: " << lista.Item[Aux].p2 << endl;
cout << "P3: " << lista.Item[Aux].p3 << endl;
cout << endl;
}
cout << endl;
system("Pause");
}
else
{
cout << "Crie a lista primeiramente.";
Sleep(1000);
}
}

int PesquisaItem(TipoLista *lista, char matricula[])
{
for (int i = lista->Primeiro; i < lista->Ultimo; i++)
{
if (strcmp(matricula, lista->Item[i].matricula) == 0)
{
return i;
}
}
return -1;
}

void ImprimeItem(TipoLista *lista, int posicao)
{
if (posicao != -1)
{
cout << "\nMatricula: " << lista->Item[posicao].matricula << endl;
cout << "Nome: " << lista->Item[posicao].nome << endl;
cout << "Turma: " << lista->Item[posicao].turma << endl;
cout << "P1: " << lista->Item[posicao].p1 << endl;
cout << "P2: " << lista->Item[posicao].p2 << endl;
cout << "P3: " << lista->Item[posicao].p3 << endl
<< endl;
}
else
{
cout << "Aluno não encontrado.";
}
system("Pause");
}

void RetiraItem(TipoApontador p, TipoLista *lista, TipoItem *item)
{
int Aux;

if (VerificaListaVazia(lista) || p > lista->Ultimo)
{
cout << "Erro: Posição não existe na lista\n";
return;
}

*item = lista->Item[p];

for (Aux = p; Aux <= lista->Ultimo; Aux++)
{
lista->Item[Aux] = lista->Item[Aux + 1];
}

lista->Ultimo--;
lista->tamanho--;
}

void ImprimeTurma(TipoLista *lista, char turma)
{
if (listaCriada)
{
int Aux;
for (Aux = lista->Primeiro; Aux <= (lista->Ultimo - 1); Aux++)
{
if (lista->Item[Aux].turma == turma)
{
cout << "Matricula: " << lista->Item[Aux].matricula << endl;
cout << "Nome: " << lista->Item[Aux].nome << endl;
cout << "Turma: " << lista->Item[Aux].turma << endl;
cout << "Média: " << (lista->Item[Aux].p1 + lista->Item[Aux].p2 + lista->Item[Aux].p3) / 3 << endl;
cout << endl;
}
}
cout << endl;
system("Pause");
}
else
{
cout << "Crie a lista primeiramente.";
Sleep(1000);
}
}
36 changes: 36 additions & 0 deletions lista.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#ifndef LISTA_H
#define LISTA_H

#define MAXTAM 3

typedef int TipoApontador;

typedef struct TipoItem
{
char nome[81];
char matricula[12];
char turma;
float p1, p2, p3;
};

typedef struct TipoLista
{
TipoItem Item[MAXTAM];
TipoApontador Primeiro, Ultimo;
int tamanho;
};

bool listaCriada = false;

void CriaListaVazia(TipoLista *lista); // Cria uma lista vazia
int VerificaListaVazia(TipoLista *lista); // Retorna TRUE se a lista estiver vazia, FALSE caso contrário
int VerificaListaCheia(TipoLista *lista); // Retorna TRUE se a lista estiver cheia, FALSE caso contrário
int InsereItem(TipoLista *lista, TipoItem item); // Insere ITEM (chave) na lista TipoLista
void ImprimeLista(TipoLista lista); // Imprime a lista
int PesquisaItem(TipoLista *lista, char matricula[]); // Pesquisa um aluno pela matrícula
void RetiraItem(TipoApontador p, TipoLista *lista, TipoItem *item); // Remove um item da lista pela sua posição
int TamanhoLista(TipoLista *lista); // Retorna o número de itens da lista
void ImprimeItem(TipoLista *lista, int posicao);
void ImprimeTurma(TipoLista turmas, char turma);

#endif
170 changes: 170 additions & 0 deletions main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
#include <iostream>
#include <windows.h>
#include "lista.hpp"
#include "funcoes.cpp"

using namespace std;

void Menu()
{
system("cls");
cout << "--------------------------------\n";
cout << " Cadastro de Alunos \n";
cout << "--------------------------------\n";
cout << "1. Criar Lista\n";
cout << "2. Verifica Lista Vazia\n";
cout << "3. Verifica Lista Cheia\n";
cout << "4. Cadastro de Aluno\n";
cout << "5. Imprime por Turma\n";
cout << "6. Pesquisa Aluno\n";
cout << "7. Remove Aluno\n";
cout << "0. Sair\n\n";
}

void Cadastro(TipoItem *aluno)
{
cout << "Nome: ";
cin >> aluno->nome;
cout << "Matricula: ";
cin >> aluno->matricula;
cout << "Turma: ";
cin >> aluno->turma;
cout << "P1: ";
cin >> aluno->p1;
cout << "P2: ";
cin >> aluno->p2;
cout << "P3: ";
cin >> aluno->p3;
}

int main()
{
UINT CPAGE_UTF8 = 65001;
UINT CPAGE_DEFAULT = GetConsoleOutputCP();
SetConsoleOutputCP(CPAGE_UTF8);

TipoLista lista;
TipoItem aluno;
int opcao, ret;
char turma;

do
{
system("cls");
Menu();
cout << "Opção: ";
cin >> opcao;

switch (opcao)
{
case 1:
CriaListaVazia(&lista);
break;
case 2:
if (VerificaListaVazia(&lista))
cout << "Lista vazia!";
else
cout << "A lista não está vazia ou não foi inicializada.";
Sleep(1500);
break;
case 3:
if (VerificaListaCheia(&lista))
cout << "Lista cheia!";
else
cout << "A lista não está cheia ou não foi inicializada.";
Sleep(1500);
break;
case 4:
// Função de cadastro
Cadastro(&aluno);
ret = InsereItem(&lista, aluno);
if (ret == 1)
{
cout << "Aluno cadastrado com sucesso!";
Sleep(500);
}
else if (ret == -1)
{
cerr << "ERRO ao cadastrar o aluno. Lista cheia.";
Sleep(1000);
}
else
{
cout << "Crie a lista primeiramente.";
Sleep(1000);
}
break;
case 5:
if (listaCriada)
{
char turma;
cout << "Turma: ";
cin >> turma;
ImprimeTurma(&lista, turma);
}
else
{
cout << "Crie a lista primeiramente.";
Sleep(1000);
}
break;
case 6:
if (listaCriada)
{
char matricula[12];
cout << "Matricula: ";
cin >> matricula;
ret = PesquisaItem(&lista, matricula);
if (ret >= 0)
{
cout << "Matrícula encontrada na posição " << ret << endl;
Sleep(1000);
ImprimeItem(&lista, ret);
}
else
{
cout << "A matrícula não está cadastrada.";
Sleep(1000);
}
}
else
{
cout << "Crie a lista primeiramente.";
Sleep(1000);
}
break;
case 7:
if (listaCriada)
{
char matricula[12];
cout << "Matricula: ";
cin >> matricula;
ret = PesquisaItem(&lista, matricula);
if (ret >= 0)
{
cout << "Matrícula encontrada na posição " << ret;
Sleep(1000);
cout << "\n\nRemovendo...";
RetiraItem(ret, &lista, &aluno);
Sleep(1000);
}
else
{
cout << "A matrícula não está cadastrada.";
Sleep(1000);
}
}
else
{
cout << "Crie a lista primeiramente.";
Sleep(1000);
}
break;
default:
break;
}

} while (opcao != 0);

return 0;
}
5 changes: 5 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
## Atividade Prática

1. Implemente uma função que imprima o número de matrícula, o nome, a turma e a média de todos os alunos que pertencem a uma determinada turma. Essa função deve obedecer o protótipo:

void imprime_turma (Lista turmas, char turma);

0 comments on commit eade5b4

Please sign in to comment.