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