pandas import gradio as gr import sqlite3 import pandas as pd from datetime import datetime # ========================================== # PASTE SELURUH KODE PYTHON DARI GOOGLE COLAB import gradio as gr import sqlite3 import pandas as pd # ========================================== # 1. PERSIAPAN DATABASE (Buku Catatan Digital) # ========================================== def init_db(): # Membuat file database bernama investasi.db conn = sqlite3.connect("investasi.db") cursor = conn.cursor() # Membuat tabel untuk menyimpan akun pengguna cursor.execute('''CREATE TABLE IF NOT EXISTS users (username TEXT PRIMARY KEY, password TEXT)''') # Membuat tabel untuk menyimpan riwayat investasi cursor.execute('''CREATE TABLE IF NOT EXISTS portofolio (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT, modal REAL, profit_bulanan REAL, total_kembali REAL)''') conn.commit() conn.close() init_db() # Jalankan pembuatan database saat program dimulai # ========================================== # 2. FUNGSI LOGIKA (OTAK PROGRAM) # ========================================== def daftar(username, password): if not username or not password: return "Username dan password tidak boleh kosong!" conn = sqlite3.connect("investasi.db") cursor = conn.cursor() try: # Memasukkan data pendaftar baru ke database cursor.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, password)) conn.commit() pesan = f"Pendaftaran berhasil! Silakan login, {username}." except sqlite3.IntegrityError: # Jika username sudah ada di database pesan = "Username sudah terdaftar! Pilih nama lain." conn.close() return pesan def login(username, password): conn = sqlite3.connect("investasi.db") cursor = conn.cursor() # Mencocokkan username dan password cursor.execute("SELECT * FROM users WHERE username=? AND password=?", (username, password)) user = cursor.fetchone() conn.close() if user: return f"Login berhasil! Selamat datang, {username}.", username else: return "Username atau password salah!", "" def simpan_investasi(username, modal, persen): if not username: return "Gagal: Anda harus login terlebih dahulu di Tab 1!" bunga_per_bulan = modal * (persen / 100) total_kembali = modal + (bunga_per_bulan * 6) # Menyimpan data investasi ke database conn = sqlite3.connect("investasi.db") cursor = conn.cursor() cursor.execute("INSERT INTO portofolio (username, modal, profit_bulanan, total_kembali) VALUES (?, ?, ?, ?)", (username, modal, bunga_per_bulan, total_kembali)) conn.commit() conn.close() return f"Sukses! Investasi Rp {modal:,.0f} berhasil dicatat di sistem." def lihat_dashboard(username): if not username: return pd.DataFrame() # Tampilkan tabel kosong jika belum login # Menarik data investasi khusus untuk user yang sedang login conn = sqlite3.connect("investasi.db") df = pd.read_sql_query(f"SELECT modal as 'Modal (Rp)', profit_bulanan as 'Profit Bulanan (Rp)', total_kembali as 'Total Kembali 6 Bulan (Rp)' FROM portofolio WHERE username='{username}'", conn) conn.close() return df # ========================================== # 3. ANTARMUKA (TAMPILAN WEB) # ========================================== with gr.Blocks(theme=gr.themes.Soft()) as web_app: gr.Markdown("# Aplikasi Pendanaan Bisnis Gadget") gr.Markdown("Platform pendataan kemitraan bisnis jual-beli gadget. Aman, Cepat, dan Transparan.") # gr.State berfungsi untuk mengingat siapa yang sedang login user_aktif = gr.State("") with gr.Tabs(): # --- TAB 1: PENDAFTARAN & LOGIN --- with gr.Tab("1. Daftar & Login"): gr.Markdown("### Silakan buat akun atau masuk ke akun Anda") in_user = gr.Textbox(label="Username") in_pass = gr.Textbox(label="Password", type="password") with gr.Row(): btn_daftar = gr.Button("Daftar Akun Baru") btn_login = gr.Button("Login", variant="primary") status_akun = gr.Textbox(label="Status Log", interactive=False) # Menghubungkan tombol ke fungsi btn_daftar.click(fn=daftar, inputs=[in_user, in_pass], outputs=status_akun) btn_login.click(fn=login, inputs=[in_user, in_pass], outputs=[status_akun, user_aktif]) # --- TAB 2: INVESTASI BARU --- with gr.Tab("2. Pengajuan Investasi"): gr.Markdown("### Masukkan rencana nominal Anda") in_modal = gr.Number(label="Modal (Rp) - Minimal Rp 1.000.000", value=1000000) in_persen = gr.Slider(minimum=1, maximum=2, step=0.5, label="Target Bunga per Bulan (%)", value=2) btn_invest = gr.Button("Ajukan & Simpan Data", variant="primary") status_investasi = gr.Textbox(label="Status Transaksi", interactive=False) btn_invest.click(fn=simpan_investasi, inputs=[user_aktif, in_modal, in_persen], outputs=status_investasi) # --- TAB 3: DASHBOARD --- with gr.Tab("3. Dashboard Portofolio"): gr.Markdown("### Riwayat Investasi Anda") btn_refresh = gr.Button("Tampilkan Data Saya") tabel_portofolio = gr.Dataframe() btn_refresh.click(fn=lihat_dashboard, inputs=user_aktif, outputs=tabel_portofolio) # Menjalankan aplikasi web_app.launch() # KAMU DI SINI. (Mulai dari def init_db() sampai web_app.launch()) # ==========================================