codice:
#include <stdafx.h>
#include <ctime>
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <cmath>
using namespace std;

struct utente //struttura di ogni utente
	{
		int orette;//il tempo di arrivo
		int minutini; //il tempo di arrivo
		int minuti; // il tempo che ci vuole a servire
		utente * info; // parte informativa
	};

void orologio (time_t &, int &, int &, utente *&); // clock del programma
void aggiunta_nodo (utente *&, utente  *&, bool &);// aggiunta nuovo nodo
void visual_fila(utente *, int, int);// visualizzazione della gente in fila

int main()
{
	time_t tempo;
	tempo=time(NULL); // presa del tempo iniziale
	int minute=0; // minuti
	int hour=7; // ore

	utente* testa=NULL; // puntatore di testa
	utente* ptr;//nodo di coda
	bool stato=0; //0 vuota ; 1 non vuota
	
	cout<<hour<<":"<<minute;//visualizzazzione del primo orologio
	//menu
	cout<<"           _-:()===<([Menu Informativo])>===():-_"<<endl<<endl;
	cout<<"_-:(1)==========<([Aggiunta Nuovo utente in coda])>==========(1):-_"<<endl;
	cout<<"_-:(2)===<([Calcolo tempo  per tutti gli utenti in coda])>===(2):-_"<<endl;
	cout<<"_-:(3)=========<([Calcolo orario di fine servizio])>=========(3):-_"<<endl;
	cout<<"_-:(4)=======<([Calcolo numero di utenti accettabili])>======(4):-_"<<endl;
	visual_fila(testa,minute,hour);
	char k;
	do
	{
		orologio(tempo, minute, hour, testa);
		if(kbhit())//kbhit rileva se viene premuto un tasto da tastiera
		{
			k=getch();//preleva il codice direttamente dal buffer di input
			switch(k)
			{
			case '1':
				{
					cout<<endl<<endl<<"Nuovo utente aggiunto alla fila alle ore: "<<hour<<":"<<minute<<endl;
					aggiunta_nodo(testa, ptr ,stato);
					ptr->minutini=minute;
					ptr->orette=hour;
					system("cls");
					cout<<hour<<":"<<minute;
					cout<<"           _-:()===<([Menu Informativo])>===():-_"<<endl<<endl;
					cout<<"_-:(1)==========<([Aggiunta Nuovo utente in coda])>==========(1):-_"<<endl;
					cout<<"_-:(2)===<([Calcolo tempo  per tutti gli utenti in coda])>===(2):-_"<<endl;
					cout<<"_-:(3)=========<([Calcolo orario di fine servizio])>=========(3):-_"<<endl;
					cout<<"_-:(4)=======<([Calcolo numero di utenti accettabili])>======(4):-_"<<endl;
					visual_fila(testa,minute,hour);
				}break;
			}
		}
	}while(hour!=10);
	return 0;
}
void orologio (time_t & tempo, int & minute, int & hour, utente * & head)
{
	time_t trascorso;
	trascorso=time(NULL);
	if(trascorso-tempo==60)
	{
		minute++;
		tempo=time(NULL);
		if(minute==60)
		{
			hour++;
		}
		system("cls");
		//Menu aggiornato
		cout<<hour<<":"<<minute;
		cout<<"           _-:()===<([Menu Informativo])>===():-_"<<endl<<endl;
		cout<<"_-:(1)==========<([Aggiunta Nuovo utente in coda])>==========(1):-_"<<endl;
		cout<<"_-:(2)===<([Calcolo tempo  per tutti gli utenti in coda])>===(2):-_"<<endl;
		cout<<"_-:(3)=========<([Calcolo orario di fine servizio])>=========(3):-_"<<endl;
		cout<<"_-:(4)=======<([Calcolo numero di utenti accettabili])>======(4):-_"<<endl;
		visual_fila(head, minute, hour);
	}
}
void visual_fila(utente * head, int minute, int hour)
{
	utente * ptr;
	ptr=head;
	cout<<endl<<endl<<endl<<"No || orario d'arrivo || orario di fine lavoro"<<endl<<endl;
	if(ptr==NULL)
	{
		cout<<"Fila Vuota..."<<endl;
	}
	else
	{
		int temporum=0;//una specie di offset serve ad aggiungere i minuti di lavoro del precedente al successivo in fila
		int gente=1;// numeri di persone in fila
		int minuti_max;
		int ore_max=hour;

		do
		{
			cout<<gente<<"     "<<ptr->orette<<":"<<ptr->minutini<<"                ";// visualizzazione orario arrivo
			if(ptr->minuti+ptr->minutini+temporum>59)
			{	
				ore_max++;
				minuti_max=abs((ptr->minuti-(ptr->minutini+temporum)));
				gente++;
				cout<<ore_max<<":"<<minuti_max;
				temporum+=ptr->minuti;
				if(ore_max==hour && minuti_max== minute)//aggiornamento fila
				{
					temporum-=ptr->minuti;
					head=ptr->info;
					delete(ptr);
				}
			}
			else
			{
				gente++;
				cout<<ore_max<<":"<<ptr->minuti+ptr->minutini+temporum;
				temporum+=ptr->minuti;
				if(minute==ptr->minuti+ptr->minutini+temporum)//aggiornamento fila
				{
					temporum-=ptr->minuti;
					head=ptr->info;
					delete(ptr);
				}
			}
			if(temporum>59)
			{
				temporum=0;
			}
			cout<<endl;
			ptr=ptr->info;
		}while(ptr!=NULL);
	}
}


void aggiunta_nodo(utente * & nodo, utente * & ptr, bool & stato)
{
	if(stato==0)
	{
		cout<<"Aggiunta nuovo utente in fila..."<<endl<<endl;
		stato=1;
		nodo= new utente;
		nodo->info=NULL;
		ptr=nodo;
		do
		{
			cout<<"Quanti minuti servono per finire il lavoro?(da 5 a 30 minuti)"<<endl;
			cin>>nodo->minuti;
		}while(nodo->minuti<1 || nodo->minuti>30);//ricordiamo di rimetterlo a 5
	}
	else
	{
		utente * temp=new utente;
		ptr->info=temp;
		ptr=temp;
		ptr->info=NULL;
		do
		{
			cout<<"Quanti minuti servono per finire il lavoro?(da 5 a 30 minuti)"<<endl;
			cin>>ptr->minuti;
		}while(nodo->minuti<1 || nodo->minuti>30);//ricordiamoci di rimetterlo a 5
	}
}
nella funzione visual_fila oltre a tenere aggiornata la fila e a visualizzarla sotto il menu deve anche eliminare dalla fila gli elementi che sono stati serviti, funziona per il primo, ma per il secondo no, e la fila non si aggiorna subito appena si finisce di servire uno... perchè ancora non l'ho capito.