Esmaeilkiani's picture
Update app.py
d697c35 verified
import streamlit as st
import pandas as pd
import numpy as np
from datetime import datetime
import plotly.express as px
import sqlite3
from pathlib import Path
# تنظیمات اولیه
st.set_page_config(page_title="سامانه مدیریت مزارع نیشکر", layout="wide", direction="rtl")
# ایجاد دیتابیس
def init_db():
conn = sqlite3.connect('sugarcane_farms.db')
c = conn.cursor()
c.execute('''
CREATE TABLE IF NOT EXISTS farm_data (
id INTEGER PRIMARY KEY AUTOINCREMENT,
row_number INTEGER,
representative TEXT,
channel INTEGER,
department INTEGER,
production INTEGER,
cultivation_area REAL,
sub_area REAL,
variety TEXT,
age TEXT,
station1 REAL,
station2 REAL,
station3 REAL,
station4 REAL,
station5 REAL,
current_height REAL,
previous_height REAL,
current_growth REAL,
previous_growth REAL,
current_nitrogen REAL,
current_nitrogen_std REAL,
previous_nitrogen REAL,
previous_nitrogen_std REAL,
current_moisture REAL,
current_moisture_std REAL,
previous_moisture REAL,
previous_moisture_std REAL,
well1_depth REAL,
well2_depth REAL,
reading_date DATE
)
''')
conn.commit()
conn.close()
# فرم ورود داده
def data_entry_form():
st.header("فرم ورود داده‌های مزارع نیشکر")
col1, col2, col3 = st.columns(3)
with col1:
row_number = st.number_input("ردیف", min_value=1, max_value=99)
representative = st.text_input("نماینده (مثال: 01-22)")
channel = st.selectbox("کانال", options=[i for i in range(1, 31) if i != 28])
department = st.selectbox("اداره", options=[1, 2, 3, 4])
production = st.selectbox("تولید", options=[1, 2])
with col2:
cultivation_area = st.number_input("مساحت داشت", min_value=0.0)
sub_area = st.number_input("مساحت زیرمجموعه", min_value=0.0)
variety = st.selectbox("واریته", options=["CP69", "CP48", "CP57"])
age = st.selectbox("سن", options=["R1", "R2", "P"])
with col3:
reading_date = st.date_input("تاریخ قرائت")
# ایستگاه‌های اندازه‌گیری
st.subheader("ایستگاه‌های اندازه‌گیری")
col1, col2, col3, col4, col5 = st.columns(5)
with col1:
station1 = st.number_input("ایستگاه 1", min_value=0.0)
with col2:
station2 = st.number_input("ایستگاه 2", min_value=0.0)
with col3:
station3 = st.number_input("ایستگاه 3", min_value=0.0)
with col4:
station4 = st.number_input("ایستگاه 4", min_value=0.0)
with col5:
station5 = st.number_input("ایستگاه 5", min_value=0.0)
# محاسبه خودکار ارتفاع هفته جاری
current_height = np.mean([station1, station2, station3, station4, station5])
st.info(f"ارتفاع هفته جاری مزرعه (محاسبه شده): {current_height:.2f}")
# ادامه فرم...
col1, col2 = st.columns(2)
with col1:
previous_height = st.number_input("ارتفاع هفته گذشته مزرعه", min_value=0.0)
current_growth = current_height - previous_height
st.info(f"رشد هفته جاری (محاسبه شده): {current_growth:.2f}")
previous_growth = st.number_input("رشد هفته گذشته", min_value=0.0)
# دکمه ذخیره
if st.button("ذخیره اطلاعات"):
save_data(locals())
st.success("اطلاعات با موفقیت ذخیره شد!")
# تابع ذخیره‌سازی داده‌ها
def save_data(data):
conn = sqlite3.connect('sugarcane_farms.db')
c = conn.cursor()
# ایجاد query برای ذخیره داده‌ها
query = """
INSERT INTO farm_data (
row_number, representative, channel, department, production,
cultivation_area, sub_area, variety, age, station1, station2,
station3, station4, station5, current_height, previous_height,
current_growth, previous_growth, reading_date
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
"""
values = (
data['row_number'], data['representative'], data['channel'],
data['department'], data['production'], data['cultivation_area'],
data['sub_area'], data['variety'], data['age'], data['station1'],
data['station2'], data['station3'], data['station4'], data['station5'],
data['current_height'], data['previous_height'], data['current_growth'],
data['previous_growth'], data['reading_date']
)
c.execute(query, values)
conn.commit()
conn.close()
# اجرای برنامه
if __name__ == "__main__":
init_db()
data_entry_form()