본문 바로가기

코딩 공부/파이썬

파이썬 유통기한 소비기한 관리 프로그램 만들기

파이썬 유통기한 소비기한 관리 프로그램 만들기

목차

1. 파이썬 유통기한 프로그램 코드
2. 파이썬 유통기한 프로그램 코드 작성개
3. 사용자 인터페이스 설계

 

▼다른 추천 글

 

 

파이썬 테트리스 코드 정리 (다운로드 포함)

목차*1. 파이썬 테트리스 코드 정리*2. 테트리스 다운로드*3. 테트리스 코드 후기 이코드는 2024 12 03 일 작성한 코드입니다. 제 모든 파이썬 코드들은 학습용으로 지인을 통해 만들게 되었으

blacksoy.tistory.com

 

 


 

 

파이썬 유통기한 프로그램 코드

 

import tkinter as tk
from tkinter import ttk, messagebox
import pandas as pd

# 데이터 초기화
try:
    data = pd.read_excel("food_data.xlsx")  # 기존 데이터 불러오기
except FileNotFoundError:
    data = pd.DataFrame(columns=["식품명", "소비기한", "보관방법"])

# 창을 화면 가운데에 배치하는 함수
def center_window(window, width, height):
    screen_width = window.winfo_screenwidth()
    screen_height = window.winfo_screenheight()
    x = (screen_width // 2) - (width // 2)
    y = (screen_height // 2) - (height // 2)
    window.geometry(f"{width}x{height}+{x}+{y}")

# 데이터 저장 함수
def save_data():
    data.to_excel("food_data.xlsx", index=False)
    messagebox.showinfo("저장 완료", "데이터가 저장되었습니다!")

# 검색 기능
def search_food():
    food_name = search_entry.get()
    if food_name in data["식품명"].values:
        item = data.loc[data["식품명"] == food_name].iloc[0]
        result_label.config(text=f"소비기한: {item['소비기한']}\n보관방법: {item['보관방법']}")
    else:
        result_label.config(text="해당 식품 정보를 찾을 수 없습니다.")

# 데이터 추가/수정
def add_food():
    def save_new_food():
        name = name_entry.get()
        exp_date = exp_date_entry.get()
        storage = storage_entry.get()

        if name and exp_date and storage:
            global data
            if name in data["식품명"].values:
                data.loc[data["식품명"] == name, ["소비기한", "보관방법"]] = [exp_date, storage]
            else:
                new_row = {"식품명": name, "소비기한": exp_date, "보관방법": storage}
                data = pd.concat([data, pd.DataFrame([new_row])], ignore_index=True)
           
            save_data()
            add_window.destroy()
            messagebox.showinfo("완료", "식품 정보가 추가/수정되었습니다.")
        else:
            messagebox.showerror("오류", "모든 필드를 입력해주세요.")

    add_window = tk.Toplevel(root)
    add_window.title("식품 추가/수정")
    center_window(add_window, 300, 200)  # 창을 중앙에 배치
   
    tk.Label(add_window, text="식품명:", font=("Arial", 10)).grid(row=0, column=0, padx=10, pady=5)
    name_entry = ttk.Entry(add_window, font=("Arial", 10))
    name_entry.grid(row=0, column=1, padx=10, pady=5)

    tk.Label(add_window, text="소비기한:", font=("Arial", 10)).grid(row=1, column=0, padx=10, pady=5)
    exp_date_entry = ttk.Entry(add_window, font=("Arial", 10))
    exp_date_entry.grid(row=1, column=1, padx=10, pady=5)

    tk.Label(add_window, text="보관방법:", font=("Arial", 10)).grid(row=2, column=0, padx=10, pady=5)
    storage_entry = ttk.Entry(add_window, font=("Arial", 10))
    storage_entry.grid(row=2, column=1, padx=10, pady=5)

    ttk.Button(add_window, text="저장", command=save_new_food).grid(row=3, column=0, columnspan=2, pady=10)

# 메인 GUI 구성
root = tk.Tk()
root.title("유통기한 확인 프로그램")
center_window(root, 400, 300)  # 창을 중앙에 배치
root.resizable(False, False)

# 스타일 설정
style = ttk.Style()
style.theme_use("clam")  # 기본 테마 변경
style.configure("TButton", font=("Arial", 10), padding=5)
style.configure("TLabel", font=("Arial", 12))
style.configure("TEntry", font=("Arial", 12))

# 검색 창
frame_top = ttk.Frame(root, padding="10")
frame_top.pack(fill="x")

ttk.Label(frame_top, text="식품명 검색:", font=("Arial", 12)).pack(side="left", padx=5)
search_entry = ttk.Entry(frame_top, width=20)
search_entry.pack(side="left", padx=5)
ttk.Button(frame_top, text="검색", command=search_food).pack(side="left", padx=5)

# 결과 표시 창
frame_result = ttk.Frame(root, padding="10")
frame_result.pack(fill="both", expand=True)

result_label = ttk.Label(frame_result, text="검색 결과가 여기에 표시됩니다.", anchor="center")
result_label.pack(fill="both", expand=True)

# 하단 버튼 창
frame_bottom = ttk.Frame(root, padding="10")
frame_bottom.pack(fill="x")

ttk.Button(frame_bottom, text="식품 추가/수정", command=add_food).pack(side="left", padx=5)
ttk.Button(frame_bottom, text="저장", command=save_data).pack(side="left", padx=5)

# 메인 루프 실행
root.mainloop()

 

 


 

 

Python과 Tkinter를 활용한 유통기한 관리 프로그램 개발

 

 

프로젝트 개요

이번 프로젝트에서는 Tkinter를 이용해 유통기한 관리 프로그램을 만들어 보았습니다. 이 프로그램은 식품 정보를 입력하고, 소비기한을 검색하며 데이터를 저장 및 수정할 수 있는 간단한 데스크톱 애플리케이션입니다. 사용자가 손쉽게 사용할 수 있도록 직관적인 UI와 기본적인 데이터 처리 기능을 구현했습니다.


주요 기능 설명

1. 데이터 불러오기 및 초기화

try:
    data = pd.read_excel("food_data.xlsx")  # 기존 데이터 불러오기
except FileNotFoundError:
    data = pd.DataFrame(columns=["식품명", "소비기한", "보관방법"])  # 초기 빈 데이터 생성

 

프로그램 실행 시, 기존 데이터를 food_data.xlsx 파일에서 불러옵니다. 파일이 없을 경우, 기본 컬럼을 가진 빈 데이터프레임을 생성해 첫 사용자를 위한 준비를 합니다.


2. 창 위치 조정

def center_window(window, width, height):
    screen_width = window.winfo_screenwidth()
    screen_height = window.winfo_screenheight()
    x = (screen_width // 2) - (width // 2)
    y = (screen_height // 2) - (height // 2)
    window.geometry(f"{width}x{height}+{x}+{y}")

 

프로그램 창이 화면 중앙에 배치되도록 설계해, 사용자 경험을 개선했습니다. 가독성편리함을 고려한 세심한 기능입니다.


3. 데이터 저장

def save_data():
    data.to_excel("food_data.xlsx", index=False)
    messagebox.showinfo("저장 완료", "데이터가 저장되었습니다!")

 

모든 변경 사항은 save_data() 함수를 통해 엑셀 파일에 저장됩니다. 데이터를 안전하게 보관하기 위해 pandas 라이브러리를 활용했습니다.


4. 검색 기능

def search_food():
    food_name = search_entry.get()
    if food_name in data["식품명"].values:
        item = data.loc[data["식품명"] == food_name].iloc[0]
        result_label.config(text=f"소비기한: {item['소비기한']}\n보관방법: {item['보관방법']}")
    else:
        result_label.config(text="해당 식품 정보를 찾을 수 없습니다.")

 

사용자가 입력한 식품명을 기반으로 데이터에서 정보를 검색하여 소비기한보관방법을 화면에 표시합니다. 검색 결과가 없을 경우, 적절한 알림을 제공합니다.


5. 데이터 추가 및 수정

def add_food():
    def save_new_food():
        # 데이터 추가 및 수정 로직

 

새로운 식품 정보를 추가하거나 기존 데이터를 수정할 수 있는 기능입니다. 데이터 입력 후, 엑셀 파일에 반영되며 사용자에게 완료 알림을 제공합니다.


 

 

사용자 인터페이스 설계

 

Tkinter 위젯을 사용해 간단하지만 직관적인 인터페이스를 구성했습니다.

1. 검색 창

사용자가 식품명을 입력하고 검색 버튼을 눌러 정보를 확인할 수 있습니다.

2. 결과 표시 창

검색 결과가 표시되는 영역입니다. 기본적으로 "검색 결과가 여기에 표시됩니다."라는 텍스트가 나타납니다.

3. 하단 버튼

  • 식품 추가/수정: 데이터를 추가하거나 수정하는 창을 엽니다.
  • 저장: 현재 데이터를 엑셀 파일에 저장합니다.

 

 

 

반응형