Python

(29)Python_카페 주문 관리 프로그램

빠스무 2023. 3. 27. 15:23
728x90
  • create database test 를 mysql에서 만들어주고 해야한다.
  • DB 접속을 test로 하기 때문
  • 관리자 모드는 manager table에 등록된 정보로 로그인을 해야 관리자 모드를 접속할 수 있다.
  • 프로그램 종료는 관리자 모드의 영업 종료를 누르면 종료가 된다.

class Coffee:
    def __init__(self, coffee, price=0, stock=0):
        self.coffee = coffee
        self.price = price
        self.stock = stock
    
    def setCoffee(self, coffee):
        self.coffee = coffee
    
    def getCoffee(self):
        return self.coffee

    def setPrice(self, price):
        self.price = price
    
    def getPrice(self):
        return self.price

    def setStock(self, stock):
        self.stock = stock
    
    def getStock(self):
        return self.stock

 

import MySQLdb

class CoffeesDao:
    def __init__(self):
        self.db = None
    
    def connect(self):
        self.db = MySQLdb.connect('localhost', 'root', '1234', 'test')
        
    def disconnect(self):
        self.db.close()
    
    def insert(self, coffee):
        self.connect()
        cur = self.db.cursor()
        sql = "insert into bana (b_coffee, b_price, b_stock) values (%s, %s, %s)"
        data = (coffee.getCoffee(), coffee.getPrice(), coffee.getStock())
        cur.execute(sql, data)
        self.db.commit()
        self.disconnect()     
        
    def selectAll(self):
        self.connect()
        cur = self.db.cursor()
        sql = 'select b_coffee, b_price, b_stock from bana'
        cur.execute(sql)
        row = cur.fetchall()
        self.disconnect()
        return row

    def search(self, coffee):
        self.connect()
        cur = self.db.cursor(MySQLdb.cursors.DictCursor)
        sql = 'select b_coffee, b_price, b_stock from bana where b_coffee=%s'
        data = (coffee,)
        cur.execute(sql, data)
        row = cur.fetchone()
        self.disconnect()
        return row
    
    def update(self, word):
        self.connect()
        cur = self.db.cursor()
        sql = 'update bana set b_price=%s, b_stock=%s where b_coffee=%s'
        data = (word.getPrice(), word.getStock(), word.getCoffee())
        result = cur.execute(sql, data)
        self.db.commit()
        if result > 0:
            print('수정되었습니다')
        else:
            print('해당 커피가 없습니다')
        self.disconnect()
    
    def delete(self, coffee):
        self.connect()
        cur = self.db.cursor()
        sql = 'delete from bana where b_coffee=%s'
        data = (coffee,)
        result = cur.execute(sql, data)
        self.db.commit()
        if result > 0:
            print('삭제되었습니다')
        else:
            print('해당 단어가 없습니다')
        self.disconnect()
        
    def sales(self):
        self.connect()
        cur = self.db.cursor()
        sql = 'select b_coffee, b_price*b_sales from bana'
        cur.execute(sql)
        row = cur.fetchall()
        self.disconnect()
        return row
    
    def orderCount(self,coffee):
        self.connect()
        cur = self.db.cursor()
        sql = 'select b_coffee, b_stock from bana where b_coffee=%s'
        data = (coffee,)
        cur.execute(sql, data)
        row = cur.fetchone()
        if row[1] == 0:
            print('커피 재고가 없습니다')
        else:
            sql = 'update bana set b_sales=b_sales+1, b_stock=b_stock-1 where b_coffee=%s'
            data = (coffee,)
            cur.execute(sql, data)
            print('커피주문이 완료되었습니다.','커피를 받아가세요')
        self.db.commit()
        self.disconnect()
        
    def loginManager(self,managerId, mamagerpw):
        self.connect()
        cur = self.db.cursor()
        sql = 'select m_userid, m_userpw from manager'
        cur.execute(sql)
        row = cur.fetchall()
        self.disconnect()
        return row
    
    def insertManager(self, userid, userpw):
        self.connect()
        cur = self.db.cursor()
        sql = "insert into manager (m_userid, m_userpw) values (%s, %s)"
        data = (userid, userpw)
        cur.execute(sql, data)
        self.db.commit()
        self.disconnect()
        
    def delManager(self, userid):
        self.connect()
        cur = self.db.cursor()
        sql = 'delete from manager where m_userid=%s'
        data = (userid,)
        result = cur.execute(sql, data)
        self.db.commit()
        if result > 0:
            print('삭제되었습니다')
        else:
            print('해당 매니저가 없습니다')
        self.disconnect()

 

class banaService:
    def __init__(self):
        self.dao = CoffeesDao()
    
    def insertMenu(self):
        coffee = input('커피명을 입력하세요')
        price = input('커피 가격을 입력하세요')
        stock = input('재고량 입력하세요')
        coffee = Coffee(coffee, price, stock)
        self.dao.insert(coffee)
    
    def printAll(self):
        datas = self.dao.selectAll()
        for i in datas:
            print(f'커피: {i[0]}, 가격{i[1]}, 재고{i[2]}')
    
    def selectCoffee(self):
        coffee = input('검색할 커피를 입력하세요')
        word = self.dao.search(coffee)
        if word:
            print(f"커피:{word['b_coffee']}, 가격:{word['b_price']}, 재고:{word['b_stock']}")
        else:
            print('찾는 커피가 없습니다')
    
    def editCoffee(self):
        coffee = input('수정할 커피를 입력하세요')
        word = self.dao.search(coffee)
        if word == None:
            print('수정할 커피를 찾지 못했습니다')
        else:
            price = input('새로운 가격을 입력하세요')
            stock = input('새로운 재고량을 입력하세요')
            word = Coffee(coffee, price, stock)
            self.dao.update(word)
    
    def delCoffee(self):
        coffee = input('삭제할 단어를 입력하세요')
        self.dao.delete(coffee)
    
    def salesCoffee(self):
        datas = self.dao.sales()
        coffeeSum = 0
        if datas == None:
            print('매출이 없습니다.')
        else:
            for i in datas:
                print(f'커피: {i[0]}, 매출액{i[1]}')
                coffeeSum = coffeeSum + i[1]
            print(f'총 매출액{coffeeSum}')
            
    def customerPrint(self):
        datas = self.dao.selectAll()
        for i in datas:
            print(f'커피: {i[0]}, 가격{i[1]}')
            
    def order(self):
        coffee = input('주문하실 커피를 입력해주세요')
        word = self.dao.search(coffee)
        if word:
            print(f"커피:{word['b_coffee']}, 가격:{word['b_price']} 주문하시겠습니까?")
            select = int(input('1. 주문완료 2.취소'))
            if select == 1:
                self.dao.orderCount(coffee)
            elif select == 2:
                return
        else:
            print('찾는 커피가 없습니다')
        
    def managerMode(self):
        mangerId = input('아이디를 입력해주세요: ')
        mangerpw = input('비밀번호를 입력해주세요: ')
        datas = self.dao.loginManager(mangerId,mangerpw)
        for i in datas:
            if i[0] == mangerId and i[1] == mangerpw:
                return True
    
    def managerSign(self):
        userId = input('이름을 입력하세요')
        userpw = input('비밀번호를 입력하세요')
        self.dao.insertManager(userId, userpw)
        print('등록완료')
        
    def managerDel(self):
        manager = input('삭제할 매니저를 입력하세요')
        self.dao.delManager(manager)

 

import MySQLdb
import time

class Menu:
    def __init__(self):
        self.service = banaService()
        try:
            db = MySQLdb.connect('localhost', 'root', '1234', 'test')
            cur = db.cursor()
            sql = "create table bana(b_idx int not null auto_increment primary key,b_coffee varchar(20) not null,b_price int,b_stock int,b_sales int default 0)"
            cur.execute(sql)
            sql = "create table manager(m_idx int not null auto_increment primary key,m_userid varchar(20) not null,m_userpw varchar(20) not null)"
            cur.execute(sql) 
            sql = "insert into manager (m_userid, m_userpw) values ('master','1111')"
            cur.execute(sql)
            db.commit()
            db.close()
            
        except:
            pass
        
    
    def run(self):
        while True:
            try:
                mode = int(input('1.관리자 2.고객'))
                if mode == 1:
                    login = self.service.managerMode()
                    if login == True:
                        while True:
                            menu = int(input('1. 메뉴관리 2.매출확인 3.매니저관리 4.메인으로 5.영업종료'))
                            if menu == 1:
                                menuoption = int(input('1.메뉴등록 2.메뉴출력 3.메뉴검색 4.메뉴수정 5.메뉴삭제'))
                                if menuoption == 1:
                                    self.service.insertMenu()
                                elif menuoption == 2:
                                    self.service.printAll()
                                elif menuoption == 3:
                                    self.service.selectCoffee()
                                elif menuoption == 4:
                                    self.service.editCoffee()
                                elif menuoption == 5:
                                    self.service.delCoffee()
                            elif menu == 2:
                                self.service.salesCoffee()
                            elif menu == 3:
                                menuoption = int(input('1.매니저등록 2.매니저삭제'))
                                if menuoption == 1:
                                    self.service.managerSign()
                                elif menuoption == 2:
                                    self.service.managerDel()
                            elif menu == 4: 
                                break
                            elif menu == 5:
                                return
                    else:
                        print('아이디 비밀번호를 확인해주세요')
                        
                elif mode == 2:
                    menu = int(input('1.주문하기 2.메뉴보기 3.종료하기'))
                    if menu == 1:
                        self.service.order()
                    elif menu == 2:
                        self.service.customerPrint()
                    elif menu == 3:
                        continue

                        
                elif mode == 3:
                    break
                    
                else:
                    print('다시 입력하세요')
            except Exception as e:
                print('다시 입력하세요')

 

start = Menu()
start.run()