Dreams Market

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

struct data{
int hargabaru;
char nama[30];
int harga;
data *next,*prev;
}*head,*tail,*current;

void pushMid(int hargabaru,char nama[],int harga)
{
current=(data*)malloc(sizeof(struct data));
current->hargabaru=hargabaru;
strcpy(current->nama,nama);
current->harga = harga;

current->next=current->prev=NULL;

if(!head)
{
head=tail=current;
}
else
{
if(strcmp(head->nama,nama)>0) 
{
current->next=head;
head->prev=current;
head=current;
}
else if(strcmp(tail->nama,nama)<0) 
{
current->prev=tail;
tail->next=current;
tail=current;
}
else 
{
data *temp=head;

while(strcmp(temp->nama,nama)<0)
{
temp=temp->next;
}
current->prev=temp->prev;
current->next=temp;
temp->prev->next=current;
temp->prev=current;
}
}
}

void view()
{
    int i = 0;
    int totalHarga = 0;
current=head;
printf("Struk Belanja\n");
printf("=============\n\n");
printf("============================================================================\n");
printf("| %-5s | %-20s | %10s | %10s | %10s |\n","No.","Nama Barang","Jumlah","Harga(Satuan)","Harga(Total)");
    printf("============================================================================\n");
if(head==NULL)
{
printf("| No Data                                                                  |\n");
printf("============================================================================\n");
}
else
{
while(current!=NULL)
{
printf("| %3d   | %-20s | %10d | %10d    | %10d   |\n",i+1,current->nama,current->hargabaru,current->harga,(current->harga * current->hargabaru));
totalHarga += current->harga * current->hargabaru;
        current=current->next;
i = i +1;
}
printf("============================================================================\n");
}
printf("|                     TOTAL YANG HARUS DIBAYAR              | %10d   |\n",totalHarga);
printf("============================================================================\n");
printf("\t\t\tKINDNESS IS FREE\n");

getchar();
}

void popMid(char nama[])
{
current=head;
if(head==tail)
{
head=tail=NULL;
free(current);
}
else{
if(strcmp(nama,head->nama)==0)
{
head=head->next;
head->prev=NULL;
free(current);
}
else if(strcmp(nama,tail->nama)==0)
{
current=tail;
tail=tail->prev;
tail->next=NULL;
free(current);
}
else
{
while(strcmp(current->nama,nama)!=0)
{
current=current->next;
}
current->prev->next=current->next;
current->next->prev=current->prev;
free(current);
}
}
}

int edit(char nama[],int check)
{
    current = (data*)malloc(sizeof(struct data));
    int flag; 
    
    current = head;   
    if(current == NULL)  
    {  
        printf("\nEmpty Data\n");  
        getchar();
    }  
    else  
    {   
        while (current!=NULL)  
        {  
            if(strcmp(current->nama,nama)==0)  
            {  
                flag=0;  
                break;  
            }   
            else  
            {  
                flag=1;  
            }   
            current = current->next;  
        }  
    }
    return flag;
}

void menu()
{
    printf("\n\nDreammers Market\n\n");
printf("1.Add Item\n");
printf("2.Edit hargabaru\n");
printf("3.Delete & Update Item\n");
printf("4.CheckOut\n");
printf("5. Exit\n\n");
printf("Masukkan Pilihan Anda : ");
}

int main()
{
int pilihan;
int hargabaru;
int jumlah;
char nama[30];
char namaLama[30];
int batasBawah = 1000;
int batasAtas  = 20000;
int harga;

do{
system("cls");
menu();

scanf("%d",&pilihan);fflush(stdin);
switch(pilihan)
{
case 1:
    printf("\n");
    do{
        nama[0] = '\0';
        printf("Masukkan Nama Produk: ");
        scanf("%[^\n]",&nama);fflush(stdin);
                }while(nama[0] == '\0' || strlen(nama) > 30);
   
    do{
        printf("Masukkan Jumlah Produk: ");
        scanf("%d",&hargabaru);fflush(stdin);
                }while(hargabaru < 1 );
                
                srand(time(NULL));
                harga = (rand() % (batasAtas - batasBawah + 1)) + batasBawah;
    pushMid(hargabaru,nama,harga);
break;
case 2:
    current = head;
    if(current==NULL)
    {
         printf("\nEmpty Data\n");  
                    getchar();
                }
                else
                {
                    do{
                        printf("Masukkan Nama Produk yang ingin Anda Ganti Jumlahnya: ");
            namaLama[0] = '\0';
            scanf("%[^\n]",&namaLama);  fflush(stdin);
                    }while(namaLama[0] == '\0' || strlen(namaLama) > 30);  
                    
                    int check = edit(namaLama,0);
                    if(check==0)
                    {
                        do{
                printf("Masukkan Jumlah Produk: ");
                scanf("%d",&hargabaru);fflush(stdin);
                        }while(hargabaru < 1 );
                        current->hargabaru = hargabaru;
                    }
                    else
                    {
                        printf("Produk yang ingin diganti Jumlahnya tidak ditemukan\n");
                        getchar();
                    }
                }
break;
case 3:
    current = head;
    if(current==NULL)
    {
         printf("\nEmpty Data\n");  
                    getchar();
                }
                else
                {
                    do{
                        printf("Masukkan Nama Produk yang ingin Anda Hapus: ");
            namaLama[0] = '\0';
            scanf("%[^\n]",&namaLama);  fflush(stdin);
                    }while(namaLama[0] == '\0' || strlen(namaLama) > 30); 
                    
                    int check = edit(namaLama,0);
                    
                    if(check==0)
                    {
                        printf("Masukkan Jumlah Produk yang ingin ditambahkan [ 0 jika tidak ingin menambah]: ");
            scanf("%d",&jumlah);fflush(stdin);
                        if(jumlah==0)
                        {
                            popMid(namaLama);
                            return main();
                        }
                        else
                        {
                            popMid(namaLama);
                            for(int k=0;k<jumlah;k++)
                            {
                                do{
                                    printf("\n");
                        nama[0] = '\0';
                        printf("Masukkan Nama Produk: ");
                        scanf("%[^\n]",&nama);fflush(stdin);
                                }while(nama[0] == '\0' || strlen(nama) > 30);
                     
                    do{
                        printf("Masukkan Jumlah Produk: ");
                        scanf("%d",&hargabaru);fflush(stdin);
                                }while(hargabaru < 1 );
                                srand(time(NULL));
                                harga = (rand() % (batasAtas - batasBawah + 1)) + batasBawah;
                 pushMid(hargabaru,nama,harga);
                            }
                        }
                    }
                    else
                    {
                        printf("Produk yang ingin diganti Jumlahnya tidak ditemukan\n");
                        getchar();
                    }
                }
                break;
                case 4:
                    printf("\n");
                    view();
                break;
break;
}
}while(pilihan !=5);

}

Komentar

Postingan populer dari blog ini

Heap and Tries