BAB 5 HASIL DAN PEMBAHASAN
5.1. Ekstraksi Hasil Pengumpulan Data Setiap data yang didapatkan dari Sriwijaya Air merupakan data aktual, yaitu data hasil dari kegiatan operasional yang telah dilaksanakan pada waktu yang lalu. Data tersebut diolah dan data olahan tadi akan digunakan sebagai variabel-variabel dalam pencarian frekuensi optimum pada setiap rute penjadwalan penerbangan di Sriwijaya Air. Penelitian ini akan menentukan frekuensi penerbangan untuk periode bulan Juli sampai September 2004.
5.1.1. Peramalan Permintaan Peramalan permintaan ini berdasarkan penerbangan harian pada semua rute yang tercantum dalam tabel 2.1. Dasar dari hasil peramalan permintaan ini adalah data permintaan pada bulan-bulan sebelumnya, yaitu permintaan pasar harian setiap bulannya. Ekstraksi hasil rata-rata data permintaan untuk periode April 2004 sampai Juni 2004 dapat dilihat dalam lampiran 1. Peramalan akan dilakukan dengan menggunakan metode regresi linier. Metode ini digunakan karena data yang ada ternyata menunjukkan pola tren positif. Selain itu, perusahaan juga menggunakan metode yang tersebut untuk melakukan peramalan.
93
Peramalan ini akan memprediksikan permintaan periode Juli 2004 sampai dengan September 2004.
5.1.2. Biaya Operasional Setiap Rute Jenis-jenis biaya operasional untuk Sriwijaya Air telah dibahas pada bab sebelumnya. Cara perhitungan dari masing-masing biaya tersebut sesuai dengan data sebagai berikut : 1. Biaya tipe I (Caj) yaitu biaya tidak langsung. a. Biaya overhead pegawai, mencakup gaji dan tunjangan semua pegawai di Sriwijaya Air kecuali tunjangan khusus awak pesawat. Dengan total pegawai termasuk awak pesawat sekitar 280 orang, pembebanan biaya untuk overhead ini per jamnya adalah sekitar Rp 1.440.000,-. b. Biaya promosi, mencakup segala usaha pemasaran dan promosi untuk dengan tujuan meningkatkan penjualan tiket. Pembebanan biaya promosi per jam block time adalah Rp 40.000,-. c. Biaya penyusutan, mencakup penyusutan investasi kendaraan operasional. Pembebanan biaya penyusutan ini setiap jam block time besarnya adalah sekitar Rp 33.000,-. d. Biaya tunjangan khusus awak pesawat, mencakup allowance, tunjangan jam terbang, biaya asuransi lost of license untuk awak kokpit (kapten dan co pilot) dan biaya personal accident untuk awak kabin (pramugari). Dalam setiap penerbangan dibutuhkan 1 orang pilot, 1 orang co pilot, dan 4 orang
94
pramugari (1 orang masing-masing tingkat). Pembebanan biaya tunjangan khusus ini setiap jam block time adalah Rp 200.000,-. e. Biaya lain-lain, mencakup biaya seperti listrik, air, telepon, dan bahan bakar mobil operasional. Pembebanan per jam block time biaya ini adalah sekitar Rp 35.000,-. Pada tabel 5.1 berikut ini dapat dilihat nilai dari biaya operasional tidak langsung (indirect operational cost). Tabel 5.1 Total Biaya Tidak Langsung
Seperti terlihat pada tabel 5. di atas, total indirect operational cost (IOC) per jam block time adalah sebesar Rp 1.748.000,-. Guna mengetahui jumlah biaya tetap setiap rutenya, biaya per jam tadi harus dikalikan dengan block time masingmasing rute yang ada. Pada tabel 5.2 berikut ini dapat dilihat besarnya biaya tetap untuk masing-masing rute penerbangan.
95
Tabel 5.2 Biaya Tidak Langsung setiap Rute
2. Biaya tipe II (Cbj) yaitu biaya langsung berdasarkan jumlah penumpang. a. Biaya catering, disubkontrakkan kepada P.T. Duta Boga Sarana. Jumlah makanan yang dipesan disesuaikan dengan jumlah penumpang yang diangkut saja. Besarnya biaya ini adalah Rp 6.000,- per penumpang, tidak termasuk infant. b. Biaya pencetakan dokumen, yang dicetak tidak menurut jumlah penumpang, tapi untuk memenuhi keperluan beberapa periode. Yang akan dibebankan untuk setiap frekuensi penerbangan disesuaikan dengan jumlah penumpang yang membeli tiket tersebut. Biaya pencetakan tiket Rp 10.000,- per lembar. Khusus untuk biaya tipe II ini, karena besarnya akan bergantung pada jumlah pesawat yang diangkut, maka tidak dapat diperoleh total aktualnya saat ini, tapi
96
setelah diketahui jumlah penumpang yang akan diangkut. Total dari biaya tipe II itu sendiri adalah Rp 16.000,-. Pada linear programming biaya ini akan langsung mengurangi pendapatan dari harga tiket. 3. Biaya tipe III (Ccj) yaitu biaya langsung berdasarkan frekuensi penerbangan. a. Biaya pesawat, disubkontrakkan kepada P.T. ANI terdiri atas biaya leasing sekaligus maintenance pesawat yang besarnya per jam block time Rp 10.400.000,-. Biaya tersebut sudah termasuk semua jenis maintenance yang perlu dilakukan, kecuali untuk non routine maintenance yang pada penelitian ini diabaikan karena tidak dapat dipastikan waktu perlunya dilakukan maintenance tersebut. Pada tabel 5.3 dapat dilihat biaya maintenance untuk masing-masing rute. b. Biaya bahan bakar, dengan harga avtur digunakan per 1 Oktober Rp 3.674,per liter. Perhitungan biaya bahan bakar ini tidak dapat dilakukan dengan mengalikan total jarak dengan rata-rata konsumsi bahan bakar setiap pesawat, karena pada operasionalnya konsumsi avtur umumnya lebih banyak pada saat pesawat akan lepas landas dan saat akan mendarat. Oleh karena itu perhitungan biaya ini harus digunakan nilai rata-rata konsumsi bahan bakar setiap rute yang ada. Hasil rata-rata konsumsi yang digunakan untuk satu jam block time setiap pesawat adalah sekitar Rp 18.000.000,-. Pada tabel 5.3 berikut ini dapat dilihat biaya bahan bakar untuk masing-masing rute.
97
Tabel 5.3 Biaya Bahan Bakar dan Pesawat setiap Rute
c. Biaya ground handling, disubkontrakkan kepada P.T. Maxindo dengan biaya rata-rata sebesar Rp 1.500.000,- untuk satu siklus yang terdiri dari handling pesawat setelah mendarat dan sebelum lepas landas. Pada tabel 5.4 berikut ini dapat dilihat total biaya variabel yang dikeluarkan untuk masing-masing rute. Sebagai catatan, block time yang dicantumkan dalam tabel adalah dalam satuan menit.
98
Tabel 5.4 Total Biaya Langsung terhadap Frekuensi Penerbangan
Penentuan besarnya biaya operasional setiap rute untuk sekali penerbangan, dilakukan dengan mengalikan biaya operasional per jam utilisasi pesawat dengan block time dari rute yang ditempuh. Biaya operasional per jam utilisasi pesawat didapatkan dari penjumlahan biaya tidak langsung ditambahkan dengan biaya langsung per frekuensi penerbangan. Hasil perhitungan biaya operasional setiap rute dapat dilihat pada tabel 5.5 berikut ini, terkecuali biaya tipe II yang akan langsung mengurangi harga tiket pada linear programming.
99
Tabel 5.5 Biaya Operasional setiap Rute Sriwijaya Air
5.1.3. Rata-Rata Jumlah Penumpang Setiap Rute Hasil dari peramalan pemintaan pasar seperti pada lampiran 2 dapat digunakan untuk menentukan rata-rata jumlah penumpang yang diangkut di setiap rute. Rata-rata jumlah penumpang setiap rute ini didapatkan dengan cara menentukan frekuensi penerbangan setiap rute per harinya. Penentuan jumlah frekuensi penerbangan setiap hari dilakukan dengan membagi rata-rata peramalan permintaan setiap hari dengan kapasitas total pesawat yang digunakan. Pada rumus ini, akan dilakukan validasi dari hasil pembagiannya. Hal ini berhubungan dengan batasan minimal jumlah penumpang yang bergantung pada break even point dari masing-masing rute seperti telah dijalaskan pada bab 4. Bila hasilnya kurang dari break even point rute
100
bersangkutan, hasilnya akan dibulatkan ke bawah kecuali apabila hasilnya setelah dibulatkan ke bawah ternyata nol, akan dibuat 1 untuk menunjukkan kerugian aktualnya pada fungsi tujuan. Sebaliknya bila hasilnya sama dengan atau lebih dari break even point rute bersangkutan, hasilnya akan dibulatkan ke atas. Break even point dari masing-masing rute dapat dilihat pada tabel 5.7. Model matematis dari perhitungan di atas adalah sebagai berikut : Fp =
Dijt S
dimana : Fp
= perkiraan frekuensi penerbangan.
Dijt
= rata-rata peramalan permintaan hari i rute j periode t.
S
= kapasitas maksimum pesawat Boeing 737-200. Guna menentukan rata-rata jumlah penumpang per hari pada setiap rute dapat
digunakan rumus berikut :
Xp =
Dijt Fp
dimana :
Xp
= rata-rata jumlah penumpang.
Dijt
= rata-rata peramalan permintaan hari i rute j periode t.
Fp
= perkiraan frekuensi penerbangan.
101
5.1.4. Parameter Fungsi Tujuan Parameter fungsi tujuan linear programming {(Rj – Cbj)*Xpij}-Cj] terdiri atas beberapa variabel yaitu tarif penerbangan (Rj), biaya langsung berdasarkan jumlah penumpang (Cbj), rata-rata jumlah penumpang yang diangkut setiap rute (Xpij) dan biaya operasional untuk setiap rute penerbangan (Cj). Dari keempat variabel tadi yang belum diketahui nilainya adalah rata-rata harga tarif penerbangan. Rata-rata tarif penerbangan digunakan untuk menghilangkan fluktuasi harga dari waktu ke waktu. Hal tersebut dilakukan dengan mencari nilai rata-rata dari harga tarif semua sub kelas yang dibuat bagian komersil. Rata-rata harga tarif penerbangan di setiap rute sekali jalan dapat dilihat pada tabel 5.6 berikut ini. Tabel 5.6 Rata-Rata Harga Tarif Penerbangan di Sriwijaya Air
Cara perhitungan rata-rata jumlah penumpang yang diangkut setiap rute dan biaya operasional untuk setiap rute sudah dibahas pada bagian sebelumnya. Rata-rata jumlah penumpang yang diangkut setiap rute dapat dilihat pada lampiran 4. Sedangkan biaya operasional untuk setiap rute penerbangan dapat dilihat pada tabel 5.5. Seperti terlihat pada persamaannya, fungsi tujuan didapatkan dengan mengalikan
102
rata-rata tarif penerbangan setiap rute yang telah dikurangi dengan biaya langsung berdasarkan jumlah penumpang dengan rata-rata jumlah penumpang yang diangkut setiap rute, kemudian dikurangi dengan biaya operasional untuk setiap rute penerbangan. Pada tabel 5.7 berikut ini dapat dilihat besarnya biaya operasional dan harga tarif setelah pengurangan biaya langsung beserta titik break even setiap rute. Tabel 5.7 Titik Break Even setiap Rute
Dari hasil perhitungannya, akan diperoleh parameter yang akan digunakan pada
linear programming guna mencari solusi paling optimal dari jumlah frekuensi penerbangan di setiap rute yang ada. Perhitungan dari parameter fungsi tujuan tadi dapat dilihat pada lampiran 5.
103
5.2. Hasil Analisis Data Dan Pembahasan 5.2.1. Analisa Hasil Peramalan Seperti sudah dibahas sebelumnya, bahwa data permintaan Sriwijaya Air di luar dugaan tidak menunjukkan pola musiman seperti layaknya data permintaan perusahaan penerbangan. Data permintaan tersebut lebih mengarah kepada pola tren yang semakin meningkat. Keadaan ini sebenarnya masih dapat dijelaskan secara logis. Alasan utamanya adalah jenis periode yang diambil untuk melakukan peramalan. Biasanya data permintaan jasa penerbangan akan meningkat pada hari libur nasional dan akhir minggu yakni mulai hari Jumat sampai Senin karena belakangan ini pemerintah menetapkan libur tengah minggu dipindahkan ke hari Senin atau Jumat. Peningkatan pada akhir minggu dan pada hari libur nasional itulah yang membentuk pola musiman pada data permintaan. Akan tetapi, karena data permintaan tersebut dibagi berdasarkan nama-nama hari dari hari Senin sampai Minggu, maka pola musiman seperti yang disebutkan sebelumnya tidak akan terlihat. Yang terlihat hanyalah kecenderungan peningkatan permintaan bersamaan dengan peningkatan popularitas perusahaan secara perlahan-lahan. Pola musiman juga mungkin terlihat apabila data yang diperoleh cukup banyak, setidaknya mencapai satu tahun sehingga dapat melihat pola musiman pada liburan panjang seperti liburan sekolahan, dan liburan hari raya seperti Lebaran dan Natal serta Tahun Baru. Tapi hal ini tidak dimungkinkan karena usia perusahaan yang baru saja satu tahun, dan beberapa rute bahkan baru dibuka kurang dari setengah tahun pada saat penelitian ini dilakukan. Jadi dengan beberapa kondisi tadi, cukup wajar bila terjadi pola tren pada
104
data permintaan Sriwijaya Air. Untuk menjaga ketepatan hasil peramalan, sebaiknya pada usia awal perusahaan, sebaiknya dilakukan peramalan ulang setiap dua atau tiga bulan, sampai pada saat mereka mempunyai data yang cukup banyak untuk benarbenar melihat pola sebenarnya dari data permintaan mereka dan mengevaluasi ulang metode peramalan yang paling tepat untuk diterapkan. Hasil peramalan dari semua rute menunjukkan peningkatan. Hal ini tentunya disebabkan oleh pola tren yang positif sehingga hasil perhitungan dengan regresi linier menunjukkan adanya peningkatan permintaan untuk periode Juli sampai dengan September 2004. Rute yang peningkatannya paling pesat adalah rute andalan dari Sriwijaya Air yaitu rute Pangkal Pinang. Sedangkan jumlah permintaan yang paling banyak seperti sudah diperkirakan berkisar pada hari Sabtu dan Minggu. Hasil dari peramalan permintaan harian secara lengkap dapat dilihat pada lampiran 2. Sedangkan tabulasinya dapat dilihat pada lampiran 3.
5.2.2. Analisa Biaya Operasional Biaya operasional sebagian besar dibebankan kepada setiap rute berdasarkan
block time dari masing-masing rute tersebut. Dari sebab itu, rute yang memiliki block time paling besarlah yang biaya operasionalnya paling besar. Pada tabel 5.5 sudah diperlihatkan biaya operasional masing-masing rute tersebut. Dari tabel 5.4 dapat dilihat bahwa rute PKY-CGK memiliki block time yang paling lama yakni 90 menit. Rute tersebut juga yang secara otomatis memiliki biaya operasional paling besar di
105
antara rute-rute lainnya. Sedangkan rute CGK-TJQ memiliki block time paling singkat yakni 50 menit sekaligus memiliki biaya operasional yang paling rendah.
5.2.3. Analisa Rata-Rata Jumlah Penumpang Cara perhitungan rata-rata jumlah penumpang telah dibahas pada bagian sebelumnya. Rata-rata jumlah penumpang (Xp) nantinya akan digunakan untuk menghitung fungsi tujuan dalam linear programming, sedangkan perkiraan frekuensi penerbangan (Fp) akan digunakan sebagai fungsi pembatas dalam linear
programming. Perkiraan frekuensi penerbangan secara bertahap juga mengalami peningkatan dari waktu ke waktu. Hal ini sehubungan dengan hasil peramalan permintaan yang juga semakin meningkat dari waktu ke waktu. Rata-rata jumlah penumpang banyak yang mencapai kapasitas maksimum pesawat karena sisa hasil pembagian rata-rata peramalan permintaan dengan kapasitas pesawat banyak yang tidak memenuhi syarat untuk dipenuhi dengan penambahan frekuensi. Apabila memenuhi syarat, maka rata-rata jumlah penumpang setiap frekuensinya tidak akan mencapai kapasitas maksimum pesawat. Hasil perhitungan berdasarkan peramalan untuk rata-rata jumlah penumpang dan perkiraan frekuensi penerbangan per hari untuk setiap rute dapat dilihat pada lampiran 4.
5.2.4. Analisa Optimasi Fungsi Tujuan Fungsi tujuan untuk linear programming telah dibahas pada bab 4 beserta dengan formula model matematisnya. Dari fungsi tujuan tersebut, kita dapat
106
melakukan perhitungan untuk mencari frekuensi penerbangan yang paling optimal dan fungsi tujuan, dalam hal ini berupa keuntungan yang optimal. Persamaan fungsi tujuan tersebut dibatasi oleh beberapa fungsi pembatas yaitu maksimum frekuensi penerbangan, waktu operasional harian pesawat, dan persamaan jumlah frekuensi antara dua titik penerbangan. Seharusnya semua fungsi dapat dijadikan dalam satu
file, tapi oleh karena batasan jumlah constraint dari software Lindo maka fungsi tujuan dan pembatas linear programming ini harus dipisahkan berdasarkan nama harinya. Perhitungan frekuensi optimal dan fungsi tujuannya adalah sebagai berikut : Z = Maksimasi (Profit) = Maksimasi (Revenue – Cost) Fij = Maksimasi [((Rj – Cbj)* Xpij) – (Caj + Ccj)] Fij Perlu diperhatikan bahwa biaya tipe II (biaya langsung berdasarkan jumlah penumpang) tidak dapat dimasukkan langsung sebagai biaya (cost) tapi sebagai pengurangan pendapatan (revenue) sehingga rumus fungsi tujuan perlu sedikit penyesuaian agar memudahkan pemahaman dan perhitungan. Oleh karena keterbatasan software Lindo yang digunakan, maka fungsi-fungsi pada linear
programming penelitian ini tidak dapat dimasukkan untuk satu bulan sekaligus, tapi harus dipecah-pecah per nama harinya pada bulan bersangkutan. Berikut ini adalah contoh fungsi yang digunakan untuk hari Senin bulan Juli 2004 untuk 2 pesawat :
107
MAX 2903000 F11 - 27667 F12 + 16136667 F13 + 13624333 F14 + 11703667 F15 + 9191333 F16 + 13570667 F17 + 11058333 F18 + 12318333 F19 + 9806000 F110 + 12539333 F111 + 12372000 F112 + 14200667 F113 + 11688333 F114 SUBJECT TO 1) F11 <= 1 2) F12 <= 1 3) F13 <= 2 4) F14 <= 1 5) F15 <= 2 6) F16 <= 2 7) F17 <= 1 8) F18 <= 1 9) F19 <= 3 10) F110 <= 3 11) F111 <= 1 12) F112 <= 1 13) F113 <= 1 14) F114 <= 1 15) F11 - F12 = 0 16) F13 - F14 = 0 17) F15 - F16 = 0 18) F17 - F18 = 0 19) F19 - F110 = 0 20) F111 - F112 = 0 21) F113 - F114 = 0 22) 90 F11 + 100 F12 + 110 F13 + 115 F14 + 95 F15 + 100 F16 + 80 F17 + 85 F18 + 85 F19 + 90 F110 + 115 F111 + 120 F112 + 80 F113 + 85 F114 <= 1740
Dimana : i : 1, 2, 3, …., 7 1 = Senin
2 = Selasa
3 = Rabu
5 = Jumat
6 = Sabtu
7 = Minggu
4 = Kamis
j : 1, 2, 3, …., 14 1 = CGK-BKS
8 = TJQ-CGK
2 = BKS-CGK
9 = CGK-PGK
3 = CGK-PNK
10 = PGK-CGK
4 = PNK-CGK
11 = CGK-PKY
5 = CGK-DJB
12 = PKY-CGK
108
6 = DJB-CGK
13 = CGK-PLM
7 = CGK-TJQ
14 = PLM-CGK
Jadi misalnya F114 itu berarti jumlah frekuensi optimal untuk hari Senin rute PLMCGK. Hasil keluaran dari fungsi di atas pada software Lindo adalah sebagai berikut : LP OPTIMUM FOUND AT STEP 10 OBJECTIVE FUNCTION VALUE 1) 0.2138830E+09 VARIABLE VALUE REDUCED COST F11 0.184211 0.000000 F12 0.184211 0.000000 F13 1.000000 0.000000 F14 1.000000 0.000000 F15 2.000000 0.000000 F16 2.000000 0.000000 F17 1.000000 0.000000 F18 1.000000 0.000000 F19 3.000000 0.000000 F110 3.000000 0.000000 F111 1.000000 0.000000 F112 1.000000 0.000000 F113 1.000000 0.000000 F114 1.000000 0.000000 NO. ITERATIONS= 10
Dari hasil yang dikeluarkan di atas, pada F11 dan F12 hasilnya 0.184211 sehingga untuk rute Bengkulu di hari Senin selama bulan Juli tidak akan dibuka karena tidak memenuhi syarat total waktu operasional harian pesawat (fungsi nomor 22 pada SUBJECT TO) walaupun secara finansial bila dilihat dari fungsi tujuannya masih menguntungkan. Jumlah frekuensi penerbangan yang paling optimal untuk setiap rute per hari selengkapnya dapat dilihat pada lampiran 6, 8 dan 10.
109
5.2.5. Perancangan Sistem Informasi Penjadwalan 5.2.5.1. Kebutuhan Sistem Informasi Perusahaan Kebutuhan sistem informasi dari Sriwijaya Air sendiri adalah suatu sistem yang selain dapat digunakan untuk membentuk fungsi optimasi sebagai alat perencanaan mereka, tapi yang terlebih mendesak (karena berhubungan dengan kegiatan harian mereka), yakni sistem yang dapat mempermudah kegiatan harian bagian penjadwalan mereka dalam hal ini untuk menyusun jadwal harian. Perusahaan juga mengharapkan adanya suatu sistem kontrol terhadap maintenance request yang dilakukan P.T. ANI selaku subcontract mereka untuk mencegah adanya request yang terlalu dini atau terlambat dari standar selang waktu maintenance pesawat yang mereka gunakan.
5.2.5.2. Data Flow Diagram Sistem informasi penjadwalan akan dianalisa menggunakan Data Flow
Diagram untuk merepresentasikan sistem penjadwalan di Sriwijaya Air. Seperti umumnya, data flow diagram akan terdiri atas diagram konteks, diagram 0 (nol) dan diagram rinci. Sistem penjadwalan yang berlaku di Sriwijaya Air pada saat ini masih dilakukan secara manual. Pada kegiatan rutinnya, penjadwalan ditentukan oleh bagian komersil yang telah menghitung aspek teknis dan finansial dari setiap operasi penerbangan. Jadwal penerbangan umumnya disusun satu hari sebelum jadwal tersebut dijalankan. Dalam kondisi normal, dalam arti tidak ada pesawat yang rusak atau sedang dalam maintenance, jadwal akan berjalan secara reguler setiap harinya. Tapi apabila di tengah hari terjadi kerusakan pesawat sehingga mengharuskan
110
perubahan alokasi pesawat, maka jadwal harus disusun ulang secepatnya oleh bagian komersil. Sistem aplikasi yang akan dibuat menjadikan proses penyusunan jadwal Sriwijaya Air semi otomatis. Sistem belum bisa dibuat otomatis karena pada praktek di lapangan, kadang terjadi perubahan waktu penerbangan, misalnya rute ke Palangkaraya seharusnya diberangkatkan dari Jakarta sore hari ingin dimajukan menjadi pagi hari, maka bagian komersil juga harus menyusun jadwal pesawat yang baru. Otomatisasi akan diterapkan pada penyesuaian jadwal penerbangan dengan jadwal maintenance periodik. Sehingga apabila salah satu pesawat harus dimaintenance maka pesawat itu secara otomatis tidak dapat dialokasikan untuk melakukan penerbangan selama periode maintenance itu berlangsung. Data flow
diagram dari sistem penjadwalan penerbangan di Sriwijaya Air dapat dilihat dari gambar 5.1 sampai 5.12 berikut ini.
111
biaya_hapus biaya_ubah biaya_baru fungsi_optimasi periode lap_penumpang lap_jadwal lap_utilisasi jdwl_geser block rute_hapus rute_baru pswt_ubah pswt_baru pswt_hapus
Komersil
periode_jadwal tgl_jadwal tipe_tambah interval tipe_hapus wkt_inisial counter inisial_hapus wkt_jdwl
Sistem Penjadwalan Penerbangan
tolak_request setuju_request
hapus_jdwl cek_maint periode_maint pswt_rusak request_maintenance
Gambar 5.1 Diagram Konteks
PT. ANI
112
biaya_baru biaya_ubah biaya_hapus Biaya Operasi
Komersil
5.0 Mendata Biaya Operasional
jdwl_geser
11.0 * Buat Fungsi Optimalisasi
rute_baru block rute_hapus 1.0 Mendata Pesawat
pswt_baru pswt_ubah pswt_hapus
periode
2.0 Mendata Rute
fungsi_optimal wkt_jdwl hapus_jdwl
Komersil
counter inisial_hapus
tipe_tambah interval tipe_hapus
wkt_inisial
3.0 Mendata Tipe Maintenance
Pesawat 4.0 Inisialisasi Counter
6.0 Susun Jadwal Terbang
Rute
Jadwal Maintenance
cek_maint periode_lap periode_maint
Maintenance
Jadwal Terbang
tgl_lap 10.0 Buat Laporan
lap_utilisasi
7.0 Kondisi Tak Terjadwal
lap_jadwal lap_penumpang setuju_request 9.0 * Lihat Jadwal Maintenance
8.0 * Cek Maintenance Berikut
request_maintenance
tolak_request
Gambar 5.2 Diagram Nol
PT ANI
pswt_rusak
113
1.1 * Tambah Pesawat
pswt_baru
Komersil
pswt_hapus
pswt_ubah
1.2 * Ubah Pesawat
1.3 * Hapus Pesawat
Gambar 5.3 Diagram Rinci 1.0 (Level 2)
Pesawat
114
2.1 * Tambah Rute
rute_tambah
Komersil
rute_hapus
block
2.2 * Ubah Block Time
2.3 * Hapus Rute
Gambar 5.4 Diagram Rinci 2.0 (Level 2)
Rute
115
3.1 * Tambah Tipe Maintenance
tipe_tambah
Komersil
tipe_hapus
interval
3.2 * Ubah Interval
3.3 * Hapus Tipe Maintenance
Gambar 5.5 Diagram Rinci 3.0 (Level 2)
Maintenance
116
4.1 * Inisialisasi Counter
wkt_inisial
Komersil
inisial_hapus
counter
4.2 * Ubah Counter
4.3 * Hapus Inisialisasi
Gambar 5.6 Diagram Rinci 4.0 (Level 2)
Jadwal Maintenance
117
5.1 * Input Biaya Baru
biaya_baru
Pesawat
Rute
Komersil
biaya_hapus
biaya_ubah
5.2 * Ubah Biaya Operasional
5.3 * Hapus Biaya Operasional
Gambar 5.7 Diagram Rinci 5.0 (Level 2)
Biaya Operasi
118
Komersil
hapus_jdwl
wkt_jdwl
Pesawat
6.2 * Hapus Jadwal
6.1 * Cek Pesawat
pswt_ready
Rute
6.3 * Susun Jadwal
Jadwal Terbang
Jadwal Maintenance Maintenance
Gambar 5.8 Diagram Rinci 6.0 (Level 2)
119
Komersil
PT ANI
jdwl_geser
pswt_rusak
7.1 * Kondisi Tak Terjadwal
delay
ahead
ubah_jadwal
7.2 * Jadwal Terlambat
Jadwal Maintenance
7.3 Perubahan Jadwal
7.4 * Jadwal Maju
Jadwal Terbang
Gambar 5.9 Diagram Rinci 7.0 (Level 2)
120
10.1 * Laporan Jadwal Terbang
lap_jadwal
tgl_lap
periode_lap Komersil lap_utilisasii
10.2 * Laporan Utilisasi Pesawat
periode_lap
lap_penumpang
10.3 * Laporan Jumlah Penumpang
Gambar 5.10 Diagram Rinci 10.0 (Level 2)
Jadwal Terbang
121
ubah_jadwal
tambah_jdwl
7.3.2 * Tambah Jadwal
7.3.1 * Perubahan Jadwal
Jadwal Terbang
hapus_jdwl
Jadwal Maintenance
7.3.3 * Hapus Jadwal
Gambar 5.11 Diagram Rinci 7.3 (Level 3)
5.2.5.3. Entity Relationship Diagram Pada gambar Data Flow Diagram dapat dilihat bahwa sistem informasi penjadwalan melibatkan beberapa data store yang pada perancangan aplikasi akan dijadikan sebagai acuan pembuatan basis data (database). Entitas yang terlibat dalam sistem tersebut dapat dilihat hubungannya satu sama lain dalam Entity Relationship
Diagram seperti pada gambar 5.12 berikut ini.
122
Biaya Operasi
Pesawat
Jadwal Terbang
Rute
Jadwal Maintenance
Maintenance
Gambar 5.12 Entity Relationship Diagram
5.2.5.4. Kamus Data Biaya Operasi = @tipepesawat + @asal + @tujuan + kapasitas + biaya + tarif + bep; Jadwal Maintenance = @namapesawat + @tipemaint + hitung + durasi + mulai + selesai + statusm; Jadwal Terbang = @nopenerbangan + @tanggal + asal + tujuan + namapesawat + wktberangkat + wkttiba + jmlpenumpang + permintaan; Maintenance = @tipemaint + durasi + selang; Pesawat = @namapesawat + tipepesawat + kapasitas + status; Rute = @asal +@ tujuan + blocktime + tarif;
5.2.5.5. Normalisasi 1. UNF : Biaya Operasi = {@tipepesawat + kapasitas} + {@asal + @tujuan + tarif}+ biaya + bep
123
1NF : Biaya Operasi = @tipepesawat + kapasitas + @asal + @tujuan + tarif + biaya 2NF : Biaya Operasi = @tipepesawat + @asal + @tujuan + biaya Pesawat = tipepesawat + kapasitas Rute = @asal + @tujuan + tarif
2. UNF : Jadwal Maintenance = @namapesawat + {@tipemaint + durasi}+ hitung + mulai + selesai + statusm 1NF : Jadwal Maintenance = @namapesawat + @tipemaint + hitung + mulai + statusm Maintenance = @tipemaint + durasi
3. UNF : Jadwal Terbang = @tanggal + @nopenerbangan + namapesawat + {@asal + @tujuan + blocktime} + wktberangkat + wkttiba + jmlpenumpang + permintaan 1NF : Jadwal Terbang = @tanggal + @nopenerbangan + namapesawat + #asal + #tujuan + wktberangkat + wkttiba + jmlpenumpang + permintaan Rute = @asal + @tujuan + blocktime
124
4. UNF : Maintenance = {@tipemaint + durasi + selang} 1NF : Maintenance = @tipemaint + durasi + selang
5. UNF : Pesawat = {@namapesawat + tipepesawat + kapasitas + status} 1NF : Pesawat = @namapesawat + tipepesawat + kapasitas + status
6. UNF : Rute = {@asal + @tujuan + blocktime + tarif} 1NF : Rute = @asal + @tujuan + blocktime + tarif
125
5.2.5.6. Spesifikasi File Tabel 5.8 Spesifikasi File Pesawat
Tabel 5.9 Spesifikasi File Rute
Tabel 5.10 Spesifikasi File Maintenance
126
Tabel 5.11 Spesifikasi File Jadwal Terbang
Tabel 5.12 Spesifikasi File Jadwal Maintenance
127
Tabel 5.13 Spesifikasi File Biaya Operasi
5.2.5.7. Spesifikasi Proses FormMenuUtama OPEN file Jadwal Maintenance READ namapesawat, tipemaint WHERE mulai = now AND statusm = false AND NOT (mulai = selesai) IF Recordcount > 0 THEN OPEN file Pesawat UPDATE status = false WHERE namapesawat = namapesawat CLOSE Pesawat ELSE OPEN file Jadwal Maintenance
128
READ namapesawat, tipemaint WHERE selesai = now AND statusm = false IF Recordcount > 0 THEN UPDATE statusm = true, hitung = 0 WHERE namapesawat = namapesawat AND tipemaint <= tipemaint CLOSE Jadwal Maintenance OPEN file Pesawat UPDATE status = true WHERE namapesawat = namapesawat CLOSE Pesawat IF Database Pesawat CLICK THEN SHOW FormDBPesawat IF Database Rute CLICK THEN SHOW FormDBRute IF Database Maintenance CLICK THEN SHOW FormDBMaintenance IF Inisialisasi Awal CLICK THEN SHOW FormInisialisasi IF Biaya Operasional CLICK THEN SHOW FormOperasi IF Jadwal Penerbangan CLICK THEN SHOW FormJPenerbangan IF Kondisi Tak Terjadwal CLICK THEN SHOW FormNRMaintenance IF Input Jumlah Penumpang CLICK THEN SHOW FormPenumpang IF Cek Maintenance Berikut CLICK THEN SHOW FormJMaintenance IF Jadwal Maintenance CLICK THEN SHOW FormTMaintenance IF Laporan Jadwal Penerbangan CLICK THEN SHOW FormLapPenerbangan IF Laporan Utilisasi Pesawat CLICK THEN SHOW FormLapUtilisasi IF Laporan Jumlah Penumpang CLICK THEN SHOW FormLapPenumpang IF Fungsi Optimalisasi CLICK THEN SHOW FormOptimasi
129
IF Peramalan Data Trend CLICK THEN SHOW FormTrend IF Peramalan Data Musiman CLICK THEN SHOW FormMusiman END
FormDBPesawat IF Tambah CLICK THEN INPUT namapesawat, tipepesawat, kapasitas, status IF Ubah CLICK THEN INPUT tipepesawat, kapasitas, status IF Simpan CLICK THEN IF Tambah CLICK THEN OPEN file Pesawat READ file Pesawat WHERE namapesawat = namapesawat IF Recordcount > 0 THEN SHOWMESSAGE “Nama Pesawat terduplikasi” ELSE WRITE namapesawat, tipepesawat, kapasitas, status TO Pesawat CLOSE Pesawat ELSE IF Ubah CLICK THEN OPEN file Pesawat UPDATE tipepesawat, kapasitas, status WHERE namapesawat = namapesawat CLOSE Pesawat
130
IF Hapus CLICK THEN INPUT namapesawat OPEN file Pesawat DELETE FROM Pesawat WHERE namapesawat = namapesawat DELETE FROM Jalan WHERE namapesawat = namapesawat CLOSE Pesawat END
FormDBRute IF Tambah CLICK THEN INPUT asal, tujuan, blocktime, tarif IF Ubah CLICK THEN INPUT blocktime, tarif IF Simpan CLICK THEN IF Tambah CLICK THEN OPEN file Rute READ file Rute WHERE asal = asal AND tujuan = tujuan IF Recordcount > 0 THEN SHOWMESSAGE “Asal dan Tujuan terduplikasi” ELSE WRITE asal, tujuan, blocktime, tarif TO Rute CLOSE Rute
131
ELSE IF Ubah CLICK THEN OPEN file Rute UPDATE blocktime, tarif WHERE asal = asal AND tujuan = tujuan CLOSE Rute IF Hapus CLICK THEN INPUT asal, tujuan OPEN file Rute DELETE FROM Rute WHERE asal = asal AND tujuan = tujuan CLOSE Rute END
FormDBMaintenance IF Tambah CLICK THEN INPUT durasi, selang IF Ubah CLICK THEN INPUT tipemaint, durasi, selang IF Simpan CLICK THEN IF Tambah CLICK THEN OPEN file Maintenance READ file Maintenance WHERE tipemaint = tipemaint IF Recordcount > 0 THEN SHOWMESSAGE “Tipe Maintenance terduplikasi”
132
ELSE WRITE tipemaint, durasi, selang TO Maintenance CLOSE Maintenance ELSE IF Ubah CLICK THEN OPEN file Maintenance UPDATE durasi, selang WHERE tipemaint = tipemaint CLOSE Maintenance IF Hapus CLICK THEN INPUT tipemaint OPEN file Maintenance DELETE FROM Maintenance WHERE tipemaint = tipemaint CLOSE Maintenance END
FormInisialisasi IF Tambah CLICK THEN INPUT namapesawat, tipemaint, hitung OPEN file Pesawat READ Pesawat.status WHERE namapesawat = namapesawat OPEN File Maintenance READ Maintenance.durasi WHERE tipemaint = tipemaint IF Ubah CLICK THEN
133
INPUT namapesawat, tipemaint, counter IF Simpan CLICK THEN IF Tambah CLICK THEN OPEN File Jadwal Maintenance READ Jadwal Maintenance WHERE namapesawat = namapesawat AND tipemaint = tipemaint IF Recordcount > 0 THEN SHOWMESSAGE “Nama Pesawat dan Tipe Maintenance terduplikasi” ELSE WRITE namapesawat, tipemaint, hitung, durasi, statusm TO Jalan CLOSE Jadwal Maintenance IF Ubah CLICK THEN OPEN File Jadwal Maintenance UPDATE hitung WHERE namapesawat = namapesawat AND tipemaint = tipemaint CLOSE Jadwal Maintenance IF Hapus CLICK THEN INPUT namapesawat, tipemaint OPEN File Jadwal Maintenance DELETE FROM Jadwal Maintenance WHERE namapesawat = namapesawat AND tipemaint = tipemaint CLOSE Jadwal Maintenance
134
END
FormOperasi IF Tambah CLICK THEN INPUT tipepesawat, asal, tujuan, biaya OPEN file Pesawat READ Pesawat.kapasitas WHERE tipepesawat = tipepesawat OPEN file Rute READ Rute.tarif WHERE asal = asal AND tujuan = tujuan IF Ubah CLICK THEN INPUT tipepesawat, asal, tujuan, biaya IF Simpan CLICK THEN Bep = roundup(biaya/tarif) IF Tambah CLICK THEN OPEN File Biaya Operasi READ Biaya Operasi WHERE tipepesawat = tipepesawat AND asal = asal AND tujuan = tujuan IF Recordcount > 0 THEN SHOWMESSAGE “Tipe Pesawat dan Rute terduplikasi” ELSE WRITE tipepesawat, asal, tujuan, kapasitas, biaya, tarif, bep TO Biaya Operasi CLOSE Biaya Operasi
135
IF Ubah CLICK THEN OPEN File Biaya Operasi UPDATE biaya, bep WHERE tipepesawat = tipepesawat AND asal = asal AND tujuan = tujuan CLOSE Biaya Operasi IF Hapus CLICK THEN INPUT tipepesawat, asal, tujuan OPEN File Biaya Operasi DELETE FROM Biaya Operasi WHERE tipepesawat = tipepesawat AND asal = asal AND tujuan = tujuan CLOSE Biaya Operasi END
FormJPenerbangan INPUT tanggal, namapesawat OPEN file Jadwal Terbang READ max(wkttiba) AS tiba WHERE tanggal = tanggal AND namapesawat = namapesawat READ tujuan AS tjn WHERE tanggal = tanggal AND namapesawat = namapesawat AND wkttiba = tiba IF Susun Jadwal CLICK THEN IF tanggal < now THEN
136
SHOWMESSAGE “Tanggal yang sudah lewat tidak dapat disusun kembali” ELSE IF tiba = ‘ ’ THEN INPUT wktberangkat, nopenerbangan, asal, tujuan OPEN file Rute READ blocktime WHERE asal = asal AND tujuan = tujuan ELSE INPUT nopenerbangan, asal, tujuan OPEN file Rute READ blocktime WHERE asal = asal AND tujuan = tujuan IF Simpan CLICK THEN IF asal <> tjn THEN SHOWMESSAGE “Rute Asal tidak sesuai dengan Rute Tujuan sebelumnya” ELSE wkttiba = wktberangkat + blocktime OPEN file Jadwal Terbang READ Jadwal Terbang WHERE tanggal = tanggal AND nopenerbangan = nopenerbangan IF Recordcount > 0 THEN SHOWMESSAGE “Tanggal dan No. Penerbangan terduplikasi” ELSE OPEN file Maintenance
137
OPEN file Jadwal Maintenance READ Jalan.tipemaint, (Maintenance.selang – Jadwal Maintenance.hitung) AS sisa WHERE Jadwal Maintenance.namapesawat = namapesawat AND sisa < 100 ORDER BY Jadwal Maintenance.tipemaint DESC. cek = tipemaint IF Recordcount > 0 THEN IF cek = “A Check” THEN OPEN file Jadwal Maintenance UPDATE hitung = 0, statusm = false, mulai = now + 1, selesai = now + durasi WHERE tipemaint = “A Check” AND namapesawat = namapesawat CLOSE Jadwal Maintenance IF cek = “B Check” THEN OPEN file Jadwal Maintenance UPDATE hitung = 0, statusm = false, mulai = now + 1, selesai = now + durasi WHERE tipemaint = “B Check” AND namapesawat = namapesawat UPDATE hitung = 0 WHERE tipemaint = “A Check” AND namapesawat = namapesawat CLOSE Jadwal Maintenance IF cek = “C Check” THEN OPEN file Jadwal Maintenance UPDATE hitung = 0, statusm = false mulai = now + 1, selesai = now + durasi WHERE tipemaint = “C Check” AND namapesawat = namapesawat
138
UPDATE hitung = 0 WHERE (tipemaint = “A Check” OR tipemaint = “B Check”) AND namapesawat = namapesawat CLOSE Jadwal Maintenance IF cek = “D Check” THEN OPEN file Jadwal Maintenance UPDATE hitung = 0, statusm = false, mulai = now + 1, selesai = now + durasi WHERE tipemaint = “D Check” AND namapesawat = namapesawat UPDATE hitung = 0 WHERE (tipemaint = “A Check” OR tipemaint = “B Check” or tipemaint = “C Check”) AND namapesawat = namapesawat CLOSE Jadwal Maintenance SHOWMESSAGE “Jadwal tidak dapat disimpan karena Pesawat harus menjalani Maintenance” ELSE OPEN file Jadwal Terbang WRITE tanggal, namapesawat, nopenerbangan, asal, tujuan, wktberangkat, wkttiba = wktberangkat + blocktime TO Jadwal Terbang CLOSE Jadwal Terbang OPEN file Jadwal Maintenance UPDATE hitung = hitung + blocktime WHERE namapesawat = namapesawat CLOSE Jadwal Maintenance IF Hapus CLICK THEN INPUT tanggal, nopenerbangan
139
OPEN file Jadwal Terbang READ namapesawat, asal, tujuan WHERE tanggal = tanggal AND nopenerbangan = nopenerbangan OPEN file Rute READ blocktime WHERE asal = asal AND tujuan = tujuan IF tanggal < now THEN SHOWMESSAGE “Jadwal yang sudah lewat tidak dapat dihapus” ELSE DELETE FROM Jadwal Terbang WHERE tanggal = tanggal AND nopenerbangan = nopenerbangan CLOSE Jadwal Terbang OPEN file Jadwal Maintenance UPDATE hitung = hitung – blocktime WHERE namapesawat = namapesawat CLOSE Jadwal Maintenance END
FormNRMaintenance INPUT namapesawat OPEN file Jadwal Terbang READ Jadwal Terbang WHERE tanggal = now AND namapesawat = namapesawat IF Delay CLICK THEN IF Recordcount = 0 THEN
140
SHOWMESSAGE “Pesawat tersebut tidak memiliki jadwal hari ini” ELSE SHOW FormDelay IF Ubah Jadwal CLICK THEN IF Recordcount = 0 THEN SHOWMESSAGE “Pesawat tersebut tidak memiliki jadwal hari ini” ELSE SHOW FormUJadwal IF Ahead CLICK THEN IF Recordcount = 0 THEN SHOWMESSAGE “Pesawat tersebut tidak memiliki jadwal hari ini” ELSE SHOW FormMaju END
FormDelay INPUT namapesawat, nopenerbangan, jenisdelay, lamadelay OPEN file Jadwal Terbang READ Jadwal Terbang.wktberangkat AS berangkat, Jadwal Terbang.wkttiba AS tiba WHERE tanggal = now AND nopenerbangan = nopenerbangan IF Proses CLICK THEN IF jenisdelay = waktu berangkat THEN
141
UPDATE wktberangkat = wktberangkat + lamadelay, wkttiba = wkttiba + lama delay WHERE tanggal = now AND wktberangkat >= berangkat AND namapesawat = namapesawat CLOSE Jadwal Terbang IF jenisdelay = waktu tiba THEN UPDATE wktberangkat = wktberangkat + lamadelay, wkttiba = wkttiba + lama delay WHERE tanggal = now AND wktberangkat >= tiba AND namapesawat = namapesawat UPDATE wkttiba = wkttiba + lamadelay WHERE tanggal = now AND wkttiba = tiba AND namapesawat = namapesawat CLOSE Jadwal Terbang OPEN file Jadwal Maintenance UPDATE hitung = hitung + lamadelay WHERE namapesawat = namapesawat CLOSE Jadwal Maintenance END
FormUJadwal INPUT namapesawat, nopenerbangan OPEN file Jadwal Terbang READ wktberangkat AS berangkat WHERE tanggal = now AND nopenerbangan = nopenerbangan READ Jadwal Terbang WHERE tanggal = now ORDER BY namapesawat,
142
jmlpenumpang DESC. StringGrid.ColCount = DbGrid.Columns.Count StringGrid.RowCount = DbGrid.DataSource.DataSet.RecordCount + 1 StringGrid.FixedCols = 0 FOR y = 0 TO DbGrid.Columns.Count - 1 DO StringGrid.Cells[y,0] := DbGrid.columns[y].Title.Caption x=1 DbGrid.DataSource.DataSet.First WHILE NOT DbGrid.DataSource.DataSet.EOF DO FOR y = 0 TO DbGrid.Columns.Count - 1 DO StringGrid.Cells[y,x] = DbGrid.DataSource.DataSet(Columns[y].FieldName); x=x+1 DbGrid.DataSource.DataSet.Next IF Rute Pesawat xxx CLICK THEN OPEN file Jadwal Terbang READ Jadwal Terbang WHERE tanggal = now AND namapesawat = namapesawat AND wktberangkat > berangkat IF Rute Semua Pesawat CLICK THEN OPEN file Jadwal Terbang READ Jadwal Terbang WHERE tanggal = now ORDER BY namapesawat, wktberangkat IF Ubah CLICK THEN
143
INPUT nopenerbangan, pesawatubah, wktberangkat, jmlpenumpang OPEN file Rute READ blocktime WHERE asal = asal AND tujuan = tujuan IF Simpan CLICK THEN OPEN file Jadwal Terbang UPDATE namapesawat = pesawatubah, wktberangkat = wktberangkat, wkttiba = wkttiba + blocktime WHERE tanggal = now AND nopenerbangan = nopenerbangan CLOSE Jadwal Terbang OPEN file Jadwal Maintenance UPDATE hitung = hitung + blocktime WHERE namapesawat = pesawatubah UPDATE hitung = hitung – blocktime WHERE namapesawat = namapesawat CLOSE Jadwal Maintenance IF Hapus CLICK THEN INPUT nopenerbangan OPEN file Jadwal Terbang DELETE FROM Jadwal Terbang WHERE tanggal = now AND nopenerbangan = nopenerbangan CLOSE Jadwal Terbang OPEN file Jadwal Maintenance UPDATE hitung = hitung - blocktime WHERE namapesawat = namapesawat CLOSE Jadwal Maintenance
144
END
FormMaju INPUT namapesawat, nopenerbangan, lamamaju OPEN file Jadwal Terbang READ Jadwal Terbang WHERE tanggal = now AND nopenerbangan = nopenerbangan IF Proses CLICK THEN UPDATE wkttiba = wkttiba – lamamaju WHERE tanggal = now AND nopenerbangan = nopenerbangan CLOSE Jadwal Terbang OPEN file Jadwal Maintenance UPDATE hitung = hitung – lamamaju WHERE namapesawat = namapesawat CLOSE Jadwal Maintenance END
FormPenumpang INPUT namapesawat, nopenerbangan, jmlpenumpang, permintaan OPEN file Jadwal Terbang READ Jadwal Terbang WHERE tanggal = now AND nopenerbangan = nopenerbangan IF Simpan CLICK THEN
145
UPDATE jmlpenumpang, permintaan WHERE tanggal = now AND nopenerbangan = nopenerbangan CLOSE Jadwal Terbang END
FormJMaintenance INPUT namapesawat, tipemaint, utilisasi OPEN file Jadwal Maintenance READ Jadwal Maintenance.hitung WHERE namapesawat = namapesawat AND tipemaint = tipemaint OPEN file Maintenance READ Maintenance.selang WHERE tipemaint = tipemaint IF Cek Status CLICK THEN x = ROUNDUP((selang - hitung)/(utilisasi * 60)) Maintenance Berikut = now + x CLOSE Jadwal Maintenance CLOSE Maintenance END
FormTMaintenance Tanggal = now OPEN file Jadwal Maintenance
146
READ Jadwal Maintenance WHERE statusm = FALSE IF Recordcount = 0 THEN SHOWMESSAGE “Hari ini tidak ada Pesawat yang sedang menjalani Maintenance” CLOSE Jadwal Maintenance END
FormLapPenerbangan INPUT tanggal OPEN file Jadwal Terbang READ Jadwal Terbang WHERE tanggal = tanggal IF Preview CLICK THEN IF Recordcount = 0 THEN SHOWMESSAGE “Record pada tanggal tersebut belum ada” ELSE PREVIEW nopenerbangan, asal, tujuan, wktberangkat, wkttiba, jmlpenumpang WHERE tanggal = tanggal CLOSE Jadwal Terbang END
FormLapUtilisasi INPUT tglmulai, tglakhir, tampilan
147
OPEN file Jadwal Terbang OPEN file Rute OPEN file Pesawat IF Preview CLICK THEN IF tampilan = per tanggal THEN READ Pesawat.namapesawat, Jadwal Terbang.tanggal, sum(Rute.blocktime) AS utilisasi WHERE tanggal >= tglmulai AND tanggal <= tglakhir GROUP BY namapesawat, tanggal PREVIEW namapesawat, tanggal, utilisasi WHERE tanggal >= tglmulai AND tanggal <= tglakhir CLOSE Jadwal Terbang CLOSE Rute CLOSE Pesawat IF tampilan = total periode THEN READ Pesawat.namapesawat, sum(Rute.blocktime) AS utilisasi WHERE tanggal >= tglmulai AND tanggal <= tglakhir GROUP BY namapesawat, tanggal PREVIEW namapesawat, utilisasi WHERE tanggal >= tglmulai AND tanggal <= tglakhir CLOSE Jadwal Terbang CLOSE Rute CLOSE Pesawat END
148
FormLapPenumpang INPUT tglmulai, tglakhir, tampilan OPEN file Jadwal Terbang IF Preview CLICK THEN IF tampilan = per tanggal THEN READ asal, tujuan, tanggal, sum(jmlpenumpang) AS penumpang WHERE tanggal >= tglmulai AND tanggal <= tglakhir GROUP BY asal, tujuan, tanggal PREVIEW asal, tujuan, tanggal, penumpang WHERE tanggal >= tglmulai AND tanggal <= tglakhir CLOSE Jadwal Terbang IF tampilan = total periode THEN READ asal, tujuan, sum(jmlpenumpang) AS penumpang WHERE tanggal >= tglmulai AND tanggal <= tglakhir GROUP BY asal, tujuan PREVIEW asal, tujuan, penumpang WHERE tanggal >= tglmulai AND tanggal <= tglakhir CLOSE Jadwal Terbang END
FormOptimasi INPUT bulan, tahun, operasional, jmlpesawat
149
OPEN file Jadwal Terbang IF bulan = 1 THEN READ Jadwal Terbang.permintaan WHERE (month(tanggal)=10 AND year(tanggal) = tahun-1) OR (month(tanggal)=11 AND year(tanggal) = tahun1) OR (month(tanggal)=12 AND year(tanggal) = tahun-1) IF bulan = 2 THEN READ Jadwal Terbang.permintaan WHERE (month(tanggal)=11 AND year(tanggal) = tahun-1) OR (month(tanggal)=12 AND year(tanggal) = tahun1) OR (month(tanggal)=1 AND year(tanggal) = tahun) IF bulan = 3 THEN READ Jadwal Terbang.permintaan WHERE (month(tanggal)=12 AND year(tanggal) = tahun-1) OR (month(tanggal)=1 AND year(tanggal) = tahun) OR (month(tanggal)=2 AND year(tanggal) = tahun) IF bulan = 4 THEN READ Jadwal Terbang.permintaan WHERE (month(tanggal)=1 AND year(tanggal) = tahun) OR (month(tanggal)=2 AND year(tanggal) = tahun) OR (month(tanggal)=3 AND year(tanggal) = tahun) IF bulan = 5 THEN READ Jadwal Terbang.permintaan WHERE (month(tanggal)=2 AND year(tanggal) = tahun) OR (month(tanggal)=3 AND year(tanggal) = tahun) OR (month(tanggal)=4 AND year(tanggal) = tahun) IF bulan = 6 THEN
150
READ Jadwal Terbang.permintaan WHERE (month(tanggal)=3 AND year(tanggal) = tahun) OR (month(tanggal)=4 AND year(tanggal) = tahun) OR (month(tanggal)=5 AND year(tanggal) = tahun) IF bulan = 7 THEN READ Jadwal Terbang.permintaan WHERE (month(tanggal)=4 AND year(tanggal) = tahun) OR (month(tanggal)=5 AND year(tanggal) = tahun) OR (month(tanggal)=6 AND year(tanggal) = tahun) IF bulan = 8 THEN READ Jadwal Terbang.permintaan WHERE (month(tanggal)=5 AND year(tanggal) = tahun) OR (month(tanggal)=6 AND year(tanggal) = tahun) OR (month(tanggal)=7 AND year(tanggal) = tahun) IF bulan = 9 THEN READ Jadwal Terbang.permintaan WHERE (month(tanggal)=6 AND year(tanggal) = tahun) OR (month(tanggal)=7 AND year(tanggal) = tahun) OR (month(tanggal)=8 AND year(tanggal) = tahun) IF bulan = 10 THEN READ Jadwal Terbang.permintaan WHERE (month(tanggal)=7 AND year(tanggal) = tahun) OR (month(tanggal)=8 AND year(tanggal) = tahun) OR (month(tanggal)=9 AND year(tanggal) = tahun) IF bulan = 11 THEN READ Jadwal Terbang.permintaan WHERE (month(tanggal)=8 AND year(tanggal) = tahun) OR (month(tanggal)=9 AND year(tanggal) = tahun)
151
OR (month(tanggal)=10 AND year(tanggal) = tahun) IF bulan = 12 THEN READ Jadwal Terbang.permintaan WHERE (month(tanggal)=9 AND year(tanggal) = tahun) OR (month(tanggal)=10 AND year(tanggal) = tahun) OR (month(tanggal)=11 AND year(tanggal) = tahun) FOR k = 1 TO 7 DO FOR i = 1 TO 12 DO x=i xx = i * i xy = x * permintaan Ex = Ex + x Ey = Ey + permintaan Exx = Exx + xx Exy = Exy + xy b = ((n*Exy)-(Ex*Ey))/((n*Exx)-(Ex*Ex)) a = ((Ey/n))-(b*(Ex/n)) FOR j = 13 TO 16 DO d = a + (b * j) ratarata = ROUND(d/4) OPEN file Biaya Operasi READ Biaya Operasi WHERE asal = asal AND tujuan = tujuan IF ratarata/kapasitas <= 1 THEN fp = 1
152
IF (ratarata/kapasitas > 1) AND (ratarata MOD kapasitas < bep) THEN fp = ROUNDDOWN(ratarata/kapasitas) IF (ratarata/kapasitas > 1) AND (ratarata MOD kapasitas >= bep) THEN fp = ROUNDUP(ratarata/kapasitas) IF (ratarata/fp) >= kapasitas THEN xp = kapasitas ELSE kapasitas = ROUND(ratarata/fp) z = (xp * tarif) – biaya OPEN file Ramal WRITE asal, tujuan, hari = k, fp, z, blocktime+30 AS block TO Ramal CREATE file hari.txt CLOSE Biaya Operasi CLOSE Ramal END
FormTrend INPUT demand IF key = #13 AND demand <> ‘ ’ THEN DaftarData.Items.Add(demand) IF Ramal CLICK THEN Exx = 0 Exy = 0 Ex = 0
153
Ey = 0 IF DaftarData.Items = 0 THEN SHOWMESSAGE “Daftar data belum terisi” ELSE FOR i = 0 TO DaftarData.Items.Count-1 DO y = DaftarData.Items[i] x = i+1 xy = x*y xx = x*x Ex = Ex+x Ey = Ey+y Exy = Exy+xy Exx = Exx+xx n = DaftarData.Items.Count b = ((n*Exy)-(Ex*Ey))/((n*Exx)-(Ex*Ex)) a = ((Ey/n))-(b*(Ex/n)) Memo.Lines.Add(Persamaan Regresi : y = a + bx) FOR j = n+1 TO n+n DO f = a + (b*j) HasilRamal.Items.Add(ROUND(f)) IF Hapus Daftar CLICK THEN CLEAR demand
154
CLEAR DaftarData CLEAR HasilRamal CLEAR Memo END
FormMusiman INPUT demand IF key = #13 AND demand <> ‘ ’ THEN DaftarData.Items.Add(demand) IF Ramal CLICK THEN Ey = 0 Eycosx = 0 Eysinx = 0 n = DaftarData.Items.Count IF n = 0 THEN SHOWMESSAGE “Daftar data masih kosong” ELSE FOR i = 0 TO DaftarData.Items.Count-1 DO y = DaftarData.Items[i] x1 = i + 1 ycosx = y * cos((2*180/n)*x1) ysinx = y * sin((2*180/n)*x1)
155
Ey = Ey + y Eycosx = Eycosx + ycosx Eysinx = Eysinx + ysinx avgy = Ey/n Memo.Lines.Add(Mean = avgy) Memo.Lines.Add(Eycosx = Eycosx) Memo.Lines.Add(Eysinx = Eysinx) FOR j = 0 TO HasilRamal.Items.Count-1 DO x2 = j + 1 f = avgy + (2*Eycosx*(cos(2*180/n)*x2)/n)+(2*Eysinx*(sin(2*180/n)*x2)/n) HasilRamal.Items.Add(ROUND(f)) IF Hapus Daftar CLICK THEN CLEAR demand CLEAR DaftarData CLEAR HasilRamal CLEAR Memo END
156
5.2.5.8. Rancangan Laporan Halaman ke : 99 Laporan Jadwal Penerbangan Tanggal : dd-mmm-yy
No. Penerbangan
Asal
Tujuan
Berangkat
Tiba
Jumlah Penumpang
xxx
xxx
hh:nn:ss
hh:nn:ss
999
Nama Pesawat : xxx xxxxxxx
TTD
(Spv. Sales & Adm.) Dicetak pada tanggal : dd-mmm-yy, hh:nn:ss Gambar 5.13 Rancangan Laporan Jadwal Penerbangan
157
Halaman ke : 99 Laporan Utilisasi Pesawat Periode : dd-mmm-yy s/d dd-mmm-yy
Tanggal
Utilisasi
dd-mm-yy
999
Nama Pesawat : xxx
Total Data :
9999
TTD
(Spv. Sales & Adm.) Dicetak pada tanggal : dd-mmm-yy, hh:nn:ss Gambar 5.14 Rancangan Laporan Utilisasi Pesawat
158
Halaman ke : 99 Laporan Jumlah Penumpang Periode : dd-mmm-yy s/d dd-mmm-yy
Asal
Tujuan
Tanggal
Jumlah Penumpang
xxx
xxx
dd-mmm-yy
9999
TTD
(Spv. Sales & Adm.) Dicetak pada tanggal : dd-mmm-yy, hh:nn:ss Gambar 5.15 Rancangan Laporan Jumlah Penumpang
5.2.5.9. Rancangan Layar Rancangan layar (screen) diusahakan untuk tidak memiliki terlalu banyak menu agar memudahkan pengguna untuk mengoperasikan aplikasi ini. Menu-menu yang dimiliki oleh aplikasi dapat dilihat pada gambar 5.16 berikut ini.
159
Menu Utama
File
Jadwal
Laporan
Tools
Database Pesawat
Jadwal Penerbangan
Laporan Jadwal Penerbangan
Fungsi Optimalisasi
Database Rute
Input Jumlah Penumpang
Laporan Utilisasi Pesawat
Peramalan
Database Maintenance
Cek Maintenance Berikut
Laporan Jumlah Penumpang Data Trend
Inisialisasi Counter
Jadwal Maintenance Data Musiman
Biaya Operasional
Kondisi Tak Terjadwal
Delay
Ubah Jadwal
Ahead
Gambar 5.16 Diagram Menu
160
5.2.5.9.1. Rancangan Input Screen
Gambar 5.17 Rancangan Menu Utama Pada Form menu utama seperti pada gambar 5.17, pengguna dapat mengakses beberapa toolbar yang telah tersedia untuk secara langsung masuk pada form yang memang sering digunakan seperti jadwal penerbangan, laporan jadwal, input jumlah penumpang dan permintaan, dan sebagainya.
161
Gambar 5.18 Rancangan Menu File Bila menu file diklik maka akan muncul menu drop-down untuk memanipulasi beberapa tabel database yang dimiliki program seperti pada gambar 5.18. Menu
database pesawat untuk memanipulasi tabel Pesawat, database rute untuk memanipulasi tabel Rute, database maintenance untuk memanipulasi Tabel
Maintenance, inisialisasi counter untuk manipulasi tabel Jalan, biaya operasional untuk memanipulasi tabel Operasi.
162
Gambar 5.19 Rancangan Layar Database Pesawat Pada form di gambar 5.19, pengguna dapat melakukan penambahan pesawat baru dengan menekan tombol Tambah, mengubah data pesawat tertentu dengan menekan tombol Ubah, juga menghapus record pesawat tertentu dengan menekan tombol Hapus.
163
Gambar 5.20 Rancangan Layar Database Rute Kegunaan form pada gambar 5.20 hampir sama dengan database pesawat hanya saja yang dimanipulasi adalah record dari Tabel Rute. Untuk tombol Ubah, pengguna dapat mengubah block time dan tarif rata-rata rute yang bersangkutan.
164
Gambar 5.21 Rancangan Layar Database Maintenance Pada form di gambar 5.21 ini juga memiliki fungsi yang sama dengan form sebelumnya hanya saja manipulasi akan dilakukan terhadap Tabel Maintenance. Tombol ubah seharusnya tidak terlalu diperlukan mengingat peraturan standar selang
maintenance pada umumnya sangat jarang berubah, tetapi demi fleksibilitas program maka tombol tersebut disertakan untuk mengubah durasi dan interval antar
maintenance.
165
Gambar 5.22 Rancangan Layar Inisialisasi Awal
Form pada gambar 5.22 ini digunakan untuk menyimpan counter block time masing-masing pesawat yang dimiliki oleh perusahaan saat pertama kali menyewa atau membeli pesawat. Counter tersebut yang akan dihitung secara kumulatif setiap kali pesawat melakukan penerbangan dan direset ke 0 (nol) apabila pesawat menjalani maintenance tertentu.
166
Gambar 5.23 Rancangan Layar Biaya Operasional
Form pada gambar 5.23 ini digunakan untuk mengisi biaya operasional dari setiap rute yang dilakukan oleh perusahaan berdasarkan jenis / tipe pesawat tertentu. Pembebanan biaya operasional tentunya akan berbeda-beda bila perusahaan memiliki lebih dari satu jenis pesawat. Tapi sejauh ini, Sriwijaya Air masih pada kebijakan untuk menggunakan tipe pesawat yang sama. Biaya ini akan digunakan dalam perhitungan fungsi optimasi linear programming.
167
Gambar 5.24 Rancangan Menu Jadwal Pada menu utama, apabila Jadwal diklik, maka tampilan akan seperti pada gambar 5.24. Pengguna dapat melakukan aktivitas yang berhubungan dengan operasional penjadwalan sehari-hari, seperti menyusun jadwal penerbangan, menangani kondisi tak terjadwal, memasukkan jumlah penumpang dan permintaan, mengecek periode maintenance berikut dan melihat jadwal maintenance yang sedang berjalan apabila memang ada.
168
Gambar 5.25 Rancangan Layar Jadwal Penerbangan Pada form di gambar 5.25 pengguna dapat melakukan penyusunan jadwal sehari-hari, terutama jadwal untuk besok. Disini apabila suatu pesawat pada hari tertentu belum memiliki jadwal sama sekali, maka pengguna perlu memasukkan waktu berangkat pertama pesawat tersebut, tapi apabila sudah memiliki jadwal, waktu berangkat tidak perlu diisi dan secara otomatis akan mengikuti waktu tiba terakhir dari penerbangan sebelumnya. Selain itu pengguna juga dapat menghapus jadwal penerbangan.
169
Gambar 5.26 Rancangan Layar Kondisi Tak Terjadwal
Form pada gambar 5.26 hanya digunakan untuk memilih nama pesawat yang pada hari tersebut mengalami gangguan jadwal, seperti keterlambatan, atau kemajuan atau kerusakan cukup serius sehingga perlu melakukan perubahan jadwal secara keseluruhan. Dari sini tinggal dipilih gangguan apa yang terjadi untuk kemudian berpindah pada form selanjutnya.
170
Gambar 5.27 Rancangan Layar Proses Delay Pada form di gambar 5.27 ini pengguna dapat menangani keterlambatan jadwal. Pada radio group Jenis Delay dapat dipilih jenis keterlambatan yang terjadi. Apabila keterlambatan terjadi pada waktu berangkat, counter pesawat tidak akan diubah, tapi jadwal akan bergeser otomatis berdasarkan lama delay yang terjadi. Tapi apabila keterlambatan terjadi pada waktu tiba, artinya pesawat berada di udara lebih lama dari standar block time maka counter pesawat juga akan ditambah sebesar lama delay. Jadwal juga otomatis bergeser sebanyak lama delay.
171
Gambar 5.28 Rancangan Layar Ubah Jadwal
Form pada gambar 5.28 ini digunakan untuk menangani kerusakan pesawat yang cukup serius sehingga pesawat tersebut tidak dapat melanjutkan jadwal hari tersebut. Maka perubahan jadwal akan dilakukan terhadap semua pesawat dengan pertimbangan tertentu oleh perusahaan. Sehingga dalam form ini tidak ada otomatisasi, setiap kali jadwal dipindahkan ke pesawat lain, maka bila terjadi jadwal
172
bentrok, harus dihapus secara manual. Tapi counter pesawat tetap dihitung secara normal.
Gambar 5.29 Rancangan Layar Proses Ahead
Form pada gambar 5.29 digunakan untuk menangani kejadian apabila pesawat sampai di tujuan lebih cepat dari yang telah dijadwalkan, maka counter pesawat akan dikurangi sehubungan dengan waktu terbang yang lebih singkat, tapi jadwal tidak bergeser karena jadwal yang telah dipublikasikan biasanya tidak mungkin dimajukan waktu berangkatnya.
173
Gambar 5.30 Rancangan Layar Input Jumlah Penumpang Pada form di gambar 5.30, pengguna dapat mengisi jumlah penumpang aktual dan banyaknya permintaan dari setiap jadwal penerbangan untuk kepentingan laporan dan juga perencanaan perusahaan, seperti pembentukan fungsi optimasi frekuensi penerbangan. Pada gambar 5.31 dan 5.32 berikut ini dapat dilihat tampilan yang terjadi apabila menu Laporan dan Tools pada form menu utama diklik. Pada menu laporan pengguna dapat melihat dan mencetak tiga jenis laporan, yakni jadwal penerbangan harian, utilisasi pesawat harian dan periodik, serta jumlah penumpang harian dan
174
periodik. Pada menu Tools dapat digunakan beberapa fungsi bantuan seperti peramalan dan juga pembentukan fungsi optimalisasi frekuensi penerbangan.
Gambar 5.31 Rancangan Menu Laporan
Gambar 5.32 Rancangan Menu Tools
175
Gambar 5.33 Rancangan Layar Fungsi Optimalisasi Pada gambar 5.33 dapat dilihat rancangan layar yang berfungsi untuk membentuk fungsi optimalisasi frekuensi penerbangan. Pengguna tinggal mengisi bulan dan tahun yang ingin direncanakan beserta jam operasional harian pesawar dan jumlah pesawatnya, bila tombol Proses ditekan maka akan dibuatkan file .txt yang berisi fungsi optimalisasi tersebut untuk setiap nama hari dalam satu minggu. Tentunya diperlukan data untuk peramalan dari dua belas periode sebelumnya.
176
Gambar 5.34 Rancangan Menu Peramalan Pada menu Tools apabila Peramalan dipilih maka akan muncul menu lagi jenis peramalan yang ingin dilakukan seperti pada gambar 5.34. Fungsi peramalan sengaja dirancang untuk menggunakan metode peramalan yang paling sering digunakan oleh industri penerbangan. Fungsi peramalan digunakan untuk melakukan perhitungan data permintaan dengan metode peramalan yang berbeda, program ini tidak dapat mengidentifikasikan pola data yang ada sehingga pengguna harus mengetahui jenis peramalan apa yang mereka perlukan.
177
Gambar 5.35 Rancangan Layar Peramalan Data Musiman Pada gambar 5.35 dapat dilihat rancangan layar untuk melakukan peramalan data yang berpola musiman dengan metode Regresi Musiman dari Biegel. Disini fungsi program hanya seperti kalkulator yang menerima data permintaan secara manual bukan dari database untuk diramalkan dan hasilnya ditampilkan pada listbox hasil peramalan.
178
Gambar 5.36 Rancangan Layar Peramalan Data Trend Pada gambar 5.36 dapat dilihat juga rancangan layar untuk melakukan peramalan data permintaan yang berpola trend dengan metode Regresi Linier biasa. Seperti pada form sebelumnya, fungsi program disini hanya seperti kalkulator yang menerima masukan manual dari pengguna untuk ditampilkan hasilnya secara langsung.
179
5.2.5.9.2. Rancangan Output Screen
Gambar 5.37 Rancangan Layar Cek Maintenance Berikut Pada form di gambar 5.37 ini pengguna dapat melakukan pengecekan terhadap
request yang dilakukan P.T. ANI sebagai subcontract dari operasi maintenance mereka. Pengguna tinggal mengisi nama pesawat dan tipe maintenance yang direquest dan perkiraan utilisasi harian pesawat dan menekan tombol Cek Status untuk menampilkan perkiraan waktu maintenance berikutnya dari tipe maintenance yang bersangkutan.
180
Gambar 5.38 Rancangan Layar Jadwal Maintenance Pada form di gambar 5.38 ini pengguna dapat melihat tanggal mulai dan selesai
maintenance yang sedang berjalan apabila ada pada hari tersebut. Bila tidak ada maka form ini tidak akan memunculkan data apa-apa. Pada gambar 5.39 sampai 5.41 berikut ini merupakan rancangan layar laporan yang dapat ditampilkan dan dicetak oleh program. Gambar 5.39 merupakan rancangan layar untuk melihat dan mencetak laporan jadwal penerbangan harian. Gambar 5.40 merupakan rancangan layar untuk melihat dan mencetak laporan utilisasi pesawat yang dapat disusun baik secara harian maupun secara total periode yang dipilih pengguna. Gambar 5.41 merupakan rancangan layar untuk melihat dan mencetak laporan jumlah penumpang yang juga dapat disusun secara harian maupun secara total periode yang dipilih pengguna.
181
Gambar 5.39 Rancangan Layar Laporan Jadwal Penerbangan
Gambar 5.40 Rancangan Layar Laporan Utilisasi Pesawat
182
Gambar 5.41 Rancangan Layar Laporan Jumlah Penumpang
5.3. Usulan Penerapan Penerapan aplikasi untuk sistem penjadwalan yang dibuat sebenarnya tidak membutuhkan sumber daya teknologi informasi yang sangat canggih, karena skalanya tidak terlalu besar. Proses yang paling lama dilakukan hanyalah pada saat membentuk fungsi optimalisasi untuk linear programming, karena melibatkan ribuan
record dari database yang kemudian harus diolah satu per satu sehingga memakan waktu proses beberapa menit. Apabila memang perusahaan ingin mempercepat waktu proses pada fungsi tersebut, maka dapat digunakan sumber daya dengan prosesor dan memori yang lebih besar. Spesifikasi teknis minimum dari aplikasi tersebut adalah sebagai berikut :
183
•
Intel Pentium 350 MHz minimum
•
Memori 128 MB minimum
•
Hard Disk 1 GB
•
Floppy Disk
•
CD-ROM
•
Software Lindo 6.1
•
Microsoft Access
•
Operating System Windows 98 minimum