ZZ 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. // esercitazione_verifica.cpp : Defines the entry point for the console application.
  2. //
  3. /*
  4. 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)
  5. la lsta è ordinaa per
  6. la targa
  7. 1) l' auto vine aggiunta al parcheggio (alloca)
  8. 2) uscita dal parcheggio auto eliminata (
  9. 3) visualizza tutte le auto presenti nel parcheggio
  10. */
  11. #include "stdafx.h"
  12. #include <iostream>
  13. #define LEN 10
  14. using namespace std;
  15. typedef struct {
  16. char targa[LEN + 1];
  17. float entrata;
  18. }INFO;
  19. typedef struct NODO {
  20. INFO macchina;
  21. struct NODO*next;
  22. }NODO;
  23. bool lista_vuota(NODO*n);
  24. NODO*alloca();
  25. void leggi(NODO*n);
  26. NODO*inserimento_ordinato(NODO*n);
  27. NODO*cancella(NODO*n);
  28. void stampa(NODO*n);
  29. void dealloca(NODO*n);
  30. void menù();
  31. int main()
  32. {
  33. menù();
  34. return 0;
  35. }
  36. bool lista_vuota(NODO*n) {
  37. if (n == NULL) {
  38. return true;
  39. }
  40. else {
  41. return false;
  42. }
  43. }
  44. NODO*alloca() {
  45. NODO*nuovo;
  46. nuovo = (NODO*)malloc(sizeof(NODO));
  47. if (nuovo == NULL) {
  48. printf("Errore di allocamento di memoria, spazio insufficente\n");
  49. return 0;
  50. }
  51. nuovo->next = NULL;
  52. return nuovo;
  53. }
  54. void leggi(NODO*n) {
  55. printf("inseire targa del veicolo\n");
  56. scanf_s("%s", n->macchina.targa, LEN + 1);
  57. printf("inseire la data di entrata del veicolo \n");
  58. scanf_s("%f", n->macchina.entrata, sizeof(float));
  59. }
  60. NODO*inserimento_ordinato(NODO*n) {
  61. NODO*p;
  62. NODO*prec=NULL;
  63. NODO*nuovo;
  64. if (lista_vuota(n) == true) {
  65. nuovo = alloca();
  66. leggi(nuovo);
  67. return nuovo;
  68. }
  69. else {
  70. nuovo = alloca();
  71. leggi(nuovo);
  72. p = n;
  73. while (p != NULL) {
  74. if (strcmp(p->macchina.targa, nuovo->macchina.targa) == 0 || strcmp(p->macchina.targa, nuovo->macchina.targa) == -1) {
  75. if (prec == NULL) {
  76. nuovo->next = p;
  77. return nuovo;
  78. }
  79. else {
  80. prec->next = nuovo;
  81. nuovo->next = p;
  82. break;
  83. }
  84. }
  85. else {
  86. if (p->next == NULL) {
  87. p->next = nuovo;
  88. nuovo->next = NULL;
  89. break;
  90. }
  91. }
  92. prec = p;
  93. p = p->next;
  94. }
  95. }
  96. }
  97. NODO*cancella(NODO*n) {
  98. char auto_eliminare[LEN + 1];
  99. NODO*p;
  100. NODO*prec;
  101. bool trovato = false;
  102. // case 1
  103. if (lista_vuota(n) == true) {
  104. printf("la lista è vuota \n");
  105. system("pause");
  106. return 0;
  107. }
  108. printf("inseire la targa \n");
  109. scanf_s("%s", auto_eliminare, LEN + 1);
  110. p = n;
  111. while (p != NULL)
  112. {
  113. if (strcmp(auto_eliminare, p->macchina.targa) == 0) {
  114. trovato = true;
  115. if (prec == NULL) {
  116. // case 2 non precedente
  117. if (p->next == NULL) {
  118. free(p);
  119. return NULL;
  120. }
  121. else {
  122. // case 2 precedente
  123. n = p->next;
  124. free(p);
  125. return n;
  126. }
  127. }
  128. else {
  129. if (p->next == NULL) {// caso 3 ultimo nodo
  130. prec->next = NULL;
  131. free(p);
  132. break;
  133. }
  134. else {
  135. // case 4 nodo di mezzo
  136. prec->next = p->next;
  137. free(p);
  138. break;
  139. }
  140. }
  141. }
  142. prec = p;
  143. p = p->next;
  144. }
  145. }
  146. void stampa(NODO*n) {
  147. NODO*p;
  148. int cont=0;
  149. p = n;
  150. while (p != NULL) {
  151. printf(" il nodo è %d , la targa è %s e l' ora di enrata è %f", cont, p->macchina.targa, p->macchina.entrata);
  152. cont++;
  153. p = p->next;
  154. }
  155. }
  156. void dealloca(NODO*n) {
  157. NODO*p;//creo un nodo p
  158. while (n != 0) {
  159. p = n;// pongo p =n;
  160. n = p->next; // pongo n= al nodo dopo p;
  161. free(p);//dealloco p
  162. p = NULL;//dico che p è ugguale a niente
  163. }
  164. }
  165. void menù() {
  166. NODO*n=NULL;
  167. int scelta = 0;
  168. do {
  169. system("cls");
  170. printf("menù\n");
  171. printf("0.esci\n");
  172. printf("1.inseirsci\n");
  173. printf("2. cancella \n");
  174. printf("3.stampa\n");
  175. scanf_s("%d", &scelta, sizeof(int));
  176. switch (scelta) {
  177. case 0:
  178. printf("arrivederci e lsciate la mancia\n");
  179. system("pause");
  180. break;
  181. case 1:
  182. n = inserimento_ordinato(n);
  183. break;
  184. case 2:
  185. n = cancella(n);
  186. break;
  187. case 3:
  188. stampa(n);
  189. system("pause");
  190. break;
  191. default:
  192. printf("numero non valido\n");
  193. system("pause");
  194. break;
  195. }
  196. } while (scelta != 0);
  197. dealloca(n);
  198. }