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!