Python ile Stok Takip Uygulaması Geliştirin!

Anasayfa » Python ile Stok Takip Uygulaması Geliştirin!

Merhaba arkadaşlar,

Bugün sizinle kendi kariyer yolculuğumda veya çevremdeki küçük işletmelerde sıkça karşılaştığım basit ama etkili bir ihtiyaca yönelik, Python ile geliştirdiğim küçük bir uygulamayı paylaşmak istiyorum: Basit Stok Takip Uygulaması.

Neden Bu Konu Bir IT Uzmanında Olmalı?

Bir IT uzmanı olarak sürekli karmaşık sistemler ve büyük veritabanlarıyla uğraşsak da, bazen en temel sorunlar bile pratik çözümler gerektirebilir. Şirketimizde veya kişisel projelerimizde, hatta çevremizdeki esnafta dahi, “Elimde kaç tane ürün kaldı?”, “Hangi üründen ne kadar sipariş vermeliyim?” gibi sorulara hızlıca cevap verebilecek basit bir sisteme ihtiyaç duyulduğunu defalarca gözlemledim. Büyük ERP sistemlerine hemen yatırım yapamayacak küçük yapılar için ya da bir proof-of-concept (kavram kanıtlama) aracı olarak Python’ın bu tür konulardaki gücü gerçekten inanılmaz. Benim gibi sektörün başında olan biri için, Python’ın bu esnekliği ve hızlı prototipleme yeteneği, problem çözme yetkinliğimi göstermek adına harika bir fırsat sunuyor.

Bu yazı, sadece bir stok takip sistemi yapımını değil, aynı zamanda Python ile dosya işlemleri, veri yapıları ve temel kullanıcı etkileşimi konularında pratik bir giriş niteliğinde olacak.

Teknik İnceleme: Basit Bir Stok Takip Uygulaması Nasıl Çalışır?

Bir stok takip sistemi için en temel gereksinimler şunlardır:

  • Ürünleri ekleyebilme
  • Mevcut ürünlerin miktarını güncelleyebilme
  • Ürünleri listeden silebilme
  • Ürünlerin sağlamlık durumu
  • Tüm stok durumunu görüntüleyebilme

Bu ihtiyaçlar doğrultusunda, uygulamanın temel çalışma prensiplerini şöyle belirledim:

  1. Veri Depolama: Karmaşık bir veritabanı kurmak yerine, başlangıç için Python’ın yerleşik json modülünü kullanarak verileri basit bir JSON dosyasında saklamaya karar verdim. Bu, hem uygulamanın taşınabilirliğini artırıyor hem de Python sözlükleri ile doğrudan eşleştiği için geliştirme sürecini hızlandırıyor.
  2. Ana Bellek Yönetimi: Uygulama başladığında tüm stok verilerini JSON dosyasından okuyup bir Python sözlüğüne (`dict`) yükleyecek. Değişiklikler yapıldıkça bu sözlük güncellenecek ve uygulama kapanmadan önce veya kritik durumlarda tekrar JSON dosyasına yazılacak.
  3. Kullanıcı Arayüzü: Bir terminal uygulaması (CLI) şeklinde olacak. Kullanıcıya seçenekler sunan bir menü ve bu seçeneklere göre işlemler gerçekleştiren fonksiyonlar bulunacak.
  4. Temel İşlevler: Ürün ekleme, miktar güncelleme, ürün silme ve tüm stokları listeleme fonksiyonları ana omurgayı oluşturacak.

Uygulama/Örnek Senaryo: Adım Adım Kodlama

Haydi, bu basit stok takip uygulamasını Python ile nasıl kodlayacağımıza bakalım. stok_takip.py adında bir dosya oluşturalım.

1. Gerekli Modüller ve Sabitler

İlk olarak, JSON işlemleri için json modülünü içe aktaralım ve stok verilerini saklayacağımız dosya adını belirleyelim.


import json
import os # Dosya varlığını kontrol etmek için

STOCK_FILE = 'stok_durumu.json'

2. Stok Verilerini Yükleme ve Kaydetme Fonksiyonları

Uygulamanın en önemli kısımlarından biri, verileri dosyadan güvenli bir şekilde okumak ve geri yazmaktır.


def load_stock():
    if os.path.exists(STOCK_FILE):
        with open(STOCK_FILE, 'r', encoding='utf-8') as f:
            try:
                return json.load(f)
            except json.JSONDecodeError:
                print("Hata: Stok dosyası bozuk. Yeni bir dosya oluşturuluyor.")
                return {} # Bozuksa boş sözlük döndür
    return {} # Dosya yoksa boş sözlük döndür

def save_stock(stock_data):
    with open(STOCK_FILE, 'w', encoding='utf-8') as f:
        json.dump(stock_data, f, indent=4, ensure_ascii=False)
    print("Stok başarıyla kaydedildi.")

3. Stok İşlemleri Fonksiyonları

Şimdi ürün ekleme, güncelleme, silme ve listeleme fonksiyonlarını yazalım.


def add_item(stock_data):
    item_name = input("Ürün adı: ").strip().capitalize()
    if not item_name:
        print("Ürün adı boş bırakılamaz.")
        return
    
    try:
        quantity = int(input("Miktar: "))
        if quantity < 0:
            print("Miktar negatif olamaz.")
            return
    except ValueError:
        print("Miktar sayısal bir değer olmalıdır.")
        return

    if item_name in stock_data:
        stock_data[item_name] += quantity
        print(f"{item_name} miktarı {quantity} artırıldı. Yeni miktar: {stock_data[item_name]}")
    else:
        stock_data[item_name] = quantity
        print(f"{item_name} stoklara eklendi, miktar: {quantity}")

def update_quantity(stock_data):
    item_name = input("Miktarını güncelleyeceğiniz ürün adı: ").strip().capitalize()
    if item_name not in stock_data:
        print(f"'{item_name}' stokta bulunamadı.")
        return

    try:
        new_quantity = int(input(f"'{item_name}' için yeni miktar: "))
        if new_quantity < 0:
            print("Miktar negatif olamaz.")
            return
    except ValueError:
        print("Miktar sayısal bir değer olmalıdır.")
        return
    
    stock_data[item_name] = new_quantity
    print(f"'{item_name}' miktarı {new_quantity} olarak güncellendi.")

def remove_item(stock_data):
    item_name = input("Sileceğiniz ürün adı: ").strip().capitalize()
    if item_name in stock_data:
        del stock_data[item_name]
        print(f"'{item_name}' stoktan silindi.")
    else:
        print(f"'{item_name}' stokta bulunamadı.")

def list_stock(stock_data):
    if not stock_data:
        print("Stokta henüz ürün bulunmamaktadır.")
        return
    print("\n--- Mevcut Stok Durumu ---")
    for item, quantity in stock_data.items():
        print(f"- {item}: {quantity} adet")
    print("--------------------------\n")

4. Ana Menü ve Uygulama Akışı

Tüm bu fonksiyonları bir araya getirecek ana menü döngüsünü oluşturalım.


def main():
    stock = load_stock()

    while True:
        print("\n--- Stok Takip Menüsü ---")
        print("1. Ürün Ekle/Miktar Artır")
        print("2. Ürün Miktarını Güncelle")
        print("3. Ürün Sil")
        print("4. Stok Durumunu Listele")
        print("5. Çıkış")
        print("-------------------------")

        choice = input("Seçiminizi yapın (1-5): ")

        if choice == '1':
            add_item(stock)
        elif choice == '2':
            update_quantity(stock)
        elif choice == '3':
            remove_item(stock)
        elif choice == '4':
            list_stock(stock)
        elif choice == '5':
            save_stock(stock)
            print("Uygulamadan çıkılıyor...")
            break
        else:
            print("Geçersiz seçim. Lütfen 1 ile 5 arasında bir sayı girin.")

if __name__ == '__main__':
    main()

Karşılaşılan Zorluklar ve Dikkat Edilmesi Gerekenler

Bu basit projeyi geliştirirken veya benzer projelerde çalışırken karşılaşabileceğiniz bazı durumlar ve çözümleri şunlar olabilir:

  1. FileNotFoundError: Uygulama ilk çalıştığında stok_durumu.json dosyası mevcut olmayabilir. os.path.exists() kontrolü ile bu durumu ele alıp boş bir sözlükle başlamak bu sorunu çözer.
  2. json.JSONDecodeError: JSON dosyası manuel olarak düzenlenmiş ve yanlış formatta kaydedilmiş olabilir. try-except json.JSONDecodeError bloğu ile bu hatayı yakalayarak kullanıcıya bir uyarı gösterebilir ve boş bir stok ile devam edebiliriz. Bu, uygulamanın çökmesini engeller.
  3. Girdi Doğrulama (Input Validation): Kullanıcıdan alınan miktarların sayısal olup olmadığını (ValueError) ve negatif olup olmadığını kontrol etmek önemlidir. Her zaman kullanıcı girdisini güvenilmez olarak kabul edin!
  4. Büyük/Küçük Harf Hassasiyeti: Ürün adlarının büyük/küçük harf hassasiyeti sorunlarını önlemek için, girdiyi .strip().capitalize() gibi yöntemlerle standartlaştırmak iyi bir uygulamadır. Benzer şekilde, veriyi kaydederken ensure_ascii=False ve encoding='utf-8' kullanmak Türkçe karakter sorunlarını engeller.
  5. Veri Tutarlılığı: Birden fazla kullanıcı aynı anda bu dosyayı düzenlemeye çalışırsa veri kaybı yaşanabilir. Bu basit CLI uygulamasında bu durumu ele almadık. Daha büyük sistemlerde veritabanı kilitleme mekanizmaları veya API tabanlı çözümler kullanılır. Bu, basit uygulamaların sınırlarını anlamak için güzel bir örnektir.
  6. Sanal Ortamlar (Virtual Environments): Benzer basit projelerde bile, bir sanal ortam (venv) kullanmak iyi bir alışkanlıktır. Bu, projenizin bağımlılıklarını izole eder ve sisteminizdeki Python kurulumunu temiz tutar. python -m venv venv ve ardından venv\Scripts\activate (Windows) veya source venv/bin/activate (Linux/macOS) ile kolayca oluşturabilirsiniz.

Sonuç

Bu basit “Python Stok Takip Uygulaması” projesi, bana Python’ın ne kadar pratik ve hızlı çözümler üretebildiğini bir kez daha gösterdi. Özellikle iş hayatına yeni atılmış veya kendi projeleriyle uğraşan biriyseniz, bu tür küçük uygulamalarla pratik deneyim kazanmak, problem çözme kaslarımızı güçlendiriyor. Dosya işlemleri, hata yönetimi ve kullanıcı etkileşimi gibi temel konularda sağlam bir temel oluşturuyor.

Tabii ki, bu sadece başlangıç. Bu projeyi bir adım öteye taşımak isterseniz:

  • Bir veritabanı (SQLite gibi) entegrasyonu düşünebilirsiniz.
  • Grafiksel kullanıcı arayüzü (GUI) için Tkinter, PyQt veya Kivy gibi kütüphaneleri araştırabilirsiniz.
  • Ürünlerin tarihi, tedarikçi bilgileri gibi ek alanlar ekleyebilirsiniz.
  • Raporlama özellikleri (örn. azalan stoklar) ekleyebilirsiniz.

Umarım bu yazı, Python ile pratik bir şeyler geliştirmek isteyenler için faydalı olmuştur. Kodlamaya devam edin!