Advertisement
vasylmartyniv

C2S1-Yulia-RGR

Dec 22nd, 2019
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.69 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdbool.h>
  5. #define stringlength 255//Змінна яка вказує довжину стрічки
  6.  
  7. typedef struct PhoneStruct {//структура з полями номеру телефону на вказівниками на наступний і попередній елемент списку
  8.     int id;//номер елементу
  9.     char *name;//імя
  10.     char *number;//номер телефону
  11.     struct PhoneStruct *next;//вказівник на наступний елемент
  12.     struct PhoneStruct *prev;//вказівник на попередній елемент
  13. } Phone;
  14. Phone* last = NULL;//Вказівник на останній елемент стеку
  15. int PhonesCounter = 0;//Лічильник елементів в стеку
  16.  
  17. void PrintPhone(){//функція для виводу всіх елеменьів списку
  18.     Phone *Current=last;//вказівник на поточний елемент
  19.     if(Current==NULL){//якщо список пустий то виходимо
  20.         return;
  21.     }
  22.     while(Current!=NULL){//доки вказівник на поточний елемент не вказує в нікуда
  23.         printf("\n------%d------",Current->id);//виводимо номер елемента
  24.         printf("\nName: %s",Current->name);//виводимо імя
  25.         printf("\nNumber: %s",Current->number);//виводимо номер телефону
  26.         Current=Current->prev;//присвоюємо вказівнику на поточний елемент адресу попереднього елемента тому що ми йдемо з кінця
  27.     }
  28. }
  29.  
  30. void AddPhone(){//функція додавання елементу в список
  31.     Phone *new = malloc(sizeof(Phone));//виділяємо память під новий елемент і робимо вказівник на цей елемент
  32.     PhonesCounter++;//збільшуємо лічильник елементів
  33.     new->id=PhonesCounter;//встановлюємо номер нового елементу рівним лічильнику бо новий елемент вставляється в кінець списку
  34.     new->name = malloc(stringlength* sizeof(char));//виділяємо память під ім'я
  35.     new->number = malloc(stringlength* sizeof(char));//виділяємо память під номер
  36.     printf("Enter name:");
  37.     scanf("%s", new->name);//Зчитуємо імя для нового елементу
  38.     printf("Enter number:");
  39.     scanf("%s",new->number);//Зчитуємо номер для нового елементв
  40.     if(last!=NULL){//якщо вказівник на останній елемент не вказує в нікуди(якщо список не пустий)
  41.         last->next=new;//встановлюємо вказівник на наступний елемент в останнього елемента стеку щоб він вказував на новий елемент
  42.         new->prev=last;//встановлюємо вказівник на попередній елемент нового елемента щоб вказував на останній елемент стеку
  43.         new->next=NULL;//встановлюємо вказівник на наступний елемент нового елемента шоб вказував в нікуди
  44.         last=new;//встановлюєм вказівник на останній елемент стеку щоб вказував на новий елемент
  45.     }else{//якщо список пустий
  46.         new->prev = NULL;//встановлюємо вказівники на наступний і попередній елемент нового елемента щоб вказували в нікуди
  47.         new->next = NULL;
  48.         last = new;//встановлюємо вказівник на останній елемент стекц щоб вказував на новий елемент
  49.     }
  50. }
  51.  
  52. void RemovePhone(){//функція видалення елементу
  53.     int choice;//змінна для вибору користувача
  54.     Phone *Deleted=last;
  55.     PrintPhone();
  56.     printf("\nWhich one you want to delete:");
  57.     scanf("%d",&choice);
  58.     bool found=false;
  59.     if(Deleted==NULL){
  60.         return;
  61.     }
  62.     while(Deleted->id!=choice){
  63.         if(Deleted->prev==NULL){
  64.             break;
  65.         }
  66.         Deleted=Deleted->prev;
  67.     }
  68.     if(Deleted->id!=choice){
  69.         printf("\nNo element with that id!");
  70.         return;
  71.     }
  72.     if(Deleted->prev!=NULL){
  73.         Deleted->prev->next=Deleted->next;
  74.     }else{
  75.         Deleted->next->prev=NULL;
  76.     }
  77.     if(Deleted->next!=NULL){
  78.         Deleted->next->prev=Deleted->prev;
  79.     }else{
  80.         last=Deleted->prev;
  81.         Deleted->prev->next=NULL;
  82.     }
  83.     while(Deleted!=NULL){
  84.         Deleted->id--;
  85.         Deleted=Deleted->next;
  86.     }
  87.     PhonesCounter--;
  88. }
  89.  
  90. int main() {
  91.     setbuf(stdout, 0);
  92.     int choice;
  93.     while(true){
  94.         printf("\n\n---------Menu--------");
  95.         printf("\n1)List phones");
  96.         printf("\n2)Add phone");
  97.         printf("\n3)Remove phone");
  98.         printf("\n4)Exit");
  99.         printf("\nEnter choice:");
  100.         scanf("%d",&choice);
  101.         switch(choice){
  102.             case 1:
  103.                 PrintPhone();
  104.                 break;
  105.             case 2:
  106.                 AddPhone();
  107.                 break;
  108.             case 3:
  109.                 RemovePhone();
  110.                 break;
  111.             case 4:
  112.                 return 0;
  113.             default:
  114.                 break;
  115.         }
  116.     }
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement