Pada kesempatan ini, saya akan membagikan soal UAS pada mata kuliah Pemrograman Python sekaligus jawabannya. Jawaban yang ditampilkan adalah jawaban versi kami yang tentunya belum sepenuhnya benar dan masih banyak kekurangan. Akan tetapi kami sudah mencoba untuk mempelajari pola dan struktur dasarnya sehingga jawaban ini kami rasa layak untuk dinilai oleh Dosen Pengampu.
Untuk soal lengkapnya kami lampirkan di bawah ini:
Dari soal di atas, tentunya kami perlu membagi langkah-langkah yang harus dijalankan secara terstruktur agar dapat menemukan jawaban akhir yang benar.
Deskripsi singkat kasus pada soal
Namira Travel menyediakan tiga jenis paket umroh yang berbeda, yaitu Umroh Reguler, Umroh Plus, dan Umroh VIP, dengan biaya masing-masing Rp. 28.000.000,-, Rp. 30.000.000,-, dan Rp. 40.000.000,-. Setiap tahun, setiap cabang di Pangkalpinang, Palembang, dan Pekanbaru minimal mendapatkan 10 jamaah. Mayoritas jamaah yaitu sekitar 6 orang memilih paket Reguler, sementara sisanya memilih paket Plus dan VIP.
Kebutuhan Data
Untuk mengelola data jamaah dan paket umroh secara efektif, sistem database yang dibutuhkan harus mampu menyimpan dan memproses data sebagai berikut:
a. Data Kantor Cabang: Informasi tentang lokasi dan nama cabang.
b. Data Manajer Pemasaran: Informasi tentang manajer pemasaran yang bertugas di setiap cabang.
c. Data Jamaah: Informasi detail mengenai jamaah yang mendaftar untuk umroh.
d. Data Paket Umroh: Detail mengenai paket umroh yang ditawarkan oleh perusahaan.
e. Data Pendaftaran: Informasi mengenai jamaah yang mendaftar, paket yang dipilih, tanggal pendaftaran.
Tabel
Untuk memenuhi kebutuhan sistem yang telah diidentifikasi, maka dibutuhkan 5 buah tabel pada sistem database ini yaitu: tabel cabang, tabel manajer, tabel jamaah, tabel paket dan tabel pendaftaran.
Pembuatan Database
Langkah awal, kita harus membuat database untuk sistem yang diminta. Disini kami membuat database dengan nama NamiraTravel. Untuk membuat database NamiraTravel, kita akan menggunakan bahasa pemrograman Python dan MySQL dengan modul mysql.connector dan localhost phpMyAdmin. Dengan text editor Visual Studio Code, berikut adalah kode untuk membuat database NamiraTravel:
import mysql.connector
# Koneksi ke Server MySQL
conn = mysql.connector.connect(
host=’localhost’,
user=’root’,
password=”
)
cursor = conn.cursor()
# Membuat database
cursor.execute(“CREATE DATABASE NamiraTravel”)
cursor.close()
conn.close()
Pembuatan Tabel-Tabel
Setelah database dibuat, langkah berikutnya adalah membuat tabel-tabel yang diperlukan:
import mysql.connector
# Koneksi ke Server MySQL dan Basis Data
conn = mysql.connector.connect(
host=’localhost’,
user=’root’,
password=”,
database=’NamiraTravel’
)
cursor = conn.cursor()
# Membuat tabel Cabang
cursor.execute(“””
CREATE TABLE Cabang (
CabangID INT AUTO_INCREMENT PRIMARY KEY,
NamaCabang VARCHAR(100),
Lokasi VARCHAR(100)
)
“””)
# Membuat tabel Manajer
cursor.execute(“””
CREATE TABLE Manajer (
ManajerID INT AUTO_INCREMENT PRIMARY KEY,
Nama VARCHAR(100),
CabangID INT,
FOREIGN KEY (CabangID) REFERENCES Cabang(CabangID)
)
“””)
# Membuat tabel Jamaah
cursor.execute(“””
CREATE TABLE Jamaah (
JamaahID INT AUTO_INCREMENT PRIMARY KEY,
Nama VARCHAR(100),
Umur INT,
Alamat VARCHAR(255),
ManajerID INT,
FOREIGN KEY (ManajerID) REFERENCES Manajer(ManajerID)
)
“””)
# Membuat tabel Paket
cursor.execute(“””
CREATE TABLE Paket (
PaketID INT AUTO_INCREMENT PRIMARY KEY,
NamaPaket VARCHAR(100),
Biaya DECIMAL(10)
)
“””)
# Membuat tabel Pendaftaran
cursor.execute(“””
CREATE TABLE Pendaftaran (
PendaftaranID INT AUTO_INCREMENT PRIMARY KEY,
JamaahID INT,
PaketID INT,
TanggalPendaftaran DATE,
FOREIGN KEY (JamaahID) REFERENCES Jamaah(JamaahID),
FOREIGN KEY (PaketID) REFERENCES Paket(PaketID)
)
“””)
cursor.close()
conn.close()
Pengisian Data
Setelah tabel-tabel dibuat, langkah berikutnya adalah mengisi data ke dalam tabel-tabel tersebut. Pengisian data pada program ini hanya sebagai simulasi pada deskripsi kasus.
a. Tabel Cabang
Menginput 4 cabang, yaitu cabang Pusat, Pangkalpinang, Palembang dan Pekan Baru
b. Tabel Manajer
Menginput 4 nama manajer, dengan masing-masing manajer mewakili 1 cabang
c. Tabel Jamaah
Menginput 10 orang jamaah pada setiap cabang (Pangkalpinang, Palembang, Pekanbaru).
d. Tabel Paket
Menginput 3 paket umroh dengan biayanya, yaitu Reguler, Plus, dan VIP.
e. Tabel Pendaftaran
Menginput jamaah yang mendaftar beserta paket yang diambil. Masing-masing cabang akan diinput 10 pendaftaran.
Adapun kodenya adalah sebagai berikut:
import mysql.connector
# Koneksi ke Server MySQL dan Basis Data
conn = mysql.connector.connect(
host=’localhost’,
user=’root’,
password=”,
database=’NamiraTravel’
)
cursor = conn.cursor()
# Memasukkan data ke tabel Cabang
cabang = [
(‘Kantor Pusat’, ‘Jakarta’),
(‘Cabang Pangkalpinang’, ‘Pangkalpinang’),
(‘Cabang Palembang’, ‘Palembang’),
(‘Cabang Pekanbaru’, ‘Pekanbaru’)
]
cursor.executemany(“INSERT INTO Cabang (NamaCabang, Lokasi) VALUES (%s, %s)”, cabang)
# Memasukkan data ke tabel Manajer
manajer = [
(‘Faris’, 1),
(‘Fikar’, 2),
(‘Amela’, 3),
(‘Aliya’, 4)
]
cursor.executemany(“INSERT INTO Manajer (Nama, CabangID) VALUES (%s, %s)”, manajer)
# Memasukkan data ke tabel Paket
paket = [
(‘Umroh Reguler’, 28000000),
(‘Umroh Plus’, 30000000),
(‘Umroh VIP’, 40000000)
]
cursor.executemany(“INSERT INTO Paket (NamaPaket, Biaya) VALUES (%s, %s)”, paket)
# Memasukkan data ke tabel Jamaah dan Pendaftaran
jamaah = [
#input jamaah untuk cabang pangkalpinang
(‘Doni’, 35, ‘Pangkalpinang’, 2),
(‘Rudi’, 40, ‘Pangkalpinang’, 2),
(‘Sari’, 30, ‘Pangkalpinang’, 2),
(‘Budi’, 45, ‘Pangkalpinang’, 2),
(‘Yuni’, 50, ‘Pangkalpinang’, 2),
(‘Cici’, 55, ‘Pangkalpinang’, 2),
(‘Reni’, 60, ‘Pangkalpinang’, 2),
(‘Marni’, 65, ‘Pangkalpinang’,2),
(‘Suci’, 70, ‘Pangkalpinang’, 2),
(‘Riski’, 75, ‘Pangkalpinang’, 2),
#input jamaah untuk cabang palembang
(‘Wong’, 20, ‘Palembang’, 3),
(‘Kito’, 25, ‘Palembang’, 3),
(‘Galo’, 30, ‘Palembang’, 3),
(‘Rano’, 35, ‘Palembang’, 3),
(‘Karno’, 40, ‘Palembang’, 3),
(‘Bado’, 45, ‘Palembang’, 3),
(‘Joko’, 50, ‘Palembang’, 3),
(‘Dono’, 55, ‘Palembang’,3),
(‘Roso’, 60, ‘Palembang’, 3),
(‘Bono’, 65, ‘Palembang’, 3),
#input jamaah untuk cabang pekanbaru
(‘Danu’, 65, ‘Pekanbaru’, 4),
(‘Badu’, 60, ‘Pekanbaru’, 4),
(‘Kanu’, 55, ‘Pekanbaru’, 4),
(‘Sinyu’, 50, ‘Pekanbaru’, 4),
(‘Lulu’, 45, ‘Pekanbaru’, 4),
(‘Pandu’, 40, ‘Pekanbaru’, 4),
(‘Setu’, 35, ‘Pekanbaru’, 4),
(‘Abdu’, 30, ‘Pekanbaru’,4),
(‘Amru’, 25, ‘Pekanbaru’, 4),
(‘Ranu’, 20, ‘Pekanbaru’, 4),
]
cursor.executemany(“INSERT INTO Jamaah (Nama, Umur, Alamat, ManajerID) VALUES (%s, %s, %s, %s)”, jamaah)
pendaftaran = [
#input pendaftaran cabang pangkalpinang
(1, 1, ‘2023-01-01’),
(2, 1, ‘2023-01-01’),
(3, 1, ‘2023-01-01’),
(4, 1, ‘2023-01-01’),
(5, 1, ‘2023-01-01’),
(6, 1, ‘2023-01-01’),
(7, 2, ‘2023-01-01’),
(8, 2, ‘2023-01-01’),
(9, 3, ‘2023-01-01’),
(10, 3, ‘2023-01-01’),
#input pendaftaran cabang palembang
(11, 1, ‘2023-02-01’),
(12, 1, ‘2023-02-01’),
(13, 1, ‘2023-02-01’),
(14, 1, ‘2023-02-01’),
(15, 1, ‘2023-02-01’),
(16, 1, ‘2023-02-01’),
(17, 2, ‘2023-02-01’),
(18, 2, ‘2023-02-01’),
(19, 3, ‘2023-02-01’),
(20, 3, ‘2023-02-01’),
#input pendaftaran cabang pekanbaru
(21, 1, ‘2023-03-01’),
(22, 1, ‘2023-03-01’),
(23, 1, ‘2023-03-01’),
(24, 1, ‘2023-03-01’),
(25, 1, ‘2023-03-01’),
(26, 1, ‘2023-03-01’),
(27, 2, ‘2023-03-01’),
(28, 2, ‘2023-03-01’),
(29, 3, ‘2023-03-01’),
(30, 3, ‘2023-03-01’),
]
cursor.executemany(“INSERT INTO Pendaftaran (JamaahID, PaketID, TanggalPendaftaran) VALUES (%s, %s, %s)”, pendaftaran)
conn.commit()
cursor.close()
conn.close()
Menampilkan Data
Langkah terakhir adalah membuat kode untuk menampilkan data yang diinginkan oleh kantor pusat, yaitu menampilkan data pencapaian dari setiap kantor cabang sehingga dapat melihat siapa nama manajernya serta jamaah yang telah mendaftar dan paket apa yang dipilih oleh jamaah dari setiap cabang tersebut.
Berikut kode untuk program yang dimaksud:
import mysql.connector
# Koneksi ke Server MySQL dan Basis Data
conn = mysql.connector.connect(
host=’localhost’,
user=’root’,
password=”,
database=’NamiraTravel’
)
cursor = conn.cursor()
# Query untuk menampilkan data dengan INNER JOIN
query = “””
SELECT
Cabang.NamaCabang,
Manajer.Nama AS NamaManajer,
Jamaah.Nama AS NamaJamaah,
Paket.NamaPaket
FROM
Cabang
INNER JOIN Manajer ON Cabang.CabangID = Manajer.CabangID
INNER JOIN Jamaah ON Manajer.ManajerID = Jamaah.ManajerID
INNER JOIN Pendaftaran ON Jamaah.JamaahID = Pendaftaran.JamaahID
INNER JOIN Paket ON Pendaftaran.PaketID = Paket.PaketID
“””
cursor.execute(query)
rows = cursor.fetchall()
# Mengelompokkan data per cabang dan menghitung jumlah jamaah
data_per_cabang = {}
for row in rows:
cabang = row[0]
if cabang not in data_per_cabang:
data_per_cabang[cabang] = {
“manajer_jamaah_paket”: [],
“jumlah_jamaah”: 0
}
data_per_cabang[cabang][“manajer_jamaah_paket”].append(row[1:])
data_per_cabang[cabang][“jumlah_jamaah”] += 1
# Menampilkan hasil
print(“”)
print(“===========================================”)
print(“Pencapaian Namira Travel Pada Setiap Cabang”)
print(“===========================================”)
print(“”)
for cabang, data in data_per_cabang.items():
print(f”Cabang: {cabang}”)
for row in data[“manajer_jamaah_paket”]:
print(f” Manajer {row[0]}, Dapat Jamaah Dengan Nama {row[1]}, Menggunakan Paket {row[2]}”)
print(f”Jumlah Jamaah: {data[‘jumlah_jamaah’]}”)
print(“============================================”)
cursor.close()
conn.close()
Setelah dijalankan, maka tampilannya akan seperti ini:
Demikian jawaban yang telah kami buat. Jawaban ini sudah kami presentasikan dan di uji langsung di hadapan Dosen Pengampu. Semoga nilai yang nantinya diberikan kepada kami dapat membuat kami tersenyum 🙂
Makalah Perancangan dan Implementasi Sistem Database Pada Namira Travel dapat di download disini
File presentasi dapat didownload disini