andreibalu

isac

Dec 1st, 2020
509
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /** Fie un sistem de gestionare a unor cozi de mesaje. Un mesaj este caracterizat printr-un
  2.     -ID (intreg),
  3.     -o prioritate (intreg) și
  4.     -mesajul propriu zis (șir de caractere).
  5. Să se scrie și sa se implementeze un planificator pentru deservirea mesajelor
  6. bazat pe o structura  de tip multilistă. Structura multilistă va conține o
  7. listă ordonată de categorii de priorități implementată dinamic,
  8. și fiecare categorie va avea o coadă circulară de maxim 10 elemente,
  9. implementată static, pentru retinerea mesajelor din acea categorie.
  10.  
  11.  Sa se implementeze următoarele funcționalități:
  12. - Adăugare categorie de priorități (se va adăuga o categorie nouă, menținând lista ordonată)
  13. - Adăugare mesaj (se va adaugă un mesaj in coada corespunzătoare priorității sale)
  14. - Deservire mesaj (se va scoate cel mai vechi mesaj din cea mai prioritara categorie a cărei cozi nu este goala) **/
  15.  
  16. #include <stdlib.h>
  17. #include <stdio.h>
  18. #include <string.h>
  19.  
  20. typedef enum{false, true}Boolean;
  21.  
  22. typedef struct Mesaj{
  23.          int ID;
  24.          int prioritate;
  25.          char mesaj[100];
  26.          struct Mesaj *nextMsj;
  27. }Mesaj;
  28.  
  29. typedef struct Categorie{
  30.          int prioritate;
  31.          struct Categorie *next;
  32.          struct Mesaj *startMsj;
  33. }Categorie;
  34. Categorie *start;
  35.  
  36. /** adaugare mesaj**/
  37. void adaugareMesaj()
  38. {
  39.     Categorie *poz = start;
  40.     Mesaj *q, *pozMsj;
  41.         q = (Mesaj*)malloc(sizeof(Mesaj));
  42.         printf("\tPrioritate: "); scanf("%d", &q->prioritate);
  43.         printf("\tID: "); scanf("%d", &q->ID);
  44.   //      printf("\tMesaj: "); fgets(q->mesaj, 100, stdin);
  45.     while (poz!=NULL)
  46.     {
  47.         if (poz->prioritate == q->prioritate)
  48.         {
  49.             pozMsj = poz->startMsj;
  50.             break;
  51.         }
  52.         else poz = poz->next;
  53.     }
  54.     if(pozMsj == NULL)
  55.     {
  56.         q->nextMsj = NULL;
  57.         poz->startMsj = q;
  58.     }
  59.     else
  60.         while(pozMsj != NULL)
  61.         {
  62.             if(pozMsj->nextMsj == NULL)
  63.             {
  64.                 pozMsj->nextMsj = q;
  65.                 break;
  66.             }
  67.         }
  68. }
  69.  
  70. void adaugareCategorie()
  71. {
  72.     Categorie *poz = start, *q;
  73.         q = (Categorie*)malloc(sizeof(Categorie));
  74.         printf("\tPrioritate: "); scanf("%d", &q->prioritate);
  75.         q->startMsj = NULL;
  76.     if((start == NULL) || (poz->prioritate > q->prioritate))
  77.     {
  78.         q->next = start;
  79.         start = q;
  80.     }
  81.     else
  82.         while(poz!= NULL)
  83.         {
  84.             if ((poz->next == NULL) || (poz->next->prioritate > q->prioritate))
  85.             {
  86.                 q->next = poz->next;
  87.                 poz->next = q;
  88.                 break;
  89.             }
  90.             else
  91.                 poz=poz->next;
  92.         }
  93. }
  94.  
  95. /** Afisari**/
  96.  
  97. void afisareMesaje(Categorie *q)
  98. {
  99.     Mesaj *poz = q->startMsj;
  100.     if(poz == NULL)
  101.         printf("\tNu exista mesaje cu acesta prioritate\n");
  102.     else
  103.         while(poz != NULL)
  104.         {
  105.             printf("\tPrioritate:%d // ID:%d\n", poz->prioritate, poz->ID);
  106.             poz = poz->nextMsj;
  107.         }
  108. }
  109.  
  110. void afisare()
  111. {
  112.     Categorie *poz = start;
  113.     while(poz != NULL)
  114.     {
  115.         printf("Prioritate:%d\n", poz->prioritate);
  116.         afisareMesaje(poz);
  117.         poz = poz->next;
  118.     }
  119. }
  120.  
  121. int main()
  122. {
  123.     int optiune;
  124.     do{
  125.         printf("1. Adaugare categorie de prioritati\n2. Adaugare mesaj\n3. Deservire mesaj\n4. Afisare mesaje existente\n5. Quit\n");
  126.         scanf("%d", &optiune);
  127.         switch(optiune)
  128.         {
  129.             case 1:
  130.                 adaugareCategorie();
  131.             break;
  132.             case 2:
  133.                 adaugareMesaj();
  134.             break;
  135.             case 3:
  136.                 printf("3 not yet\n");
  137.             break;
  138.             case 4:
  139.                 afisare();
  140.             break;
  141.             case 5:
  142.             break;
  143.             default:
  144.                 printf("Nu exista aceasta optiune\n");
  145.         }
  146.       }while(optiune!=5);
  147.     return 0;
  148. }
RAW Paste Data