Merhaba,
Öncelikle ihtiyaç duyduğumuz iki ana modülü ve bir yan modülü tekrar hatırlayalım.
Arayüz için tkinter, veri tabanı için sqlite3, zaman işlemleri için datetime
Arayüz kısmındaki fantezileri sizlere bırakıyorum. Veri tabanı ile ilgili olan kısım ve programın çalışma mantığı ile izleyeceği algoritmasını konuşalım.
Örnek vermek gerekirse şayet yapmak istediğimiz işi bir depo programı olarak düşünelim. Depomuzda ürünler var ve bunların takibini yapabilmek için daha efektif olabileceğimiz bir program oluşturmak istiyoruz.
Nelere ihtiyacımız var?
- Ürünlerin Girişlerinin Kayıt Edilmesi
- Ürünlerin Satışlarının Kayıt Edilmesi
- Ürünlerin Giriş ve Satış Kayıtlarının Raporlanması
- Ürünlerin Stok Durumunun Raporlanması
İhtiyaç duyduğumuz bu işlemleri efektif bir şekilde kullanabilmek için veri tabanı tasarımlarına ihtiyacımız var. Burada bir karar vermemiz gerekiyor. Tüm ürünleri tek bir veri tabanı tablosunun içerisinde mi tutmak istiyoruz, kategorize mi etmek istiyoruz yoksa her ürün için ayrı ayrı veri tabanı mı oluşturmak istiyoruz?
Geleceğe bir fikir olabilmesi ve daha basit şekilde üretilmesi hususunda “her ürün için ayrı ayrı veri tabanı” oluşturarak ilerleyelim.
Depomuzda bulunan 3 farklı ürün olsun bunlarla ilgili öncelikle veri tabanı tablolarımızı oluşturalım.
cursor.execute("CREATE TABLE IF NOT EXISTS ELMA_STOK (MIKTAR FLOAT, BIRIM_TURU TEXT, KAYIT_TARIHI TEXT)")
cursor.execute("CREATE TABLE IF NOT EXISTS ARMUT_STOK (MIKTAR FLOAT, BIRIM_TURU TEXT, KAYIT_TARIHI TEXT)")
cursor.execute("CREATE TABLE IF NOT EXISTS AYVA_STOK (MIKTAR FLOAT, BIRIM_TURU TEXT, KAYIT_TARIHI TEXT)")
Tablolarımızı hazırladıktan sonra öncelikle bu tablolara tasarladığımız ara yüz aracılığı ile veri girişi yapmamız gerekiyor.
Kullanıcıdan miktar ve birim türü bilgisi alarak datetime modülünün datetime.now() fonksiyonu ile anlık kayıt tarihi verilerini gerekli koşulları sağladığı ve hangi üründen kayıt oluşturmak istediğinin kontrolünü yaparak tablolara eklenir.
Örn;
#stoklara ürün girişi yapılıyor
urun_secimi = input("Lütfen ürün adını giriniz >> ")
miktar = float(input("Lütfen ürün miktarını giriniz >> ")
birim_turu = input("Lütfen ürün birim türünü giriniz >> ")
if urun_secimi == "ELMA":
cursor.execute("INSERT INTO ELMA_STOK VALUES (?,?,?),(miktar, birim_turu, datetime.now())")
else:
break
Bu şekilde stoklarımıza ürün girişi yapmış olduk. En ilkel seviyede devam ediyorum. Yoksa buraya kadar yazılacak çok fazla kod var. Koşul kontrol sorgulamarı için lakin öncelikle basit olanı kavradıktan sonra üstüne koymak lazım.
Şimdide stoklarımızdan ürün azaltalım.
Örn;
#stoklardan ürün çıkışı yapılıyor
urun_secimi = input("Lütfen ürün adını giriniz >> ")
miktar = float(input("Lütfen ürün miktarını giriniz >> ")
miktar = miktar * -1 #çıkış yapan miktarı - ile çarptığımız için tabloda veriyi hesaplarken 100kg üründen 30kg satıldığını işlem üstünde bize gösterecek. -1 ile çarpmamış olsaydık sürekli tabloya + veri yani stok kaydı olurdu.
birim_turu = input("Lütfen ürün birim türünü giriniz >> ")
if urun_secimi == "ELMA":
cursor.execute("INSERT INTO ELMA_STOK VALUES (?,?,?),(miktar, birim_turu, datetime.now())")
else:
break
Şu anda tablomuza 2 tür veri girdiğimizi düşünelim. Birincisi 100kg elma girdik ve sonra bu 100kg elmadan 30kg sattık. Her iki kayıtta tablomuzda bulunuyor.
Şimdi bununla ilgili bir rapor görüntüleyelim. Öncelikle kayıtlı verileri veri tabanından çekerek üzerinde gerekli işlemleri yapıp kullanıcıyı bilgilendirelim.
arama = input("Stok kontrolü yapılacak ürün ismini giriniz >> ")
if arama == "ELMA":
cursor.execute("SELECT SUM(MIKTAR) FROM ELMA_STOK")
veriler = cursor.fetchall()
stok_adeti = veriler[0][0]
print("ELMA ÜRÜNÜ STOK ADETİ >> {}".format(stok_adeti))
Böylelikle kullanıcı elma ürününe ait stok adetini direkt öğrenmiş oldu. Eğer kullanıcı elma ürünü ile ilgili tüm kayıtlara erişmek isteseydi o zaman da tablodaki tüm verileri (“SELECT * FROM ELMA_STOK”) ile alıp ekrana yazdırabilirdik.
En basitinden aklında bir şeyler canlanması için bunları iyice oku, uygulamaya çalış ve içinde boğul. Tavsiyem öncelikle konsol üzerinde bu programı tasarlamandan yana. Hatta bununla ilgili bir proje videom var izleyebilirsin.
Bu tarz programlara gerçekten meraklıysan benimle rahatlıkla özel mesajdan iletişime geçebilirsin. Stok takip, muhasebe kaydı, satış takibi, sipariş takibi gibi hepsinin birbirine benzeyen projelerim var. Seve seve yardımcı olurum.
İyi forumlar.