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())
# ==========================================