123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- // esercitazione_verifica.cpp : Defines the entry point for the console application.
- //
- /*
- scrivere un programma che gestisca la lista delle auto che entrano ed escano da un parchegio delle auto interessa la targa e ora di etrata(stringha)
- la lsta è ordinaa per
- la targa
- 1) l' auto vine aggiunta al parcheggio (alloca)
- 2) uscita dal parcheggio auto eliminata (
- 3) visualizza tutte le auto presenti nel parcheggio
- */
- #include "stdafx.h"
- #include <iostream>
- #define LEN 10
- using namespace std;
- typedef struct {
- char targa[LEN + 1];
- float entrata;
- }INFO;
- typedef struct NODO {
- INFO macchina;
- struct NODO*next;
- }NODO;
- bool lista_vuota(NODO*n);
- NODO*alloca();
- void leggi(NODO*n);
- NODO*inserimento_ordinato(NODO*n);
- NODO*cancella(NODO*n);
- void stampa(NODO*n);
- void dealloca(NODO*n);
- void menù();
- int main()
- {
- menù();
- return 0;
- }
- bool lista_vuota(NODO*n) {
- if (n == NULL) {
- return true;
- }
- else {
- return false;
- }
- }
- NODO*alloca() {
- NODO*nuovo;
- nuovo = (NODO*)malloc(sizeof(NODO));
- if (nuovo == NULL) {
- printf("Errore di allocamento di memoria, spazio insufficente\n");
- return 0;
- }
- nuovo->next = NULL;
- return nuovo;
-
- }
- void leggi(NODO*n) {
- printf("inseire targa del veicolo\n");
- scanf_s("%s", n->macchina.targa, LEN + 1);
- printf("inseire la data di entrata del veicolo \n");
- scanf_s("%f", n->macchina.entrata, sizeof(float));
- }
- NODO*inserimento_ordinato(NODO*n) {
- NODO*p;
- NODO*prec=NULL;
- NODO*nuovo;
- if (lista_vuota(n) == true) {
- nuovo = alloca();
- leggi(nuovo);
- return nuovo;
- }
- else {
- nuovo = alloca();
- leggi(nuovo);
- p = n;
- while (p != NULL) {
- if (strcmp(p->macchina.targa, nuovo->macchina.targa) == 0 || strcmp(p->macchina.targa, nuovo->macchina.targa) == -1) {
- if (prec == NULL) {
- nuovo->next = p;
- return nuovo;
- }
- else {
- prec->next = nuovo;
- nuovo->next = p;
- break;
- }
- }
- else {
- if (p->next == NULL) {
- p->next = nuovo;
- nuovo->next = NULL;
- break;
- }
- }
- prec = p;
- p = p->next;
- }
- }
- }
- NODO*cancella(NODO*n) {
- char auto_eliminare[LEN + 1];
- NODO*p;
- NODO*prec;
- bool trovato = false;
- // case 1
- if (lista_vuota(n) == true) {
- printf("la lista è vuota \n");
- system("pause");
- return 0;
- }
- printf("inseire la targa \n");
- scanf_s("%s", auto_eliminare, LEN + 1);
- p = n;
- while (p != NULL)
- {
- if (strcmp(auto_eliminare, p->macchina.targa) == 0) {
- trovato = true;
- if (prec == NULL) {
- // case 2 non precedente
- if (p->next == NULL) {
- free(p);
- return NULL;
- }
- else {
- // case 2 precedente
- n = p->next;
- free(p);
- return n;
- }
- }
- else {
- if (p->next == NULL) {// caso 3 ultimo nodo
- prec->next = NULL;
- free(p);
- break;
- }
- else {
- // case 4 nodo di mezzo
- prec->next = p->next;
- free(p);
- break;
- }
- }
- }
- prec = p;
- p = p->next;
- }
-
- }
- void stampa(NODO*n) {
- NODO*p;
- int cont=0;
- p = n;
- while (p != NULL) {
- printf(" il nodo è %d , la targa è %s e l' ora di enrata è %f", cont, p->macchina.targa, p->macchina.entrata);
- cont++;
- p = p->next;
- }
- }
- void dealloca(NODO*n) {
- NODO*p;//creo un nodo p
- while (n != 0) {
- p = n;// pongo p =n;
- n = p->next; // pongo n= al nodo dopo p;
- free(p);//dealloco p
- p = NULL;//dico che p è ugguale a niente
- }
- }
- void menù() {
- NODO*n=NULL;
- int scelta = 0;
- do {
- system("cls");
- printf("menù\n");
- printf("0.esci\n");
- printf("1.inseirsci\n");
- printf("2. cancella \n");
- printf("3.stampa\n");
- scanf_s("%d", &scelta, sizeof(int));
- switch (scelta) {
- case 0:
- printf("arrivederci e lsciate la mancia\n");
- system("pause");
- break;
- case 1:
- n = inserimento_ordinato(n);
- break;
- case 2:
- n = cancella(n);
- break;
- case 3:
- stampa(n);
- system("pause");
- break;
- default:
- printf("numero non valido\n");
- system("pause");
- break;
- }
- } while (scelta != 0);
- dealloca(n);
- }
|