Sabtu, 07 November 2015

SHARE MEMORY :: CARA MUDAH REKAP TRANSAKSI JUAL BELI



            Hello guys, long time no see. Btw, aku lagi ada bahan nih buat di-share ke kalian... tentang ilmu lagi sih, hehehe, bermanfaat kok suerr, terutama buat yang pengen menjajaki dunia bisnis. Kan zaman sekarang, orang-orang pada "wegah" (read:ogah) keluar, apalagi kalo panas terik di jalanan.. Pasti males kan?? Nah, karena ini nih olshop atau online shopping lagi marak sekarang. Banyak orang memilih untuk beli melalui olshop karena nggak ribet, ngga perlu keluar panas-panasan, pilihannya banyak dan juga bisa diakses kapanpun, dimanapun....asalkan ada internet sih hehe. Nah dengan type orang-orang yang begini nih, bisa disimpulin kalo olshop itu bakal ngelakuin banyak transaksi jual beli, kan? Setuju gak? Dan kalian yang pengen mulai bisnis jual beli ini pasti mikir juga kan gimana cara rekap transaksi kalian? Mau make cara manual(read: nulis di buku gede) atau pake excel??? Yah, iya kalo transaksinya cuma dikit. lah kalo banyak gimana? Gak pusing tuh? Ngerekap dan nge-update stock barang? Pusing kan pasti....

               Nah, saran yang pas nih ya kalian bikin aja aplikasi yang bisa ngerekap semua transaksi jual beli kalian dan meng-update stock barang kalian. Eh, emang bisa? Gimana cara bikinnya? Bisa dong, nah ini nih yang mau aku share, yaitu tentang "Share Memory" pada Linux. Apasih itu? Ya share memory. Lah gunanya? Dari namanya aja share memory, berarti file/aplikasi itu bisa kita share ke orang lain dan orang lain itu bisa ngakses file/aplikasi kita. Jadi intinya, bisa diakses oleh banyak user.

               Oke, lanjut ke contoh langsung deh ya.. Misalkan Ani punya Toko bernama Ani's Compt. Di toko ini tersedia komponen komputer yaitu RAM, Harddisk, Motherboard, PSU, VGA, dan Processor. Lalu, Ani ingin membuat aplikasi yang dapat mempermudah transaksinya dan meng-update stock barang(baik karena sudah laku terjual/ditambah stocknya). 

               Nah, kita bisa membuat 2 aplikasi, untuk penjual dan pembeli. Oh ya, langkah-langkahnya:
1.  Pertama, buka terminal linux kalian. Buka 2 terminal ya, yang satu untuk membuat program pedagang dan yang kedua untuk pembeli. 
buka 2 terminal seperti ini. Masuklah ke folder yang kamu inginkan dengan perintah cd(spasi)namafolder

2.    Bikinlah 2 program, yaitu program pedagang.c dan pembeli.c , dan simpan di folder yang kalian inginkan.
Perintah yang digunakan: "gedit pedagang.c" dan "gedit pembeli.c"
keterangan: perintah gedit itu untuk mengedit program pada text editor, apabila kamu ingin mengedit program pada terminal maka gunakan perintah nano.

ini hasilnya ya--

ini ngedit program di text editor

3.    Isilah program kalian:
- isi program pedagang.c

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

   int shmid, *p, *q, *r, *s, *t, *u;
   long long int jumlah;
   key_t key;

int pilih()
{
    fprintf(stdout, "Tambah stock barang lagi? (Y/N) ");
    char pilihan;
    pilihan=getchar();
        if(pilihan=='n' || pilihan=='N') return 0;
        else if(pilihan=='y' || pilihan=='Y') return 1;
        else
        {
            fprintf(stdout, "Pilihan tidak sesuai.\n");
         system("clear");
            pilih();
        }
}
/*keterangan: fungsi ini berguna untuk menawarkan apakah ingin menambah stock barang lagi atau tidak. */

int nambah_stock()
{
   char pil[100];
   while(1)
   {
     system("clear");
        fprintf(stdout, "---------LIST BARANG---------");
     fprintf(stdout, "\n1. RAM\n2. harddisk\n3. motherboard\n4. PSU\n5. VGA\n6. Processor\n7. Batal tambah stock\n Pilih: ");

       scanf("%s", pil);
       if( strcmp(pil,"1")!=0 && strcmp(pil,"2")!=0 && strcmp(pil,"3")!=0 && strcmp(pil,"4")!=0 && strcmp(pil,"5")!=0 && strcmp(pil,"6")!=0 && strcmp(pil,"7")!=0 )
       {
         system("clear");
        fprintf(stdout, "Perintah yang anda masukkan salah\n\n");
        continue;
       }
              
     if(strcmp(pil,"7")==0)
     {
                 system("clear");
                 break;
     }

        else  fprintf(stdout, "Jumlah yang ingin ditambah\t: ");
             scanf("%lld", &jumlah);

             if(strcmp(pil,"1")==0)                   (*p)+=jumlah;
             else if(strcmp(pil,"2")==0)           (*q)+=jumlah;
             else if(strcmp(pil,"3")==0)           (*r)+=jumlah;
             else if(strcmp(pil,"4")==0)           (*s)+=jumlah;
             else if(strcmp(pil,"5")==0)           (*t)+=jumlah;
          else if(strcmp(pil,"6")==0)   (*u)+=jumlah;
             getchar();

                if(!pilih())
                {
                 system("clear");
                    break;
                }
     }
}
/* keterangan: fungsi ini untuk meng-update jumlah barang apabila terjadi perubahan. */

int main(int argc, char **argv)
{
  
   char opsi[100];
    key = 1234;
    shmid = shmget(key, sizeof(int), IPC_CREAT | 0666);  
    p = shmat(shmid, NULL, 0);          
    key = 2345;
    shmid = shmget(key, sizeof(int), IPC_CREAT | 0666);
    q = shmat(shmid, NULL, 0);
    key = 3456;
    shmid = shmget(key, sizeof(int), IPC_CREAT | 0666);
    r = shmat(shmid, NULL, 0);
    key = 4567;
    shmid = shmget(key, sizeof(int), IPC_CREAT | 0666);
    s = shmat(shmid, NULL, 0);
    key = 5678;
    shmid = shmget(key, sizeof(int), IPC_CREAT | 0666);  
    t = shmat(shmid, NULL, 0);          
    key = 6789;
    shmid = shmget(key, sizeof(int), IPC_CREAT | 0666);  
    u = shmat(shmid, NULL, 0);
  /*keterangan: diatas itu adalah inisialisasi untuk share memory. Jadi, key itu harus sama pada program pedagang.c dan pembeli.c karena key adalah kode penghubung pedagang dan pembeli. Perintah 0666 yaitu program bisa diread and write. */

    *p=0; *q=0; *r=0; *s=0; *t=0; *u=0;      //inisialisasi

    while(1)
    {
    
        fprintf(stdout, "-----------LIST MENU-------------\n");
     fprintf(stdout, "1. Lihat Stok Barang\n2.Tambah Stok Barang\n3. Keluar\n");

        scanf("%s", opsi);
        if(strcmp(opsi,"1")==0)
        {
                 system("clear");
                 fprintf(stdout, "------------RINCIAN STOCK BARANG--------\n");
fprintf(stdout, "1. RAM\t\t= %d\n2. harddisk\t= %d\n3. motherboard\t= %d\n4. PSU\t\t= %d\n5. VGA\t\t= %d\n6. Processor\t= %d\n\n", *p, *q, *r, *s, *t, *u);
        }
        else if(strcmp(opsi,"2")==0)
        {
         system("clear");
                     nambah_stock();
     }

        else if(strcmp(opsi,"3")==0)
     {
         system("clear");
         return 0;
     }
        else
        {
         system("clear");
            fprintf(stdout, "Maaf perintah yang kamu masukkan tidak sesuai\n");
            continue;
        }
    }
    return 0;
}


- isi program pembeli.c

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

    int shmid, *p, *q, *r, *s, *t, *u, jumlah;
    key_t key;

int opsi()
{
    fprintf(stdout, "Beli barang lagi? (Y/N) ");
    int pilihan;
    pilihan=getchar();
        if(pilihan=='n' || pilihan=='N') return 0;
        else if(pilihan=='y' || pilihan=='Y') return 1;
        else
        {
            fprintf(stdout, "Pilihan tidak sesuai\n\n");
                 system("clear");
            opsi();
        }
}
/*keterangan: fungsi ini berguna untuk menawarkan apakah ingin membeli barang lagi atau tidak. */

int beli_barang()
{
     char pilih[100];
     while(1)
            {
                fprintf(stdout, "---------LIST BARANG-----------\n");
                 fprintf(stdout, "1. RAM\n2. harddisk\n3. motherboard\n4. PSU\n5. VGA\n6. Processor\n7. Batal membeli\n Pilih: ");
                scanf("%s", pilih);

                if(strcmp(pilih,"1")!=0 && strcmp(pilih,"2")!=0 && strcmp(pilih,"3")!=0 && strcmp(pilih,"4")!=0 && strcmp(pilih,"5")!=0 && strcmp(pilih,"6")!=0 && strcmp(pilih,"7")!=0)
                {
                 system("clear");
                    fprintf(stdout, "Perintah Masukkan Salah\n\n");
                    continue;
                }              
                 if(strcmp(pilih,"7")==0){
                 system("clear");
                 break;
                 }
                else fprintf(stdout, "Jumlah\t\t: ");
                scanf("%d", &jumlah);

                if(strcmp(pilih,"1")==0)
                {
                    (*p)-=jumlah;
                    if(*p<0)
                    {
                        system("zenity --error --title='Out of Stock' --text='MAAF Stock tidak tersedia atau jumlah barang tidak mencukupi'");
                        (*p)+=jumlah;
                    }
                }
                else if(strcmp(pilih,"2")==0)
                {
                    (*q)-=jumlah;
                    if(*q<0)
                    {
                        system("zenity --error --title='Out of Stock' --text='MAAF Stock tidak tersedia atau jumlah barang tidak mencukupi'");
                        (*q)+=jumlah;
                    }
                }
                else if(strcmp(pilih,"3")==0)
                {
                    (*r)-=jumlah;
                    if(*r<0)
                    {
                        system("zenity --error --title='Out of Stock' --text='MAAF Stock tidak tersedia atau jumlah barang tidak mencukupi'");
                        (*r)+=jumlah;
                    }
                }
                else if(strcmp(pilih,"4")==0)
                {
                    (*s)-=jumlah;
                    if(*s<0)
                    {
                        system("zenity --error --title='Out of Stock' --text='MAAF Stock tidak tersedia atau jumlah barang tidak mencukupi'");
                        (*s)+=jumlah;
                    }
                }
                 else if(strcmp(pilih,"5")==0)
                {
                    (*t)-=jumlah;
                    if(*t<0)
                    {
                        system("zenity --error --title='Out of Stock' --text='MAAF Stock tidak tersedia atau jumlah barang tidak mencukupi'");
                        (*t)+=jumlah;
                    }
                }
                 else if(strcmp(pilih,"6")==0)
                {
                    (*u)-=jumlah;
                    if(*u<0)
                    {
                        system("zenity --error --title='Out of Stock' --text='MAAF tidak tersedia atau jumlah barang tidak mencukupi'");
                        (*u)+=jumlah;
                    }
                }
                getchar();
                if(!opsi())
                {
                    system("clear");
                    break;
                }
            }
}
/* keterangan: fungsi ini untuk meng-update jumlah barang apabila terjadi perubahan. */


int main()
{
     char pilih[100];

    key = 1234;
    shmid = shmget(key, sizeof(int), IPC_CREAT | 0666);  
    p = shmat(shmid, NULL, 0);          
    key = 2345;
    shmid = shmget(key, sizeof(int), IPC_CREAT | 0666);
    q = shmat(shmid, NULL, 0);
    key = 3456;
    shmid = shmget(key, sizeof(int), IPC_CREAT | 0666);
    r = shmat(shmid, NULL, 0);
    key = 4567;
    shmid = shmget(key, sizeof(int), IPC_CREAT | 0666);
    s = shmat(shmid, NULL, 0);
    key = 5678;
    shmid = shmget(key, sizeof(int), IPC_CREAT | 0666);  
    t = shmat(shmid, NULL, 0);          
    key = 6789;
    shmid = shmget(key, sizeof(int), IPC_CREAT | 0666);  
    u = shmat(shmid, NULL, 0);

    while(1)
    {
    
        fprintf(stdout, "---------LIST MENU-----------\n");
     fprintf(stdout, "1. Cek Stok Barang\n2. Beli Barang\n3. Exit\n Pilih: ");
        scanf("%s", pilih);
        if(strcmp(pilih,"1")==0)
     {
                 system("clear");
                 fprintf(stdout, "--------------STOCK BARANG---\nRAM\t\t= %d\nharddisk\t= %d\nmotherboard\t= %d\nPSU\t\t= %d\nVGA\t\t= %d\nProcessor\t= %d\n\n", *p, *q, *r, *s, *t, *u);
     }       
     else if(strcmp(pilih,"2")==0)
        {
     system("clear");
            beli_barang();
        }
        else if(strcmp(pilih,"3")==0){
                 system("clear");
                 return 0;
     }
        else
        {
         system("clear");
            fprintf(stdout, "Perintah yang anda pilih tidak sesuai\n\n");
            continue;
        }
    }
    return 0;
}


4.    Lalu compile dan jalankan program yang telah kalian buat di 2 terminal yang kalian buka tadi.
Perintah yang digunakan:  "gcc -o pedagang pedagang.c" dan "gcc -o pembeli pembeli.c"

output menu pada kedua program


5.    Hasilnya adalah sebagai berikut :
      Terdapat 3 menu utama di program pedagang.c yaitu Lihat Stock Barang, Tambah Stock Barang, dan Exit. Pada program pembeli.c, juga terdapat 3 menu utama yaitu Lihat Stock Barang, Beli Barang, dan exit. Nah, diprogram pedagang ini, kamu bisa menambah stock barang dan nantinya update-an tadi akan berubah secara langsung. Kamu bisa ngechecknya di lihat stock barang. Update-an tadi juga akan terjaadi di program pembeli.c karena kedua program itu menggunakan share memory. Dan apabila ada pembeli yang membeli, maka secara langsung jumlah stock barang yang dibeli tadi akan berkurang. dan apabila pembeli membeli barang yang stocknya kosong atau kurang dari jumlah stock, maka akan peringatan yang muncul dilayar.

- keluaran/hasil eksekusi program pedagang.c
  
tampilan lihat stock pada keadaan awal

tampilan ketika menambah stock barang

ini adalah tawaran ingin menambah stock barang lagi atau tidak.


- keluaran/hasil eksekusi program pembeli.c
ini tampilan lihat stock barang

ini tampilan ketika membeli barang

ini tampilan yang muncul ketika stock tidak tersedia/tidak mencukupi

dan ini hasil lihat stock barang pada kedua program. Dan hasilnya sama.

Jika ingin exit dari program, pilih menu 3.


Nah, bemanfaat bukan? Yuuuuk monggo dicoba bagi yang mau belajar :3
Selamat mencoba , sampai jumpa di postingan selanjutnya. Tunggu yah!

Tidak ada komentar:

Posting Komentar