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
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
• 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 : ...
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
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.
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
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
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
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 :
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
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
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
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 =
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] :=
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();
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,'====================================== ============================================');
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
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
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
//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;