#include <iostream>
#include <fstream>
#include <iomanip>
#include <string.h>
#include <windows.h>
#include <conio.h>
HANDLE hConsole;
WORD wAttr;
using namespace std;
/* Funzioni Grafiche*/
void rosso();
void verde();
void rosso()
{
hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
wAttr=FOREGROUND_BLUE;
SetConsoleTextAttribute(hConsole,wAttr);
}
void verde()
{
hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
wAttr=FOREGROUND_GREEN;
SetConsoleTextAttribute(hConsole,wAttr);
}
struct dati
{
char nome[20];
char cognome[20];
int assenze;
int matricola;
bool state;
};
int aggiungi_alunno(char *nomefile)
{
dati alunni;
long int dim_file,numrec;
cout <<"Inserisci nome: ";
cin>>alunni.nome;
cout<<"Inserisci cognome: ";
cin>>alunni.cognome;
cout <<"Inserisci ore assenza: ";
cin>>alunni.assenze;
ofstream file;
file.open(nomefile,ios::app|ios::binary);
file.seekp(-0,ios::end);
dim_file=file.tellp();
alunni.matricola=(dim_file/sizeof(alunni))+1;
file.write((char*)&alunni,sizeof(alunni));
file.close();
return 0;
}
void stampa_stato(char *nomefile)
{
system("cls");
dati alunno,*elem=new dati;
ifstream file;
file.open(nomefile,ios::binary);
int num=1;
while(true)
{
if(file.read((char*)elem,sizeof(alunno)))
{
alunno=*elem;
if(alunno.state!=false)cout<<num<<":" <<"\t\t\t"<<alunno.nome<<setw(20)<<alunno.cognome<<setw(20)<<alunno.assenze<<setw(20)<<"\n";
num++;
}
else break;
}
file.close();
}
int aggiorna_stato(char* nomefile)
{
dati alunno,*elem=new dati;
int num_assenze,mat;
cout <<"Inserisci matricola alunno";cin>>mat;
fstream file;
file.open(nomefile,ios::in|ios::out|ios::binary);
file.seekg((sizeof(alunno)*(mat-1)),ios::beg);
file.read((char*)elem,sizeof(alunno));
alunno=*elem;
cout <<"\nInserisci numero assenze ";
cin>>num_assenze;
alunno.assenze=alunno.assenze+num_assenze;
file.seekg((sizeof(alunno)*(mat-1)),ios::beg);
if(file.write((char*)&alunno,sizeof(alunno)))cout <<"Operazione conclusa con successo!";
file.close();
}
void on_off(char *nomefile)
{
dati alunno, *elem=new dati;
string stato;
int mat;
fstream file;
file.open(nomefile,ios::in|ios::out|ios::binary);
stampa_stato("Registro.bin");
cout <<"\nInserici matricola identificativa: ";cin>>mat;
cout <<"\nVuole disattivarlo? s/n: ";
cin>>stato;
if(stato=="s")
{
//apro il file in modalità di input output binary
file.seekg((sizeof(alunno)*(mat-1)),ios::beg);//posiziono il puntatore sull'alunno che mi interessa partendo dall'inizio
file.read((char*)elem,sizeof(alunno));//leggo i dati dell'alunno puntato dal puntatore
alunno=*elem;
alunno.state=false;
file.seekg((sizeof(alunno)*(mat-1)),ios::beg);//riposiziono il puntatore sull'alunno iniziale
if(file.write((char*)&alunno,sizeof(alunno)))cout <<"Operazione riuscita\n";//sovrascivo il record con quello nuovo
file.close();//chiudo il file
}
else if(stato=="reon")
{
file.seekg((sizeof(alunno)*(mat-1)),ios::beg);//posiziono il puntatore sull'alunno che mi interessa partendo dall'inizio
file.read((char*)elem,sizeof(alunno));//leggo i dati dell'alunno puntato dal puntatore
alunno=*elem;
alunno.state=true;
file.seekg((sizeof(alunno)*(mat-1)),ios::beg);//riposiziono il puntatore sull'alunno iniziale
if(file.write((char*)&alunno,sizeof(alunno)))cout <<"Operazione riuscita\n\n";//sovrascivo il record con quello nuovo
file.close();//chiudo il file
}
}
int main ()
{
char nome_file[15]="Registro.bin";
int scelta,num_alunni,matricola;
do{
verde();
cout<<" \n\t\t *Gestione file binari- Giuseppe Maggio\n\n"<<endl;
rosso();
cout<<" @°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°@\n";
cout<<" ° °\n";
rosso();cout<<" °";verde();cout<<"Aggiungi Alunno.........................................................1";rosso();cout<<"°"<<endl;
rosso();cout<<" ° °"<<endl;
rosso();cout<<" °";verde();cout<<"Visualizzare stato......................................................2";rosso();cout<<"°"<<endl;
rosso();cout<<" ° °"<<endl;
rosso();cout<<" °";verde();cout<<"Aggiornare stato........................................................3";rosso();cout<<"°"<<endl;
rosso();cout<<" ° °"<<endl;
rosso();cout<<" ° °"<<endl;
rosso();cout<<" ° °"<<endl;
rosso();cout<<" ° °"<<endl;
rosso();cout<<" °";verde();cout<<"Uscire dal programma....................................................9";rosso();cout<<"°"<<endl;
rosso();cout<<" @°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°@"<<endl;
verde();
cout <<"\nInserisci scelta: ";
cin>>scelta;
if(scelta==1)
{
system("cls");
cout <<"\t\t\tProcedura d' inserimento nuovo alunno\n";
cout <<"Inserisci numero di alunno da inserire: ";
cin>>num_alunni;
for(int i=0;i<num_alunni;i++) aggiungi_alunno(nome_file);
}
else if(scelta==2) stampa_stato(nome_file);
else if(scelta==3)
{
system("cls");
rosso();
cout<<" @°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°@\n";
cout<<" ° °\n";
rosso();cout<<" °";verde();cout<<"Aggiornamento singolo alunno............................................1";rosso();cout<<"°"<<endl;
rosso();cout<<" ° °"<<endl;
rosso();cout<<" °";verde();cout<<"Eliminazione alunno.....................................................2";rosso();cout<<"°"<<endl;
rosso();cout<<" ° °"<<endl;
rosso();cout<<" @°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°@"<<endl;
verde();
cin>>num_alunni;
if(num_alunni==1)aggiorna_stato(nome_file);
else on_off(nome_file);
}
}while(scelta!=9);
system ("pause");
}