codice:
#include <stdio.h>
#include <string.h>
#include <malloc.h>

struct cliente
{
char nome[20];
char cognome[20];
int codice;
struct cliente *next;
};

struct prenotazione
{
int codicecliente;
int stanza[4];
int giornoarrivo;
int giornopartenza;
int mesearrivo;
int mesepartenza;
}lista[100];

int numero;
struct cliente *crea();
struct cliente *inserisci(struct cliente *);
void cerca(struct cliente *);
void visualizza(struct cliente *);
void menuprenotazione(struct cliente *);
void menu(struct cliente *);
void elenca();
int i=1;
int j=0;
main()
{
int c=-1;
struct cliente *p, *new;
while(c!=0)
    {
    printf("\nNella lista sono presenti %d clienti",i-1);
    printf("\nE [%d] prenotazioni",j);
    printf("\n\n\t1.crea nuovo cliente");
    printf("\n\t2.cerca clienti");
    printf("\n\t3.visualizza lista clienti");
    printf("\n\t4.crea prenotazione");
    printf("\n\t5.elenca lista prenotazioni");
    printf("\n\nDigita la scelta ---->");
    scanf("%d",&c);
    switch(c)
        {
        case 1: 
            if (i==1)
                {
                p = crea();
                i++;
                new = p;
                break;
                }
            else
                {
                new->next=malloc(sizeof(struct cliente));
                new = inserisci(new->next);
                break;
                }
        case 2: cerca(p); break;
        case 3: visualizza(p); break;
        case 4: menuprenotazione(p); break;
        case 5: elenca();
        }
    }
}

struct cliente * crea(){

struct cliente *p;
        
    p = malloc(sizeof(struct cliente));
    
    printf("\nInserisci nome del cliente  ");
    scanf("%s", p->nome);
    printf("\nInserisci cognome  ");
    scanf("%s", p->cognome);
    p->codice = 1;
    printf("\nAl cliente è stato assegnato il codice [1]\n");
    p->next=NULL;
    return p;
}

struct cliente * inserisci(struct cliente *p){


printf("\nInserisci nome del cliente ");
    scanf("%s", p->nome);
    printf("\nInserisci cognome  ");
    scanf("%s", p->cognome);
    p->codice = i;
    printf("\nAl cliente è stato assegnato il codice [%d]\n",i);
    i++;
    p->next= NULL;

    return p;
}

void cerca(struct cliente *p)
{
int codice;
printf("\ndigita il codice cliente---->");
scanf("%d", &codice);


do
    {
    if (p->codice==codice)
        {
        printf("\n\nil codice cliente appartiene a  [ %s %s ]",p->nome,p->cognome);
        }
    
    }
while ((p = p->next) !=NULL);
    
}    

void visualizza(struct cliente *p)
{
int d=1;
    printf("[codice]  [nome]  [cognome]");
while (p!=NULL)
    {
    printf("\n   [%d]    %s   %s\n",d,p->nome,p->cognome);
    d++;
    p = p->next;
    }
}
void menuprenotazione(struct cliente *p)
{
int sel;
    
printf("\nIl cliente che vuole prenotare e' gia' nella lista clienti?");
printf("\n1.si");
printf("\n2.no\n");
scanf("\n%d",&sel);

    switch(sel)
        {
        case 1: menu(p); break;
        case 2: printf("\nBisogna immettere i dati del cliente prima");    break;
        default : printf("\nscelta non valida"); break;
        }
}

void menu(struct cliente *p)
{

int giornoa;
int mesea;
int giornop;
int mesep;
int sel;
printf("\nImmettere codice cliente ->");
scanf("%d",&sel);
    while (p!=NULL)
        {
        if (p->codice==sel)
            {
            printf("\nImmettere dati di arrivo per cliente [%s %s codice(%d)]",p->nome,p->cognome,p->codice);
            printf("\nImmettere mese di arrivo  ");
            scanf("%d",&mesea);
                if(mesea>12)
                               do
                    {
                              printf("\nERRORE DATA NON VALIDA!\n");
                              printf("MESE: ");
                                 scanf("%d",&mesea);
                               }
                    while(!(mesea<=12));
            printf("\nImmettere giorno di arrivo  ");
            scanf("%d",&giornoa);
                        if(mesea==11||mesea==4||mesea==6||mesea==9)
                               if(giornoa>30)
                                  do{
                                        printf("\nERRORE DATA NON VALIDA!\n");
                                        printf("GIORNO: ");
                                       scanf("%d",&giornoa);
                              }
                    while(!(giornoa<=30)||(giornoa>=31));
                         if(mesea==2)
                               if(giornoa>29)
                                  do{
                                       printf("\nERRORE DATA NON VALIDA!\n");
                                       printf("GIORNO: ");
                                      scanf("%d",&giornoa);
                                    }
                    while(!(giornoa<=29));
            printf("\nImmettere mese di partenza  ");
            scanf("%d",&mesep);
                if((mesep>12)||(mesep<=mesea))
                               do
                    {
                              printf("\nERRORE DATA NON VALIDA!\n");
                              printf("MESE: ");
                                 scanf("%d",&mesep);
                               }
                    while(!((mesep<=12)&&(mesep>=mesea)));
            printf("\nImmettere giorno di partenza  ");
            scanf("%d",&giornop);
                        if(mesep==11||mesep==4||mesep==6||mesep==9)
                               if(giornop>30)
                                  do{
                                        printf("\nERRORE DATA NON VALIDA!\n");
                                        printf("GIORNO: ");
                                       scanf("%d",&giornop);
                              }
                    while(!(giornop<=30)||(giornop>=31));
                         if(mesep==2)
                               if(giornop>29)
                                  do{
                                       printf("\nERRORE DATA NON VALIDA!\n");
                                       printf("GIORNO: ");
                                      scanf("%d",&giornop);
                                    }
                    while(!(giornop<=29));
            lista[j].codicecliente=p->codice;
            }
        
        p = p->next;
        }
    lista[j].giornoarrivo=giornoa;
    lista[j].mesearrivo=mesea;
    lista[j].giornopartenza=giornop;
    lista[j].mesepartenza=mesep;
    j++;
}
    
void elenca()
{
int t;
for(t=0;t<j;t++)
    {
    printf("\nPer il cliente con codice %d",lista[t].codicecliente);
    printf("\ngiorno arrivo %d mese %d\n",lista[t].giornoarrivo,lista[t].mesearrivo);
    printf("\ngiorno partenza %d mese %d\n",lista[t].giornopartenza,lista[t].mesepartenza);
    }
}
salve a tutti questo programma dovrebbe creare una lista clienti per poi abbinare ogni cliente ad una prenotazione in albergo, dovrei creare una funzione che mi permette di non far prenotare il cliente per i giorni che qualcun'altro ha già scelto, ovviamente ci saranno piu stanze ma questo non è un problema che non riesco a risolvere, ogni aiutino sarà molto utile.

la prenotazione viene salvata in una struttura con 4 Int relativi alla data di arrivo e partenza del tipo giornoarrivo,mesearrivo,giornopartenza,mesepartenz a = 23 3 2 4 rispettivamente, come faccio se un altro cliente vuole prenotarsi per 1 4 7 4?