I have a litle problem when i try to list Aluno = Student (option 4 in the program).
i have other problem, when i try to save some Aluno(student using option 1) te program telll me that it is already created.
Some one can help me?
#include <iostream>
#include <iomanip>
#include <fstream>
#include <stdlib.h>
#include <string>
using namespace std;
struct estruturaAluno
{
char numeroAluno[5];
char nomeAluno[81];
};
int MenuEscolhaAluno();
void AdicionaAluno(fstream&);
void ApagaAluno(fstream&);
void ModificaAluno(fstream&);
int Menu_ModificarAluno();
void MostraAlunos(fstream&);
int ValidaNumeroAluno(long);
int main()
{
int choice;
int quit = 0;
cout << setprecision(2)
<< setiosflags(ios::fixed)
<< setiosflags(ios::showpoint);
fstream part_file;
estruturaAluno null_part = {" "," "};
//Open the file for reading to see if file exists
part_file.open("partfile.dat", ios::in | ios::binary);
//If the file does not exist,
//create a file of 99 dummy records.
if (part_file.fail())
{
part_file.open("partfile.dat", ios::out | ios::binary);
for (long rec_num = 1L; rec_num <= 99L; ++rec_num)
part_file.write( (char *) &null_part, sizeof(estruturaAluno) );
cout << "\nNull File Created.";
}
//Close the file
part_file.close();
//Open the file for both input and output
part_file.open("partfile.dat", ios::in | ios::out | ios::binary);
//Processing loop
do
{
choice = MenuEscolhaAluno();
switch (choice)
{
case 1:
AdicionaAluno(part_file); break;
case 2:
ApagaAluno(part_file); break;
case 3:
ModificaAluno(part_file); break;
case 4:
MostraAlunos(part_file); break;
case 5:
quit = 1; break;
default:
cout << "\n\nEscola Invalida. Tente novamente.\n\n"; break;
}
}
while (!quit);
part_file.close();
cout << endl;
return 0;
} //End of main()
int MenuEscolhaAluno()
{
int choice;
cout << "\n\nMenu Principal : ALUNO";
cout << "\n\n1 - Adiciona Aluno"
<< "\n2 - Apaga Aluno"
<< "\n3 - Modifica Aluno"
<< "\n4 - Mostra alunos inseridos"
<< "\n5 - Sai do Menu";
cout << "\n\nEscolha uma Opcao: ";
cin >> choice;
return choice;
} //End MenuEscolhaAluno()
void AdicionaAluno(fstream& file)
{
estruturaAluno part;
estruturaAluno temp_part;
char rec_num;
cin.get();
cout << "\nInsira o numero de Aluno:";
cin.getline(part.numeroAluno, 5);
rec_num = (part.numeroAluno,5);
if ( !ValidaNumeroAluno(rec_num) )
return;
cout << "\nInsira o Nome do Aluno: ";
cin.getline(part.nomeAluno, 81);
file.seekg( (rec_num - 1) * sizeof(estruturaAluno), ios::beg);
file.read( (char *)&temp_part, sizeof(estruturaAluno) );
if ( strcmp(temp_part.numeroAluno, " ") == 0)
{
file.seekg( -(long)sizeof(estruturaAluno), ios::cur);
file.write( (char *)&part, sizeof(estruturaAluno) );
cout << "\nRecord " << part.numeroAluno << " added to file.";
}
else
cout << "\nJa existe. Escolha outro numero.";
} //End of AdicionaAluno
void ApagaAluno(fstream& file)
{
estruturaAluno part;
estruturaAluno null_part = {" "," "};
long rec_num;
cout << "\nInsira o numero de Aluno que pretende Apagar: ";
cin >> rec_num;
if (!ValidaNumeroAluno(rec_num))
return;
file.seekg( (rec_num - 1) * sizeof(estruturaAluno), ios::beg);
file.read( (char *) &part, sizeof(estruturaAluno) );
if ( strcmp(part.numeroAluno, "") == 0)
cout << "\nA opcao nao existe escola outra opcao.";
else
{
file.seekg(-(long)sizeof(estruturaAluno), ios::cur);
file.write( (char *) &null_part, sizeof(estruturaAluno) );
cout << "\nAluno numero " << rec_num << " apagado com exito do ficheiro.";
}
} //End of ApagaAluno
void ModificaAluno(fstream& file)
{
estruturaAluno part;
long rec_num;
int change;
int quit = 0;
cout << "\ninsira o numero de Aluno que pretende modificar: ";
cin >> rec_num;
if (!ValidaNumeroAluno(rec_num))
return;
file.seekg( (rec_num - 1) * sizeof(estruturaAluno), ios::beg);
file.read( (char *) &part, sizeof(estruturaAluno) );
if ( strcmp(part.numeroAluno, "") == 0)
{
cout << "\nO aluno nao existe. Tente outro numero.";
return;
}
cout << "\nEscola os dados que pretende modificar:\n\n";
cout << setw(20) << "Numero de Aluno"
<< setw(20) << "Nome de Aluno"<< endl << endl;
cout << setw(20) << part.numeroAluno
<< setw(20) << part.nomeAluno;
do
{
change = Menu_ModificarAluno();
switch (change)
{
case 1:
cout << "\nNome de Aluno: ";
cin >> part.nomeAluno;
break;
case 2:
quit = 1;
file.seekg(-(long)sizeof(estruturaAluno), ios::cur);
file.write( (char *) &part, sizeof(estruturaAluno) );
cout << "\nMudanca executada " << rec_num;
break;
default:
cout << "\nEscolha invalida. Insira nova escolha.";
break;
}
}
while (!quit);
} //End of ModificaAluno()
int Menu_ModificarAluno()
{
int change;
cout << "\n\nMenu Modificar Aluno\n\n";
cout << "1 - Modifica Nome\n"
<< "2 - Modificar Numero\n"
<< "3 - Executa as mudancas e volta ao menu principal\n\n";
cout << "Insira uma opcao: ";
cin >> change;
return change;
} //End Menu_ModificarAluno()
void MostraAlunos(fstream& file)
{
estruturaAluno part;
long rec_num;
long rec_count = 0L;
file.seekg( 0L, ios::beg);
cout << setw(20) << "\nNome"
<< setw(20) << "Numero"<< endl << endl;
for (rec_num = 1L; rec_num <= 99L; ++rec_num)
{
file.read( (char*) &part, sizeof(estruturaAluno) );
if (strcmp(part.numeroAluno, "") != 0)
{
cout << setw(20) << part.numeroAluno
<< setw(20) << part.nomeAluno<< endl;
++rec_count;
}
}
cout << "\n\nFile contains " << rec_count << " records.";
} //End of MostraAlunos()
int ValidaNumeroAluno(long rec_num)
{
if ( rec_num < 00000 || rec_num > 99999 )
{
cout << "\n\nERRO: Numero invalido. Insira outra opcao.";
return 0;
}
else
return 1;
} //End of ValidaNumeroAluno()