Tugas Akhir β Pemrograman Visual Universitas Mataram Β· 2026
| Nama | NIM | Peran |
|---|---|---|
| Zainul Majdi | F1D02310028 | Ketua |
| Nayla Anugerah Nisa | F1D02310020 | Anggota |
| Muhammad Bintang Wiratama | F1D022141 | Anggota |
SmartTravel adalah aplikasi desktop berbasis GUI yang dirancang untuk mempermudah agen perjalanan (travel agency) dalam mengelola data pelanggan dan operasional pemesanan paket wisata secara digital dan terintegrasi.
Aplikasi ini dibangun menggunakan framework PySide6 (Qt for Python) dengan arsitektur MVC (Model-View-Controller), database relasional SQLite, dan dilengkapi fitur pembuatan Invoice PDF otomatis serta Dashboard visual untuk memantau statistik penjualan secara real-time.
Tampilan split-panel premium dengan branding kiri dan form login kanan. Terdapat animasi shake saat login gagal.
Menampilkan 4 kartu statistik (total transaksi, revenue, pelanggan, pending) beserta grafik batang transaksi per bulan dan pie chart paket terpopuler.
Tabel CRUD lengkap dengan fitur pencarian real-time berdasarkan nama, email, atau nomor telepon.
Manajemen daftar paket wisata dengan informasi destinasi, durasi, harga per pax, dan status ketersediaan.
Proses pemesanan terintegrasi: pilih pelanggan & paket β kalkulasi otomatis β update status β cetak invoice PDF.
| Fitur | Keterangan |
|---|---|
| π Autentikasi Login | Sistem login dengan validasi username & password + animasi error |
| π₯ Kelola Pelanggan | CRUD data pelanggan + pencarian real-time |
| π΄ Kelola Paket Wisata | CRUD paket dengan harga, durasi, dan status ketersediaan |
| ποΈ Proses Reservasi | Buat reservasi, kalkulasi total otomatis, update status (Pending / Confirmed / Cancelled) |
| π§Ύ Invoice PDF | Generate invoice profesional berformat PDF menggunakan ReportLab, tersimpan otomatis |
| π Dashboard Monitoring | Grafik transaksi per bulan (bar chart) & paket terpopuler (pie chart) via Matplotlib |
| ποΈ Database SQLite | Penyimpanan persisten dengan foreign key, auto-seed 5 paket wisata contoh |
| π¨ UI Dark Theme | Antarmuka gelap elegan dengan palet warna navy-biru-oranye yang konsisten |
smarttravel/
βββ main.py # Entry point β inisialisasi app & alur loginβmain
β
βββ config/
β βββ database.py # Koneksi SQLite, inisialisasi skema, seed data awal
β
βββ models/ # MODEL β akses & manipulasi data
β βββ models.py # Dataclass + CRUD: User, Pelanggan, PaketWisata, Transaksi
β
βββ controllers/ # CONTROLLER β logika bisnis
β βββ controllers.py # AuthController, PelangganController,
β # PaketController, TransaksiController
β
βββ views/ # VIEW β antarmuka pengguna (PySide6)
β βββ login_view.py # Halaman login split-panel
β βββ main_window.py # Window utama + sidebar navigasi
β βββ dashboard_view.py # Dashboard statistik + grafik
β βββ pelanggan_view.py # Halaman CRUD pelanggan
β βββ paket_view.py # Halaman CRUD paket wisata
β βββ transaksi_view.py # Halaman reservasi & transaksi
β
βββ utils/
β βββ theme.py # Konstanta warna & stylesheet global
β βββ pdf_generator.py # Generator invoice PDF (ReportLab)
β
βββ database/
β βββ smarttravel.db # File database SQLite (dibuat otomatis saat run pertama)
β βββ invoices/ # Folder penyimpanan invoice PDF hasil generate
β
βββ requirements.txt # Daftar dependensi Python
βββββββββββ event / input ββββββββββββββ panggil method βββββββββββ
β VIEW β βββββββββββββββββΊ β CONTROLLER β βββββββββββββββββββΊ β MODEL β
β(PySide6)β β (logic) β β(SQLite) β
β β βββββββββββββββββ β β ββββββββββββββββββ β β
βββββββββββ update UI ββββββββββββββ return data βββββββββββ
| Kolom | Tipe | Keterangan |
|---|---|---|
| id | INTEGER PK | Auto increment |
| username | TEXT UNIQUE | Username login |
| password | TEXT | Password (plaintext) |
| role | TEXT | Peran user (default: admin) |
| created_at | DATETIME | Waktu dibuat |
| Kolom | Tipe | Keterangan |
|---|---|---|
| id | INTEGER PK | Auto increment |
| nama | TEXT | Nama lengkap pelanggan |
| TEXT UNIQUE | Alamat email | |
| telepon | TEXT | Nomor telepon |
| alamat | TEXT | Alamat lengkap |
| created_at | DATETIME | Waktu didaftarkan |
| Kolom | Tipe | Keterangan |
|---|---|---|
| id | INTEGER PK | Auto increment |
| nama_paket | TEXT | Nama paket wisata |
| destinasi | TEXT | Kota/lokasi tujuan |
| durasi_hari | INTEGER | Lama perjalanan (hari) |
| harga | REAL | Harga per orang (Rp) |
| deskripsi | TEXT | Keterangan paket |
| tersedia | INTEGER | Status: 1=Tersedia, 0=Nonaktif |
| Kolom | Tipe | Keterangan |
|---|---|---|
| id | INTEGER PK | Auto increment |
| kode_invoice | TEXT UNIQUE | Kode unik (format: INV-YYMMDD-XXXX) |
| pelanggan_id | INTEGER FK | Referensi ke pelanggan.id |
| paket_id | INTEGER FK | Referensi ke paket_wisata.id |
| tanggal_pesan | DATE | Tanggal pemesanan |
| tanggal_berangkat | DATE | Tanggal keberangkatan |
| jumlah_orang | INTEGER | Jumlah peserta |
| total_harga | REAL | Total biaya (harga Γ jumlah_orang) |
| status | TEXT | Pending / Confirmed / Cancelled |
| catatan | TEXT | Catatan tambahan |
Pastikan Python 3.10 atau lebih baru sudah terinstall:
python --version# Clone via git
git clone https://github.com/username/smarttravel.git
cd smarttravel
# Atau ekstrak file ZIP yang sudah diunduh
cd smarttravel# Buat virtual environment
python -m venv venv
# Aktifkan (Windows)
venv\Scripts\activate
# Aktifkan (macOS / Linux)
source venv/bin/activatepip install -r requirements.txtDaftar library yang akan diinstall:
| Library | Versi | Fungsi |
|---|---|---|
PySide6 |
β₯ 6.6.0 | Framework GUI (Qt for Python) |
reportlab |
β₯ 4.0.0 | Generate invoice PDF |
matplotlib |
β₯ 3.8.0 | Grafik dashboard (opsional) |
python main.pyβ Database
smarttravel.dbakan dibuat otomatis di folderdatabase/pada saat pertama kali dijalankan, beserta 5 paket wisata contoh sebagai data awal.
| Field | Value |
|---|---|
| Username | admin |
| Password | admin123 |
- Buka halaman Reservasi
- Klik οΌ Buat Reservasi β isi data β klik Buat Reservasi
- Saat dialog konfirmasi muncul, klik Ya untuk langsung cetak PDF
- Atau pada tabel, klik tombol π§Ύ PDF pada baris transaksi yang diinginkan
- File PDF tersimpan otomatis di:
database/invoices/INV-XXXXXX.pdf
Pastikan matplotlib sudah terinstall:
pip install matplotlibPastikan reportlab sudah terinstall:
pip install reportlabCoba perbarui pip terlebih dahulu:
pip install --upgrade pip
pip install PySide6Hapus file database/smarttravel.db dan jalankan ulang. Database akan dibuat ulang secara otomatis.
| Teknologi | Versi | Keterangan |
|---|---|---|
| Python | 3.10+ | Bahasa pemrograman utama |
| PySide6 | 6.6+ | Framework GUI berbasis Qt |
| SQLite | 3.x | Database relasional lokal |
| ReportLab | 4.0+ | Pembuatan dokumen PDF |
| Matplotlib | 3.8+ | Visualisasi data / grafik |
Proyek ini dibuat untuk keperluan Tugas Akhir Mata Kuliah Pemrograman Visual.
Hak cipta Β© 2026 β Zainul Majdi, Nayla Anugerah Nisa, Muhammad Bintang Wiratama.




