주문 관리 시스템
To upload files, please first save the app
import streamlit as st
import pandas as pd
from datetime import datetime
from sqlalchemy import create_engine, Column, Integer, String, Float, DateTime
from sqlalchemy.orm import Session, DeclarativeBase
# Database setup
class Base(DeclarativeBase):
pass
class Order(Base):
__tablename__ = "orders"
id = Column(Integer, primary_key=True)
customer_name = Column(String(100))
product_name = Column(String(100))
quantity = Column(Integer)
price = Column(Float)
total_amount = Column(Float)
order_date = Column(DateTime, default=datetime.now)
status = Column(String(20))
engine = create_engine("sqlite:///orders.sqlite")
Base.metadata.create_all(bind=engine)
# Streamlit UI
st.title("주문 관리 시스템")
# Sidebar for navigation
page = st.sidebar.selectbox("메뉴 선택", ["주문 입력", "주문 목록", "주문 분석"])
if page == "주문 입력":
st.header("새 주문 입력")
with st.form("order_form"):
customer_name = st.text_input("고객명")
product_name = st.text_input("상품명")
quantity = st.number_input("수량", min_value=1, value=1)
price = st.number_input("단가", min_value=0.0, value=0.0)
status = st.selectbox("주문상태", ["접수", "처리중", "완료", "취소"])
submit_button = st.form_submit_button("주문 등록")
if submit_button:
total_amount = quantity * price
new_order = Order(
customer_name=customer_name,
product_name=product_name,
quantity=quantity,
price=price,
total_amount=total_amount,
status=status
)
with Session(engine) as session:
session.add(new_order)
session.commit()
st.success("주문이 성공적으로 등록되었습니다!")
elif page == "주문 목록":
st.header("주문 목록")
with Session(engine) as session:
orders = session.query(Order).all()
if orders:
# Convert to DataFrame for display
orders_data = []
for order in orders:
orders_data.append({
"주문번호": order.id,
"고객명": order.customer_name,
"상품명": order.product_name,
"수량": order.quantity,
"단가": f"₩{order.price:,.0f}",
"총액": f"₩{order.total_amount:,.0f}",
"주문일시": order.order_date.strftime("%Y-%m-%d %H:%M"),
"상태": order.status
})
df = pd.DataFrame(orders_data)
st.dataframe(df, use_container_width=True)
else:
st.info("등록된 주문이 없습니다.")
else: # 주문 분석
st.header("주문 분석")
with Session(engine) as session:
orders = session.query(Order).all()
if orders:
df = pd.DataFrame([{
"고객명": order.customer_name,
"상품명": order.product_name,
"총액": order.total_amount,
"주문일시": order.order_date,
"상태": order.status
} for order in orders])
# 총 주문 금액
total_sales = df["총액"].sum()
st.metric("총 주문 금액", f"₩{total_sales:,.0f}")
# 상품별 주문 현황
st.subheader("상품별 주문 현황")
product_summary = df.groupby("상품명")["총액"].sum().sort_values(ascending=False)
st.bar_chart(product_summary)
# 주문 상태 분포
st.subheader("주문 상태 분포")
status_counts = df["상태"].value_counts()
st.pie_chart(status_counts)
else:
st.info("분석할 주문 데이터가 없습니다.")
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?