Python’da Mağaza Yönetim Sistemi

Mağaza Yönetim Sistemi, tüm işlemleri takip eden ve satın alınan tüm ürünler için fatura oluşturan bir masaüstü uygulamasıdır.

Mağaza yönetimi veya Mağaza yönetim sistemi, yeni başlayanlar için stokları, ürünleri, satışları vb. izlememiz gereken ilginç bir python projesidir.

Bu ilginç projeyi geliştirmek için python kullanacağız (GUI için tkinter kullanarak).

Proje Ön Koşulları

Ön koşullar aşağıdaki gibidir:
1. Python’un temel kavramları
2. Tkinter

Mağaza Yönetim Sistemi Python Projesi Kodunu İndirin

Lütfen mağaza yönetim sisteminin kaynak kodunu indirin: Mağaza Yönetim Sistemi Kodu

Mağaza yönetimi veya mağaza yönetimi projesinin kaynak kodunu anlayalım:

from tkinter import *
from tkinter import ttk
from tkcalendar import DateEntry
from tkinter import messagebox
import sqlite3  as db

def connection():
    connectObj = db.connect("shopManagement.db")
    cur = connectObj.cursor()
    sql = '''
    create table if not exists sellings (
        date string,
        product string,
        price number,
        quantity number,
        total number
        )
    '''
    cur.execute(sql)
    connectObj.commit()   

connection()     
window=Tk()
window.title("TechVidvan Shop Management Project")
tabs = ttk.Notebook(window) 
root= ttk.Frame(tabs)
root2=ttk.Frame(tabs)

tabs.add(root, text ='Sell') 
tabs.add(root2, text ='Stock') 
tabs.pack(expand = 1, fill ="both") 
  

#----------------------------------------------tab1 ----------------------------------

def GenerateBill():
    connectObj = db.connect("shopManagement.db")
    cur = connectObj.cursor()  

    global billarea
    if p1quantity.get()==0 and p2quantity.get()==0 and p3quantity.get()==0 and p4quantity.get()==0:
        messagebox.showerror("Error","No product purchased")
    else:
        billarea.delete('1.0',END)
        billarea.insert(END,"\t|| TechVidvan Shop Management Project ||")
        billarea.insert(END,"\n_________________________________________\n")
        billarea.insert(END,"\nDate\t Products\tPrice\t   QTY\t Total")
        billarea.insert(END,"\n==========================================")

        price= IntVar()
        price2=IntVar()
        price3=IntVar()
        price4=IntVar()

        print(dateE.get())
        price=price2=price3=price4=0

        if p1quantity.get()!=0:
            price=p1quantity.get()*p1price.get()
            print(price)
            billarea.insert(END,f"\n{dateE.get()}\t Product-1 \t{p1price.get()}\t {p1quantity.get()}\t {price}")

            sql = '''
            INSERT INTO Sellings VALUES 
            (?, ?, ?, ?,?)
            '''
            cur.execute(sql,(dateE.get(),'Product-1',p1price.get(),p1quantity.get(),price))
            connectObj.commit() 

        if p2quantity.get()!=0:
            price2=(p2quantity.get()*p2price.get())
            print(price2)
            billarea.insert(END,f"\n{dateE.get()}\t Product-2 \t{p2price.get()}\t {p2quantity.get()}\t {price2}")

            sql = '''
            INSERT INTO Sellings VALUES 
            (?, ?, ?, ?,?)
            '''
            print(dateE.get(),'Product-2',p2price.get(),p2quantity.get(),price2)
            cur.execute(sql,(dateE.get(),'Product-2',p2price.get(),p2quantity.get(),price2))
            connectObj.commit() 

        if p3quantity.get()!=0:
            price3=p3quantity.get()*p1price.get()
            print(price3)
            billarea.insert(END,f"\n{dateE.get()}\tProduct-3 \t{p3price.get()}\t {p3quantity.get()}\t {price3}")

            sql = '''
            INSERT INTO Sellings VALUES 
            (?, ?, ?, ?,?)
            '''
            cur.execute(sql,(dateE.get(),'Product-3',p3price.get(),p3quantity.get(),price3))
            connectObj.commit() 

        if p4quantity.get()!=0:
            price4=p4quantity.get()*p1price.get()
            billarea.insert(END,f"\n{dateE.get()}\tProduct-4 \t{p4price.get()}\t {p4quantity.get()}\t {price4}")

            sql = '''
            INSERT INTO Sellings VALUES 
            (?, ?, ?, ?,?)
            '''
            cur.execute(sql,(dateE.get(),'Product-4',p4price.get(),p4quantity.get(),price4))
            connectObj.commit() 

        Totalprice=IntVar()
        Totalprice=price+price2+price3+price4

        Totalquantity=IntVar()
        Totalquantity=p1quantity.get()+p2quantity.get()+p3quantity.get()+p4quantity.get()
        billarea.insert(END,f"\nTotal \t \t  \t{Totalquantity}\t {Totalprice}")


def view():
    connectObj = db.connect("shopManagement.db")
    cur = connectObj.cursor()  

    sql = 'Select * from Sellings'
    cur.execute(sql)

    rows=cur.fetchall()
    viewarea.insert(END,f"Date\t Product\t  Price of 1\t  Quantity\t  Price\n")
    
    
    for i in rows:
        allrows=""
        for j in i:
            allrows+=str(j)+'\t'
        allrows+='\n'
        viewarea.insert(END,allrows)

dateL=Label(root,text="Date",bg="DodgerBlue2",width=12,font=('arial',15,'bold'))
dateL.grid(row=0,column=0,padx=7,pady=7)

dateE=DateEntry(root,width=12,font=('arial',15,'bold'))
dateE.grid(row=0,column=1,padx=7,pady=7)

l=Label(root, text="Product",font=('arial',15,'bold'),bg="DodgerBlue2",width=12)
l.grid(row=1,column=0,padx=7,pady=7)

l=Label(root, text="Price",font=('arial',15,'bold'),bg="DodgerBlue2",width=12)
l.grid(row=1,column=1,padx=7,pady=7)

l=Label(root, text="Quantity",font=('arial',15,'bold'),bg="DodgerBlue2",width=12)
l.grid(row=1,column=2,padx=7,pady=7)

#----product 1----------------------------------------------------
p1name=StringVar()
p1name.set('Product1')

p1price=IntVar()
p1price.set(100)

p1quantity=IntVar()
p1quantity.set(0)

l=Label(root, text=p1name.get(),font=('arial',15,'bold'),width=12)
l.grid(row=2,column=0,padx=7,pady=7)

l=Label(root, text=p1price.get(),font=('arial',15,'bold'),width=12)
l.grid(row=2,column=1,padx=7,pady=7)

t=Entry(root,textvariable=p1quantity,font=('arial',15,'bold'),width=12)
t.grid(row=2,column=2,padx=7,pady=7)

#----product 2-------------------------------------------------------------
p2name=StringVar()
p2name.set('Product2')

p2price=IntVar()
p2price.set(200)

p2quantity=IntVar()
p2quantity.set(0)

l=Label(root, text=p2name.get(),font=('arial',15,'bold'),width=12)
l.grid(row=3,column=0,padx=7,pady=7)

l=Label(root, text=p2price.get(),font=('arial',15,'bold'),width=12)
l.grid(row=3,column=1,padx=7,pady=7)

t=Entry(root,textvariable=p2quantity,font=('arial',15,'bold'),width=12)
t.grid(row=3,column=2,padx=7,pady=7)

#----product 3----
p3name=StringVar()
p3name.set('Product3')

p3price=IntVar()
p3price.set(300)

p3quantity=IntVar()
p3quantity.set(0)

l=Label(root, text=p3name.get(),font=('arial',15,'bold'),width=12)
l.grid(row=4,column=0,padx=7,pady=7)

l=Label(root, text=p3price.get(),font=('arial',15,'bold'),width=12)
l.grid(row=4,column=1,padx=7,pady=7)

t=Entry(root,textvariable=p3quantity,font=('arial',15,'bold'),width=12)
t.grid(row=4,column=2,padx=7,pady=7)

#----product 4----
p4name=StringVar()
p4name.set('Product4')

p4price=IntVar()
p4price.set(400)

p4quantity=IntVar()
p4quantity.set(0)

l=Label(root, text=p4name.get(),font=('arial',15,'bold'),width=12)
l.grid(row=5,column=0,padx=7,pady=7)

l=Label(root, text=p4price.get(),font=('arial',15,'bold'),width=12)
l.grid(row=5,column=1,padx=7,pady=7)

t=Entry(root,textvariable=p4quantity,font=('arial',15,'bold'),width=12)
t.grid(row=5,column=2,padx=7,pady=7)

#------------------------bill-------------------------
billarea=Text(root)

submitbtn=Button(root,command=GenerateBill,text="Bill",
font=('arial',15,'bold'),bg="DodgerBlue2",width=20 )

submitbtn.grid(row=6,column=0,padx=7,pady=7)

viewbtn=Button(root,command=view,text="View All Sellings",
font=('arial',15,'bold'),bg="DodgerBlue2",width=20 )

viewbtn.grid(row=6,column=2,padx=7,pady=7)

billarea.grid(row=9,column=0)
viewarea=Text(root)
viewarea.grid(row=9,column=2)
#----------------------------------------------tab2 ----------------------------------
def connection2():
    connectObj2 = db.connect("shopManagement.db")
    cur = connectObj2.cursor()
    sql = '''
    create table if not exists stocks (
        date string,
        product string,
        price number,
        quantity number
        )
    '''
    cur.execute(sql)
    connectObj2.commit()   

connection2() 

def addStock():
    global dateE2,qty,name,price

    connectObj = db.connect("shopManagement.db")
    cur = connectObj.cursor()  
    sql = '''
            INSERT INTO stocks VALUES 
            (?, ?, ?, ?)
            '''
    cur.execute(sql,(dateE2.get(),name.get(),price.get(),qty.get()))
    connectObj.commit() 

def viewStock():
    connectObj = db.connect("shopManagement.db")
    cur = connectObj.cursor()  

    sql = 'Select * from stocks'
    cur.execute(sql)

    rows=cur.fetchall()
    viewarea2.insert(END,f"Date \tProduct\t  Price\t  Quantity\t \n")
    
    for i in rows:
        allrows=""
        for j in i:
            allrows+=str(j)+'\t'
        allrows+='\n'
        viewarea2.insert(END,allrows)

dateL=Label(root2,text="Date",bg="DodgerBlue2",width=12,font=('arial',15,'bold'))
dateL.grid(row=0,column=0,padx=7,pady=7)

dateE2=DateEntry(root2,width=12,font=('arial',15,'bold'))
dateE2.grid(row=0,column=1,padx=7,pady=7)

l=Label(root2, text="Product",font=('arial',15,'bold'),bg="DodgerBlue2",width=12)
l.grid(row=1,column=0,padx=7,pady=7)

l=Label(root2, text="Price",font=('arial',15,'bold'),bg="DodgerBlue2",width=12)
l.grid(row=2,column=0,padx=7,pady=7)

l=Label(root2, text="Quantity",font=('arial',15,'bold'),bg="DodgerBlue2",width=12)
l.grid(row=3,column=0,padx=7,pady=7)

name=StringVar()
price=IntVar()
qty=IntVar()

Name=Entry(root2,textvariable=name,font=('arial',15,'bold'),width=12)
Name.grid(row=1,column=1,padx=7,pady=7)

Price=Entry(root2,textvariable=price,font=('arial',15,'bold'),width=12)
Price.grid(row=2,column=1,padx=7,pady=7)

Qty=Entry(root2,textvariable=qty,font=('arial',15,'bold'),width=12)
Qty.grid(row=3,column=1,padx=7,pady=7)

addbtn=Button(root2,command=addStock,text="Add",
font=('arial',15,'bold'),bg="DodgerBlue2",width=20)

addbtn.grid(row=4,column=1,padx=7,pady=7)

viewarea2=Text(root2)
viewarea2.grid(row=5,column=0,columnspan=2)

viewbtn2=Button(root2,command=viewStock,text="View Stock",
font=('arial',15,'bold'),bg="DodgerBlue2",width=20 )

viewbtn2.grid(row=4,column=0,padx=7,pady=7)

mainloop()

Açıklama:

Sekme-1:

Bağlantı: Python programını bir veritabanına bağlar ve beş öznitelikli bir satış tablosu oluşturur. Veritabanı bağlantısı için adımlar:

1. sqlite3’ü
içe aktarın sqlite3’ü db olarak içe aktarın

2. Bağlantı nesnesi oluşturun.
connectObj = db.connect(“shopManagement.db”)

3. İmleç nesnesi oluşturun
cur = connectObj.cursor()

4. Gerekli sorguyu yürütün.
cur.execute(sql)

GenerateBill: Aşağıdakilerden sorumludur:

Herhangi bir ürün satın alınmadığında ve yazılımdan fatura oluşturması istendiğinde, bir mesaj kutusunda “Hata”, “Ürün satın alınmadı” yazıyor.

Bu koşulu kontrol ettikten sonra, daha önceki faturaları (varsa) kaldırmak için fatura alanını temizler ve ardından Mağaza adını ve kodun kendisinde belirtilen birkaç başlığı daha ekler.

Ve son olarak, ürün adını, parça başına fiyatı, miktarı ve miktar sıfırdan büyükse toplam fiyatı (parça başına fiyat * miktar) ekler. Ayrıca bu fonksiyon, yukarıda belirtilen adımları takip ederek tüm geçerli satırları veritabanımızda saklar.

Tüm ürünlerden sonra ödenecek toplam tutarı hesaplar ve ayrı bir satırda görüntüler.

Görünüm: Bu fonksiyon, satış tablosunun her satırını okur ve hepsini tkinter penceresinde görüntüler.

Bu fonksiyondan sonra, ürün adını ve parça başına fiyatını içeren bir menü ve kullanıcının satın alınan miktarı girmesi için bir giriş widget’ı oluşturduk. Daha sonra GenerateBill işlevini çağırmak için bir gönder düğmesi ve görüntüleme işlevini çağırmak için bir görünüm düğmesi oluşturduk.

Sekme-2:

Connection2: Python programımızı bir veritabanına bağlar ve tarih, ürün adı, fiyat ve miktar olmak üzere dört nitelik içeren bir stok tablosu oluşturur.

Addstock: Kullanıcının girdiği verileri, yukarıda anlatılan veritabanı bağlantı adımlarını kullanarak hisse senetleri tablosunda saklar.

viewstock: Tüm hisse senedi tablo satırlarını okur ve bunları tkinter penceresinde görüntüler.

Bu fonksiyondan sonra, kullanıcının ürün adını, fiyatını ve miktarını girmesi için bazı giriş widget’ları oluşturduk. Ardından, addstock işlevini çağırmak için bir ekle düğmesi ve görünüm işlevini çağırmak için bir görünüm düğmesi oluşturduk.

Mağaza Yönetim Sistemi Proje Çıktısı

Sekme-1:

mağaza yönetimi faturayı görüntüle

Sekme-2:

stok envanteri

Özet

Stokları, ürünleri, satışları vb. takip edebileceğimiz mağaza yönetimi veya mağaza yönetim sistemini başarıyla geliştirdik. Gereksinimlere göre bu projeye daha fazla özellik ekleyebilirsiniz.

Makalenin orjinal kaynağını bu linkten okuyabilirsiniz.

Aynı proje konusu için hazırlanmış diğer makalemizi buradan okuyabilirsiniz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

This site uses Akismet to reduce spam. Learn how your comment data is processed.