Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- avendo 2 bankine
- 1)Nuova nave
- 2)nave esce dal porto
- 3)Numero navi attraccate
- 4)Cercare nave in base al codice
- 5)Stampa navi attraccate
- 6)Esci
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define NUMERO_BANCHINE 2
- struct Nave{
- char NomeCapitano[40];
- int Codice;
- int TariffaMinima;
- };
- struct Nodo{
- struct Nave Data;
- struct Nodo* next;
- };
- struct Banchina{
- char Nome[40];
- int NumeroNavi;
- struct Nodo* ElencoNavi;
- };
- /*char* Normalizza(char* a){
- int i;
- if (a==NULL) return NULL;
- if (*a>='a' && *a<='z') a-=32;
- for (i=1;i<strlen(a);i++){
- if (*(a+i)>='A' && *(a+i)<='Z') a+=32;
- }
- return a;
- }*/
- struct Nodo* Push(struct Nodo* Head, char* nom, int code, int tarif){
- struct Nodo* temp;
- temp= (struct Nodo*) malloc(sizeof(struct Nodo));
- strcpy(temp->Data.NomeCapitano, nom);
- temp->Data.Codice=code;
- temp->Data.TariffaMinima=tarif;
- temp->next=Head;
- return temp;
- }
- struct Nodo* Pop(struct Nodo* Head, int pos){
- if (Head==NULL) return NULL;
- int i;
- struct Nodo* curr=Head;
- struct Nodo* prev;
- if (pos==0){
- curr=Head->next;
- free(Head);
- return curr;
- }
- for (i=0;i<pos;i++){
- prev=curr;
- curr=curr->next;
- if (curr==NULL && i+1<pos) return Head;
- }
- prev->next=curr->next;
- free(curr);
- return Head;
- }
- struct Nodo* Libera (struct Nodo* Head){
- struct Nodo* curr=Head;
- while (Head!=NULL){
- curr=Head->next;
- free(Head);
- Head=curr;
- }
- return NULL;
- }
- int Dimensione(struct Nodo* Head){
- struct Nodo* curr=Head;
- int result=0;
- while (curr!=NULL){
- result++;
- curr=curr->next;
- }
- return result;
- }
- int TrovaNave(struct Nodo* a, int code){
- struct Nodo* curr=a;
- int result=0;
- if (a==NULL) return -1;
- while (curr->Data.Codice!=code){
- curr=curr->next;
- result++;
- if (curr==NULL) return -1;
- }
- return result;
- }
- void Display(struct Banchina* a, int n){
- int i,j;
- struct Nodo* li;
- for (i=0;i<n;i++){
- j=0;
- li=(a+i)->ElencoNavi;
- printf("\nBanchina %s\nNumero Navi Atraccate: %d\nNavi in questa banchina:", (a+i)->Nome, (a+i)->NumeroNavi);
- if (li==NULL) printf("\nNon ci sono navi in questa banchina.");
- while(li!=NULL){
- printf("\n%d) Capitano: %s\nCodice: %d\nTariffa Minima: %d\n-----------------------------",j+1,li->Data.NomeCapitano,li->Data.Codice,li->Data.TariffaMinima);
- j++;
- li=li->next;
- }
- printf("\n-----------------------------------------------\n");
- }
- }
- int CodiceDupplicato (struct Banchina* a, int n, int cod){
- if (a==NULL) return 0;
- int i;
- struct Nodo* li;
- for (i=0;i<n;i++){
- li=(a+i)->ElencoNavi;
- while(li!=NULL){
- if (li->Data.Codice==cod) return 1;
- li=li->next;
- }
- }
- return 0;
- }
- struct Nave* CercaNave (struct Banchina* a, int n, int cod){
- if (a==NULL) return NULL;
- int i;
- struct Nodo* li;
- for(i=0;i<n;i++){
- li=(a+i)->ElencoNavi;
- while(li!=NULL){
- if (li->Data.Codice==cod) return &(li->Data);
- li=li->next;
- }
- }
- return NULL;
- }
- int main(){
- struct Banchina Porto[NUMERO_BANCHINE];
- int a,i,scelta,codice,tariffa;
- struct Nave* temp;
- char nome[40];
- for (i=0;i<NUMERO_BANCHINE;i++){
- printf("\nInserisci il nome della %d^a banchina: ",i+1);
- scanf("%s",(Porto+i)->Nome); fflush(stdin);
- //strcpy((Porto+i)->Nome, Normalizza((Porto+i)->Nome));
- (Porto+i)->NumeroNavi=0;
- (Porto+i)->ElencoNavi=NULL;
- }
- while(1){
- do{
- printf("\nCosa vuoi fare?\n1- Aggiungi Nave\n2- Rimuovi Nave\n3- Visualizza numero navi attraccate\n4- Cerca Nave\n5- Visualizza Situazione Attuale\n0- Esci\n");
- scanf("%d",&scelta); fflush(stdin);
- }while(scelta<0 || scelta>5);
- if (scelta==0) break;
- switch (scelta){
- case 1:
- do{
- printf("\nIn quale banchina? ");
- scanf("%d",&i); fflush(stdin);
- a=i;
- }while(i<=0 || i>NUMERO_BANCHINE);
- printf("\nInserisci il nome del capitano: ");
- scanf("%s",nome); fflush(stdin);
- do{
- printf("\nInserisci il codice della nave: ");
- scanf("%d",&codice); fflush(stdin);
- }while(CodiceDupplicato(Porto,NUMERO_BANCHINE,codice));
- printf("\nInserisci la tariffa minima della nave: ");
- scanf("%d",&tariffa); fflush(stdin);
- (Porto+i-1)->ElencoNavi=Push((Porto+i-1)->ElencoNavi, nome, codice, tariffa);
- (Porto+i-1)->NumeroNavi=Dimensione((Porto+i-1)->ElencoNavi);
- break;
- case 2:
- printf("\nInserisci codice nave in partenza: ");
- scanf("%d",&codice); fflush(stdin);
- tariffa=-1;
- for (i=0;i<NUMERO_BANCHINE && tariffa==-1;i++){
- tariffa=TrovaNave((Porto+i)->ElencoNavi,codice);
- if (tariffa!=-1){
- Pop((Porto+i)->ElencoNavi, tariffa);
- printf("\nNave Rimossa\n");
- }
- }
- if (tariffa==-1) printf("\nNave non trovata!\n");
- else (Porto+i)->NumeroNavi=Dimensione((Porto+i)->ElencoNavi);
- break;
- case 3:
- tariffa=0;
- for (i=0;i<NUMERO_BANCHINE;i++){
- tariffa+=(Porto+i)->NumeroNavi;
- }
- printf("\nNumero navi attraccate: %d\n",tariffa);
- break;
- case 4:
- printf("\nInserisci il codice della nave: ");
- scanf("%d",&codice); fflush(stdin);
- temp=CercaNave(Porto,NUMERO_BANCHINE,codice);
- if (temp==NULL) printf("\nNessuna nave corrispondente al codice inserito\n");
- else printf("Dettagli nave:\nNome Capitano: %s\nCodice: %d\nTariffa Minima: %d\n",temp->NomeCapitano,temp->Codice,temp->TariffaMinima);
- break;
- case 5:
- Display(Porto,2);
- break;
- }
- }
- for (i=0;i<NUMERO_BANCHINE;i++){
- Porto[i].ElencoNavi=Libera(Porto[i].ElencoNavi);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement