Langsung ke konten utama

Source code

Source Code
Dreammers Market

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct node{
    char barang[101];
    int qty;
    int value;
    struct node *next, *prev;
}*head = NULL , *tail = NULL , *curr;

void push(const char *s , int x)
{
    curr = (struct node*)malloc(sizeof(struct node));
    strcpy(curr->barang,s);
    curr->qty = x;
    curr->value = rand()%11;
    curr->next = curr->prev = NULL;
   
    if(head == NULL)
    {
        head = tail = curr;
    }
    else if(x < head->qty || strcmp(s,head->barang) < 0)
    {
        curr->next = head;
        head->prev  = curr;
        head = curr;
    }
    else if(x > tail->qty || strcmp(s,tail->barang) > 0)
    {
        tail->next = curr;
        curr->prev = tail;
        tail = curr;
    }
    else
    {
        struct node *temp = head;
        while(temp->next->qty < x)
        {
            temp = temp->next;
        }
        curr->next = temp->next;
        temp->next->prev = curr;
        temp->next = curr;
        curr->prev = temp;
    }
}

void pop(const char *s)
{
    if(head == NULL)
    {
        puts("Pop failed! No Data found!");
    }
    else if(head == tail)
    {
        free(head);
        head = tail = NULL;
    }
    else if(strcmp(head->barang,s) == 0)
    {
        curr = head;
        head = head->next;
        free(curr);
        head->prev = NULL;
    }
    else if(strcmp(tail->barang,s) == 0)
    {
        curr = tail;
        tail = tail->prev;
        free(curr);
        tail->next =NULL;
    }
    else
    {
        curr = head;
        while(curr != NULL && strcmp(curr->barang,s) != 0)
        {
            curr = curr->next;
        }
        if(curr == NULL)
        {
            printf("No item found!\n");
        }
        else
        {
            curr->next->prev = curr->prev;
            curr->prev->next = curr->next;
            free(curr);
            printf("Remove successful!\n");
            getchar();
        }
    }
}
void Edit(const char *s , int editqty)
{
   struct node *temp = head;
      while(temp != NULL && strcmp(temp->barang,s)!=0)
      {
          temp = temp->next;
      }
      if(temp != NULL)
      {
          temp->qty = editqty;
      }
}
void popall()
{
        while(head != NULL)
        {
            struct node *temp = head;
            head = head->next;
            free(temp);
        }
}
void cetak()
{
    int index = 1;
    curr = head;
    while(curr != NULL)
    {
        printf("%d. %s %d\n",index,curr->barang,curr->qty);
        curr = curr->next;
        index = index + 1;
    }
    printf("\n");
}

void checkout()
{
    int i=1;
    int x = 0;
    cetak();
 
    curr = head;
    while(curr != NULL)
    {
        printf("%d. %s %d x %d = %d\n",i,curr->barang,curr->qty,curr->value,curr->qty*curr->value);
        x += curr->qty * curr->value;
        curr = curr->next;
        i++;
    }
    printf("Total : %d\n",x);
    printf("Kindness is free\n");
    popall(); 
}

int main()
{
    char item[101];
    int qty;
    char remove[101];
    char edit[101];
    int editqty;
    int choose = 0;
    do{
        printf("1. Add item\n");
        printf("2. Edit item\n");
        printf("3. Remove item\n");
        printf("4. Checkout\n");
        printf("5. Exit\n");
        printf("Please choose : ");
        scanf("%d",&choose);
       
        switch (choose) {
            case 1:
                printf("Input item name [1-100] : ");
                getchar();
                scanf("%[^\n]", item);
                printf("Input qty [1-10] : ");
                scanf("%d",&qty);
                printf("\n");
                push(item, qty);
                getchar();
                break;
            case 2:
                if(head == NULL)
                {
                    printf("Item list is empty!\n\n");
                }
                else
                {
                    printf("Input item you want to edit : ");
                    getchar();
                    scanf("%[^\n]",edit);
                    printf("Input qty you want to edit : ");
                    scanf("%d",&editqty);
                    printf("\n");
                    Edit(edit,editqty);
                    getchar();
                }
                break;
            case 3:
                if(head == NULL)
                {
                    printf("Item list is empty!\n\n");
                }
                else{
                    printf("Input item name [1-100] : ");
                    getchar();
                    scanf("%[^\n]",remove);
                   
                    struct node *temp = head;
                    while(temp!= NULL && strcmp(temp->barang,remove) != 0)
                    {
                        temp = temp->next;
                    }
                    if(temp == NULL)
                    {
                        printf("No item found!\n\n");
                    }
                    else
                    {
                        pop(remove);
                        printf("Remove succesful!\n\n");
                    }
                }
                break;
            case 4:
                checkout();
                break;
            case 5:
                popall();
                break;
               
            default:
                break;
        }
    }while(choose != 5 && choose != 4);
}

Komentar