Langsung ke konten utama

Aplikasi Sederhana dengan Double Linked List


Pada kesempatan kali ini, saya diberi tugas membuat sebuah aplikasi dengan syarat berikut:
  • aplikasi dibuat menggunakan linked list
  • aplikasi dibuat menggunakan double linked list.
  • aplikasi dibuat bisa input barang (nama dan qty), bs edit qty dan bisa menghapus item yang salah.
  • ketika checkout anda akan ditampilkan hasil total dari perhitungan qty (seperti struk minimarket)
  • harga yang tertera random, namun hasil penjumlahan benar (totalnya benar)
  • setelah tahap mau bayar, di bawah tulisan total, tuliskan gratis, “kindness is free”
Nah langsung saja kita lihat kodingnya seperti apa!

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct node{
  6.     char barang[101];
  7.     int quantity;
  8.     int harga;
  9.     struct node *next,*prev;
  10. } *head = NULL , *tail = NULL , *curr, *temp;
  11.  
  12. void push (char *item, int x)
  13. {
  14.     curr = (struct node*) malloc(sizeof(struct node));
  15.     strcpy(curr->barang, item); //nama barangnya masuk ke barang[101]
  16.     curr->quantity = x;
  17.     curr->harga = (rand()%(30000-1000 + 1) + 1000); //(rand()%(rangepalingtinggi - rangepalingrendah + 1) + rangepalingrendah)
  18.     curr->next = curr->prev = NULL;
  19.    
  20.     if(head == NULL)
  21.     {
  22.         head = tail = curr;
  23.     }
  24.     else if(strcmp(item,head->barang) < 0) //input A sedangkan C udah di dll, maka A masuk dluan
  25.     {                                       //Buba di Head, Abdi mau dimasukkin
  26.         curr->next = head;
  27.         head->prev = curr;
  28.         head = curr;
  29.     }
  30.     else if(strcmp(item,tail->barang) > 0) //push dari blkg
  31.     {
  32.         tail->next = curr;
  33.         curr->prev = tail;
  34.         tail = curr;
  35.     }
  36.     else
  37.     {
  38.         temp = head;
  39.         while(strcmp(item, temp->next->barang) < 0) //temp ke next lbh kecil qty nya
  40.         {
  41.             temp = temp->next;
  42.         }
  43.         curr->next = temp->next;
  44.         temp->next->prev = curr;
  45.         temp->next = curr;
  46.         curr->prev = temp;
  47.     }
  48. }
  49.  
  50. void pop(const char *hapus)
  51. {
  52.     if(head == NULL)
  53.     {
  54.         printf("There is no item to be removed...\n");
  55.     }
  56.     else if(head == tail)
  57.     {
  58.         free(head);
  59.         head = tail = NULL;
  60.     }
  61.     else if(strcmp(head->barang,hapus) == 0)
  62.     {
  63.         curr = head;
  64.         head = head->next;
  65.         free(curr);
  66.         head->prev = NULL;
  67.     }
  68.     else if(strcmp(tail->barang,hapus) == 0)
  69.     {
  70.         curr = tail;
  71.         tail = tail->prev;
  72.         free(curr);
  73.         tail->next =NULL;
  74.     }
  75.     else
  76.     {
  77.         curr = head;
  78.         while(curr != NULL && strcmp(curr->barang,hapus) != 0) // ke next kalo ga ketemu
  79.         {
  80.             curr = curr->next;
  81.         }
  82.         if(curr == NULL)
  83.         {
  84.             printf("There is no item with name ""%s"" entered!\n", hapus);
  85.         }
  86.         else
  87.         {
  88.             curr->next->prev = curr->prev;
  89.             curr->prev->next = curr->next;
  90.             free(curr);
  91.         }
  92.     }
  93.  
  94. }
  95.  
  96. void edit(const char *editbarang , int editqty)
  97. {
  98.    struct node *temp = head;
  99.       while(temp != NULL && strcmp(temp->barang,editbarang)!=0)
  100.       {
  101.           temp = temp->next;
  102.       }
  103.       if(temp != NULL)
  104.       {
  105.         temp->quantity = editqty;
  106.       }
  107.       else
  108.       {
  109.         printf("There is no item with name ""%s""to be edited!\n", editbarang);
  110.       }
  111. }
  112.  
  113. void print()
  114. {
  115.     int i = 1;
  116.     curr = head;
  117.     printf("These are your item list: \n");
  118.     while(curr != NULL)
  119.     {
  120.         printf("%d. %s %d\n",,curr->barang, curr->quantity);
  121.         curr = curr->next;
  122.         i++;
  123.     }
  124.     printf("\n");
  125. }
  126.  
  127. void popsemua()
  128. {
  129.         while(head != NULL) //looping sampai ketemu tail
  130.         {
  131.             temp = head;
  132.             head = head->next;
  133.             free(temp);
  134.         }
  135. }
  136.  
  137.  
  138. int main()
  139. {
  140.     int input = 0;
  141.     int qty = 0;
  142.     int count = 0;
  143.     int total = 0;
  144.     char nama[101];
  145.     printf("Welcome to the Item Application!\n");
  146.    
  147.     do{
  148.         printf("These are the menu lists: \n");
  149.         printf("1. Add item\n");
  150.         printf("2. Edit your item quantity\n");
  151.         printf("3. Remove item\n");
  152.         printf("4. Checkout item(s)\n");
  153.         printf("5. Exit\n");
  154.         printf("Choose menu: ");
  155.         scanf("%d", &input); getchar();
  156.        
  157.         if (input==1)
  158.         {
  159.             do
  160.             {
  161.                 printf("Enter item name [1-100]: ");
  162.                 scanf("%[^\n]", nama); getchar();
  163.             }
  164.             while (strlen(nama)<1 || strlen(nama)>100);
  165.            
  166.             do
  167.             {
  168.                 printf("Enter Quantity of your item [1-10]: ");
  169.                 scanf("%d", &qty); getchar();
  170.             } while (qty<1 || qty>10);
  171.            
  172.             push(nama,qty);
  173.             printf("\n");
  174.         }
  175.         else if (input==2)
  176.         {
  177.             if(head == NULL)
  178.             {
  179.                 printf("What are you going to edit if your list is empty???\n");
  180.             }
  181.             else
  182.             {
  183.                 printf("Input item name to be edited: ");
  184.                 scanf("%[^\n]", &nama); getchar();
  185.                 printf("Input the quantity to be changed: ");
  186.                 scanf("%d", &qty); getchar();
  187.                 edit(nama,qty);
  188.                 printf("Item Successfully edited!\n");
  189.                 printf("\n");
  190.             }
  191.         }
  192.         else if (input==3)
  193.         {
  194.             printf("Which item you want to remove?\n");
  195.             scanf("%[^\n]", &nama); getchar();
  196.             pop(nama);
  197.             printf("Item successfully removed!\n");
  198.             printf("\n");
  199.         }
  200.         else if (input==4)
  201.         {
  202.             total = 0;
  203.             count = 1;
  204.             print();
  205.             printf("\n");
  206.            
  207.             curr = head;
  208.             while(curr != NULL) //currnya ada isi
  209.             {  
  210.                 printf("| No |      Name        | Quantity | Price | Total |\n");
  211.                 printf("  %d.       %s           %d     %d  %d\n", count, curr->barang, curr->quantity, curr->harga, curr->quantity * curr->harga);
  212.                 total = total + (curr->quantity * curr->harga);
  213.                 curr = curr->next;
  214.                 count++;
  215.             }
  216.             printf("\n");
  217.             printf("Subtotal: %d\n", total);
  218.             printf("Since kindness is free, these are all free!");
  219.             printf("\n");
  220.             popsemua();
  221.         }
  222.         else if (input==5)
  223.         {
  224.             printf("You are exitting this item application!\n");
  225.             printf("Goodbye, See you next time!\n");
  226.             popsemua();
  227.             break;
  228.         }
  229.     }while(input != 5);
  230.     return 0;
  231. }

Nah diatas merupakan koding untuk membuat aplikasi ini. Terima kasih sudah mampir kesini!

Komentar

Postingan populer dari blog ini

How do you get to the top of Mt Coronet in Pokemon Diamond?

Note: If you are going to try to catch Dialga or Palkia (diamond or pearl) make sure you have a bunch of Ultra and Dusk balls!! First, Fly to Hearthome city and head west, Route 208. Enter the cave and once inside, you should go north.When you first enter the cave, you need to head west to the opposite side. Once you reach the west entrance, head north and surf across the pond. Use rock climb to reach the stairs up. In the next room: Go- North, West, South, Upstairs, North, West over bridge, down stairs, up north, stairs,up stairs, cross bridge, down stairs, down stairs, upstairs and in cave door. In the Next room: Up stairs, up stairs Again Next room: up stairs, north, west, south, Out. Now you are outside. Follow the path and use rock climb when you get there. Now don't use rock climb again, instead, head west and through the grass until you reach another cave. Inside, use rock climb, follow the path, down the stairs then east, you're out of the cave. ...

Binary Search Tree

Pengertian Binary Search Tree Binary search tree adalah sebuah metode dari data structure yang mempunyai ciri sebagai berikut: Bagian kiri dari subtree adalah nodus yang mempunyai nilai yang lebih kecil Bagian kanan dari subtree adalah nodus yang mempunyai nilai yang lebih besar Bagian kiri dan kanan dari subtree harus berupa binary search tree juga Mencari Sebuah Angka (searching) Ilustrasi Binary Search Tree dari geeksforgeeks Bisa kita lihat dari contoh diatas, bagian kiri dari binary search tree merupakan nilai yang kecil sedangkan bagian kanannya adalah nilai-nilai yang besar. Kita bisa mengambil contoh angka 7. Ketika angka 7 ingin dicari pada binary search tree diatas, maka dia akan mengecek. Apakah 8 lebih kecil atau besar dari 7? Karena lebih kecil, maka 7 akan dicari di bagian kiri. Kemudian, akan dicek lagi. Apakah 7 lebih kecil daripada 3? Jawabannya adalah tidak, sehingga 7 dicari dibagian kanan. Lalu ketika sampai di 6, karena 7 lebih besar...

Heaps & tries

Heap Minggu lalu kita sudah membahas AVL Tree dan sekarang kita akan membahas Heap & Tries. Heap adalah sebuah struktur data dengan konsep binary tree. Heap mempunyai dua jenis yaitu: Min - heap Max - heap Min - Max heap Heap dapat diimplementasikan dengan linked list, namun akan lebih gampang jika menggunakan array. Agar lebih jelas, lebih baik kita lihat gambar berikut ini. Heap dari geeksforgeeks Min - Heap Pada min - heap terdapat aturan agar heap itu dapat dibuat. Aturan tersebut adalah angka atau huruf yang ada di root harus paling kecil daripada anak - anaknya. Hal ini juga berlaku pada subtree lainnya secara rekursif. Jadi, yang diatas harus lebih kecil daripada bawahnya. Insertion Berbeda dengan BST yang mempunyai aturan kiri harus yang kecil dan kanan yang besar, min - heap hanya menghiraukan atasnya. Pada kasus min - heap berarti atasnya harus lebih kecil daripada bawahnya. Agar kita mengerti cara menginsertnya, lihat gambar berikut: Kita ak...