Ciao a tutti,
Ho provato a svolgere un esercizio sulle liste che consiste nel gestire le richieste di cassa/accodamento di una struttura sanitari, vi copio una parte della consegna : "Per poter effettuare visite specialistiche presso un ospedale sono necessarie due differenti fasi:
cassa, ovvero presentarsi agli sportelli per prenotare la visita e pagare il ticket dovuto; accodamento,
ovvero presentarsi sempre agli sportelli il giorno della visita per essere effettivamente inseriti
nell’elenco ordinato del medico/ambulatorio che chiamerà il paziente per la visita, tenendo conto
dell’orario assegnato in fase di prenotazione."
In seguito viene richiesto di creare una funzione che ordini la lista in base all'orario di prenotazione..fin qui tutto ok, poi viene chiesto : "Una funzione principale avrà il compito di gestire le richieste di cassa o di accodamento
avvalendosi di opportune altre funzioni. Scrivere, in linguaggio C++, la funzione che, ricevuta in ingresso la lista delle prenotazioni per la
chiamata allo sportello ed il numero di accodamenti consecutivi effettuati,stampi l’identificativo
di chi si deve presentare allo sportello, rispettando i vincoli sopra indicati, e il numero di
accodamenti consecutivi aggiornato. Scrivere una seconda funzione che, chiamata dalla funzione principale, permetta all’operatore di
sportello di inserire i dati necessari (anagrafe semplificata, id ambulatorio, ora prenotazione) ed
accodare il paziente nella lista dello specifico medico/ambulatorio mantenendo la lista ordinata
secondo l’orario di prenotazione. Per semplicità si ipotizzi che vi siano solo tre medici/ambulatori
attivi." Ho provato a scrivere questo codice, non è ancora completo, so che non è perfetto e che non rispetta tutte le richieste, (sono alle prime armi), ma la mia domanda principale è : perchè mi dà errore nelle righe dove ho commentato con ******? un puntatore a elemento della struct non può puntare ad una stringa?
CODICE:
#include <iostream>
#include <string.h>
#include <stdlib.h>
using namespace std;
struct paziente
{
string nome;
string cognome;
int id_ambulatorio;
float orario_pren;
string tipo_pren; // c se operazione cassa, a se accodamento
paziente* next;
};
//definisco puntatore a struct
typedef paziente* punt;
typedef paziente pazient;
//inizializzazione lista che verra' usata
punt inizio=NULL;
//variabile struct
paziente nuovo;
int cont=0; //variabile contatrice degli accodamenti
int cont_p=0; //variabile che conta richieste di cassa presenti in lista
pazient Richieste (int a) //funzione che gestisce richiesta di cassa o accodamento
{
switch (a) {
case 1 : {
cout<<"Inserisca il proprio nome: "<<endl;
cin>>nuovo.nome;
cout<<"Inserisca il proprio cognome: "<<endl;
cin>>nuovo.cognome;
cout<<"Inserisca ID ambulatorio: "<<endl;
cin>>nuovo.id_ambulatorio;
cout<<"Inserisca l'orario di prenotazione: "<<endl;
cin>>nuovo.orario_pren;
nuovo.tipo_pren='C';
break;
}
case 2 : {
cout<<"Inserisca il proprio nome: "<<endl;
cin>>nuovo.nome;
cout<<"Inserisca il proprio cognome: "<<endl;
cin>>nuovo.cognome;
cout<<"Inserisca ID ambulatorio: "<<endl;
cin>>nuovo.id_ambulatorio;
cout<<"Inserisca l'orario di prenotazione: "<<endl;
cin>>nuovo.orario_pren;
nuovo.tipo_pren='A';
break;
}
}
return nuovo;
}
void ListOrd (paziente nuovo) //lista ordinata secondo l'orario di prenotazione
{
punt p,q,r;
for (q=inizio; q!=NULL && q->orario_pren < nuovo.orario_pren; q=q->next) p=q;
r=new paziente;
r->nome=nuovo.nome;
r->cognome=nuovo.cognome;
r->id_ambulatorio=nuovo.id_ambulatorio;
r->orario_pren=nuovo.orario_pren;
r->tipo_pren=nuovo.tipo_pren;
r->next=q;
if (q==inizio) inizio=r; //caso lista vuota
else p->next=r;
}
void ChiamataSportello (punt& start)
{
punt p,q;
if (start==NULL) cout<<"Lista vuota"<<endl;
//ciclo che fa arrivare p all'ultimo elemento della lista
for (q=inizio; q!=NULL; q=q->next) {
p=q;
if (q->tipo_pren =='C') cont_p++; //*************
}
if (p->tipo_pren =='A') //*************
{
cout<<"ID del prossimo: "<<p->id_ambulatorio<<endl;
cont++;
delete p;
}
if (p->tipo_pren =='C') //*************
{
if (cont<3) {
cout<<"ID del prossimo: "<<p->tipo_pren<<endl;
delete p;
cont=0;
}
if (cont_p==1) {
cout<<"ID del prossimo: "<<p->tipo_pren<<endl;
delete p;
cont_p=0;
}
}
}
void StampaLista (punt& starte)
{
punt temp=starte;
while (temp!=NULL)
{
cout<<endl<<"Nome: "<<temp->nome<<" Cognome: "<<temp->cognome<<" ID: "<<temp->id_ambulatorio<<" Orario prenotaione: "<<temp->orario_pren<<endl;
temp=temp->next;
}
}
int main ()
{
int scelta=0;
cout<<"Benvenuto!"<<endl;
//ciclo di prova
for (int i=0; i<5;i++) {
cout<<"Inserisci (1) se vuoi eseguire un'operazione di cassa, altrimenti (2) per un'operazione di accodamento"<<endl;
cin>>scelta;
paziente temp=Richieste (scelta);
ListOrd (temp);
}
int m;
cout<<"Inserisca (3) per visualizzare lista pazienti in attesa "<<endl;
cin>>m;
if (m==3) {
StampaLista (inizio);
}
return 0;
}