RPL 2 || PERTEMUAN 11 DAN 12

DIAGRAM STATUS
STUDI KASUS PENGIRIMAN BARANG


1. Pengertian Diagram Status

    Diagram status sering disebut juga dengan diagram mesin status. Dalam Bahasa Inggris diagram status disebut dengan State Machine Diagram atau Statechart Diagram. Diagram status merupakan diagram UML yang digunakan untuk menggambarkan perubahan status atau transisi status dari sebuah mesin atau sistem atau objek. Diagram status cocok digunakan untuk menggambarkan alur interaksi pengguna dengan sistem. Diagram status berfungsi untuk memodelkan metode/behavior (lifecycle) sebuah class atau objek menunjukkan urutan kejadian sesaat (status) yang dilewati sebuah objek, transisi dari sebuah status ke status lainnya. Jika diagram sekuen digunakan untuk interaksi antar objek, maka diagram status digunakan untuk interaksi didalam sebuah objek. Perubahan tersebut digambarkan dalam suatu graf berarah. 

    Diagram status dapat juga dikatakan adalah diagram yang digunakan untuk medeskripsikan perilaku sistem. Diagram status mendeskripsikan semua kondisi yang mungkin muncul sebagai sebuah objek begitu pula dengan event/kejadian. Diagram status mengambarkan seluruh state/status yang memungkinkan objek-objek dalam class dapat dimiliki dan kejadian-kejadian yang menyebabkan status berubah. Perubahan dalam suatu state disebut juga transisi (transition). Suatu transisi juga dapat memiliki sebuah aksi yang dihubungkan pada status atau yang harus dilakukan dalam hubungannya dengan transisi status. Sebuah status adalah kondisi selama hidup objek atau interaksi selama memenuhi suatu kondisi, melaksanakan suatu aksi, atau menunggu suatu kejadian. 

    Diagram status merupakan pengembangan dari diagram Finite State Automata dengan penambahan beberapa fitur dan konsep baru. Diagram Finite State Automata (FSA) biasanya diajarkan dalam mata kuliah Automata. Didalam diagram status ada beberapa elemen yaitu kotak yang merepresentasikan state sebuah objek, tanda panah untuk menunjukkan perpindahan ke state yang selanjutnya dan bagian aktivitas dari simbol state menggambarkan aktivitas objek yang akan dilakukan selama didalam state.

    Sebelum membuat diagram status untuk sebuah studi kasus, ada beberapa hal yang perlu dipikirkan terlebih dahulu, yaitu :

a. Identifikasi objek untuk dianalisis.

b. Mengidentifikasi state/status keadaan.

c. Mengidentifikasi event/peristiwa/kejadian.

    Adapun manfaat dari statechart diagram adalah sebagai berikut;

a. Memodelkan sistem reaktif, yaitu sebuah sistem yang merespon kejadian internal ataupun external.

b. Memodelkan sebuah aktivitas life time dari awal hingga akhir.

c. Memodelkan aspek dinamik suatu sistem.

d. Memodelkan masa pakai sistem reaktif.

e. Menggambarkan objek yang beda ketika sistem sedang berjalan.


2. Simbol Diagram Status

    Berikut ini simbol-simbol dari diagram status yaitu :

3. Tutorial Membuat Diagram Status dengan Visio

    Untuk membuat diagram status dapat menggunakan tools berupa Microsoft Visio. Berikut ini langkah-langkah membuat diagram status dengan Visio :

1. Buka Microsoft Visio. Lalu, akan muncul tampil awal dari Visio saat pertama dibuka. Ada banyak model yang dapat dibuat dengan Visio. Kemudian, pilih Basic Diagram.

2. Setelah itu, akan muncul tampilan untuk membuat file baru. Klik Create untuk membuat file baru Visio.

3. Dibagian kiri terdapat pilihan bentuk untuk membuat berbagai bentuk dan diagram. Pilih More Shapes untuk mencari bentuk-bentuk yang sesuai dengan diagram status. Setelah memilih More Shapes, kemudian ada muncul beberapa pilihan dan pilih Software and Database, lalu pada pilihan berikutnya pilih Software. Setelah itu, ada banyak pilihan diagram dan setiap pilihan tersebut akan menampilkan bentuk yang berbeda sesuai dengan bentuk dari diagramnya. Pada pilihan tersebut terdapat Data Flow Diagram Shape, disana ada beberapa bentuk yang sesuai untuk membuat diagram status. Oleh karena itu, pilih saja Data Flow Diagram Shape dan akan dimodif agar bentuknya sesuai dengan diagram status.

Berikut ini bentuk-bentuk yang ada pada Data Flow Diagram yaitu :

4. Untuk mengatur agar simbol-simbol tidak berwarna dan hanya hitam putih (tujuannya agar isi atau tulisan dapat terlihat jelas), maka bisa dilakukan dengan pilih Design dibagian atas. Lalu pilih bentuk design yang tidak berwarna atau hitam putih. Maka, simbol-simbol yang terletak disebelah kiri akan berubah menjadi hitam putih semuanya. 

5. Untuk membuat start, maka tarik simbol State atau bisa juga Data Process ke halaman kerja. Maka akan terbentuk bulat, kemudian beri warna pada bulatan tersebut agar hitam.

6. Untuk membuat state, maka tarik simbol External interactor ke halaman kerja. Maka akan terbentuk persegi panjang. Lalu klik bentuk tersebut dan pilih Format Shape untuk mnegatur agar ujung dari persegi panjang agar lengkung. 

Disebelah kanan alan muncul bagian Format Shape, piih Line karena yang akan diatur adalah bentuk garisnya. Lalu, cari Rounding presets untuk menentukan garis pembentuk persegi panjang. Kemudian, pilih bentuk yang ujung dari perseginya agak lengkung.

7. Untuk membuat end, maka tarik simbol State atau bisa juga Data Process ke halaman kerja. Maka akan terbentuk bulat. Lalu tarik lai bentuk tersebut dan letakkan didalam bentuk bulatan yang pertama dana tur ukurannya agar lebih kecil dan letaknya tepat ditengah-tengah. Pada bulatan yang kecil di tengah diatur agar berwarna hitam. 

8. Selanjutnya, untuk pemberian nama pada state dilakukan dengan mengklik bagian tengah dari simbol state (persegi panjang), lalu tuliskan isi dari state tersebut.  

9. Untuk membuat event (garis panah) dari start ke state dan dari state ke end dapat menggunakan line dibagian atas (pilihan disamping Pointer Tool). Pilih bentuk garis lalu tarik dari start ke state. 

Setelah dibuat garis dari start ke state, klik garis tersebut lalu klik kanan dan pilih Format Shape. Pada tampilan Format Shape disebelah kanan pilih Line, lalu scroll dan cari End Arrow Type untuk memilih bentuk mata panah disalah satu ujung garis. Arahkan mata panah ke tahap yang dituju.

10. Untuk menuliskan keterangan disamping event, dilakukan dengan mengklik Text yang ada dibagian atas. Kemudian, mengklik letak teks tersebut disamping event yang ada di halaman kerja. Lalu, tuliskan isi teksnya.

11. Begitulah cara membuat diagram status. Jadi, lakukan hal-hal diatas tadi untuk membuat start, end, state dan event serta teksnya. Sampai pada akhirnya akan menghasilkan diagram status yang lengkap sesuai dengan studi kasus.


4. Praktikum Studi Kasus Diagram Status

A. Diagram Status Kelas Main

Objek : m dari class Main

Penjelasan :

Terdapat metode main() dari class Main yang membawa transisi atau event dari status awal (start) ke status akhir (end). Jadi, metode main() digunakan untuk menjalankan sistem hingga akhir. 

B. Diagram Status Kelas Antarmuka

Objek : am dari class Antarmuka

Penjelasan :

Terdapat beberapa metode didalam class Antarmuka yang ketika dijalankan akan membawa dari status awal (start) ke status akhir (end), seperti formLogin() untuk login,  formBarang() untuk menampilkan data barang, formPengiriman() untuk menampilkann data pengiriman, formDistributor untuk menampilkan data distributor, dan lainnya. 

Namun, terdapat beberapa metode yang dijalankan sebagai bagian dari proses lain yang akan dilanjutkan oleh metode lainnya. Contohnya seperti untuk proses mengubah dan menghapus data, maka pada awalnya akan dijalankan proses pencarian data untuk menemukan data yang akan diubah atau dihapus. Seperti berikut ini :

a. Dari start akan menampilkan formCariBarang() untuk menemukan data barang yang dicari, untuk mengubah atau menghapus data tersebut melalui tampilan formDetilBarang(), dan setelah itu akan menuju ke end. 

b. Dari start akan menampilkan formCariPengiriman() untuk menemukan data pengiriman yang dicari, untuk mengubah atau menghapus data tersebut melalui tampilan formDetilPengiriman(), dan setelah itu akan menuju ke end. 

c. Dari start akan menampilkan formCariDistributor() untuk menemukan data distributor yang dicari, untuk mengubah atau menghapus data tersebut melalui tampilan formDetilDistributor(), dan setelah itu akan menuju ke end. 

C. Diagram Status Kelas Validasi

Objek : v dari class Validasi

Penjelasan :

Dari status awal (start) membawa transisi (event) yaitu metode login() ke state variabel SESSION sebagai penanda bahwa status telah login. Pada state itu akan membawa transisi ke state itu sendiri berupa metode memeriksaStatusLogin() untuk pengecekan atau pemeriksaan setelah login. Setelah login dan diperiksa maka akan menuju ke status akhir (end) dengan membawa transisi (event) yaitu metode logout() untuk keluar dari sistem.

D. Diagram Status Kelas KoneksiDB

Objek : k dari class KoneksiDB

Penjelasan :

Pada class KoneksiDB, berjalan dari status awal (start) dengan membawa transisi (event) berupa metode open() ke state untuk masuk ke keadaaan dimana database (basis data) siap untuk diakses dan dikelola. Setelah itu, terdapat transisi berupa metode execute() untuk menjalankan query pada database sehingga akan masuk ke state dimana query telah dijalankan atau dieksekusi. Kemudian, terdapat metode getResult() pada transisi selanjutnya untuk menampilkan data dari database sebagai hasil dari query yang telah dijalankan pada database. Lalu, dari state hasil query berjalan ke status akhir (end) dengan membawa metode close() untuk menutup database.

E. Diagram Status Kelas KelolaBarang

Objek : kb dari class KelolaBarang

Penjelasan :

Pada class KelolaBarang terdapat beberapa metode seperti untuk mencari, menampilkan, menambah, mengubah dan menghapus data barang. Proses mencari data barang merupakan proses yang dapat berdiri sendiri, dan juga sebagai bagian dari proses mengubah dan menghapus data. Karena sebelum mengubah atau menghapus data, maka perlu dicari terlebih dahulu data yang diinginkan. 

Pada diagram status class KelolaBarang diawali dengan adanya status awal (start) untuk menandakan aktifnya sistem, yang langsung menuju ke status akhir (end) dengan membawa transisi (event) berupa metode cariBarang() atau tampilBarang() ataupun tambahBarang(). Jadi, metode-metode tadi dapat berjalan langsung dari start ke end tanpa perlu metode lainnya, artinya metode tersebut dapat berdiri sendiri. 

Terdapat juga, dari status awal (start) yang membawa transisi (event) metode cariBarang() ke state (keadaan) dimana untuk mencari data barang yang diinginkan. Setelah itu, dari state tersebut akan berjalan dengan transisi berupa metode ubahBarang() ataupun hapusBarang(), yang nantinya menuju ke status akhir (end). Jadi, metode ubahBarang() dan hapusBarang() sebelumnya memerlukan metode cariBarang(). Hal ini karena data barang memiliki banyak data, sehingga perlunya pencarian data terlebih dahulu.

F. Diagram Status Kelas KelolaPengiriman

Objek : kp dari class KelolaPengiriman

Penjelasan :

Pada class KelolaPengiriman terdapat beberapa metode seperti untuk mencari, menampilkan, menambah, mengubah dan menghapus data pengiriman. Proses mencari data pengiriman merupakan proses yang dapat berdiri sendiri, dan juga sebagai bagian dari proses mengubah dan menghapus data. Karena sebelum mengubah atau menghapus data, maka perlu dicari terlebih dahulu data yang diinginkan. 

Pada diagram status class KelolaPengiriman diawali dengan adanya status awal (start) untuk menandakan aktifnya sistem, yang langsung menuju ke status akhir (end) dengan membawa transisi (event) berupa metode cariPengiriman() atau tampilPengiriman() ataupun tambahPengiriman(). Jadi, metode-metode tadi dapat berjalan langsung dari start ke end tanpa perlu metode lainnya, artinya metode tersebut dapat berdiri sendiri. 

Terdapat juga, dari status awal (start) yang membawa transisi (event) metode cariPengiriman() ke state (keadaan) dimana untuk mencari data pengiriman yang diinginkan. Setelah itu, dari state tersebut akan berjalan dengan transisi berupa metode ubahPengiriman() ataupun hapusPengiriman(), yang nantinya menuju ke status akhir (end). Jadi, metode ubahPengiriman() dan hapusPengiriman() sebelumnya memerlukan metode cariPengiriman(). Hal ini karena data pengiriman memiliki banyak data, sehingga perlunya pencarian data terlebih dahulu.

G. Diagram Status Kelas KelolaDistributor

Objek : kd dari class KelolaDistributor

Penjelasan :

Pada class KelolaDistributor terdapat beberapa metode seperti untuk mencari, menampilkan, menambah, mengubah dan menghapus data distributor. Proses mencari data distributor merupakan proses yang dapat berdiri sendiri, dan juga sebagai bagian dari proses mengubah dan menghapus data. Karena sebelum mengubah atau menghapus data, maka perlu dicari terlebih dahulu data yang diinginkan. 

Pada diagram status class KelolaDistributor diawali dengan adanya status awal (start) untuk menandakan aktifnya sistem, yang langsung menuju ke status akhir (end) dengan membawa transisi (event) berupa metode cariDistributor() atau tampilDistributor() ataupun tambahDistributor(). Jadi, metode-metode tadi dapat berjalan langsung dari start ke end tanpa perlu metode lainnya, artinya metode tersebut dapat berdiri sendiri. 

Terdapat juga, dari status awal (start) yang membawa transisi (event) metode cariDistribitor() ke state (keadaan) dimana untuk mencari data distributor yang diinginkan. Setelah itu, dari state tersebut akan berjalan dengan transisi berupa metode ubahDistributor() ataupun hapusDistributor(), yang nantinya menuju ke status akhir (end). Jadi, metode ubahDistirbutor() dan hapusDistributor() sebelumnya memerlukan metode cariDistributor(). Hal ini karena data distributor memiliki banyak data, sehingga perlunya pencarian data terlebih dahulu.

H. Diagram Status Kelas KelolaAkun

Objek : ka dari class KelolaAkun

Penjelasan :

Pada class KelolaAkun terdapat beberapa metode seperti menampilkan dan mengubah data akun admin. Data akun admin hanya memiliki satu data, hal ini karena hanya ada satu admin di perusahaan. 

Pada diagram status class KelolaAkun diawali dengan adanya status awal (start) untuk menandakan aktifnya sistem, yang langsung menuju ke status akhir (end) dengan membawa transisi (event) berupa metode tampilAkun() ataupun ubahAkun(). Jadi, pada class ini tidak ada metode cari akun karena hanya ada satu data akun admin yang dapat ditampilkan dan diubah. Sehingga metode-metode tersebut berdiri sendiri tanpa metode lainnya.

I. Diagram Status Kelas KelolaKepala

Objek : kk dari class KelolaKepala

Penjelasan :

Pada class KelolaKepala terdapat beberapa metode seperti menampilkan dan mengubah data kepala gudang. Data kepala gudang hanya memiliki satu data, hal ini karena hanya ada satu kepala gudang di perusahaan. 

Pada diagram status class KelolaKepala diawali dengan adanya status awal (start) untuk menandakan aktifnya sistem, yang langsung menuju ke status akhir (end) dengan membawa transisi (event) berupa metode tampilKepala() ataupun ubahKepala(). Jadi, pada class ini tidak ada metode cari kepala gudang karena hanya ada satu data kepala gudang yang dapat ditampilkan dan diubah. Sehingga metode-metode tersebut berdiri sendiri tanpa metode lainnya.

J. Diagram Status Kelas Barang

Objek : b dari class Barang

Penjelasan :

Pada class barang ini, terdapat metode set dan get pada atributnya. Metode set digunakan untuk mengisi nilai dari setiap atribut yang ada pada class barang, yaitu IdBarang, NamaBarang, BeratBarang, SatuanBarang, HargaBarang, Kadaluwarsa, dan IdPengiriman. Semua metode set dapat dijalankan sendiri (diisi manual) ataupun diisi dari hasil menjalankan query cariBarang() atau tampilBarang(). Selain itu, metode set juga diperlukan sebelum menjalankan query tambahBarang() atau ubahBarang() ataupun hapusBarang(). Hal itu karena, metode-metode tersebut membutuhkan nilai atribut dari class dalam membentuk querynya. Jadi, perlu diatur terlebih dahulu nilai-nilai atribut dengan metode set, kemudian baru dijalankan querynya. Sedangkan metode get pada atribut dapat dijalankan dan digunakan untuk menampilkan nilai atribut jika nilai tersebut telah terisi.

Jadi, dari diagram status diatas diawali dari status awal (start) menuju ke state (keadaan) dimana nilai atribut telah terisi dengan membawa transisi (event) berupa metode set untuk nilai atributnya. Dari start bisa juga ke state dimana query dieksekusi yaitu berupa query cariBarang() atau tampilBarang() sebagai isi dari transisinya. Lalu, menuju ke state dimana nilai atribut telah terisi dengan membawa transisi metode set untuk nilai atributnya. Setelah itu, akan menuju kembali ke state query dieksekusi dengan transisi query tambahBarang() atau ubahBarang() ataupun hapusBarang(). Jika sudah mencapai state dimana nilai atribut telah terisi, maka untuk menampilkan data dengan transisi berupa metode get dan akan menuju ke status akhir (end). 

K. Diagram Status Kelas Pengiriman

Objek : p dari class Pengiriman

Penjelasan :

Pada class pengiriman ini, terdapat metode set dan get pada atributnya. Metode set digunakan untuk mengisi nilai dari setiap atribut yang ada pada class pengiriman, yaitu IdPengiriman, TglPengiriman, Jumlah, Total, Id, IdDistributor, dan IdKepala. Semua metode set dapat dijalankan sendiri (diisi manual) ataupun diisi dari hasil menjalankan query cariPengiriman() atau tampilPengiriman(). Selain itu, metode set juga diperlukan sebelum menjalankan query tambahPengiriman() atau ubahPengiriman() ataupun hapusPengiriman(). Hal itu karena, metode-metode tersebut membutuhkan nilai atribut dari class dalam membentuk querynya. Jadi, perlu diatur terlebih dahulu nilai-nilai atribut dengan metode set, kemudian baru dijalankan querynya. Sedangkan metode get pada atribut dapat dijalankan dan digunakan untuk menampilkan nilai atribut jika nilai tersebut telah terisi.

Jadi, dari diagram status diatas diawali dari status awal (start) menuju ke state (keadaan) dimana nilai atribut telah terisi dengan membawa transisi (event) berupa metode set untuk nilai atributnya. Dari start bisa juga ke state dimana query dieksekusi yaitu berupa query cariPengiriman() atau tampilPengiriman() sebagai isi dari transisinya. Lalu, menuju ke state dimana nilai atribut telah terisi dengan membawa transisi metode set untuk nilai atributnya. Setelah itu, akan menuju kembali ke state query dieksekusi dengan transisi query tambahPengiriman() atau ubahPengiriman() ataupun hapusPengiriman(). Jika sudah mencapai state dimana nilai atribut telah terisi, maka untuk menampilkan data dengan transisi berupa metode get dan akan menuju ke status akhir (end). 

L. Diagram Status Kelas Distributor

Objek : d dari class Distributor

Penjelasan :

Pada class distributor ini, terdapat metode set dan get pada atributnya. Metode set digunakan untuk mengisi nilai dari setiap atribut yang ada pada class distributor, yaitu IdDistributor, NamaDistributor, AlamatDistributor, HpDistributor, UsernameDistributor, dan PasswordDistributor. Semua metode set dapat dijalankan sendiri (diisi manual) ataupun diisi dari hasil menjalankan query cariDistributor() atau tampilDistributor(). Selain itu, metode set juga diperlukan sebelum menjalankan query tambahDistributor() atau ubahDistributor() ataupun hapusDistributor(). Hal itu karena, metode-metode tersebut membutuhkan nilai atribut dari class dalam membentuk querynya. Jadi, perlu diatur terlebih dahulu nilai-nilai atribut dengan metode set, kemudian baru dijalankan querynya. Sedangkan metode get pada atribut dapat dijalankan dan digunakan untuk menampilkan nilai atribut jika nilai tersebut telah terisi.

Jadi, dari diagram status diatas diawali dari status awal (start) menuju ke state (keadaan) dimana nilai atribut telah terisi dengan membawa transisi (event) berupa metode set untuk nilai atributnya. Dari start bisa juga ke state dimana query dieksekusi yaitu berupa query cariDistributor() atau tampilDistributor() sebagai isi dari transisinya. Lalu, menuju ke state dimana nilai atribut telah terisi dengan membawa transisi metode set untuk nilai atributnya. Setelah itu, akan menuju kembali ke state query dieksekusi dengan transisi query tambahDistributor() atau ubahDistributor() ataupun hapusDistributor(). Jika sudah mencapai state dimana nilai atribut telah terisi, maka untuk menampilkan data dengan transisi berupa metode get dan akan menuju ke status akhir (end). 

M. Diagram Status Kelas Admin

Objek : a dari class Admin

Penjelasan :

Pada class admin ini, terdapat metode set dan get pada atributnya. Metode set digunakan untuk mengisi nilai dari setiap atribut yang ada pada class admin, yaitu Id, Nama, Alamat, Hp, Username, dan Password. Semua metode set dapat dijalankan sendiri (diisi manual) ataupun diisi dari hasil menjalankan query tampilAkun(). Selain itu, metode set juga diperlukan sebelum menjalankan query ubahAkun(). Hal itu karena, metode tersebut membutuhkan nilai atribut dari class dalam membentuk querynya. Jadi, perlu diatur terlebih dahulu nilai-nilai atribut dengan metode set, kemudian baru dijalankan querynya. Sedangkan metode get pada atribut dapat dijalankan dan digunakan untuk menampilkan nilai atribut jika nilai tersebut telah terisi.

Jadi, dari diagram status diatas diawali dari status awal (start) menuju ke state (keadaan) dimana nilai atribut telah terisi dengan membawa transisi (event) berupa metode set untuk nilai atributnya. Dari start bisa juga ke state dimana query dieksekusi yaitu berupa query tampilDistributor() sebagai isi dari transisinya. Lalu, menuju ke state dimana nilai atribut telah terisi dengan membawa transisi metode set untuk nilai atributnya. Setelah itu, akan menuju kembali ke state query dieksekusi dengan transisi query ubahAkun(). Jika sudah mencapai state dimana nilai atribut telah terisi, maka untuk menampilkan data dengan transisi berupa metode get dan akan menuju ke status akhir (end). 

N. Diagram Status Kelas Kepala_Gudang

Objek : kg dari class Kepala_Gudang

Penjelasan :

Pada class kepala_gudang ini, terdapat metode set dan get pada atributnya. Metode set digunakan untuk mengisi nilai dari setiap atribut yang ada pada class kepala_gudang, yaitu IdKepala, NamaKepala, JkKepala, AlamatKepala, HpKepala, UsernameKepala, dan PasswordKepala. Semua metode set dapat dijalankan sendiri (diisi manual) ataupun diisi dari hasil menjalankan query tampilKepala(). Selain itu, metode set juga diperlukan sebelum menjalankan query ubahKepala(). Hal itu karena, metode tersebut membutuhkan nilai atribut dari class dalam membentuk querynya. Jadi, perlu diatur terlebih dahulu nilai-nilai atribut dengan metode set, kemudian baru dijalankan querynya. Sedangkan metode get pada atribut dapat dijalankan dan digunakan untuk menampilkan nilai atribut jika nilai tersebut telah terisi.

Jadi, dari diagram status diatas diawali dari status awal (start) menuju ke state (keadaan) dimana nilai atribut telah terisi dengan membawa transisi (event) berupa metode set untuk nilai atributnya. Dari start bisa juga ke state dimana query dieksekusi yaitu berupa query tampilKepala() sebagai isi dari transisinya. Lalu, menuju ke state dimana nilai atribut telah terisi dengan membawa transisi metode set untuk nilai atributnya. Setelah itu, akan menuju kembali ke state query dieksekusi dengan transisi query ubahKepala(). Jika sudah mencapai state dimana nilai atribut telah terisi, maka untuk menampilkan data dengan transisi berupa metode get dan akan menuju ke status akhir (end). 

 

0 komentar:

Posting Komentar

FTI UNISKA MABA 2023

  MABA FTI UNISKA JAYA 2023