Anda di halaman 1dari 54

Laporan Tugas Besar

Algoritma dan Pemrograman


SKATRASIA

Dosen Pembimbing :
Nur Fajri Azhar S.Kom., M.Kom. NIP. 199205182019031015

Asisten :
Andi Sultan 10181010

Merlyn Muchtar 10181047

Disusun Oleh :
Daffa Alvi Reri 11191017

Taufiq Qurrachman Sholeh 07191080

Moh Ardha wiku Wicaksono 09191045

Erlingga Primashudi 04191021

Abi Thaariq Nur’Adli 12191001

18 Mei 2020
KATA PENGANTAR

Puji syukur kita panjatkan kehadirat Tuhan YME yang telah memberikan rahmat serta
hidayahNya sehingga kami dapat menyelesaikan laporan tugas besar algoritma dan
pemrograman ini. Laporan ini berisikan tentang hasil praktikum pembuatan sebuah program
berbasis python berjudul Skatrasia (Skuy travel seluruh Indonesia). Kami menyadari
sepenuhnya bahwa laporan ini jauh dari kata sempurna. Keberhasilan penyusunan laporan ini
tidak terlepas dari dukungan dan bantuan banyak pihak yang telah membantu memberikan
masukan, semangat serta doa kepada kami dalam proses pengerjaan tugas besar ini. Sehingga
pada kesempatan kali ini kami menghanturkan ucapan terimakasih kepada teman-teman
kelompok kami yang telah membantu untuk menyelesaikan tugas besar ini dan terkhusus
kepada :
1. Bapak Nur Fajri Azhar, S.Kom., M.Kom. selaku dosen mata kuliah Algoritma dan
Pemrograman.
2. Kak Andi Sultan dan Kak Merlyn Muchtar selaku asisten dosen mata kuliah Algoritma
dan Pemrograman kelas TPB E.
Semoga laporan ini dapat bermanfaat bagi para pembacanya. Atas perhatiannya kami
ucapkan terima kasih.

Balikpapan, 2020

Tim Penyusun
DAFTAR ISI
DAFTAR ISI……............................................................................................. i
BAB I PENDAHULUAN................................................................................. 1
1.1 Latar Belakang................................................................................... 1
1.2 Rumusan Masalah............................................................................. 1
1.3 Tujuan................................................................................................ 2
1.4 Manfaat………………………………………………………………………………………… 2
1.4 Fitur yang Dimiliki.............................................................................. 2
BAB II DASAR TEORI…..……………………………………………………………………………… 3
BAB III METODE PENGERJAAN.................................................................…. 10
3.1 Diagram Alir (Flowchart)………………………………………………………………. 10
3.2 Pseudocode....................................................................................... 13
3.3 Source Code……….............................................................................. 23
3.4 Demo Program….............................................................................. 43
BAB IV KESIMPULAN DAN SARAN…............................................................. 44
4.1 Kesimpulan....................................................................................... 44
4.2 Saran................................................................................................. 44
DAFTAR PUSTAKA........................................................................................ 45
LAMPIRAN-LAMPIRAN……………………………………………………………………………… 46

i
BAB I

PENDAHULUAN

1.1 Latar Belakang

Pada saat ini transportasi udara di Indonesia menjadi salah suatu komoditas utama
masyarakat untuk melakukan suatu perjalanan keluar daerah, hal ini dikarenakan Indonesia
memiliki geografi kepulauan serta jarak yang jauh antara kota - kota besar yang membuat
penggunaan transportasi udara menjadi hal yang efektif. Penggunaan transportasi udara
setiap tahunnya terus mengalami peningkatan berkat pertumbuhan ekonomi Indonesia yang
pesat serta jumlah penduduk yang besar, permintaan tanpa kendala transportasi udara
domestik maupun internasional dapat diharapkan mampu bertumbuh dengan laju pokok
underlying rate antara 6 hingga 10 persen per tahun.

Akses kemudahan dalam melakukan pemesanan tiket pesawat juga dapat


mempengaruhi pertumbuhan penggunaan transportasi udara di Indonesia, Oleh karena itu
kami berinisiatif untuk membuat suatu aplikasi berbasis online yang dapat di gunakan untuk
melakukan pemesanan tiket pesawat secara online, hal ini dikarenakan pada saat ini
konsumen lebih memilih kemudahan yang di tawarkan oleh sebuah layanan aplikasi
berbasis online, dimana konsumen tidak perlu membuang-buang waktu untuk datang ke
loket pembelian tiket. Melainkan cukup menyiapkan KTP, Alamat Email, dan kartu kredit,
konsumen bisa melakukan pemesanan maupun transaksi selama 1x24 jam. Dengan
menggunakan aplikasi Pemesanan tiket secara online konsumen juga dapat mencari tahu
harga rute per maskapai yang di tawarkan oleh aplikasi tersebut.

1.2 Rumusan Masalah


1. Apakah pembuatan program pemesanan tiket pesawat ini dapat memberikan hal
positif dalam pemesanan tiket?
2. Apakah pembuatan program pemesanan tiket pesawat ini lebih memberikan cara
mudah dalam pemesanan tiket pesawat?

1
1.3 Tujuan

Adapun tujuan dari pembuatan program atau aplikasi ini adalah sebagai berikut :

1. Memberikan hasil positif karena dapat memudahkan orang yang tidak mempunyai waktu
untuk membeli tiket pesawat secara langsung yang dikarenakan sedang terburu-buru atau
tidak ada waktu maupun sedang dalam situasi mendadak harus pergi keluar kota.

2. Memberikan cara menggunakan teknologi yang lebih modern dan simple dalam
pemesanan tiket pesawat yang lebih mudah caranya.

1.4 Manfaat

Beberapa manfaat dari aplikasi ini adalah :

1. Memberikan kemudahan bagi bagian administrasi penerbangan dalam melakukan proses


data pemesanan tiket.

2. Memberikan kemudahan dalam penyimpanan data dan memudahkan dalam hal transaksi.

1.5 Fitur yang Dimiliki


Adapun fitur yang dimiliki dari program ini adalah sebagai berikut:
1. Menampilkan harga tiket pesawat yang bersaing.
2. Pemesanan upto 3 tiket sekaligus
3. Pencetakan PDF setelah mengklik bayar
4. Tampilan yang modern

2
BAB II

DASAR TEORI

2.1 Penerapan fungsi pada program Python

Pada saat membuat program terkadang kita menyalin blok kode yang sama di
baris berikutnya, misal untuk mencetak sebuah biodata kita salin kembali kemudian
ganti nilai – nilainya untuk menampilkan biodata tersebut. Apakah harus menyalin
blok kode di setiap bagian kode yang membutuhkan kode tersebut? Ketika
mempelajari pemrograman pertama kalinya, baris kode yang sama dipakai berulang –
ulang untuk mengeluarkan hasil tertentu. Tapi jadi tidak efisien, karena ukuran file
program yang ditulis cukup besar. Oleh karena itu hampir di setiap bahasa
pemrograman terdapat fitur yang dinamakan function. Nama lainnya method, sub
routine, atau fungsi. Function ini berguna untuk penggunaan kembali blok kode yang
akan digunakan di baris kode lain. Sekali tulis tinggal panggil. Function ini jelas beda
dengan built-in function yang ada di Python. Built-in function sendiri adalah function
yang telah dibuatkan oleh pengembang bahasa pemrograman Python. Sedangkan
function dibuat oleh programmer yang menggunakan bahasa pemrograman Python,
atau istilah lainnya userdefined function. Di Python untuk membuat function
digunakan keyword def. Kemudian diikuti nama function yang diinginkan lalu
parameter yang dibutuhkan dengan diawali tanda “(“ dan “)”.Untuk membuka
function dimulai dengan tanda “:”. Tidak seperti di C, Java, atau PHP yang diawali
dengan tanda “{“ dan diakhiri “}” untuk membuka sebuah function. Lalu tutupnya ?
Seperti dijelaskan diawal di Python sendiri digunakan indentasi untuk menentukan
apakah baris kode tersebut milik sebuah function, if, atau pengulangan. Jadi jika Anda
ingin menuliskan kode untuk function yang Anda buat. Harus ada jarak satu indentasi
agar kode tersebut dianggap sebagai kode dari function yang Anda tulis. Kemudian
Anda dapat menambahkan keyword return jika function yang Anda tulis ingin
mengembalikan nilai keluaran (Septian,2013).

2.2 Penggunaan format String

String adalah sebuah array satu dimensi yang berisi kumpulan dari huruf atau
karakter dan diakhiri dengan karakterk kosong \0 (null).

3
Fungsi-fungsi untuk Manipulasi String. Ada beberapa fungsi yang bisa kita
gunakan untuk memanipulasi string sesui dengan kebutuhan. Berikut ini fungsi-
funginya:

1. Fungsi strcpy()

Fungsi strcpy() digunakan untuk meng-copy string dari sebuah variabel ke variabel yang
lainnya.

2. Fungsi strcat()

Fungsi strcat() digunakan untuk menambahkan string dari belakang.

3. Fungsi strlen()

Fungsi strlen() digunakan untuk menghitung panjang string.

4. Fungsi strcmp()

Fungsi strcmp() digunakan untuk membandingkan string dengan string yang lainnya.

5. Fungsi strchr()

Fungsi strchr() digunakan untuk mencari sebuah karakter di dalam string.

6. Fungsi strstr()

Fungsi strstr() digunakan untuk mencari sebuah teks (string) di dalam string.

2.3 Konversi data Integer, String

Dalam membuat sebuah program, seringkali kita membutuhkan untuk


mengkonversi nilai dari sebuah String menjadi angka atau sebaliknya, angka itu bisa
Integer atau Double. QTextField hanya bisa menampung data bertipe String. Jadi,
contohnya saat kita membuat Program melibatkan QText Field ketika ingin melakukan
operasi Aritmatika pada data tersebut, karena menggunakan tipe data String. Untuk
itu, perlu mengkorversi atau mengubah tipe data String menjadi tipe data Integer, agar
dapat melakukan operasi Aritmatika tersebut. Setelah dioperasikan, maka hasilnya
akan ditempatkan di QTextField kembali, sehingga harus di konversikan dari Integer ke
String lagi.

4
2.4 Statement kondisi If Else

kondisi IF ELSE IF adalah sebuah struktur logika program yang di dapat dengan
cara menyambung beberapa kondisi IF ELSE menjadi sebuah kesatuan. Jika kondisi
pertama tidak terpenuhi atau bernilai false, maka kode program akan lanjut ke
kondisi IF di bawahnya. Jika ternyata tidak juga terpenuhi, akan lanjut lagi ke
kondisi IF di bawahnya, dst hingga blok ELSE terakhir atau terdapat kondisi IF yang
bernilai true.

2.5 Perulangan While, dan For


1. Perintah While
Perintah while pada python merupakan perintah yang paling umum
digunakan untuk proses iterasi. Konsep sederhana dari perintah while adalah ia
akan mengulang mengeksekusi statemen dalam blok while selama nilai kondisinya
benar. Dan ia akan keluar atau tidak melakukan eksekusi blok statemen jika nilai
kondisinyasalah.

Bentuk umum statemen


while,

while
(kondisi) :

statemen

Contoh penggunaan while :


contoh1: >>> while True:
… print "Tekan CTRL + C untukStop"
...
Pada contoh 1, merupakan contoh sederhana penggunaan while. Pada
contoh di atas program akan terus mengeksekusi statemen dalam badan while,
dikarenakan kondisinya selalu benar (true). Kondisi seperti ini disebut infinite loop.i

contoh2: >>> x ="Tulisan"


>>> while x:
... print x, ''
... x =x[1:]
...
Tulisan

5
ulisan
lisan
isan
san
an
n

contoh3: >>> a
= 0; b =10
>>> while a < b:
... print a,
... a = a +1
...
0123456789

2. Perintah For
Perintah for dalam python mempunyai ciri khas tersendiri dibandingkan
dengan bahasa pemrograman lain. Tidak hanya mengulang bilangan-bilangan
sebuah ekspresi aritmatik, atau memberikan keleluasaan dalam mendefinisikan
iterasi perulangan dan menghentikan perulangan pada saat kondisi tertentu. Dalam
python, statemen for bekerja mengulang berbagai macam tipe data sekuensial
seperti List, String, dan Tuple.

Bentuk umum perintah for,


for (variabel) in
(objek) :
statemen

else:
statemen

Contoh penggunaan for :


Contoh1: >>> for i in [1,2,3,4,5]:
... print,
...
12345
Pada contoh 1, perintah perulangan terjadi dimana data-data untuk iterasi
(objek) berada dalam List. Jadi elemen-elemen yang berada dalam List akan di
masukkan (assign) ke dalam variabel target yaitui.

6
Contoh2: >>> T = [(2,3), (5,6),(8,9)]
>>> for (a,b) in T :
... print(a,b)
...
(2,3)
(5,6)
(8,9)
Pada contoh 2, merupakan penggunaan tipe data Tuple untuk proses
perulangan. Elemen pada tuple akan di assign kedalam variabel a dan b.

Contoh3: >>> nama = ['tati', 'ratih', 'siti','indah']


>>> usia = [20, 18, 22, 19]
>>> for i in range(len(nama)) :
... print nama[i], ' berusia ', usia[i], 'tahun'
...

Tati berusia 17 tahun


Ratih berusia 20 tahun

Siti berusia 19 tahun

Indah berusia 23 tahun

2.6 Manajemen File

Manajemen File atau sering disebut dengan file sistem pada sistem operasi
merupakan sebuah metode yang digunakan oleh sistem operasi komputer untuk
mengorganisasikan file-file yang terdapat pada disk. Dengan adanya manajemen file akan
mengurasi tingkat hilangnya file pada sistem akibat kelalaian kita baik disengaja maupun tidak
disengaja. Misalnya data terhapus secara tidak disengaja selain itu dengan adanya
manajemen file atau file sistem memudahkan kita untuk melakukan pencarian data. Selain itu
dengan manajemen file memungkinkan pengguna untuk dapat melakukan manajemen file
dengan baik dan benar sehingga dapat menhemat media penyimpanan data dengan cara
melakukan penghapusan data secara berkala data-data yang tidak terpakai. Berikut adalah

7
beberapa fungsi manajemen file:

• Pembuatan File, Memodifikasi File bahkan penghapusan file.

• Penggunaan file secara bersama

• Dapat digunakan untuk memback up dan merecovery data untuk mencegah


terjadinya hilangnya data
Informasi dan data dapat disimpan dengan baik dan aman

2.7 Basis data untuk penyimpanan

Menurut Indrajani (2011) Beberapa pengertian basis data, yaitu :

1. Sebuah kumpulan data yang berhubungan secara logis dan merupakan


penjelasan dari data tersebut yang dirancang dengan tujuan untuk menemukan
data yang dibutuhkan oleh suatu perusahaan atau organisasi. Basis data juga
dapat dikatakan sebagai kumpulan data yang selaing terintegrasi karena basis
data dirancang untuk dapat digunakan oleh banyak pemakai, memegang data
operasional dan juga penjelasan mengenai data tersebut, dan menghindari
duplikasi data.

2. Sebuah kumpulan elemen data yang terintegrasi dan berhubungan secara


logika. Basis data menggabungkan berbagai catatan yang sebelumnya disimpan
dalam file terpisah ke dalam suatu elemen data. Menurut Connolly & Begg
(2010, p65), basis data adalah sebuah kumpulan data yang saling berelasi
secara logika dan dirancang untuk memenuhi informasi yang dibutuhkan oleh
suatu organisasi.

Bagi orang awam mungkin suatu database hanyalah kumpulan data dan
informasi yang hanya perlu di backup untuk keamanan. Namun dibalik itu
terdapat fungsi – fungsi lain dari penggunaan database, yakni sebagai berikut :

1. Suatu data dapat dikelompokkan dengan tujuan mempermudah proses


identifikasi data, pengelompokkan dapat dilakukan dengan berbagai macam
cara seperti membuat beberapa tabel atau dengan field yang berbeda – beda.
Sebagai contoh suatu DBMS pada perbankan dapat mencari informasi user
dengan lebih cepat karena sudah dikelompokkan masing – masing.

8
2. Menghindari data ganda yang tersimpan. Suatu software DBMS dapat di setting
agar mampu mengenali duplikasi data yang terjadi saat diinput. Hal ini
dikarenakan sifat database yang dapat diakses oleh lebih dari satu pengguna.
Salah satu cara yang dilakukan adalah dengan menerapkan sistem kata kunci
atau Primary Key.

3. Mempermudah penggunaan hampir di semua sisi seperti memasukkan data


baru, mengupdate atau bahkan menghapus data yang sudah tidak diperlukan
lagi. Didukung dengan tampilan atau tata muka yang sudah disediakan
menggunakan aplikasi tertentu.

4. Menjadi solusi terbaik dari penggunaan kertas sebagai media penyimpanan


yang kurang efektif dan banyak memakan ruang. Dengan adanya database
maka file dapat disimpan secara digital.

5. Suatu database juga dapat menjadi alternatif lain terkait masalah penyimpanan
ruang dalam suatu aplikasi. Hal ini dikarenakan keterbatasan dari media
penyimpanan oleh kebanyakan aplikasi komputer.

9
BAB III

METODE PENGERJAAN

3.1 Diagram Alir (Flowchart)


Adapun perancangan dalam bentuk flowchart sebagai gambaran pembuatan program
“SKATRASIA (Skuy Travel Seluruh Indonesia)” adalah sebagai berikut:

Halaman Utama

10
Halaman Pencarian

11
Halaman Pembayaran

12
3.2 Pseudocode
Dengan diagram alir (flowchart) yang telah dibuat, dapat dibuat pseudocode dari
program SKATRASIA adalah sebagai berikut:

No. Halaman Home

1 lbl_dari : Label
2 cbx_dari : CheckBox
3 lbl_ke : Label
4 cbx_ke : CheckBox
5 lbl_tanggal : Label
6 dedi_tanggal : DateEdit
7 lbl_kelas : Label
8 cbx_kelas : CheckBox
9 lbl_banyak_penumpang : Label
10 lbl_dewasa : Label
11 banyak_dewasa : SpinBox
12 btn_cari_penerbangan : PushButton
13 cariPage : any
14 kota_asal : any
15 kota_tujuan : any
16 kelas : any
17 tanggal : any
18 banyak_orang : any
19 sql : string
20 val : any
21 bandara_tujuan : any
22 ui : any
23
24 Initialize :
25
26 dedi_tanggal.setCalendarPopup(True)
27 banyak_dewasa.setValue(1)
28 banyak_dewasa.setMinimum(1)
29 banyak_dewasa.setMaximum(3)
30 lbl_dari.setText("Dari")
31 lbl_ke.setText("Ke")
32 cbx_ke.setCurrentIndex(cbx_ke.currentIndex() + 1)
33 lbl_tanggal.setText("Tanggal Berangkat")
34 lbl_kelas.setText("Kelas Penerbangan")
35
36 cbx_kelas.addItems([
37 'Ekonomi',
38 'Ekonomi Plus',
39 'Bisnis',
40 'First Class'
41 ])

13
42
43 lbl_banyak_penumpang.setText("Banyak Penumpang")
44 lbl_dewasa.setText("Dewasa")
45 btn_cari_penerbangan.setText("CARI PENERBANGAN")
46 btn_cari_penerbangan.clicked.connect(cariProses)
47
48 BEGIN
49 Function cariProses():
50 cariPage = Widget()
51 kota_asal = cbx_dari.currentText()
52 kota_tujuan = cbx_ke.currentText()
53 kelas = cbx_kelas.currentText()
54 tanggal = dedi_tanggal.date()
55 banyak_orang = banyak_dewasa.value()
56
57 sql = "SELECT * FROM list_kota WHERE kota = %s"
58 val = (kota_asal,)
59 cursor.execute(sql, val)
60 bandara_asal = cursor.getone()
61
62 sql = "SELECT * FROM list_kota WHERE kota = %s"
63 val = (kota_tujuan,)
64 execute(sql, val)
65 bandara_tujuan = getone()
66
67 ui = Ui_cariPage(kota_asal, kota_tujuan, bandara_asal[2],
68 bandara_tujuan[2], kelas, tanggal, banyak_orang)
69 ui.setupUi(cariPage)
70 cariPage.show()
71 END

No. Halaman Pencarian

1 lbl_dari : Label
2 lbl_ke : Label
3 lbl_tanggal : Label
4 lbl_banyak_orang : Label
5 lbl_maskapai :Label
6 lb_batas : Label
7 lbl_kelas : Label
8 lbl_jam : Label
9 lbl_jamberangkat : Label
10 lbl_kota_ke : Label
11 btn_ganti : PushButton
12 btn_pilih : PushButton
13 jarak : int

14
14 sql : string
15 val : any
16 maskapai : any
17 banyak_orang : int
18 main : any
19 ui : any
20
21 Initialize :
22 lbl_dari.setText(kota_asal + '(' + bandara_asal +')')
23 lbl_arrow.setText("→")
24 lbl_ke.setText(kota_tujuan + '(' + bandara_tujuan +')')
25 lbl_tanggal.setText(tanggal.to(hari, tanggal bulan tahun)
26 lbl_banyak_orang.setText(str(banyak_orang) + " Dewasa")
27 lb_batas.setText("|")
28 lbl_kelas.setText(kelas)
29 btn_ganti.setText("GANTI PENCARIAN")
30
31 btn_ganti.clicked.connect(gantiPencarian)
32 jarak = 0
33
34 BEGIN
35 sql = "SELECT * FROM list_penerbangan WHERE kota_asal = %s
36 AND kota_tujuan = %s"
37 val = (kota_asal, kota_tujuan,)
38 execute(sql, val)
39 results = getall()
40 FOR data in results :
41 btn_pilih.clicked.connect(partial(openBayar, data[0]))
42 IF (data[7] == 'Garuda'):
43 label.setGeometry(QtCore.QRect(10, 10, 30, 30))
44 label.setText("")
45 label.setPixmap(QtGui.QPixmap("maskapai/garuda.png"))
46 ELSE IF (data[7] == 'Lion'):
47 label.setGeometry(QtCore.QRect(10, 15, 20, 20))
48 label.setText("")
49 label.setPixmap(QtGui.QPixmap("maskapai/lion.png"))
50 ELSE:
51 label.setGeometry(QtCore.QRect(10, 17, 30, 20))
52 label.setText("")
53
54 label.setPixmap(QtGui.QPixmap("maskapai/citilink.png"))
55 ENDIF
56
57 IF (kelas == 'Ekonomi'):
58 harga = int(data[6]) * banyak_orang
59 ELSE IF (kelas == 'Ekonomi Plus'):
60 harga = (int(data[6]) * 1.2) * banyak_orang
61 ELSE IF (kelas == 'Bisnis'):

15
62 harga = (int(data[6]) * 1.5) * banyak_orang
63 ELSE:
64 harga = (int(data[6]) * 2) * banyak_orang
65 ENDIF
66
67 lbl_maskapai.setText(data[7])
68 lbl_jam.setText(data[5])
69 lbl_jamberangkat.setText(data[3])
70 lbl_kota_ke.setText(data[2])
71 lbl_arrow_2.setText("→")
72 lbl_harga.setText("Rp. " + str(harga))
73 lbl_jamsampai.setText(data[4])
74 lbl_kota_dari.setText(data[1])
75 btn_pilih.setText("PILIH")
76 jarak = jarak + 80
77 ENDFOR
78
79 Function __init__(kota_asal, kota_tujuan, bandara_asal,
80 bandara_tujuan, kelas, tanggal, banyak_orang):
81 kota_asal = kota_asal
82 kota_tujuan = kota_tujuan
83 bandara_asal = bandara_asal
84 bandara_tujuan = bandara_tujuan
85 kelas = kelas
86 tanggal = tanggal
87 banyak_orang = banyak_orang
88
89 Function gantiPencarian():
90 main = Widget()
91 ui = Ui_main()
92 ui.setupUi(main)
93 main.show()
94
95 Function openBayar(id):
96 sql = "SELECT * FROM list_penerbangan WHERE id = %s"
97 val = (id,)
98 execute(sql, val)
99 data = getone()
100 maskapai = data[7]
101 IF(kelas == 'Ekonomi'):
102 harga = int(data[6]) * banyak_orang
103 ELSE IF(kelas == 'Ekonomi Plus'):
104 harga = (int(data[6]) * 1.2) * banyak_orang
105 ELSE IF (kelas == 'Bisnis'):
106 harga = (int(data[6]) * 1.5) * banyak_orang
107 ELSE:
108 harga = (int(data[6]) * 2) * banyak_orang
109 ENDIF

16
110
111 bayar = Widget()
112 ui = Ui_Bayar(kota_asal, kota_tujuan, bandara_asal,
113 bandara_tujuan, kelas, tanggal,
114 banyak_orang, maskapai, harga)
115 ui.setupUi(bayar)
116 bayar.show()
117
118 END

No. Halaman Bayar

1 tab_orang : any
2 orang1 : any
3 ledit_nama : LineEdit
4 cbx_title : CheckBox
5 lbl_nama : Label
6 lbl_titel : Label
7 ledit_nomor : Label
8 lbl_email : Label
9 ledit_email : LineEdit
10 orang2 : any
11 ledit_nama2 : LineEdit
12 cbx_title2 : CheckBox
13 lbl_nama2 : Label
14 lbl_titel2 : Label
15 ledit_nomor2 : Label
16 lbl_email2 : Label
17 ledit_email2 : LineEdit
18 orang3 : any
19 ledit_nama3 : LineEdit
20 cbx_title3 : CheckBox
21 lbl_nama3 : Label
22 lbl_titel3 : Label
23 ledit_nomor3 : Label
24 lbl_email3 : Label
25 ledit_email3 : LineEdit
26 lbl_harga : Label
27 btn_ganti : PushButton
28 nama : string
29 titel : string
30 nomor : string
31 email : string
32 maskapai : string
33 nomor_tiket : int

17
34 dari : string
35 ke : string
36 kelas : string
37 nama2 : string
38 titel2 : string
39 nomor2 : string
40 email2 : string
41 nomor_tiket2 : int
42 nama3 : string
43 titel3 : string
44 nomor3 : string
45 email3 : string
46 nomor_tiket3 : int
47
48 message_box : any
49
50 Initialize:
51 tab_orang = TabWidget
52 orang1 = Widget
53 tab_orang.addTab(orang1, '1')
54 cbx_title.setItemText(0, "Pilih")
55 cbx_title.setItemText(1, "Mr.")
56 cbx_title.setItemText(2, "Mrs.")
57 lbl_nama.setText("Nama Lengkap")
58 lbl_titel.setText("Titel")
59 lbl_nomor.setText("Nomor Telepon")
60 lbl_email.setText("Email")
61 IF(banyak_orang != 1):
62 orang2 = Widget
63 tab_orang.addTab(orang2, '2')
64 cbx_title2.setItemText(0, "Pilih")
65 cbx_title2.setItemText(1, "Mr.")
66 cbx_title2.setItemText(2, "Mrs.")
67 lbl_nama2.setText("Nama Lengkap")
68 lbl_titel2.setText("Titel")
69 lbl_nomor2.setText("Nomor Telepon")
70 lbl_email2.setText("Email")
71 IF (banyak_orang == 3):
72 orang3 = Widget
73 tab_orang.addTab(orang3, '3')
74 cbx_title3.setItemText(0, "Pilih")
75 cbx_title3.setItemText(1, "Mr.")
76 cbx_title3.setItemText(2, "Mrs.")
77 lbl_nama3.setText("Nama Lengkap")
78 lbl_titel3.setText("Titel")
79 lbl_nomor3.setText("Nomor Telepon")
80 lbl_email3.setText("Email")
81 ENDIF

18
82 ENDIF
83
84 tab_orang.setCurrentIndex(0)
85 cbx_title.setItemText(0, "Pilih")
86 cbx_title.setItemText(1, "Mr.")
87 cbx_title.setItemText(2, "Mrs.")
88 lbl_nama.setText("Nama Lengkap")
89 lbl_titel.setText("Titel")
90 lbl_nomor.setText("Nomor Telepon")
91 lbl_email.setText("Email")
92 label.setText("Total Harga")
93 lbl_harga.setText("Rp. "+ str(harga))
94 btn_ganti.setText("BAYAR SEKARANG")
95
96 BEGIN
97
98 point = 1.2
99 inch = 72
100
101 Function make_pdf_file(output_filename, np):
102 nama = ledit_nama.text()
103 titel = cbx_title.currentText()
104 nomor = ledit_nomor.text()
105 email = ledit_email.text()
106 maskapai = maskapai
107 nomor_tiket = str(random.randint(10000000000,
108 99999999999))
109 dari = kota_asal
110 ke = kota_tujuan
111 kelas = kelas
112
113 IF(banyak_orang == 1):
114 TEXT = f'''
115 "%s page %d of %d
116
117
118 =============================================================
119
120 Penumpang 1
121
122 Nama : {titel} {nama}
123 Nomor Telepon : {nomor}
124 Email : {email}
125
126 Dari : {dari}
127 Ke : {ke}
128 Maskapai : {maskapai}
129 Kelas : {kelas}

19
130
131 Nomor Tiket : {nomor_tiket}
132
133
134 =============================================================
135 '''
136 ELIF(banyak_orang == 2):
137 nama2 = ledit_nama2.text()
138 titel2 = cbx_title2.currentText()
139 nomor2 = ledit_nomor2.text()
140 email2 = ledit_email2.text()
141 nomor_tiket2 = str(random.randint(10000000000,
142 99999999999))
143 TEXT = f'''
144 "%s page %d of %d
145
146
147 =============================================================
148 Penumpang 1
149
150 Nama : {titel} {nama}
151 Nomor Telepon : {nomor}
152 Email : {email}
153
154 Dari : {dari}
155 Ke : {ke}
156 Maskapai : {maskapai}
157 Kelas : {kelas}
158
159 Nomor Tiket : {nomor_tiket}
160
161
162 =============================================================
163 Penumpang 2
164
165 Nama : {titel2} {nama2}
166 Nomor Telepon : {nomor2}
167 Email : {email2}
168
169 Dari : {dari}
170 Ke : {ke}
171 Maskapai : {maskapai}
172 Kelas : {kelas}
173
174 Nomor Tiket : {nomor_tiket2}
175
176
177 =============================================================

20
178 '''
179 ELIF (banyak_orang == 3):
180 nama2 = ledit_nama2.text()
181 titel2 = cbx_title2.currentText()
182 nomor2 = ledit_nomor2.text()
183 email2 = ledit_email2.text()
184 nomor_tiket2 = str(random.randint(10000000000,
185 99999999999))
186 nama3 = ledit_nama3.text()
187 titel3 = cbx_title3.currentText()
188 nomor3 = ledit_nomor3.text()
189 email3 = ledit_email3.text()
190 nomor_tiket3 = str(random.randint(10000000000,
191 99999999999))
192 TEXT = f'''
193 "%s page %d of %d
194
195
196 =============================================================
197 Penumpang 1
198
199 Nama : {titel} {nama}
200 Nomor Telepon : {nomor}
201 Email : {email}
202
203 Dari : {dari}
204 Ke : {ke}
205 Maskapai : {maskapai}
206 Kelas : {kelas}
207
208 Nomor Tiket : {nomor_tiket}
209
210
211 =============================================================
212 Penumpang 2
213
214 Nama : {titel2} {nama2}
215 Nomor Telepon : {nomor2}
216 Email : {email2}
217
218 Dari : {dari}
219 Ke : {ke}
220 Maskapai : {maskapai}
221 Kelas : {kelas}
222
223 Nomor Tiket : {nomor_tiket2}
224
225

21
226
227 =============================================================
228 Penumpang 3
229
230 Nama : {titel3} {nama3}
231 Nomor Telepon : {nomor3}
232 Email : {email3}
233
234 Dari : {dari}
235 Ke : {ke}
236 Maskapai : {maskapai}
237 Kelas : {kelas}
238
239 Nomor Tiket : {nomor_tiket3}
240
241
242 =============================================================
243 '''
244 ENDIF
245
246 title = output_filename
247 c = canvas.Canvas(output_filename, pagesize=(8.5 * inch,
248 11 * inch))
249 c.setStrokeColorRGB(0, 0, 0)
250 c.setFillColorRGB(0, 0, 0)
251 c.setFont("Helvetica", 11 * point)
252 for pn in range(1, np + 1):
253 v = 10 * inch
254 for subtline in (TEXT % (output_filename, pn,
255 np)).split('\n'):
256 c.drawString(1.5 * inch, v, subtline)
257 v -= 12 * point
258 c.showPage()
259 c.save()
260
261 Function buatPDF():
262 nama = ledit_nama.text()
263 maskapai ='Garuda Indonesia'
264 nps = [None, 1]
265 for i, np in enumerate(nps):
266 IF np:
267 nama_file = "tiket_" + nama + '_' + maskapai
268 filename = nama_file + "%d.pdf" % i
269 make_pdf_file(filename, np)
270 print("Wrote", filename)
271 message_box = MessageBox(Bayar)
272 message_box.setText("Berhasil Mencetak Tiket!")
273 message_box.exec_()

22
274
275 btn_ganti.clicked.connect(buatPDF)
276 END

3.1 Source Code


Dengan pseudocode yang telah dibuat, dapat dibuat source code dari program
SKATRASIA adalah sebagai berikut:

No. Judul Program

1 from PyQt5 import QtCore, QtGui, QtWidgets


2 import mysql.connector
3 from functools import partial
4 from PyQt5.QtWidgets import QMessageBox
5 import random
6 from reportlab.pdfgen import canvas
7
8 db = mysql.connector.connect(
9 host="localhost",
10 user="root",
11 passwd="",
12 database="skatrasia"
13 )
14
15 cursor = db.cursor()
16
17 class Ui_main(object):
18
19 def setupUi(self, main):
20 main.setObjectName("main")
21 main.resize(690, 299)
22 main.setStyleSheet("")
23 self.lbl_dari = QtWidgets.QLabel(main)
24 self.lbl_dari.setGeometry(QtCore.QRect(20, 30, 60,
25 16))
26 self.lbl_dari.setObjectName("lbl_dari")
27
28 self.cbx_dari = QtWidgets.QComboBox(main)
29 self.cbx_dari.setGeometry(QtCore.QRect(20, 50, 161,
30 26))
31 self.cbx_dari.setObjectName("cbx_dari")
32
33 self.lbl_ke = QtWidgets.QLabel(main)
34

23
35 self.lbl_ke.setGeometry(QtCore.QRect(200, 30, 60,
36 16))
37 self.lbl_ke.setObjectName("lbl_ke")
38
39 self.cbx_ke = QtWidgets.QComboBox(main)
40 self.cbx_ke.setGeometry(QtCore.QRect(200, 50, 161,
41 26))
42 self.cbx_ke.setObjectName("cbx_ke")
43
44 self.lbl_tanggal = QtWidgets.QLabel(main)
45 self.lbl_tanggal.setGeometry(QtCore.QRect(20, 90,
46 141, 16))
47 self.lbl_tanggal.setObjectName("lbl_tanggal")
48
49 self.dedi_tanggal = QtWidgets.QDateEdit(main)
50 self.dedi_tanggal.setGeometry(QtCore.QRect(20, 110,
51 161, 24))
52
53 self.dedi_tanggal.setMinimumDate(QtCore.QDate.currentDate())
54 self.dedi_tanggal.setCalendarPopup(True)
55 self.dedi_tanggal.setObjectName("dedi_tanggal")
56
57 self.lbl_kelas = QtWidgets.QLabel(main)
58 self.lbl_kelas.setGeometry(QtCore.QRect(20, 150, 151,
59 16))
60 self.lbl_kelas.setObjectName("lbl_kelas")
61
62 self.cbx_kelas = QtWidgets.QComboBox(main)
63 self.cbx_kelas.setGeometry(QtCore.QRect(20, 170, 341,
64 26))
65 self.cbx_kelas.setObjectName("cbx_kelas")
66
67 self.lbl_banyak_penumpang = QtWidgets.QLabel(main)
68
69 self.lbl_banyak_penumpang.setGeometry(QtCore.QRect(440, 50,
70 141, 16))
71
72 self.lbl_banyak_penumpang.setObjectName("lbl_banyak_penumpang
73 ")
74
75 self.lbl_dewasa = QtWidgets.QLabel(main)
76 self.lbl_dewasa.setGeometry(QtCore.QRect(440, 80, 60,
77 16))
78 self.lbl_dewasa.setObjectName("lbl_dewasa")
79
80 self.banyak_dewasa = QtWidgets.QSpinBox(main)
81 self.banyak_dewasa.setGeometry(QtCore.QRect(570, 80,
82 48, 24))

24
83 self.banyak_dewasa.setObjectName("banyak_dewasa")
84 self.banyak_dewasa.setValue(1)
85 self.banyak_dewasa.setMinimum(1)
86 self.banyak_dewasa.setMaximum(3)
87
88 self.btn_cari_penerbangan =
89 QtWidgets.QPushButton(main)
90
91 self.btn_cari_penerbangan.setGeometry(QtCore.QRect(10, 230,
92 661, 51))
93
94 font = QtGui.QFont()
95 font.setPointSize(20)
96 font.setBold(False)
97 font.setWeight(50)
98 self.btn_cari_penerbangan.setFont(font)
99 self.btn_cari_penerbangan.setStyleSheet("color:
100 white;\n"
101 "background-color: #3498DB;\n"
102 "border-radius: 10px")
103
104 self.btn_cari_penerbangan.setObjectName("btn_cari_penerbangan
105 ")
106
107 self.retranslateUi(main)
108 QtCore.QMetaObject.connectSlotsByName(main)
109
110 def cariProses(self):
111 self.cariPage = QtWidgets.QWidget()
112 kota_asal = self.cbx_dari.currentText()
113 kota_tujuan = self.cbx_ke.currentText()
114 kelas = self.cbx_kelas.currentText()
115 tanggal = self.dedi_tanggal.date()
116 banyak_orang = self.banyak_dewasa.value()
117
118 sql = "SELECT * FROM list_kota WHERE kota = %s"
119 val = (kota_asal,)
120 cursor.execute(sql, val)
121 bandara_asal = cursor.fetchone()
122
123 sql = "SELECT * FROM list_kota WHERE kota = %s"
124 val = (kota_tujuan,)
125 cursor.execute(sql, val)
126 bandara_tujuan = cursor.fetchone()
127 self.ui = Ui_cariPage(kota_asal, kota_tujuan,
128 bandara_asal[2], bandara_tujuan[2], kelas, tanggal,
129 banyak_orang)
130 self.ui.setupUi(self.cariPage)

25
131 self.cariPage.show()
132
133 def retranslateUi(self, main):
134 _translate = QtCore.QCoreApplication.translate
135 main.setWindowTitle(_translate("main", "Skatrasia"))
136 self.lbl_dari.setText(_translate("main", "Dari"))
137 self.lbl_ke.setText(_translate("main", "Ke"))
138
139 # menampilkan list kota
140 cursor = db.cursor()
141 sql = "SELECT * FROM list_kota"
142 cursor.execute(sql)
143 results = cursor.fetchall()
144 for data in results:
145 self.cbx_dari.addItem(data[1])
146 self.cbx_ke.addItem(data[1])
147
148
149 self.cbx_ke.setCurrentIndex(self.cbx_ke.currentIndex() + 1)
150 self.lbl_tanggal.setText(_translate("main", "Tanggal
151 Berangkat"))
152 self.lbl_kelas.setText(_translate("main", "Kelas
153 Penerbangan"))
154
155 self.cbx_kelas.addItems([
156 'Ekonomi',
157 'Ekonomi Plus',
158 'Bisnis',
159 'First Class'
160 ])
161 self.lbl_banyak_penumpang.setText(_translate("main",
162 "Banyak Penumpang"))
163 self.lbl_dewasa.setText(_translate("main", "Dewasa"))
164 self.btn_cari_penerbangan.setText(_translate("main",
165 "CARI PENERBANGAN"))
166
167 self.btn_cari_penerbangan.clicked.connect(self.cariProses)
168 self.btn_cari_penerbangan.clicked.connect(main.hide)
169
170
171
172 class Ui_cariPage(object):
173 def __init__(self, kota_asal, kota_tujuan, bandara_asal,
174 bandara_tujuan, kelas, tanggal, banyak_orang):
175 self.kota_asal = kota_asal
176 self.kota_tujuan = kota_tujuan
177 self.bandara_asal = bandara_asal
178 self.bandara_tujuan = bandara_tujuan

26
179 self.kelas = kelas
180 self.tanggal = tanggal
181 self.banyak_orang = banyak_orang
182
183 def gantiPencarian(self):
184 self.main = QtWidgets.QWidget()
185 self.ui = Ui_main()
186 self.ui.setupUi(self.main)
187 self.main.show()
188
189 def openBayar(self, id):
190 cursor = db.cursor()
191 sql = "SELECT * FROM list_penerbangan WHERE id = %s"
192 val = (id,)
193 cursor.execute(sql, val)
194 data = cursor.fetchone()
195 maskapai = data[7]
196 if(self.kelas == 'Ekonomi'):
197 harga = int(data[6]) * int(self.banyak_orang)
198 elif(self.kelas == 'Ekonomi Plus'):
199 harga = (int(data[6]) * 1.2) *
200 int(self.banyak_orang)
201 elif (self.kelas == 'Bisnis'):
202 harga = (int(data[6]) * 1.5) *
203 int(self.banyak_orang)
204 else:
205 harga = (int(data[6]) * 2) *
206 int(self.banyak_orang)
207 self.bayar = QtWidgets.QWidget()
208 self.ui = Ui_Bayar(self.kota_asal, self.kota_tujuan,
209 self.bandara_asal, self.bandara_tujuan, self.kelas,
210 self.tanggal,
211 self.banyak_orang, maskapai,
212 harga)
213 self.ui.setupUi(self.bayar)
214 self.bayar.show()
215
216 def setupUi(self, cariPage):
217 cariPage.setObjectName("cariPage")
218 cariPage.resize(799, 595)
219
220 self.horizontalLayoutWidget =
221 QtWidgets.QWidget(cariPage)
222
223 self.horizontalLayoutWidget.setGeometry(QtCore.QRect(30, 20,
224 731, 51))
225
226

27
227
228 self.horizontalLayoutWidget.setObjectName("horizontalLayoutWi
229 dget")
230 self.layout_bandara =
231 QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
232 self.layout_bandara.setContentsMargins(0, 0, 0, 0)
233 self.layout_bandara.setObjectName("layout_bandara")
234 self.lbl_dari =
235 QtWidgets.QLabel(self.horizontalLayoutWidget)
236 sizePolicy =
237 QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed,
238 QtWidgets.QSizePolicy.Preferred)
239 sizePolicy.setHorizontalStretch(0)
240 sizePolicy.setVerticalStretch(0)
241
242 sizePolicy.setHeightForWidth(self.lbl_dari.sizePolicy().hasHe
243 ightForWidth())
244 self.lbl_dari.setSizePolicy(sizePolicy)
245 font = QtGui.QFont()
246 font.setPointSize(16)
247 font.setBold(True)
248 font.setWeight(75)
249 self.lbl_dari.setFont(font)
250 self.lbl_dari.setObjectName("lbl_dari")
251 self.layout_bandara.addWidget(self.lbl_dari)
252 self.lbl_arrow =
253 QtWidgets.QLabel(self.horizontalLayoutWidget)
254 sizePolicy =
255 QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed,
256 QtWidgets.QSizePolicy.Preferred)
257 sizePolicy.setHorizontalStretch(0)
258 sizePolicy.setVerticalStretch(0)
259
260 sizePolicy.setHeightForWidth(self.lbl_arrow.sizePolicy().hasH
261 eightForWidth())
262 self.lbl_arrow.setSizePolicy(sizePolicy)
263 font = QtGui.QFont()
264 font.setPointSize(15)
265 font.setBold(True)
266 font.setWeight(75)
267 self.lbl_arrow.setFont(font)
268 self.lbl_arrow.setObjectName("lbl_arrow")
269 self.layout_bandara.addWidget(self.lbl_arrow)
270 self.lbl_ke =
271 QtWidgets.QLabel(self.horizontalLayoutWidget)
272 sizePolicy =
273 QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
274 QtWidgets.QSizePolicy.Preferred)

28
275 sizePolicy.setHorizontalStretch(0)
276 sizePolicy.setVerticalStretch(0)
277
278 sizePolicy.setHeightForWidth(self.lbl_ke.sizePolicy().hasHeig
279 htForWidth())
280 self.lbl_ke.setSizePolicy(sizePolicy)
281 font = QtGui.QFont()
282 font.setPointSize(16)
283 font.setBold(True)
284 font.setWeight(75)
285 self.lbl_ke.setFont(font)
286 self.lbl_ke.setObjectName("lbl_ke")
287 self.layout_bandara.addWidget(self.lbl_ke)
288
289 self.lbl_tanggal = QtWidgets.QLabel(cariPage)
290 self.lbl_tanggal.setGeometry(QtCore.QRect(30, 80,
291 261, 16))
292 self.lbl_tanggal.setObjectName("lbl_tanggal")
293
294 self.lbl_banyak_orang = QtWidgets.QLabel(cariPage)
295 self.lbl_banyak_orang.setGeometry(QtCore.QRect(30,
296 100, 61, 21))
297
298 self.lbl_banyak_orang.setObjectName("lbl_banyak_orang")
299
300 self.lb_batas = QtWidgets.QLabel(cariPage)
301 self.lb_batas.setGeometry(QtCore.QRect(100, 100, 20,
302 20))
303 self.lb_batas.setObjectName("lb_batas")
304
305 self.lbl_kelas = QtWidgets.QLabel(cariPage)
306 self.lbl_kelas.move(120, 102)
307 self.lbl_kelas.setObjectName("lbl_kelas")
308
309 self.btn_ganti = QtWidgets.QPushButton(cariPage)
310 self.btn_ganti.setGeometry(QtCore.QRect(580, 80, 191,
311 41))
312 font = QtGui.QFont()
313 font.setPointSize(16)
314 self.btn_ganti.setFont(font)
315 self.btn_ganti.setStyleSheet("color: white;\n"
316 "background-color: #3498DB;\n"
317 "border-radius: 10px")
318 self.btn_ganti.setObjectName("btn_ganti")
319 self.btn_ganti.clicked.connect(self.gantiPencarian)
320 self.btn_ganti.clicked.connect(cariPage.hide)
321
322 self.scrollArea = QtWidgets.QScrollArea(cariPage)

29
323 self.scrollArea.setGeometry(QtCore.QRect(20, 140,
324 761, 431))
325 self.scrollArea.setFrameShape(QtWidgets.QFrame.VLine)
326
327 self.scrollArea.setFrameShadow(QtWidgets.QFrame.Raised)
328 self.scrollArea.setLineWidth(1)
329
330 self.scrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBa
331 rAlwaysOn)
332
333 self.scrollArea.setHorizontalScrollBarPolicy(QtCore.Qt.Scroll
334 BarAlwaysOff)
335 self.scrollArea.setWidgetResizable(False)
336 self.scrollArea.setObjectName("scrollArea")
337 self.scrollAreaWidgetContents = QtWidgets.QWidget()
338
339 self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0,
340 761, 1000))
341
342 self.scrollAreaWidgetContents.setObjectName("scrollAreaWidget
343 Contents")
344 jarak = 0
345 cursor = db.cursor()
346 sql = "SELECT * FROM list_penerbangan WHERE kota_asal
347 = %s AND kota_tujuan = %s"
348 val = (self.kota_asal, self.kota_tujuan,)
349 cursor.execute(sql, val)
350 results = cursor.fetchall()
351 for data in results:
352 self.group_maskapai =
353 QtWidgets.QGroupBox(self.scrollAreaWidgetContents)
354 self.group_maskapai.setGeometry(QtCore.QRect(0,
355 jarak, 751, 80))
356 self.group_maskapai.setFlat(True)
357
358 self.group_maskapai.setObjectName("group_maskapai")
359 self.btn_pilih =
360 QtWidgets.QPushButton(self.group_maskapai)
361 self.btn_pilih.setGeometry(QtCore.QRect(590, 40,
362 121, 31))
363 self.btn_pilih.setStyleSheet("color: white;
364 background-color:#fc8210; border-radius: 5px;")
365 self.btn_pilih.setObjectName("btn_pilih")
366
367 self.btn_pilih.clicked.connect(partial(self.openBayar,
368 data[0]))
369
370

30
371 self.lbl_maskapai =
372 QtWidgets.QLabel(self.group_maskapai)
373 self.lbl_maskapai.setGeometry(QtCore.QRect(50,
374 20, 121, 16))
375 self.lbl_maskapai.setObjectName("lbl_maskapai")
376 self.lbl_jam =
377 QtWidgets.QLabel(self.group_maskapai)
378 self.lbl_jam.setGeometry(QtCore.QRect(490, 20,
379 71, 31))
380 font = QtGui.QFont()
381 font.setPointSize(16)
382 self.lbl_jam.setFont(font)
383 self.lbl_jam.setObjectName("lbl_jam")
384 self.lbl_jamberangkat =
385 QtWidgets.QLabel(self.group_maskapai)
386
387 self.lbl_jamberangkat.setGeometry(QtCore.QRect(190, 20, 60,
388 16))
389
390 self.lbl_jamberangkat.setObjectName("lbl_jamberangkat")
391 self.lbl_kota_ke =
392 QtWidgets.QLabel(self.group_maskapai)
393 self.lbl_kota_ke.setGeometry(QtCore.QRect(340,
394 40, 101, 16))
395 self.lbl_kota_ke.setStyleSheet("color: grey")
396 self.lbl_kota_ke.setObjectName("lbl_kota_ke")
397 self.label =
398 QtWidgets.QLabel(self.group_maskapai)
399 if (data[7] == 'Garuda'):
400 self.label.setGeometry(QtCore.QRect(10, 10,
401 30, 30))
402 self.label.setText("")
403
404 self.label.setPixmap(QtGui.QPixmap("maskapai/garuda.png"))
405 elif (data[7] == 'Lion'):
406 self.label.setGeometry(QtCore.QRect(10, 15,
407 20, 20))
408 self.label.setText("")
409
410 self.label.setPixmap(QtGui.QPixmap("maskapai/lion.png"))
411 else:
412 self.label.setGeometry(QtCore.QRect(10, 17,
413 30, 20))
414 self.label.setText("")
415
416 self.label.setPixmap(QtGui.QPixmap("maskapai/citilink.png"))
417 self.label.setScaledContents(True)
418 self.label.setObjectName("label")

31
419 self.lbl_arrow_2 =
420 QtWidgets.QLabel(self.group_maskapai)
421 self.lbl_arrow_2.setGeometry(QtCore.QRect(290,
422 10, 31, 41))
423 font = QtGui.QFont()
424 font.setPointSize(13)
425 font.setBold(True)
426 font.setWeight(75)
427 self.lbl_arrow_2.setFont(font)
428 self.lbl_arrow_2.setObjectName("lbl_arrow_2")
429 self.lbl_harga =
430 QtWidgets.QLabel(self.group_maskapai)
431 self.lbl_harga.setGeometry(QtCore.QRect(590, 10,
432 131, 31))
433 font = QtGui.QFont()
434 font.setPointSize(16)
435 font.setBold(True)
436 font.setWeight(75)
437 self.lbl_harga.setFont(font)
438 self.lbl_harga.setStyleSheet("color: #fc8210;")
439 self.lbl_harga.setObjectName("lbl_harga")
440 self.lbl_jamsampai =
441 QtWidgets.QLabel(self.group_maskapai)
442 self.lbl_jamsampai.setGeometry(QtCore.QRect(340,
443 20, 60, 16))
444 self.lbl_jamsampai.setObjectName("lbl_jamsampai")
445 self.lbl_kota_dari =
446 QtWidgets.QLabel(self.group_maskapai)
447 self.lbl_kota_dari.setGeometry(QtCore.QRect(190,
448 40, 91, 16))
449 self.lbl_kota_dari.setStyleSheet("color: grey")
450 self.lbl_kota_dari.setObjectName("lbl_kota_dari")
451
452 if (self.kelas == 'Ekonomi'):
453 harga = int(data[6]) * int(self.banyak_orang)
454 elif (self.kelas == 'Ekonomi Plus'):
455 harga = (int(data[6]) * 1.2) *
456 int(self.banyak_orang)
457 elif (self.kelas == 'Bisnis'):
458 harga = (int(data[6]) * 1.5) *
459 int(self.banyak_orang)
460 else:
461 harga = (int(data[6]) * 2) *
462 int(self.banyak_orang)
463
464 self.lbl_maskapai.setText(data[7])
465 self.lbl_jam.setText(data[5])
466 self.lbl_jamberangkat.setText(data[3])

32
467 self.lbl_kota_ke.setText(data[2])
468 self.lbl_arrow_2.setText("→")
469 self.lbl_harga.setText("Rp. " + str(harga))
470 self.lbl_jamsampai.setText(data[4])
471 self.lbl_kota_dari.setText(data[1])
472 self.btn_pilih.setText("PILIH")
473 jarak = jarak + 80
474
475 self.scrollArea.setWidget(self.scrollAreaWidgetContents)
476
477 self.retranslateUi(cariPage)
478 QtCore.QMetaObject.connectSlotsByName(cariPage)
479
480 def retranslateUi(self, cariPage):
481 _translate = QtCore.QCoreApplication.translate
482 cariPage.setWindowTitle(_translate("cariPage",
483 "Pencarian"))
484 self.lbl_dari.setText(_translate("cariPage",
485 self.kota_asal + '(' + self.bandara_asal +')'))
486 self.lbl_arrow.setText(_translate("cariPage", "→"))
487 self.lbl_ke.setText(_translate("cariPage",
488 self.kota_tujuan + '(' + self.bandara_tujuan +')'))
489 self.lbl_tanggal.setText(_translate("cariPage",
490 self.tanggal.toPyDate().strftime('%A, %d %B %Y')))
491 self.lbl_banyak_orang.setText(_translate("cariPage",
492 str(self.banyak_orang) + " Dewasa"))
493 self.lb_batas.setText(_translate("cariPage", "|"))
494 self.lbl_kelas.setText(_translate("cariPage",
495 self.kelas))
496 self.btn_ganti.setText(_translate("cariPage", "GANTI
497 PENCARIAN"))
498
499
500 class Ui_Bayar(object):
501 def __init__(self, kota_asal, kota_tujuan, bandara_asal,
502 bandara_tujuan, kelas, tanggal, banyak_orang, maskapai,
503 harga):
504 self.kota_asal = kota_asal
505 self.kota_tujuan = kota_tujuan
506 self.bandara_asal = bandara_asal
507 self.bandara_tujuan = bandara_tujuan
508 self.kelas = kelas
509 self.tanggal = tanggal
510 self.banyak_orang = banyak_orang
511 self.maskapai = maskapai
512 self.harga = harga
513
514 def setupUi(self, Bayar):

33
515
516 Bayar.setObjectName("Bayar")
517 Bayar.resize(603, 288)
518 self.tab_orang = QtWidgets.QTabWidget(Bayar)
519 self.tab_orang.setGeometry(QtCore.QRect(0, 0, 601,
520 231))
521 self.tab_orang.setObjectName("tab_orang")
522
523 self.orang1 = QtWidgets.QWidget()
524 self.orang1.setObjectName("orang1")
525 self.ledit_nama = QtWidgets.QLineEdit(self.orang1)
526 self.ledit_nama.setGeometry(QtCore.QRect(20, 30, 201,
527 21))
528 self.ledit_nama.setObjectName("ledit_nama")
529 self.cbx_title = QtWidgets.QComboBox(self.orang1)
530 self.cbx_title.setGeometry(QtCore.QRect(20, 100, 201,
531 26))
532 self.cbx_title.setObjectName("cbx_title")
533 self.cbx_title.addItem("")
534 self.cbx_title.addItem("")
535 self.cbx_title.addItem("")
536 self.lbl_nama = QtWidgets.QLabel(self.orang1)
537 self.lbl_nama.setGeometry(QtCore.QRect(20, 10, 181,
538 16))
539 self.lbl_nama.setObjectName("lbl_nama")
540 self.lbl_titel = QtWidgets.QLabel(self.orang1)
541 self.lbl_titel.setGeometry(QtCore.QRect(20, 80, 60,
542 16))
543 self.lbl_titel.setObjectName("lbl_titel")
544 self.ledit_nomor = QtWidgets.QLineEdit(self.orang1)
545 self.ledit_nomor.setGeometry(QtCore.QRect(300, 30,
546 171, 21))
547 self.ledit_nomor.setObjectName("ledit_nomor")
548 self.lbl_nomor = QtWidgets.QLabel(self.orang1)
549 self.lbl_nomor.setGeometry(QtCore.QRect(300, 10, 121,
550 16))
551 self.lbl_nomor.setObjectName("lbl_nomor")
552 self.lbl_email = QtWidgets.QLabel(self.orang1)
553 self.lbl_email.setGeometry(QtCore.QRect(300, 80, 60,
554 16))
555 self.lbl_email.setObjectName("lbl_email")
556 self.ledit_email = QtWidgets.QLineEdit(self.orang1)
557 self.ledit_email.setGeometry(QtCore.QRect(300, 100,
558 171, 21))
559 self.ledit_email.setObjectName("ledit_email")
560 self.tab_orang.addTab(self.orang1, '1')
561 self.cbx_title.setItemText(0, "Pilih")
562 self.cbx_title.setItemText(1, "Mr.")

34
563 self.cbx_title.setItemText(2, "Mrs.")
564 self.lbl_nama.setText("Nama Lengkap")
565 self.lbl_titel.setText("Titel")
566 self.lbl_nomor.setText("Nomor Telepon")
567 self.lbl_email.setText("Email")
568 if(self.banyak_orang != 1):
569 self.orang2 = QtWidgets.QWidget()
570 self.orang2.setObjectName("orang2")
571 self.ledit_nama2 =
572 QtWidgets.QLineEdit(self.orang2)
573 self.ledit_nama2.setGeometry(QtCore.QRect(20, 30,
574 201, 21))
575 self.ledit_nama2.setObjectName("ledit_nama2")
576 self.cbx_title2 =
577 QtWidgets.QComboBox(self.orang2)
578 self.cbx_title2.setGeometry(QtCore.QRect(20, 100,
579 201, 26))
580 self.cbx_title2.setObjectName("cbx_title")
581 self.cbx_title2.addItem("")
582 self.cbx_title2.addItem("")
583 self.cbx_title2.addItem("")
584 self.lbl_nama2 = QtWidgets.QLabel(self.orang2)
585 self.lbl_nama2.setGeometry(QtCore.QRect(20, 10,
586 181, 16))
587 self.lbl_nama2.setObjectName("lbl_nama")
588 self.lbl_titel2 = QtWidgets.QLabel(self.orang2)
589 self.lbl_titel2.setGeometry(QtCore.QRect(20, 80,
590 60, 16))
591 self.lbl_titel2.setObjectName("lbl_titel")
592 self.ledit_nomor2 =
593 QtWidgets.QLineEdit(self.orang2)
594 self.ledit_nomor2.setGeometry(QtCore.QRect(300,
595 30, 171, 21))
596 self.ledit_nomor2.setObjectName("ledit_nomor")
597 self.lbl_nomor2 = QtWidgets.QLabel(self.orang2)
598 self.lbl_nomor2.setGeometry(QtCore.QRect(300, 10,
599 121, 16))
600 self.lbl_nomor2.setObjectName("lbl_nomor")
601 self.lbl_email2 = QtWidgets.QLabel(self.orang2)
602 self.lbl_email2.setGeometry(QtCore.QRect(300, 80,
603 60, 16))
604 self.lbl_email2.setObjectName("lbl_email")
605 self.ledit_email2 =
606 QtWidgets.QLineEdit(self.orang2)
607 self.ledit_email2.setGeometry(QtCore.QRect(300,
608 100, 171, 21))
609 self.ledit_email2.setObjectName("ledit_email")
610 self.tab_orang.addTab(self.orang2, '2')

35
611 self.cbx_title2.setItemText(0, "Pilih")
612 self.cbx_title2.setItemText(1, "Mr.")
613 self.cbx_title2.setItemText(2, "Mrs.")
614 self.lbl_nama2.setText("Nama Lengkap")
615 self.lbl_titel2.setText("Titel")
616 self.lbl_nomor2.setText("Nomor Telepon")
617 self.lbl_email2.setText("Email")
618 if (self.banyak_orang == 3):
619 self.orang3 = QtWidgets.QWidget()
620 self.orang3.setObjectName("orang3")
621 self.ledit_nama3 =
622 QtWidgets.QLineEdit(self.orang3)
623 self.ledit_nama3.setGeometry(QtCore.QRect(20,
624 30, 201, 21))
625 self.ledit_nama3.setObjectName("ledit_nama2")
626 self.cbx_title3 =
627 QtWidgets.QComboBox(self.orang3)
628 self.cbx_title3.setGeometry(QtCore.QRect(20,
629 100, 201, 26))
630 self.cbx_title3.setObjectName("cbx_title")
631 self.cbx_title3.addItem("")
632 self.cbx_title3.addItem("")
633 self.cbx_title3.addItem("")
634 self.lbl_nama3 =
635 QtWidgets.QLabel(self.orang3)
636 self.lbl_nama3.setGeometry(QtCore.QRect(20,
637 10, 181, 16))
638 self.lbl_nama3.setObjectName("lbl_nama")
639 self.lbl_titel3 =
640 QtWidgets.QLabel(self.orang3)
641 self.lbl_titel3.setGeometry(QtCore.QRect(20,
642 80, 60, 16))
643 self.lbl_titel3.setObjectName("lbl_titel")
644 self.ledit_nomor3 =
645 QtWidgets.QLineEdit(self.orang3)
646
647 self.ledit_nomor3.setGeometry(QtCore.QRect(300, 30, 171, 21))
648
649 self.ledit_nomor3.setObjectName("ledit_nomor")
650 self.lbl_nomor3 =
651 QtWidgets.QLabel(self.orang3)
652 self.lbl_nomor3.setGeometry(QtCore.QRect(300,
653 10, 121, 16))
654 self.lbl_nomor3.setObjectName("lbl_nomor")
655 self.lbl_email3 =
656 QtWidgets.QLabel(self.orang3)
657 self.lbl_email3.setGeometry(QtCore.QRect(300,
658 80, 60, 16))

36
659 self.lbl_email3.setObjectName("lbl_email")
660 self.ledit_email3 =
661 QtWidgets.QLineEdit(self.orang3)
662
663 self.ledit_email3.setGeometry(QtCore.QRect(300, 100, 171,
664 21))
665
666 self.ledit_email3.setObjectName("ledit_email")
667 self.tab_orang.addTab(self.orang3, '3')
668 self.cbx_title3.setItemText(0, "Pilih")
669 self.cbx_title3.setItemText(1, "Mr.")
670 self.cbx_title3.setItemText(2, "Mrs.")
671 self.lbl_nama3.setText("Nama Lengkap")
672 self.lbl_titel3.setText("Titel")
673 self.lbl_nomor3.setText("Nomor Telepon")
674 self.lbl_email3.setText("Email")
675
676 self.label = QtWidgets.QLabel(Bayar)
677 self.label.setGeometry(QtCore.QRect(20, 240, 101,
678 31))
679 self.label.setObjectName("label")
680 self.lbl_harga = QtWidgets.QLabel(Bayar)
681 self.lbl_harga.setGeometry(QtCore.QRect(110, 240,
682 131, 31))
683 font = QtGui.QFont()
684 font.setPointSize(16)
685 font.setBold(True)
686 font.setWeight(75)
687 self.lbl_harga.setFont(font)
688 self.lbl_harga.setStyleSheet("color: #fc8210;")
689 self.lbl_harga.setObjectName("lbl_harga")
690 self.btn_ganti = QtWidgets.QPushButton(Bayar)
691 self.btn_ganti.setGeometry(QtCore.QRect(400, 240,
692 191, 41))
693 font = QtGui.QFont()
694 font.setPointSize(16)
695 self.btn_ganti.setFont(font)
696 self.btn_ganti.setStyleSheet("color: white;\n"
697 "background-color: #3498DB;\n"
698 "border-radius: 10px")
699 self.btn_ganti.setObjectName("btn_ganti")
700
701 self.retranslateUi(Bayar)
702 self.tab_orang.setCurrentIndex(0)
703 QtCore.QMetaObject.connectSlotsByName(Bayar)
704
705 point = 1.2
706 inch = 72

37
707
708 def make_pdf_file(output_filename, np):
709 nama = self.ledit_nama.text()
710 titel = self.cbx_title.currentText()
711 nomor = self.ledit_nomor.text()
712 email = self.ledit_email.text()
713 maskapai = self.maskapai
714 nomor_tiket = str(random.randint(10000000000,
715 99999999999))
716 dari = self.kota_asal
717 ke = self.kota_tujuan
718 kelas = self.kelas
719
720 if(self.banyak_orang == 1):
721 TEXT = f'''
722 "%s page %d of %d
723
724
725 =============================================================
726
727 Penumpang 1
728
729 Nama : {titel} {nama}
730 Nomor Telepon : {nomor}
731 Email : {email}
732
733 Dari : {dari}
734 Ke : {ke}
735 Maskapai : {maskapai}
736 Kelas : {kelas}
737
738 Nomor Tiket : {nomor_tiket}
739
740
741 =============================================================
742 '''
743 elif(self.banyak_orang == 2):
744 nama2 = self.ledit_nama2.text()
745 titel2 = self.cbx_title2.currentText()
746 nomor2 = self.ledit_nomor2.text()
747 email2 = self.ledit_email2.text()
748 nomor_tiket2 =
749 str(random.randint(10000000000, 99999999999))
750 TEXT = f'''
751 "%s page %d of %d
752
753
754 =============================================================

38
755 Penumpang 1
756
757 Nama : {titel} {nama}
758 Nomor Telepon : {nomor}
759 Email : {email}
760
761 Dari : {dari}
762 Ke : {ke}
763 Maskapai : {maskapai}
764 Kelas : {kelas}
765
766 Nomor Tiket : {nomor_tiket}
767
768
769 =============================================================
770 Penumpang 2
771
772 Nama : {titel2} {nama2}
773 Nomor Telepon : {nomor2}
774 Email : {email2}
775
776 Dari : {dari}
777 Ke : {ke}
778 Maskapai : {maskapai}
779 Kelas : {kelas}
780
781 Nomor Tiket : {nomor_tiket2}
782
783
784 =============================================================
785 '''
786 elif (self.banyak_orang == 3):
787 nama2 = self.ledit_nama2.text()
788 titel2 = self.cbx_title2.currentText()
789 nomor2 = self.ledit_nomor2.text()
790 email2 = self.ledit_email2.text()
791 nomor_tiket2 =
792 str(random.randint(10000000000, 99999999999))
793 nama3 = self.ledit_nama3.text()
794 titel3 = self.cbx_title3.currentText()
795 nomor3 = self.ledit_nomor3.text()
796 email3 = self.ledit_email3.text()
797 nomor_tiket3 =
798 str(random.randint(10000000000, 99999999999))
799 TEXT = f'''
800 "%s page %d of %d
801
802

39
803
804 =============================================================
805 Penumpang 1
806
807 Nama : {titel} {nama}
808 Nomor Telepon : {nomor}
809 Email : {email}
810
811 Dari : {dari}
812 Ke : {ke}
813 Maskapai : {maskapai}
814 Kelas : {kelas}
815
816 Nomor Tiket : {nomor_tiket}
817
818
819 =============================================================
820 Penumpang 2
821
822 Nama : {titel2} {nama2}
823 Nomor Telepon : {nomor2}
824 Email : {email2}
825
826 Dari : {dari}
827 Ke : {ke}
828 Maskapai : {maskapai}
829 Kelas : {kelas}
830
831 Nomor Tiket : {nomor_tiket2}
832
833
834 =============================================================
835 Penumpang 3
836
837 Nama : {titel3} {nama3}
838 Nomor Telepon : {nomor3}
839 Email : {email3}
840
841 Dari : {dari}
842 Ke : {ke}
843 Maskapai : {maskapai}
844 Kelas : {kelas}
845
846 Nomor Tiket : {nomor_tiket3}
847
848
849 =============================================================
850 '''

40
851 title = output_filename
852 c = canvas.Canvas(output_filename, pagesize=(8.5
853 * inch, 11 * inch))
854 c.setStrokeColorRGB(0, 0, 0)
855 c.setFillColorRGB(0, 0, 0)
856 c.setFont("Helvetica", 11 * point)
857 for pn in range(1, np + 1):
858 v = 10 * inch
859 for subtline in (TEXT % (output_filename, pn,
860 np)).split('\n'):
861 c.drawString(1.5 * inch, v, subtline)
862 v -= 12 * point
863 c.showPage()
864 c.save()
865
866 def buatPDF():
867 nama = self.ledit_nama.text()
868 maskapai ='Garuda Indonesia'
869 nps = [None, 1]
870 for i, np in enumerate(nps):
871 if np:
872 nama_file = "tiket_" + nama + '_' +
873 maskapai
874 filename = nama_file + "%d.pdf" % i
875 make_pdf_file(filename, np)
876 print("Wrote", filename)
877 message_box = QMessageBox(Bayar)
878 message_box.setWindowTitle("Skatrasia")
879 message_box.setText("Berhasil Mencetak
880 Tiket!")
881 message_box.exec_()
882
883 self.btn_ganti.clicked.connect(buatPDF)
884
885
886 def retranslateUi(self, Bayar):
887 _translate = QtCore.QCoreApplication.translate
888 Bayar.setWindowTitle(_translate("Bayar",
889 "Pembayaran"))
890 self.cbx_title.setItemText(0, _translate("Bayar",
891 "Pilih"))
892 self.cbx_title.setItemText(1, _translate("Bayar",
893 "Mr."))
894 self.cbx_title.setItemText(2, _translate("Bayar",
895 "Mrs."))
896 self.lbl_nama.setText(_translate("Bayar", "Nama
897 Lengkap"))
898 self.lbl_titel.setText(_translate("Bayar", "Titel"))

41
899 self.lbl_nomor.setText(_translate("Bayar", "Nomor
900 Telepon"))
901 self.lbl_email.setText(_translate("Bayar", "Email"))
902 self.label.setText(_translate("Bayar", "Total
903 Harga"))
904 self.lbl_harga.setText(_translate("Bayar", "Rp. "+
905 str(self.harga)))
906 self.btn_ganti.setText(_translate("Bayar", "BAYAR
907 SEKARANG"))
908
909
910 if __name__ == "__main__":
911 import sys
912 app = QtWidgets.QApplication(sys.argv)
913 main = QtWidgets.QWidget()
914 ui = Ui_main()
915 ui.setupUi(main)
916 main.show()
917 sys.exit(app.exec_())

42
3.2 Demo Program
1. Tampilan Awal Program

2. Tampilan Pencarian

3. Tampilan Pembayaran

43
BAB IV

KESIMPULAN DAN SARAN

4.1 Kesimpulan
Berikut adalah kesimpulan dari pembuatan program SKATRASIA ini:
Program yang kami buat bernama Skatrasia (Skuy Travel Seluruh Indonesia)
aplikasi ini merupakan sebuah program pemesanan tiket pesawat secara online
berbasis desktop yang sangat memudahkan bagi enduser untuk membeli dan
mendapatkan tiket pesawat dengan harga bersaing. Aplikasi ini juga dapat memesan
tiket pesawat hingga 3 sekaligus dalam 1 pemesanan

4.2 Saran
Adapun Saran dari pembuatan program SKATRASIA ini yaitu:
Sebaiknya pembelajaran untuk membuat program atau aplikasi yang
mempermudah dalam kehidupan sehari hari di ajarkan ke banyak orang. Agar orang
yang memiliki kreatifitas tetapi kurang sarana dalam penyampaian ide nya dapat di
utarakan dan diterapkan ketika mendapatkan pembelajaran tentang pembuatan
program atau aplikasi.

44
DAFTAR PUSTAKA

Saputra,Azizfirman.2018.”mengkonversi tipe data dari string ke”,http://17416255201077-


azizfirmansaputra.blogspot.com/2018/10/mengkonversi-tipe-data-dari-string-ke.html

Muahrdian,Ahmad.2019.”Belajar pemrograman C”,https://www.petanikode.com/c-string/

Khansa,Marini Khalishah.2018.”Sistem manajemen basis


data”,http://43217110334.blog.mercubuana.ac.id/2018/10/16/sistem-manajemen-basis-data/

TeoriKomputer.2015.”Pengertian dan Fungsi Manajemen File pada Sistem Operasi


Komputer”,http://www.teorikomputer.com/2015/10/pengertian-dan-fungsi-manajemen-file.html

NIkmat,Moh.2017.”Konversi Tipe Data dalam Python”,https://mn-


belajarpython.blogspot.com/2016/11/konversi-tipe-data-dalam-python.html

Advernesia.2017.”Penulisan dan Penggunaan String pada


Python”,https://www.advernesia.com/blog/python/penulisan-dan-penggunaan-string-pada-python/

45
LAMPIRAN

Biodata diri (KETUA)

Data pribadi
Nama : Daffa Alvi Reri
Nim : 11191017
Tempat & Tanggal Lahir : Banjarmasin,27 Januari 2001
Jenis Kelamin : Laki - Laki
Agama : Islam
Alamat Asal : Komp Ramayana no 181
Alamat Sekarang : Komp Ramayana no 181
Telpon & Hp : 085254257455
E-Mail : daffareri6@gmail.com

Riwayat Pendidikan
- SDSN Landadan Ulin Timur 2 Banjarbaru
- SMPN 4 Banjarbaru
- SMKN 1 Balikpapan
- Institut Teknologi Kalimantan (2019-Sekarang)

Pengalaman Berorganisasi
- English Club
- ITK Musik

46
LAMPIRAN
Biodata diri

Data pribadi
Nama : Taufiq Qurrachman Sholeh
Nim : 07191080
Tempat & Tanggal Lahir : Bojonegoro,26 April 2001
Jenis Kelamin : Laki - Laki
Agama : Islam
Alamat Asal : Jl Revolusi 2 Samarinda
Alamat Sekarang : Jl Sei Wain KM 15
Telpon & Hp : 081545190268
E-Mail : tqurrachman99@gmail.com

Riwayat Pendidikan
- SDN 023 Samarinda
- SMPN 16 Samarinda
- SMKN 2 Samarinda
- Institut Teknologi Kalimantan (2019-Sekarang)

Pengalaman Berorganisasi
- Karang Taruna

47
LAMPIRAN

Biodata diri

Data pribadi
Nama : Moh. Ardha Wiku Wicaksono
Nim : 09191045
Tempat & Tanggal Lahir : Palu,23 Maret 2000
Jenis Kelamin : Laki - Laki
Agama : Islam
Alamat Asal : BTN Palupi Blok O No 27
Alamat Sekarang : Jl.Soekarno Hatta, Gang Banir ulin Km 9
Telpon & Hp : 082197148141
E-Mail : moh.ardha@gmail.com

Riwayat Pendidikan
- SDN3 Birobuli
- SMPN 1 Palu
- SMAN 2 Palu
- Institut Teknologi Kalimantan (2019-Sekarang)

Pengalaman Berorganisasi
- Forum Anak Provinsi Sulteng
- Siswa Pecinta Alam

48
LAMPIRAN

Biodata diri

Data pribadi
Nama : Erlingga Primashudi
Nim : 04191021
Tempat & Tanggal Lahir : Balikpapan,26 Januari 2001
Jenis Kelamin : Laki - Laki
Agama : Islam
Alamat Asal : Jl. PDAM Km 7,5 RT 37
Alamat Sekarang : Jl. PDAM Km 7,5 RT 37
Telpon & Hp : 082250776808
E-Mail : erlinggaprimashudi@gmail.com

Riwayat Pendidikan
- SDN 009 Balikpapan
- SMPN 11 Balikpapan
- SMKN 1 Balikpapan
- Institut Teknologi Kalimantan (2019-Sekarang)

49
LAMPIRAN

Biodata diri
Data pribadi
Nama : Abi Thaariq Nur’Adli
Nim : 12191001
Tempat & Tanggal Lahir : Balikpapan,23 Juli 2001
Jenis Kelamin : Laki - Laki
Agama : Islam
Alamat Asal : Jl.Prapatan Rt 26 No 33
Alamat Sekarang : Jl.Prapatan Rt 26 No 33
Telpon & Hp : 0895711355885
E-Mail : abiback65@gmail.com

Riwayat Pendidikan
- SDN 023 Balikpapan Selatan
- SMPN 1 Balikpapan
- SMAN 1 Balikpapan
- Institut Teknologi Kalimantan (2019-Sekarang)

50
Lampiran 2 (lembar asistensi)

51

Anda mungkin juga menyukai