SISTEM
BERKAS
TENTANG ORGANISASI BERKAS INDEX SEQUENTIAL
DI SUSUN OLEH :
KELOMPOK V
AHMAD
PURI : 0904411314
SAAD : 0904411102
SUPRIN : 0904411307
PADRIATI
GALLO : 1104411053
ARYANTI : 0904411368
Program
Studi Tehnik Informatika Fakultas Tehnik Computer
Universitas Cokroaminoto Palopo
Tahun
Akademik2012/2013
KATA PENGANTAR
Assalamu’alaikum Wr.Wb
Puji dan syukur kami panjatkan
atas kehadirat Allah Swt, Shalawat
serta salam tidak lupa kami ucapkan untuk junjungan kita Nabi Besar Muhammad
SAW. Kami bersyukur kepada Allah SWT, karena atas rahmat dan karunianyalah sehingga kami
dapat menyelesaikan Tugas makalah tentang Mata Kuliah “Sistem
Berkas”.Walaupun
makalah yang kami susun masih jauh dari kesempurnaan.Mudah–mudahan makalah ini
bisa memberi masukan bagi banyak orang khususnya bagi orang yang mempelajari Sistem Berkas untuk mempermudah dalam membuat sebuah sistem yang baik.Sebelumnya kami
mohon maaf bila dalam makalah ini terdapat kesalahan pada penulisan, karena kami
masih dalam tahap belajar,apabila ada kritik dan saran yang
bersifat membangun terhadap makalah ini, kami sangat berterima kasih.Demikian
makalah ini kami susun.Semoga dapat berguna untuk kita semua. Amin
Wassalamu’alaikum Wr.Wb
Palopo, 17 Oktober 2012
Penyusun
ii
Daftar
Isi
Sampul....…………………………………………….............………….................... i
Kata Pengantar...…………………………………………..…………..….....…….... ii
Daftar Isi...................................................................................................................... 1
BAB 1 : PENDAHULUAN....…………………………...........…………….......…..2
1.1 Latar Belakang......…………………………………………............................... 2
1.2
Rumusan Masalah...…....…………………………............................................ 2
1.3Tujuan................................................................................................................... 2
1.4 Manfaat................................................................................................................2
BAB
II : PEMBAHASAN....……………………….....…………………............. 3
2.1 Pengertian Berkas Indeks
Sequential.……….…….……..................................... 3
2.2 Implementasi Organisasi Berkas Indeks Sequential............................................ 6
Ø Blok Indeks Dan Data...................................................................................
6
BAB III :PENUTUP.…………......……………………....……....…................... 16
3.1 Kesimpulan.…...……………………………….……........................................ 16
3.2 Saran........………………………………………............................................... 16
Daftar Pustaka...…………………….………………………………….….…..........17
Lampiran.............................................................................................................
18
Ø Biodata Anggota Kelompok.......................................................................
18
1
BAB I
PENDAHULUAN
1.1 LATAR
BELAKANG
Komputer dapat menyimpan
informasi dalam berbagai bentuk fisik tempat penyimpanan seperti pita magnetik,
disk magnetic, disk optical.Sistem operasi memberikan pandangan logis yang
sejenis dari tempat penyimpanan informasi. Bentuk penyimpanan abstraksi dari
unit penyimpan informasi dalam bentuk fisik adalah file. File–file dipetakan
oleh sistem operasi ke dalam peralatan fisik.
Sistem berkas merupakan mekanisme
penyimpanan on-line serta untuk akses, baikdata maupun program yang berada
dalam system operasi. Terdapat dua bagian pentingdalam system berkas, yaitu :
·
Kumpulan
berkas, sebagai tempat penyimpanan data, serta
·
Struktur
direktori, yang mengatur dan menyediakan informasi mengenai seluruh berkas
dalam sistem.
1.2
RUMUSAN MASALAH
1. Apakah pengertian organisasi
berkas index sequential ?
2. Apa Implementasi
organisasi berkas indeks sequential ?
1.3
TUJUAN
1. Dapat menjelaskan organisasi
berkas index sequential
2. Dapat memahami implementasi
organisasi berkas index sequential
1.4
MANFAAT
1. Untuk mengetahui apa manfaat
organisasi berkas index sequential
2. Untuk mengetahui keuntungan dari Sequential File
2
BAB II
PEMBAHASAN
2.1 Pengertian Berkas Indeks
Sequential
Organisasi
berkas indeks sequential adalah Berkas/file yang disusun sedemikian rupa
sehingga dapat diakses secara sequential maupun secara direct (langsung) atau
kombinasi keduanya, direct dan sequential data merupakan segala sesuatu yang
masih dalam bentuk bahan mentah yang akan diproses. Data yang sudah diproses
tersebut dan berguna bagi orang yang menerimanya ini disebut sebagai informasi.
Salah satu cara yang paling
efektif untuk mengorganisasi kumpulan record-record yang membutuhkan akses
record secara sequential maupun akses record secara individu berdasarkan nilai
key adalah organisasi berkas indeks
sequential.
Jadi berkas indeks
sequential merupakan kombinasi dari berkas sequential dan berkas relatif.
Struktur
Pohon
Sebuah pohon (tree) adalah struktur dari sekumpulan
elemen, dengan salah satu elemennya merupakan akarnya atau root dan sisanya
yang lain merupakan bagian-bagian pohon yang terorganisasi dalam susunan
berhirarki dengan root sebagai puncaknya.
Contoh umum dimana struktur pohon sering ditemukan
adalah pada penyusunan silsilah keluarga, hirarki suatu organisasi, daftar isi
suatu buku dan lain sebagainya.
3
Contoh :
Andi Reni
Anton Yana Mardi Riri
Tedi
Susi Roni Dewi
Dodi Irma
Rudi Nurul
Secara rekursif suatu
struktur pohon dapat didefinisikan sebagai berikut :
Ø Sebuah simpul tunggal adalah
sebuah pohon.
Ø Bila terdapat simpul n, dan
beberapa sub pohon T1, T2, ..., Tk, yang tidak saling berhubungan, yang
masing-masing akarnya adalah n1, n2, ..., nk, dari simpul / sub pohon ini dapat
dibuat sebuah pohon baru dengan n sebagai akar dari simpul-simpul n1, n2, ...,
nk.
n
|
n1
|
n2
|
nk
|
...
|
n
|
n1
|
n2
|
...
|
nk
|
Pohon
Biner
Salah satu tipe pohon yang paling banyak dipelajari adalah pohon
biner.Pohon Biner adalah pohon yang setiap simpulnya memiliki paling banyak dua
buah cabang / anak.
4
(1) (2) (3) (4) (5)
A
|
A
|
B
|
A
|
B
|
A
|
B
|
B
|
A
|
A
|
A
|
A
|
A
|
A
|
Adapun jenis akses yang
diperbolehkan, yaitu :
Ø Akses Sekuensial
Ø Akses Direct
Sedangkan jenis prosesnya
adalah :
Ø Batch
Ø Interactive
Struktur Berkas Indeks
sekuensial
Ø Indeks ® Binary Search Tree
Ø Data ® Sekuensial
INDEX
|
MAMMOTH N/2
|
COW 4
|
BAT 2
|
DOG 5
|
APE 1
|
EEL 6
|
ZEBRA N
|
CAT 3
|
SEQUENTIAL
Position
DATA FILE
|
APE
|
BAT
|
CAT
|
COW
|
DOG
|
EEL
|
1
|
..............
|
ZEBRA
|
2
|
3
|
4
|
5
|
6
|
...
|
N
|
5
Pada gambar tersebut memperlihatkan struktur berkas indeks sequential
dengan sebuah indeks berikut pointer yang menuju ke berkas data sequential.Pada
contoh gambar tersebut, indeksnya disusun berdasarkan binary search
tree.Indeksnya digunakan untuk melayani sebuah permintaan untuk mengakses
sebuah record tertentu, sedangkan berkas data sequential digunakan untuk
mendukung akses sequential terhadap seluruh kumpulan record-record.
2.2
Implementasi Organisasi Berkas Indeks Sequential
Ada 2 pendekatan dasar untuk mengimplementasikan konsep dari organisasi
berkas indeks sequential :
Ø Blok Indeks dan Data
(Dinamik)
Ø Prime dan Overflow Data Area
(Statik)
Kedua pendekatan tersebut
menggunakan sebuah bagian indeks dan sebuah bagian data, dimana masing-masing
menempati berkas yang terpisah.
Alasannya :
Karena mereka diimplementasikan pada organisasi internal yang
berbeda.Masing-masing berkas tersebut harus menempati pada alat penyimpan yang
bersifat Direct Access Storage Device (DASD).
Ø
Blok Indeks Dan Data
Pada pendekatan ini berkas indeks dan berkas data diorganisasikan dalam
blok. Berkas indeks mempunyai struktur tree, sedangkan berkas data mempunyai
struktur sequential dengan ruang bebas yang didistribusikan antar populasi
record.
Lihat gambar
Pada gambar tersebut ada N blok data dan 3 tingkat dari indeks. Setiap
entry pada indeks mempunyai bentuk (nilai key terendah, pointer), dimana
pointer menunjuk pada blok yang lain, dengan nilai key-nya sebagai nilai key
terendah. Setiap tingkat dari blok indeks menunjuk seluruh blok, kecuali blok
indeks pada tingkat terendah yang menunjuk ke blok data.
Jika sebuah permintaan untuk mengakses record tertentu, misal kita ingin
mengakses dengan nilai key BAT, indeks dengan tingkat tertinggi (dalam hal ini
blok indeks 3-1) yang pertama yang akan dicari pada contoh ini, pointer dari
6
AARDVARK
menunjuk blok indeks 2-1. Pointer yang ditunjuk pada kotak tersebut adalah
pointer yang berisikan AARDVARK, yang akan menunjuk ke blok indeks 1-1. POinter
berikutnya yang akan ditunjuk adalah pointer yang berisi BABOON, yang
selanjutnya akan menunjuk blok data 2. Blok data ini akan mencari untuk record
dengan key tujuan, yaitu BAT, dimana pada blok ini record tersebut ditemukan.
Permintaan untuk
akses data dalam urutan sequential dilayani dengan mengakses blok data dalam
urutan sequential. Sebagai catatan blok data merupakan consecutive secara logik
dan bukan consecutive secara fisik. Dalam hal ini, blok data harus dihubungkan
secara bersama dalam urutan secara logik, seperti terlihat pada gambar.
Misal :
Setiap blok data mempunyai ruang yang cukup untuk menampung 5 record dan
setiap blok indeks mempunyai ruang yang cukup untuk menyimpan 4 pasang (nilai
key, pointer).
Parameter ini
biasanya sudah dilengkapi dengan rutin dukungan sistem manajemen data, pada
saat berkas binatang ini dibentuk.
Jika kita
menginginkan penyisipan maupun penghapusan terhadap isi berkas, maka blok
indeks dan blok data akan dibuat dengan sejumlah ruang bebas, yang biasanya
disebut sebagai padding dan pada
gambar ditunjukkan sebagai irisan.
Permintaan : INSERT APE
INSERT
AIREDALE
AARDVARK
AIREDALE
ALBATROSS
ALLIGATOR
APE
|
key
|
DATA BLOCK 1
|
Entry pada blok harus
diletakkan berdasarkan urutan sequential ascending.
Permintaan :
INSERT ARMADILL
7
Pencarian dari struktur indeks menyatakan
bahwa ARMADILLOseharusnya menempati blok data 1, tetapi blok tersebut sudah
penuh.
TERN
|
WARTHOG
|
YAK
|
|
|
BABOON
|
BAT
|
CALF
|
|
|
COW
|
DOG
|
ELEPHANT
|
|
|
FOX
|
|
GOOSE
|
|
|
AARDVARK
|
ALBATROSS
|
ALLIGATOR
|
|
|
DATA
FILE
key
|
DATA
BLOCK 1
key
|
DATA
BLOCK 2
key
|
DATA
BLOCK 3
key
|
DATA
BLOCK 4
key
|
AARDVARK
|
BABOON
|
COW
|
|
PANDA
|
PECCARY
|
TERN
|
|
FOX
|
HOUND
|
IBEX
|
|
key
|
key
|
INDEX
BLOCK
1.1
|
INDEX
BLOCK
1.2
key
|
INDEX
BLOCK
1.K
|
AARDVARK
|
FOX
|
LLAMA
|
|
key
|
key
|
MAMMOTH
|
MOUSE
|
OCTOPUS
|
PANDA
|
AARDVARK
|
MAMMOTH
|
|
|
INDEX
BLOCK
3.1
|
INDEX
BLOCK
2.1
|
INDEX
BLOCK
2.2
|
8
Separuh dari isi blok data,
tetap menempati blok tersebut dan separuhnya lagi dipindahkan ke blok yang baru
dibuat, yaitu blok data 1A.
Hasilnya ditunjukkan pada gambar di bawah ini :
AARDVARK
|
AIREDALE
|
ALBATROSS
|
|
|
AARDVARK
|
AIREDALE
|
ALBATROSS
|
|
|
key
|
DATA BLOCK 1
key
|
DATA BLOCK 1A
|
To
data
block
2
|
AARDVARK
|
ALLIGATOR
|
BABOON
|
COW
|
key
|
INDEX BLOCK
1.1
|
From index
block 2.1
|
Permintaan :
INSERT CAT
INSERT BEAR
INSERT BOBCAT
Akan mengisi
blok data 2, tetapi blok data tersebut harus dipecah menjadi blok data 2 dan 2A
Blok indeks 1-1
sudah penuh dan tidak dapat memuat pointer pada blok data 2A, sehingga inipun
harus dipecah, dengan cara mengubah penafsiran indeks pada tingkat 2.
Jika blok indeks
pada tingkat paling tinggi (dalam hal ini indeks tingkat 3) sudah penuh, maka
harus dipecah, sehingga sebuah indeks tingkat yang baru akan ditambahkan pada
indeks tree.
9
Maka seluruh pencarian
langsung memerlukan pengaksesan empat blok indeks dan sebuah blok data.
AARDVARK
|
AIREDALE
|
ALBATROSS
|
|
|
AARDVARK
|
AIREDALE
|
ALBATROSS
|
|
|
key
|
DATA BLOCK 1
key
|
DATA BLOCK 1A
|
To
data
block
2
|
AARDVARK
|
ALLIGATOR
|
BABOON
|
COW
|
key
|
INDEX BLOCK
1.1
|
From index
block 2.1
|
Prime dan Overflow Data Area
Pendekatan lain untuk mengimplementasikan berkas indeks sequential adalah
berdasarkan struktur indeks dimana struktur indeks ini lebih ditekankan pada
karakteristik fisik dari penyimpanan, dibandingkan dengan distribusi secara
logik dari nilai key.
Indeksnya ada
beberapa tingkat, misalnya tingkat cylinder indeks dan tingkat track indeks.
Berkas datanya secara umum diimplementasikan sebagai 2 berkas, yaitu prime area
dan overflow area.
Misalnya setiap cylinder dari alat penyimpanan mempunyai 4 track. Pada
berkas binatang ada 6 cylinder yang dialokasikan pada prime data area. Track
pertama (nomor 0) dari setiap cylinder berisi sebuah indeks pada record key
dalam cylinder tersebut.
Entry pada indeks
ini adalah dalam bentuk :
10
nilai key terendah, nomor track
LYNX
YAK
|
MASTER
INDEKS
key
|
ELEPHANT
|
LION
|
LYNX
|
MOA
|
OCELOT
|
YAK
|
CYLINDER
INDEKS
key
|
cylinder1
:
track
0 : AARDVARK, track 1, BABOON, track 2, COW, track 3
track
1 : AARDVARK,,,,,,,,ALBATROSS,,,,,,,,ALLIGATOR,,,,,,,
track
2 : BABOON,,,,,,,,,,,,,BAT,,,,,,,,,,,,,,,,,,,,,,,,CALF,,,,,,,,,,,,,,,,,,,,
track
3 : COW,,,,,,,,,,,,,,,,,,,,DOG,,,,,,,,,,,,,,,,,,,,,,,,ELEPHANT,,,,,,,,,
cylinder2
:
track
0 : FOX, track 1, HOUND, track 2, IBEX, track 3
track
1 : FOX,,,,,,,,,,,,,,,,,,,,,
:
:
cylinder6
:
track
0 : PANDA, track 1, PECCARY, track 2, TERN, track 3
.
. . . .
track
3 : TERN,,,,,,,,,,,,,,,,,,WARTHOG,,,,,,,,,,,,,,YAK,,,,,,,,,,,,,,,,,,,,
|
PRIME DATA FILE
|
Physical-Layout
Indexes
|
Dalam sebuah track
data, tracknya disimpan secara urut berdasarkan nilai key.
Tingkat pertama dari indeks
dalam berkas indeks dinamakan master
indeks.
Entry pada indeks ini adalah
dalam bentuk :
nilai
key tertinggi, pointer
Tingkat kedua dari indeks
dinamakan cylinder indeks.
Indeks ini berisi pointer
pada berkas prime data dan entry-nya dalam bentuk :
nilai
key tertinggi, nomor cylinder
Jika sebuah permintaan untuk mengakses record tertentu, misal kita akan
mengakses dengan nilai key BAT, pertama akan dicari pada master indeks. Karena
BAT ada di depan LYNX, maka pointer dari LYNX akan menunjuk ke cylinder index.
Karena BAT ada di depan ELEPHANT, maka pointer dari ELEPHANT akan menunjuk ke
track 0 dari cylinder 1. Karena BAT ada di belakang BABOON dan di depan COW,
maka pointer dari BABOON akan menunjuk ke track 2, yang mencari secara
sequential sampai BAT ditemukan.
Permintaan untuk
mengakses data secara sequential akan dilayani dengan mengakses cylinder dan
track dari berkas data prime secara urut.
11
Misal setiap
track dari berkas prime data mempunyai ruang yang cukup untuk menampung 5
record (jika penyisipan dan penghapusan terhadap berkas dilakukan, maka akan
dibentuk padding).
Permintaan :
INSERT APE
INSERT
AIREDALE
Akan mudah dilayani. Hanya track data 1 dari cylinder 1 yang akan
digunakan dan hasilnya ditunjukkan pada gambar di bawah ini :
cylinder 1
track 0 : no change
track 1 :
AARDVARK,,,,,,,AIREDALE,,,,,,,,,ALBATROSS,,,,,,,,,ALLIGATOR,,,,,,,APE,,,,,,,,,,
track 2 : no change
track 3 : no change
|
Permintaan :
INSERT ARMADILLO
Agak sulit ditangani. Pencarian struktur indeks menyatakan bahwa
ARMADILLO seharusnya menempati track 1 dari cylinder 1, tetapi track tersebut
sudah penuh.
Untuk mengatasi
keadaan tersebut diperlukan overflow data area. Overflow data area ini
merupakan berkas yang terpisah dari prime data area, tetapi overflow area ini
ditunjukkan oleh entry prime data area.
Hasilnya
ditunjukkan pada gambar di bawah ini :
cylinder 1 :
track 0 : AARDVARK,
track 1, ARMADILLO, ovfl-ptr, BABOON, track 2, COW, track 3
track 1 :
track 2 :
no change
track 3 :
|
cylinder 1 :
track 1 : ARMADILLO
,,,,,,,,,,,,,,
|
OVERFLOW DATA FILE
|
12
Karena ARMADILLO seharusnya berada setelah kelima entry pada track 1 dari
cylinder 1, tetapi karena track ini sudah penuh, maka ARMADILLO dipindahkan ke
overflow data area. Indeks track dari cylinder 1 harus dimodifikasi untuk
memperlihatkan bahwa ada sebuah record pada overflow area yang secara logik
seharusnya menempati pada akhir dari track 1, sehingga penambahan dari entry
itu adalah :
<ARMADILLO,ovfl-ptr>
Dengan ovfl-ptr adalah :
<cylinder, track, record>
Permintaan :
INSERT CAT
INSERT BEAR
INSERT
BOBCAT
Akan mengisi
track 2 dari cylinder 1 pada prime data area, tetapi pengisian tersebut
mengakibatkan penggunaan overflow area. Perhatikan CAT dipindahkan ke overflow
area, karena entry pada prime track tidak hanya harus dalam urutan, tetapi juga
entry tersebut harus mendahului suatu entry overflow dari track tersebut.
cylinder 1 :
track 0 : AARDVARK,
track 1, ARMADILLO, * ,BABOON, track 2, CAT, * ,COW, track 3
track 1 :
AARDVARK,,,,,,,,,A IREDALE,,,,,,,,,,ALBATROSS,,,,,,,, ALLIGATOR,,,,,,,,
APE,,,,,,
track 2 : BABOON,,,,,BAT,,,,,BEAR,,,,,BOBCAT,,,,,CALF,,,,,,,,,,,,
track 3 :
COW,,,,,,,,DOG,,,,,,,,,ELEPHANT,,,,,,,,,,,
|
cylinder 1 :
track 1 : ARMADILLO
,,,,,,,,,,,,,,CAT,,,,,,,,,,,,,
|
OVERFLOW DATA FILE
|
PRIME DATA FILE
|
ovrfl
|
13
Permintaan :
INSERT ANT
cylinder 1 :
track 0 : AARDVARK,
track 1, APE, * ,BABOON, track 2, CAT, * ,COW, track 3
track 1 :
AARDVARK,,,,,,,,,A IREDALE,,,,,,,,,,ALBATROSS,,,,,,,, ALLIGATOR,,,,,,,,
ANT,,,,,,
track 2 : BABOON,,,,,BAT,,,,,BEAR,,,,,BOBCAT,,,,,CALF,,,,,,,,,,,,
track 3 :
COW,,,,,,,,DOG,,,,,,,,,ELEPHANT,,,,,,,,,,,
|
cylinder 1 :
track 1 : ARMADILLO
,,,,,,,,,,,,,,CAT,,,,,,,,,,,,,APE,,,,,,,,,,,,,,,,,
|
OVERFLOW DATA FILE
|
PRIME DATA FILE
|
ovrfl
|
Deklarasi Berkas Indeks
Sequential dalam bahasa COBOL :
SELECT filename ASSIGN TO
implementor-name[,implementor-name2]
RESERVE integer
AREA
ORGANIZATION IS INDEXED
SEQUENTIAL
ACCESS
MODE IS RANDOM
DYNAMIC
RECORD KEY IS dataname-1
[ FILESTATUS IS
dataname-2 ].
Keuntungan
Sequential File :
• Sangat cocok untuk
digunakan menyimpan batch data ataupun individual data. Dibanding sequential
file, pemanggilan data menjadi lebih cepat.
14
• Access (pemanggilan)
data tidak bisa disamakan dengan random (direct access file). Memerlukan adanya
ruangan extra didalam memory untuk menyimpan index data.Memerlukan adanya
hardware dan software yang lebih kompleks.
• Merupakan organisasi
file yang sederhana. Jarak setiap aplikasi yang tersimpan sangat jelas. Metode
penyimpanan didalam memory sangat sederhana, sehingga efisien untuk menyimpan
record yang besar. Sangat murah untuk digunakan, sebab medianya cukup
menggunakan magnetic tape.
15
BAB III
3.1 Kesimpulan
Dari pembahasan diatas bahwa komputer dapat menyimpan informasi dalam berbagai bentuk
fisik tempat penyimpanan seperti disk magnetic, disk optical. kemudain sistem
berkas merupakan mekanisme penyimpanan on-line serta untuk akses, baikdata
maupun program yang berada dalam system operasi.
Organisasi berkas indeks
sequential adalah Berkas/file yang disusun sedemikian rupa sehingga dapat diakses
secara sequential maupun secara direct (langsung) atau kombinasi keduanya,
direct dan sequential data merupakan segala sesuatu yang masih dalam bentuk
bahan mentah yang akan diproses.Indeksnya ada beberapa tingkat, misalnya
tingkat cylinder indeks dan tingkat track indeks.
3.2 Saran
Seharusnya kita sebagai calon pendidik haruslah banyak
mengetahui tentang apa itu berkas indeks sequential, serta mengetahui implementasi organisasi berkas indeks sequential itu sendiri.
Seharusnya kita mengetahui tentang blok indeks, data pada berkas
indeks sequential dan keuntungan sequential file.
16
Daftar pustaka
17
Lampiran
Biodata Anggota Kelompok
Penyusun 1
Nama : AHMAD PURI
Npm : 0904411314
Semester /
Kelas : VII / G
Jenis
Kelamin : Laki-laki
Penyusun 2
Nama : SAAD
Npm : 0904411102
Semester /
Kelas : VII / G
Jenis
Kelamin : Laki-laki
Penyusun 3
Nama : SUPRIN
Npm : 0904411307
Semester /
Kelas : VII / G
Jenis
Kelamin : Laki-laki
Penyusun 4
Nama : PADRIATI GALLO
Npm : 1104411053
Semester /
Kelas : III / B
Jenis
Kelamin : Perempuan
Penyusun 5
Nama : ARYANTI
Npm : 0904411368
Semester /
Kelas : VII / H
Jenis
Kelamin : Perempuan
18
boleh minta softcopy makalahnya gak mas?
BalasHapus