BAB 3 PERANCANGAN PROGRAM. simulasi. Initial data yang digunakan dalam program adalah data berdasarkan tabel

20 

Loading....

Loading....

Loading....

Loading....

Loading....

Teks penuh

(1)

BAB 3

PERANCANGAN PROGRAM

3.1 Metoda Pengumpulan Data

Data penduduk yang digunakan dalam proses perhitungan merupakan data simulasi. Initial data yang digunakan dalam program adalah data berdasarkan tabel mortalitas Indonesia tahun 1993.

3.2 Spesifikasi Rumusan Perancangan

Untuk merancang program aplikasi ini penulis menggunakan Borland Delphi 7.0, dan Microsoft Access 2000. Data-data yang digunakan terdiri dari data yang ada dalam database maupun data yang berupa input pengguna program. Data-data yanga ada dalam database ditampung ke variabel penampungan sementara untuk kemudian diproses dalam perhitungan bersama dengan data input dari pengguna..

3.3 Perancangan Stuktur Menu

Pada program digunakan tombol-tombol untuk berpindah dari satu layar ke layar yang lain. Adapun strukturnya dapat digambarkan sebagai berikut :

Gambar 3.1 Struktur menu program Layar Welcome Perhitungan Premi Edit Datbase About

(2)

Menu perhitungan premi digunakan untuk melakukan perhitungan premi dan nilai tunai berdasarkan data penduduk yang ada dalam database serta data-data input dari penggunan program. Hasil dari modul ini adalah sebuah file dalam format notepad yang memuat ilustrasi besar manfaat, pembayaran premi per tahun, serta nilai tunai yang ada.

Menu edit database digunakan untuk mengubah data penduduk yang ada. Menu ini disediakan untuk memfasilitasi adanya perubahah-perubahan pada data penduduk. Pada saat modul ini dijalankan maka database yang lama akan dihapus kemudian diganti dengan database baru hasil input dari user.

3.4 Perancangan Tampilan Layar

Adapun rancangan tampilan layar yang akan dibuat adalah sebagai berikut : • Layar utama

Layar ini berisi judul program dan sebuah button (button OK) untuk masuk ke layar perhitungan premi

(3)

• Layar perhitungan premi

Layar ini merupakan tempat untuk memasukkan data-data yang dibutuhkan dalam proses perhitungan. Button reset data digunakan untuk me-reset semua data menjadi seperti semula, button edit database digunakan untuk masuk ke layar edit database, button cetak ilustrasi digunakan untuk melakukan semua perhitungan sekaligus menyimpan output di sebuah file teks yang diinginkan user. Button about digunakan untuk menampilkan layar about, dan button exit digunakan untuk keluar dari program.

Gambar 3.3 Layar perhitungan premi

Output dari hasil perhitungan premi akan disimpan dalam file text dengan format tampilan sebagai berikut :

Perhitungan Premi Asuransi Pensiun

Usia : ...

(4)

Premi tahunan sebesar : ...

Pembayaran ke Usia Premi Nilai tunai

... ... ... ...

... ... ... ...

... ... ... ...

Total pembayaran perusahaan

Pembayaran ke Total Premi

... ...

... ...

... ...

Catatan : jumlah ilustrasi per usia tergantung dari jumlah usia masuk yang diinginkan, ’premi tahunan sebesar : ...’ berubah menjadi’ persentasi premi sebesar : ... % dari gaji tahunan’ bila besar manfaat yand diambil tergantung dari persentasi terhadap gaji.

• Layar entry database

Pada layar ini user dapat mengganti data dalam database penduduk yang akan digunakan dalam proses perhitungan. Tombol ok digunakan untuk memasukkan data ke variabel penampungan sekaligus memasukkan data ke memo. Tombol Simpan data digunakan untuk menghapus data sebelumnya yang ada pada database sekaligus menyimpan data baru sesuai dengan dengan nilai data yang

(5)

dimasukkan. Tombol kembali ke perhitungan premi digunakan untuk kembali ke layar perhitungan premi dan tombol exit digunakan untuk keluar dari program.

Gambar 3.4 Layar entry database • Layar about

Layar ini berisi informasi mengenai data-data pembuat program serta tujuan pembuatan program. Bila tombol OK diklik maka akan kembali ke layar perhitungan premi.

(6)

3.5 Alat Bantu Perancangan

3.5.1 Perancangan State Transition Diagram

State transition diagram (diagram transisi) merupakan sebuah diagram yang menggambarkan peralihan dari satu state ke state yang lain dikarenakan adanya action dari pengguna program.

klik about

klik OK

klik OK

klik kembali klik exit klik edit database ke perhitungan premi

klik exit

Gambar 3.6 State Transition Diagram 3.5.2 Perancangan use case diagram

Use case diagram merupakan sebuah diagram yang secara terperinci menjelaskan setiap tindakan yang dilakukan user pada program serta hasil yang didapatkan dari tindakan tersebut. Adapun use case diagram dari program yang dirancang dapat diilustrasikan sebagai berikut :

Layar Welcome Layar Perhitungan Premi Layar About Layar Edit Database Exit

(7)

user

Gambar 3.7 Use Case diagram layar welcome dan perhitungan premi cetak output pada file klik about di layar perhitungan premi masuk ke layar about klik OK di layar welcome masuk ke layar perhitungan premi

input semua data di layar perhitungan premi, klik cetak ilustrasi validasi input, inisialisasi data, hitung benefit, premi, nilai tunai, pembayaran

klik edit database di layar

perhitungan premi

masuk ke layar edit database

klik exit di layar perhitungan premi

exit program

(8)

User

Gambar 3.8 Use case diagram layar edit database dan about klik entry data di

layar edit database

proses input data

klik simpan data di layar edit database database lama dihapus, kemudian direwrite dengan data baru hasil input Klik kembali ke perhitungan premi di layar edit database Masuk ke layar perhitungan premi

Klik exit di layar

edit database Exit program

Klik OK di layar about Masuk ke layar perhitungan premi

(9)

3.6 Spesifikasi Data

Program dirancang memiliki spesifikasi data sebagai berikut : 3.6.1 Perancangan data penduduk dari database

Nama database sumber : db_penduduk

Nama tabel : penduduk

Field : umur (primary key), hidup, mati

Masing-masing field pada database jenis datanya adalah integer. Hubungan yang terdapat pada data adalah : jumlah yang hidup pada usia x+1 = jumlah yang hidup pada usia x – jumlah yang mati di usia x. Selain itu, pada usia maksimum, jumlah yang mati pasti sama dengan jumlah yang hidup. Pada saat modul cetak ilustrasi dijalankan, data dari tabel penduduk diambil dan disimpan ke dalam sebuah array dua dimensi.

3.6.2 Perancangan data karyawan

Data untuk masing-masing usia masuk disimpan dalam sebuah record / structure yaitu : Nama record : karyawan

Data : age (integer), salary (real), benefit (real), premi (real),

percent_premi (real)

Field premi akan diisi bila yang dipilih adalah manfaat tetap, sedangkan percent_premi akan diisi bila yang dipilih adalah manfaat berdasarkan persentasi dari gaji.

3.7 Spesifikasi Modul

Untuk menjelaskan cara kerja program, di bawah ini dijelaskan rincian spesifikasi untuk tiap modul sebagai berikut :

(10)

3.7.1 Modul Perhitungan Premi

Variabel

Data -> diambil dari tabel penduduk

Validasi input Begin

Jika jumlah usia masuk = 1 maka

Cek usia1, jumlah1, gaji1 harus diisi dan berupa angka Jika jumlah usia masuk = 2 maka

Cek usia1, jumlah1, gaji1 harus diisi dan berupa angka Cek usia2, jumlah2, gaji2 harus diisi dan berupa angka Jika jumlah usia masuk = 3 maka

Cek usia1, jumlah1, gaji1 harus diisi dan berupa angka Cek usia2, jumlah2, gaji2 harus diisi dan berupa angka Cek usia3, jumlah3, gaji3 harus diisi dan berupa angka Jika benefit tetap maka

Cek a harus diisi dan berupa angka

Jika benefit berdasarkan persentasi dari gaji rata-rata sampai mencapai usia pensiun maka

Cek b dan alpha harus diisi dan berupa angka

Jika benefit berdasarkan persentasi dari f tahun gaji rata-rata terakhir sampai mencapai usia pensiun maka

(11)

Cek bunga dan usia pensiun harus diisi dan berupa angka Bila salah satu salah maka

Keluarkan pesan error 'Semua input harus diisi dan harus berupa angka' End

Inisialisasi Begin

Masukkan nilai kar[0].age, kar[0].salary dan kar[0].jmlh_kar Bila jumlah usia masuk bukan 1 maka

Masukkan nilai kar[1].age, kar[1].salary dan kar[1].jmlh_kar Bila jumlah usia masuk = 3 maka

Masukkan nilai kar[2].age, kar[2].salary dan kar[2].jmlh_kar End Sn (base,r, n) Begin result = base*(power(r,n)-1)/(r-1); end hit_benefit begin

kalau diambil manfaat tetap maka

untuk i = 0 sampai sejumlah usia masuk -1

(12)

bila tidak

untuk i = 0 sampai sejumlah usia masuk -1

kar[i].benefit = Sn(kar[i].gaji, 1+kenaikan gaji, jumlah tahun kerja)/ bila diambil manfaat rata-rata gaji f tahun terakhir maka

untuk i = 0 sampai sejumlah usia masuk -1

kar[i].benefit = kar[i].benefit-Sn(kar[i].gaji, 1+kenaikan gaji, jumlah tahun kerja-f)

Bila diambil manfaat adalah gaji rata-rata Kar[i].benefit = kar[i].benefit/lama kerja

Bila diambil manfaat adalah gaji rata –rata f tahun terakhir Kar[i].benefit = kar[i].benefit/f

End

A_r(count,x) Begin

Untuk i dari x sampai count-1

temp = temp + power(v,i-x)*(data[i][0]/data[x][0]); result = temp

end

function a_s (x,y) begin

Untuk i dari x sampai y

(13)

result = temp end

function a_ss(x,r,y) begin

Untuk i dari x sampai y

temp = temp + power(v*r,i-x) * data[i][0]/data[x][0]; result = temp;

end;

procedure hit_premi(count); begin

kalau benefit tetap maka

untuk i = 0 sampai sejumlah usia masuk-1

kar[i].premi = kar[i].benefit*a_r*power(v,usia_pensiun-kar[i].age)*(data[usia_pensiun][0]/data[kar[i].age][0]);

kar[i].premi = kar[i].premi/a_s bila tidak maka

untuk i = 0 sampai sejumlah usia masuk-1 kar[i].percent_premi =

kar[i].benefit*a_r*power(v,usia_pensiun-kar[i].age)*(data[usia_pensiun][0]/data[kar[i].age][0]); kar[i].percent_premi =

(14)

end

procedure hit_cadangan(count : integer); begin

kalau benefit tetap maka

untuk i = 0 sampai sejumlah usia masuk-1 untuk j = 1 sampai count-1-kar[i].age

reserve[i][j]*a_s(kar[i].age,kar[i].age+j)/a_s(kar[i].age,u sia_pensiun); reserve[i][j] := kar[i].benefit*anuitas_r*power(v,usia_pensiun- kar[i].age-j)*data[usia_pensiun][0]/data[kar[i].age+j][0]-(kar[i].premi*a_s(kar[i].age+j,usia_pensiun));

untuk j sesudahnya sampai usia maksimum-1

reserve[i][j] = kar[i].benefit* a_r(count,kar[i].age+j); bila tidak maka

untuk i = 0 sampai sejumlah usia masuk-1 untuk j = 1 sampai count-1-kar[i].age

reserve[i][j]*a_ss(kar[i].age,kenaikan_gaji+1,j)*a_ss(kar [i].age,kenaikan_gaji+1,usia_pensiun-kar[i].age);

reserve[i][j] :=

(15)

kar[i].age-j)*data[usia_pensiun][0]/data[kar[i].age+j][0]-(kar[i].percent_premi*kar[i].salary*a_ss(kar[i].age+j,ken aikan_gaji+1,usia_pensiun));

untuk j sesudahnya sampai usia maksimum-1

reserve[i][j] = kar[i].benefit* a_r(count,kar[i].age+j); end

hit_payment begin

setlength(temp,partisi);

jika partisi = 1 then i = usia_pensiun-kar[0].age

jika partisi = 2 then i = usia_pensiun - min(kar[0].age,kar[1].age) jika tidak keduanya maka i = usia_pensiun -

min(kar[0].age,min(kar[1].age,kar[2].age)); setlength(payment,i);

untuk j := 0 sampai indeks maksimum payment

payment[j] = 0 end print_to_file(count) begin appPath = getCurrentDir; saveFile.InitialDir = appPath; saveFile.Filter = 'Text File|*.txt|'; fileConfirm = saveFile.Execute();

(16)

jika fileConfirm = true maka begin

fileName = saveFile.FileName+’.txt’; AssignFile(fileHandle, fileName); Rewrite(fileHandle);

writeln(fileHandle, 'Perhitungan Premi Asuransi Pensiun'); writeln(fileHandle,' ');

writeln (fileHandle,' ');

untuk i := 0 sampai partisi-1 do begin

writeln(fileHandle, 'Usia : ' + inttostr(kar[i].age));

writeln(fileHandle, 'Benefit tahunan : ' + floattostrf(kar[i].benefit,format,15,0));

kalau benefit tetap maka

writeln(fileHandle,'Premi tahunan sebesar : ' + floattostrf(kar[i].premi,format,15,0));

writeln(fileHandle,'====================================== ============================================');

writeln(fileHandle,'Pembayaran ke Usia Premi Nilai Tunai');

writeln(fileHandle,'====================================== ============================================');

(17)

untuk j := 1 sampai usia_pensiun-kar[i].age do

writeln(fileHandle,j + kar[i].age + kar[i].premi + reserve[i][j])

payment[j-1] = payment[j]-1+kar[i].premi*kar[i].jmlh_kar untuk j sisanya

writeln(fileHandle,j + kar[i].age + 0 + reserve[i][j])

jika tidak maka else

temp := kar[i].salary;

kenaikan_gaji := (strtofloat(alpha.text)/100)+1;

writeln(fileHandle,'Persentasi premi sebesar : ' + floattostrf(kar[i].percent_premi*100,format,3,0)+ ' % dari gaji tahunan');

writeln(fileHandle,'========================================== ========================================');

writeln(fileHandle,'Pembayaran ke Usia Premi Nilai Tunai');

writeln(fileHandle,'========================================== ========================================');

for j := 1 to usia_pensiun-kar[i].age do

writeln(fileHandle,j + kar[i].age + kar[i].premi + reserve[i][j]) untuk j sisanya

(18)

writeln(fileHandle,j + kar[i].age + 0 + reserve[i][j]) writeln(fileHandle,'======================================== =========================================='); writeln(fileHandle,' '); writeln(fileHandle,' '); end;

writeln(fileHandle,'Total Pembayaran Perusahaan');

writeln(fileHandle,'=========================================='); writeln(fileHandle,'Pembayaran ke Total Premi');

writeln(fileHandle,'=========================================='); for i := 0 to high(payment) do writeln(fileHandle,i+1,payment[i]) flush(fileHandle); CloseFile(fileHandle); end;

procedure TForm1.cetakClick(Sender: TObject); begin

jika validasi sukses maka

ambil data dari tabel penduduk

hitung jumlah data

(19)

v := 1/(1+(strtofloat(bunga.text)/100)); if cek1.Checked = true then partisi := 1 else if cek2.checked = true then partisi := 2 else partisi := 3; setlength(kar,partisi); setlength(reserve,partisi,count); initialize(); hit_benefit(); hit_premi(count); hit_cadangan(count); hit_payment(); print_to_file(count);

showmessage('Hasil ilustrasi Anda sudah tersimpan'); end.

3.7.2 Modul Edit Database //kalau tombol entry data diklik

procedure TForm4.Button5Click(Sender: TObject); begin

set panjang array penampung sebanyak max

tampilkan input_data.text := 'Jumlah yang hidup pada usia 0'; end

(20)

//kalau tombol OK diklik

procedure TForm4.okClick(Sender: TObject); begin

lakukan perulangan dari i= 0 sampai sampai usia maksimum tampilkan teks jumlah yang hidup pada usia i

masukkan data sebelumnya ke memo end;

procedure TForm4.saveClick(Sender: TObject); begin

Ambil isi tabel penduduk

Hitung jumlah data tabel penduduk Hapus seluruh data tabel penduduk Untuk i dari 0 sampai usia maksimum

Masukkan semua data baru ke tabel

Tampilkan pesan 'Data penduduk baru sudah tersimpan' end;

Figur

Memperbarui...

Referensi

Memperbarui...

Related subjects :