Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    17

    [c]carica stringhe da file e salva su lista

    codice:
    #include <stdio.h>
    #include <string.h>
    #include <malloc.h>
    #define MAX 50
    
    struct cliente
    {
    char nome[20];
    char cognome[20];
    int codice;
    struct cliente *next;
    };
    
    struct prenotazione
    {
    int codicecliente;
    int stanza;
    int giornoarrivo;
    int giornopartenza;
    int mesearrivo;
    int mesepartenza;
    }lista[100];
    
    struct data
    {
    int arrivo;
    int partenza;
    }calend[100];
    
    int calendario[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
    
    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 gestionedata (int giornoa,int mesea,int giornop,int mesep);
    int controllo(int giornoarrivo,int giornopartenza);
    void salvalista(struct cliente *);
    struct cliente *caricalistaprimo();
    struct cliente *caricalistanext(struct cliente *);
    
    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\t6.Salva lista cliente sul file di testo [listaclienti.txt]");
    	printf("\n\t7.Carica lista clienti da file [listaclienti.txt]");
    	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(); break;
    		case 6: salvalista(p); break;
    		case 7: 
    			if (i==1)
    				{
    				p = caricalistaprimo();
    				i++;
    				new = p;
    				
    				}
    			else
    				{
    				new->next=malloc(sizeof(struct cliente));
    				new = caricalistanext(new->next);
    				break;
    				}
    			
    		}
    	}
    }
    
    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\nscelta---> ");
    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 state=0;
    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);
    			do{
    			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));
    			
    			state=gestionedata(giornoa,mesea,giornop,mesep);
    			
    			lista[j].codicecliente=p->codice;
    				
    			 }while(state==1);
    			}
    		
    		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\n\n",lista[t].giornopartenza,lista[t].mesepartenza);
    	}
    }
    
    int gestionedata(int giornoa,int mesea,int giornop,int mesep)
    {
    int sta=0;
    int t;
    int giornoarrivo=giornoa;
    int giornopartenza=giornop;
    for (t=0;t<mesea;t++)
    	{
    	giornoarrivo=giornoarrivo+calendario[t];
    	}
    	calend[j].arrivo=giornoarrivo;
    for (t=0;t<mesep;t++)
    	{
    	giornopartenza=giornopartenza+calendario[t];
    	}
    	calend[j].partenza=giornopartenza;
    	if (j>0)
    	{
    	sta=controllo(giornoarrivo,giornopartenza);
    	return sta;
    	}
    }
    	
    
    int controllo(int giornoarrivo,int giornopartenza)
    {
    int t;
    for (t=0;t<j;t++)
    	{
    	if ((giornoarrivo>=calend[t].arrivo)&&(giornoarrivo<=calend[t].partenza)||(giornopartenza>=calend[t].arrivo)&&(giornopartenza<=calend[t].partenza))
    		{
    		printf("\nData non disponibile visualizzare l'elenco prenotazione e scegliere una prenotazione valida");
    		elenca();
    		return 1;
    		}
    	else 
    		{
    		return 0;
    		}
    	}
    }
    void salvalista(struct cliente *p)
    {
    FILE *fp;
    
    fp=fopen("listaclienti.txt","a+");
    
    
    while (p!=NULL)
    	{
    	fprintf(fp,"%d %s %s\n",p->codice,p->nome,p->cognome);
    	p = p->next;
    	}
    fclose(fp);
    }
    
    struct cliente *  caricalistaprimo()
    {
    
    
    FILE *fp;
    
    fp=fopen("listaclienti.txt","a+");
    
    
    	struct cliente *p;
    		
    	p = malloc(sizeof(struct cliente));
    	
    	fscanf(fp,"%d %s %s",&p->codice,p->nome,p->cognome);
    	p->next=NULL;
    	return p;
    fclose(fp);
    }
    
    struct cliente *caricalistanext(struct cliente *p)
    {
    
    FILE *fp;
    
    fp = fopen("listaclienti.txt","a+");
    char c[100];
    fgets(c,100,fp);
    
    	while(!feof(fp))
    		{
    		while(p!=NULL)
    			{
    			fscanf(fp,"%d %s %s\n",&p->codice,p->nome,p->cognome);
    			p = p->next;
    			i++;
    			}
    
    		}
    return p;
    fclose(fp);
    }
    Scusate ancora ragazzi, ho un problema non riesco a capire perchè le ultime 2 funzioni non riescono a caricare delle stringhe contenute in un file per poi salvarle in una lista, avete qualche suggerimento?

    lasciando stare tutto il resto del codice, come faccio a salvare delle stringhe in un file in una lista? cioè salvo il primo elemento e non riesco a salvare i successivi.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma perché due funzioni (primo e next) e non una sola?

    Perché la fclose dopo la return?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    17
    è questo il fatto, stavo cercando di spezzettare il problema in piu' funzioni dato che non riesco a venirne a capo, in questo caso stavo provando nello stesso modo che ho usato per creare gli elementi della lista da tastiera, ma è sbagliato.
    Non capisco come andare avanti cioè, leggo il primo elemento della lista e lo memorizo poi dovrei scorrere il file saltando la prima riga, allocando di volta in volta la memoria e memorizzo, ma c'è qualcosa che non riesco a capire o vedere.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma no ... devi fare una sola funzione sola che apre il file, legge tutti gli elementi e lo chiude.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    17
    si ho capito ma la lista quando apro il file ancora non è creata, quindi dovrei creare il primo elemento e poi allocare di volta in volta.

    riusciresti a farmi un esempio con un file con delle stringhe che devono essere memorizzate in una lista ancora vuota? scusa il disturbo

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Prima di farti un esempio, perché non ci provi da solo? Sarebbe più formativo ...

    Passa un puntatore al puntatore al primo elemento della tua lista posto a NULL alla funzione e crea elemento dopo elemento nella funzione ...

    struct cliente *plist = NULL;

    funzionechelegge(&plist)

    ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    17
    oregon ti ringrazio tantissimo, ma non ci riesco, sono ancora alle prime armi con le liste dinamiche, probabilmente mi prenderai per un idiota ma è da stamattina che ci sbatto le corna senza risultato, sono entrato nel pallone completamente.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    17
    Non riesco, mi da errore di segmentazione, forse è la funzione feof, domani devo consegnare questo elaborato e sono ad un punto morto, ho visto molti esempi sulla rete ma il problema non è la teoria perchè ho studiato molto, so cosa si deve fare ma non riesco a farlo

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    17
    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;
    int giornoarrivo;
    int giornopartenza;
    int mesearrivo;
    int mesepartenza;
    }lista[100];
    
    struct data
    {
    int arrivo;
    int partenza;
    }calend[100];
    
    int calendario[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
    
    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 gestionedata (int giornoa,int mesea,int giornop,int mesep);
    int controllo(int giornoarrivo,int giornopartenza);
    struct cliente *creanext(struct cliente *);
    struct cliente *creaprimo();
    void salvalista(struct cliente *);
    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\t6.Salva lista cliente sul file di testo [listaclienti.txt]");
    	printf("\n\t7.Carica lista clienti da file [listaclienti.txt]");
    	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(); break;
    		case 6: salvalista(p); break;
    		case 7: 	
    				p = creaprimo();
    				i++;
    				new = p;
    				new->next=malloc(sizeof(struct cliente));
    				new = creanext(new->next);
    				break;
    				
    		}
    	}
    }
    
    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)
    {
    
    	printf("[codice]  [nome]  [cognome]");
    while (p!=NULL)
    	{
    	printf("\n   [%d]    %s   %s\n",p->codice,p->nome,p->cognome);
    	
    	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\nscelta---> ");
    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 state=0;
    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);
    			do{
    			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));
    			
    			state=gestionedata(giornoa,mesea,giornop,mesep);
    			
    			lista[j].codicecliente=p->codice;
    				
    			 }while(state==1);
    			}
    		
    		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\n\n",lista[t].giornopartenza,lista[t].mesepartenza);
    	}
    }
    
    int gestionedata(int giornoa,int mesea,int giornop,int mesep)
    {
    int sta=0;
    int t;
    int giornoarrivo=giornoa;
    int giornopartenza=giornop;
    for (t=0;t<mesea;t++)
    	{
    	giornoarrivo=giornoarrivo+calendario[t];
    	}
    	calend[j].arrivo=giornoarrivo;
    for (t=0;t<mesep;t++)
    	{
    	giornopartenza=giornopartenza+calendario[t];
    	}
    	calend[j].partenza=giornopartenza;
    	if (j>0)
    	{
    	sta=controllo(giornoarrivo,giornopartenza);
    	return sta;
    	}
    }
    	
    
    int controllo(int giornoarrivo,int giornopartenza)
    {
    int t;
    for (t=0;t<j;t++)
    	{
    	if ((giornoarrivo>=calend[t].arrivo)&&(giornoarrivo<=calend[t].partenza)||(giornopartenza>=calend[t].arrivo)&&(giornopartenza<=calend[t].partenza))
    		{
    		printf("\nData non disponibile visualizzare l'elenco prenotazione e scegliere una prenotazione valida");
    		elenca();
    		return 1;
    		}
    	else 
    		{
    		return 0;
    		}
    	}
    }
    void salvalista(struct cliente *p)
    {
    FILE *fp;
    
    fp=fopen("listaclienti.txt","a+");
    
    
    while (p!=NULL)
    	{
    	fprintf(fp,"\n%d %s %s",p->codice,p->nome,p->cognome);
    	p = p->next;
    	}
    fclose(fp);
    
    }
    
    struct cliente *creaprimo()
    {
    struct cliente *p;
    p=malloc(sizeof(struct cliente));
    
    FILE *fp;
    
    fp=fopen("listaclienti.txt","a+");
    
    
    fscanf(fp,"%d %s %s",&p->codice,p->nome,p->cognome);
    p->next=NULL;
    fclose(fp);
    return p;
    }
    
    
    struct cliente *creanext(struct cliente *p)
    {
    FILE *fp;
    
    fp=fopen("listaclienti.txt","a+");
    
    while(!feof(fp))
    	{
    	fscanf(fp,"%d %s %s",&p->codice,p->nome,p->cognome);
    	i++;
    	}
    fclose(fp);
    return p;
    }

    perchè cosi mi salva solo il primo e l'ultimo elemento?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.