상세 컨텐츠

본문 제목

2023.04.26 카페 DB연동

Python

by 연을 2023. 4. 26. 14:51

본문

728x90

[카페 menu DB연동]

import cx_Oracle as cx
from datetime import datetime,timedelta
class Menu:
    def __init__(self):
        pass
    def add(self):
        conn = cx.connect("ora_user", "human123", "localhost/orcl")  # DB연동
        cur = conn.cursor()
        name = input('메뉴명을 입력하세요 ['':종료]')
        while name != '':
            price = int(input('가격을 입력하세요'))
            cur.execute(f"insert into menu values ('{name}','{price}',snoseq.nextval)")
            name = input('메뉴명을 입력하세요 ['':종료]')
        conn.commit()
        cur.close()
        conn.close()

    def delete(self):
        conn = cx.connect("ora_user", "human123", "localhost/orcl")  # DB연동
        cur = conn.cursor()
        n = int(input("삭제할 메뉴 변호를 선택하세요.['0':종료]"))
        while n != 0:
            cur.execute(f'delete from menu where s_no={n}')
            n = int(input("삭제할 메뉴 변호를 선택하세요.['0':종료]"))
        conn.commit()
        cur.close()
        conn.close()

    def update(self):
        conn = cx.connect("ora_user", "human123", "localhost/orcl")  # DB연동
        cur = conn.cursor()
        n = int(input("메뉴수정할 번호를 입력하세요 ['0':종료]"))
        while n!=0:
            new_name = input('메뉴명을 입력하세요 ['':종료]')
            if new_name == '':
                break
            new_price = int(input('가격을 입력하세요'))
            cur.execute(f"update menu set name='{new_name}',price={new_price} where s_no={n}")
            n = int(input("메뉴수정할 번호를 입력하세요 ['0':종료]"))
        conn.commit()
        cur.close()
        conn.close()

    def display(self):
        conn = cx.connect("ora_user", "human123", "localhost/orcl")  # DB연동
        cur = conn.cursor()
        cur.execute("select * from menu order by s_no")
        for rec in cur:
            print('%2d %-12s %5d'%(rec[2],rec[0],rec[1]))
        cur.close()
        conn.close()

: menu DB에 연동하고 curd 가능하게 만들었다.

[order 부분]

class Order(Menu):
    def __init__(self):
        self.lOrder=[]
        self.mobile = ''
    def append(self):
        #menu display
        self.display()
        # 메뉴번호, 수량 -> 총액표시
        num=input('주문할 메뉴번호를 입력하시오 ["":종료]')
        while num!="":
            qty = input('주문할 수량을 입력하시오 ["":종료]')
            if qty=="":
                break
            conn = cx.connect("ora_user", "human123", "localhost/orcl")  # DB연동
            cur = conn.cursor()
            cur.execute(f"select * from menu where s_no={num}")
            rec=cur.fetchone()
            menu_item={'name':rec[0],'price':rec[1]}
            cur.close()
            conn.close()
            self.lOrder.append({'name': menu_item['name'],
                                'qty': qty,
                                'price': menu_item['price']* int(qty)})
            self.display()
            num=input('주문할 메뉴번호를 입력하시오 ["":종료]')
        if self.lOrder:
            self.mobile = input('핸드폰 번호를 입력하세요 ["":종료]')

    def delete(self):
        while True:
            n = input('주문 취소할 메뉴를 선택하세요 ["":종료]: ')
            if n == "":
                break
            try:
                n = int(n)
                if n <= 0 or n > len(self.lOrder):
                    print("잘못된 입력입니다. 다시 입력하세요.")
                else:
                    del self.lOrder[n - 1]
                    print("주문이 취소되었습니다.")
                    break
            except ValueError:
                print("잘못된 입력입니다. 다시 입력하세요.")
        print("=" * 60)
    def show(self):
        total = 0
        print("                      주문서")
        print('='*60)
        i=1
        for order in self.lOrder:
            print('%2d %-12s %2d %6d %11s' % (i,order['name'], int(order['qty']), int(order['price']), self.mobile))
            total += int(order['price'])
            i+=1
        print('주문 총액:%7d' % (total))
        print('=' * 60)

: menu DB를 연동하여 주문할 메뉴번호를 입력하여 입력받은 번호의 내용을 다 가져온다.

[Sales 부분]

class Sales:
    def __init__(self):
        self.lSales=[] #name,qty,price

    def display(self):
        total=0
        conn = cx.connect("ora_user", "human123", "localhost/orcl")  # DB연동
        cur = conn.cursor()
        cur.execute('select * from selling order by sell_time')
        print('=' * 60)
        for row in cur:
            print('%-12s %2d %6d %11s %s'%(row[2],row[3],row[4],row[1],row[0]))
            total+=row[4]
        cur.close()
        conn.close()
        print('총 매출액 : %d'%(total))
        print('=' * 60)
    def add(self,oOrder):
        conn = cx.connect("ora_user", "human123", "localhost/orcl")  # DB연동
        cur = conn.cursor()
        now=datetime.now()
        date=now.strftime('%Y-%m-%d %H:%M:%S')
        for order in oOrder.lOrder:
            cur.execute(f"insert into selling values('{date}','{oOrder.mobile}', '{order['name']}', {int(order['qty'])}, {int(order['price'])})")
            order['mobile']=oOrder.mobile
            self.lSales.append(order)
        conn.commit()
        cur.close()
        conn.close()

: selling DB에 연동하여 add : 날짜, 모바일, 이름, 수량, 가격 입력받은 정보를 가져와서 넣어준다.

display부분은 selling table의 넣어던 값을 다 가져온다.

[작업 선택하는 부분]

gSales = Sales()
gOrder = Order()      #Menu gMenu = new Menu()

work = input("작업을 선택하시오 ['m':메뉴관리, 'o':주문관리,'s':매출관리, '':프로그램종료]")
while work!="":
    if work=='m':
        #menu list display
        gOrder.display()
        #메뉴작업 입력 (a:추가,d:삭제,u:수정,l:display , '':메뉴작업종료)
        menuwork = input("메뉴작업을 선택하세요 [a:추가, d:삭제, u:수정, l:display, '':메뉴작업종료]")
        while menuwork!='':
            if menuwork=='a':
                gOrder.add()
                menuwork = input("메뉴작업을 선택하세요 [a:추가, d:삭제, u:수정, l:display, '':메뉴작업종료]")
            elif menuwork=='d':
                gOrder.delete()
                menuwork = input("메뉴작업을 선택하세요 [a:추가, d:삭제, u:수정, l:display, '':메뉴작업종료]")
            elif menuwork=='u':
                gOrder.update()
                menuwork = input("메뉴작업을 선택하세요 [a:추가, d:삭제, u:수정, l:display, '':메뉴작업종료]")
            elif menuwork=='l':
                gOrder.display()
                menuwork = input("메뉴작업을 선택하세요 [a:추가, d:삭제, u:수정, l:display, '':메뉴작업종료]")
            else:
                print('잘못입력하셨습니다. 다시 선택해 주세요')
                menuwork = input("메뉴작업을 선택하세요 [a:추가, d:삭제, u:수정, l:display, '':메뉴작업종료]")
        #lMenu의 내용을 menu.txt.에 저장
        #gOrder.save()
        print('메뉴작업을 종료하였습니다.')
        work = input("작업을 선택하세요 ['m':메뉴관리, 'o':주문관리,'s':매출관리, " ":프로그램종료]")
    elif work=='o':
        gOrder.lOrder=[]
        orderwork = input("주문작업을 선택하세요 [a:주문추가, l:주문내역, '':메뉴작업종료]")
        while orderwork !='':
            if orderwork=='a':
                gOrder.append()
            elif orderwork=='l':
                gOrder.show()
            orderwork = input("주문작업을 선택하세요 [a:주문추가, l:주문내역, '':메뉴작업종료]")
        gSales.add(gOrder)
        print('주문작업을 종료하였습니다')
        work = input("작업을 선택하시오 ['m':메뉴관리, 'o':주문관리,'s':매출관리, " ":프로그램종료]")
    elif work=='s':
        gSales.display()
        work = input("작업을 선택하시오 ['m':메뉴관리, 'o':주문관리,'s':매출관리, " ":프로그램종료]")
    else:
        print('잘못입력하셨습니다. 다시 선택해 주세요')
        work = input("작업을 선택하시오 ['m':메뉴관리, 'o':주문관리,'s':매출관리, " ":프로그램종료]")
print("프로그램종료")

[결과]

메뉴관리를 들어가서 메뉴추가하는 모습
모든 메뉴가 나온다.
메뉴 수정하는 모습
메뉴가 삭제된 모습
여기서 메뉴 수정된 모습도 같이 확인 할 수 있다
주문관리 들어가서 주문 추가하는 모습
주문이 다 끝나고 난 뒤에 핸드폰 번호를 입력한다.
l을 눌러 주문 내역을 확인 할 수 있다.
d를 눌러 주문 취소할 주문번호를 눌러준다.
확인해보면 잘 지워진걸 확인 할 수 있다.
s를 눌러 매출관리를 할 수 있다.
이름, 수량, 가격, 모바일번호, 시간을 확인 할 수 있다.
총 매출액까지도 나온다.
728x90

'Python' 카테고리의 다른 글

2023.04.27  (0) 2023.04.27
2024.04.26  (0) 2023.04.26
2023.04.25  (0) 2023.04.25
2024.04.25  (1) 2023.04.25
2023.04.24  (1) 2023.04.24

관련글 더보기