import gradio as gr
import subprocess
import pandas as pd
import os
def create_account(number, name, balance):
input_str = f"{number},{name},{balance}"
result = subprocess.run(["./cobol/account", "CREATE", input_str], capture_output=True, text=True)
return "✅ Account created"
def create_loan(lid, acc_id, amount, rate, status):
input_str = f"{lid},{acc_id},{amount},{rate},{status}"
result = subprocess.run(["./cobol/loan", "CREATE", input_str], capture_output=True, text=True)
return "✅ Loan created"
def export_accounts():
df = pd.read_csv("data/accounts.csv")
path = "export_accounts.csv"
df.to_csv(path, index=False)
return path
def export_loans():
df = pd.read_csv("data/loans.csv")
path = "export_loans.csv"
df.to_csv(path, index=False)
return path
def get_log():
try:
with open("data/transactions.log", "r") as f:
content = f.read()
html_content = content.replace('\n', '
')
return f"""
{html_content}
"""
except Exception as e:
return f"Error reading log: {str(e)}
"
with gr.Blocks(title="COBOL Bank Demo", css="file=static/style.css") as demo:
gr.Markdown("# 💰 COBOL Banking System\nCreate, read, and export accounts and loans")
with gr.Tab("Accounts"):
with gr.Row():
acc_num = gr.Number(label="Account Number")
acc_name = gr.Textbox(label="Name")
acc_bal = gr.Number(label="Balance")
acc_btn = gr.Button("Create Account")
acc_btn.click(fn=create_account, inputs=[acc_num, acc_name, acc_bal], outputs=[])
exp_acc_btn = gr.Button("Export Accounts")
exp_acc_file = gr.File(label="Download Accounts CSV")
exp_acc_btn.click(fn=export_accounts, outputs=exp_acc_file)
with gr.Tab("Loans"):
with gr.Row():
loan_id = gr.Textbox(label="Loan ID")
loan_acc = gr.Number(label="Account Number")
loan_amt = gr.Number(label="Amount")
loan_rate = gr.Number(label="Rate (%)")
loan_status = gr.Textbox(label="Status")
loan_btn = gr.Button("Create Loan")
loan_btn.click(fn=create_loan, inputs=[loan_id, loan_acc, loan_amt, loan_rate, loan_status], outputs=[])
exp_loan_btn = gr.Button("Export Loans")
exp_loan_file = gr.File(label="Download Loans CSV")
exp_loan_btn.click(fn=export_loans, outputs=exp_loan_file)
with gr.Tab("Transaction Log"):
log_box = gr.HTML(label="Logs", value=get_log())
refresh_btn = gr.Button("Refresh Log")
refresh_btn.click(fn=get_log, outputs=log_box)
demo.launch()