I need to get the user to remove the item that he requests from the list, but I have no idea how to do it.
Outline:
#include <iostream>
#include <list>
#include <string>
using namespace std;
struct aluno
{
int matricula;
string nome;
};
int menu()
{
cout << "1. Inserir\n"
<< "2. Exibir\n"
<< "3. Retirar\n"
<< "9: Sair\n"
<< "Escolha uma opcao: ";
int op;
cin >> op;
system("cls");
return op;
}
void inserir(list<aluno>& turma)
{
aluno aux;
cout << "Matricula: ";
cin >> aux.matricula;
cin.ignore(); // Retira o ENTER do buffer do teclado
cout << "Nome: ";
getline(cin, aux.nome);
if(turma.empty() || turma.front().matricula > aux.matricula)
turma.push_front(aux);
else if(turma.back().matricula < aux.matricula)
turma.push_back(aux);
else
for(auto it=turma.begin(); it!=turma.end(); it++)
{
if(aux.matricula==it->matricula)
{
cout << "Matricula repetida, sua anta!\n";
break;
}
if(aux.matricula<it->matricula)
{
turma.insert(it, aux);
break;
}
}
system("cls");
}
void exibir(const list<aluno>& turma)
{
if(turma.empty())
{
cout << "A lista esta vazia!!\n\n " << endl;
}
for(aluno a: turma)
{
cout << a.matricula << ' ' << a.nome << endl;
cout << "\n";
}
}
void retira(list <aluno> &turma)
{
list <aluno> ::iterator itr;
cout << "Informe um nome a ser retirado da lista";
aluno nome;
string igual;
cout<< "Matricula: " << endl;
cin >> nome.matricula ;
cin.ignore();
cout << "Nome: " << endl;
getline(cin,nome.nome);
for(itr=turma.begin();itr!=turma.end();itr++){
if(itr==nome){
turma.remove(*itr);
}
}
}
int main()
{
list<aluno> turma;
int op;
do
{
op = menu();
switch(op)
{
case 1:
inserir(turma);
break;
case 2:
exibir(turma);
break;
}
case 3:
retira(turma);
}
while(op!=9);
}