>백엔드 개발 >Golang >Go 언어로 개발된 음식 주문 시스템에서 예약 주문 기능 구현 방법

Go 언어로 개발된 음식 주문 시스템에서 예약 주문 기능 구현 방법

WBOY
WBOY원래의
2023-11-01 17:47:02516검색

Go 언어로 개발된 음식 주문 시스템에서 예약 주문 기능 구현 방법

디지털 시대의 도래와 함께 다양한 산업이 디지털 전환을 가속화하고 있으며, 요식업도 예외는 아닙니다. 점점 더 많은 레스토랑이 고객에게 보다 편리하고 효율적인 식사 경험을 제공하기 위해 주문 시스템을 사용하기 시작했습니다. 그 중 예약 주문은 고객이 매장에 도착하기 전에 미리 주문하고 결제할 수 있어 고객의 대기 시간을 줄이고 레스토랑의 수익을 높이는 방식으로 매우 인기가 높습니다.

이 기사에서는 Go 언어를 사용하여 예약 주문 시스템을 개발하는 방법을 소개합니다. 여기에는 주로 데이터베이스 디자인, 인터페이스 디자인 및 코드 예제가 포함됩니다.

1. 데이터베이스 설계

시스템 데이터베이스에는 다음 정보가 저장되어야 합니다.

  1. 사용자 정보(user_info): 사용자 이름, 비밀번호, 휴대폰 번호, 이메일 및 기타 정보 포함
  2. 레시피 정보 ): 요리 이름, 가격, 사진 및 기타 정보 포함
  3. 주문 정보(order_info): 주문 번호, 예약 시간, 식사 시간, 식사 인원 수 및 기타 정보 포함
  4. 요리 주문 정보(menu_order_info): 주문 번호 포함 , 요리 ID, 수량 및 기타 정보.

2. 인터페이스 디자인

  1. 사용자 로그인 인터페이스
    func login(username string, password string) bool {
        // 在数据库中查询是否存在该用户,密码是否正确
        // 如果存在,则返回true,否则返回false
    }
  1. 메뉴 목록 가져오기 인터페이스
    type Menu struct {
        Id int
        Name string
        Price float64
        Image string
    }

    func getMenuList() []Menu {
        // 查询数据库,获取菜品列表信息
        // 将信息封装为Menu类型的slice返回
    }
  1. 예약 인터페이스
    type MenuOrder struct {
        MenuId int
        Count int
    }

    func reserve(username string, orderTime string, eatTime string, eatNumber int, menuOrder []MenuOrder) bool {
        // 生成订单编号
        // 在订单表中新增一条订单信息
        // 在菜品订单表中新增相关信息
        // 返回预约结果(成功或失败)
    }
  1. 주문 인터페이스 조회
    type OrderInfo struct {
        OrderId int
        OrderTime string
        EatTime string
        EatNumber int
        MenuList []MenuOrder
        Status int   // 1表示预约成功,2表示已就餐,3表示已取消
    }

    func getOrderList(username string) []OrderInfo {
        // 查询指定用户的订单信息
        // 将信息封装为OrderInfo类型的slice返回
    }

3.

  1. 사용자 로그인 인터페이스
    func login(username string, password string) bool {
        db, err := sql.Open("mysql", "root:password@tcp(localhost:3306)/restaurant")
        if err != nil {
            log.Fatal(err)
        }
        defer db.Close()

        rows, err := db.Query("SELECT * FROM user_info WHERE username = ? AND password = ?", username, password)
        if err != nil {
            log.Fatal(err)
        }
        defer rows.Close()

        if rows.Next() {
            return true
        } else {
            return false
        }
    }
  1. 메뉴 목록 가져오기 인터페이스
    type Menu struct {
        Id int
        Name string
        Price float64
        Image string
    }

    func getMenuList() []Menu {
        db, err := sql.Open("mysql", "root:password@tcp(localhost:3306)/restaurant")
        if err != nil {
            log.Fatal(err)
        }
        defer db.Close()

        rows, err := db.Query("SELECT id, name, price, image FROM menu_info")
        if err != nil {
            log.Fatal(err)
        }
        defer rows.Close()

        var menuList []Menu
        for rows.Next() {
            var id int
            var name string
            var price float64
            var image string
            err := rows.Scan(&id, &name, &price, &image)
            if err != nil {
                log.Fatal(err)
            }

            menu := Menu{
                Id: id,
                Name: name,
                Price: price,
                Image: image,
            }
            menuList = append(menuList, menu)
        }
        return menuList
    }
  1. 예약 인터페이스
    type MenuOrder struct {
        MenuId int
        Count int
    }

    func reserve(username string, orderTime string, eatTime string, eatNumber int, menuOrder []MenuOrder) bool {
        db, err := sql.Open("mysql", "root:password@tcp(localhost:3306)/restaurant")
        if err != nil {
            log.Fatal(err)
        }
        defer db.Close()

        tx, err := db.Begin()
        if err != nil {
            log.Fatal(err)
        }

        stmt1, err := tx.Prepare("INSERT INTO order_info(order_time, eat_time, eat_number, status) VALUES (?, ?, ?, ?)")
        if err != nil {
            tx.Rollback()
            log.Fatal(err)
        }
        defer stmt1.Close()

        res, err := stmt1.Exec(orderTime, eatTime, eatNumber, 1) // 预约成功
        if err != nil {
            tx.Rollback()
            log.Fatal(err)
        }

        orderId, err := res.LastInsertId()
        if err != nil {
            tx.Rollback()
            log.Fatal(err)
        }

        stmt2, err := tx.Prepare("INSERT INTO menu_order_info(order_id, menu_id, count) VALUES (?, ?, ?)")
        if err != nil {
            tx.Rollback()
            log.Fatal(err)
        }
        defer stmt2.Close()

        for _, menu := range menuOrder {
            _, err := stmt2.Exec(orderId, menu.MenuId, menu.Count)
            if err != nil {
                tx.Rollback()
                log.Fatal(err)
            }
        }

        err = tx.Commit()
        if err != nil {
            tx.Rollback()
            log.Fatal(err)
        }

        return true
    }
  1. 쿼리 주문 인터페이스
    type OrderInfo struct {
        OrderId int
        OrderTime string
        EatTime string
        EatNumber int
        MenuList []MenuOrder
        Status int   // 1表示预约成功,2表示已就餐,3表示已取消
    }

    func getOrderList(username string) []OrderInfo {
        db, err := sql.Open("mysql", "root:password@tcp(localhost:3306)/restaurant")
        if err != nil {
            log.Fatal(err)
        }
        defer db.Close()

        rows, err := db.Query("SELECT order_info.id, order_time, eat_time, eat_number, status, menu_id, count FROM order_info INNER JOIN menu_order_info ON order_info.id = menu_order_info.order_id WHERE username = ?", username)
        if err != nil {
            log.Fatal(err)
        }
        defer rows.Close()

        var orderList []OrderInfo
        for rows.Next() {
            var orderId int
            var orderTime string
            var eatTime string
            var eatNumber int
            var status int
            var menuId int
            var count int
            err := rows.Scan(&orderId, &orderTime, &eatTime, &eatNumber, &status, &menuId, &count)
            if err != nil {
                log.Fatal(err)
            }

            var order *OrderInfo
            for i, item := range orderList {
                if item.OrderId == orderId {
                    order = &orderList[i]
                    break
                }
            }

            if order == nil {
                order = &OrderInfo{
                    OrderId: orderId,
                    OrderTime: orderTime,
                    EatTime: eatTime,
                    EatNumber: eatNumber,
                    Status: status,
                    MenuList: make([]MenuOrder, 0),
                }
                orderList = append(orderList, *order)
            }

            menuOrder := MenuOrder{
                MenuId: menuId,
                Count: count,
            }
            order.MenuList = append(order.MenuList, menuOrder)
        }
        return orderList
    }

IV 요약

이 기사에서는 Go 언어를 사용하여 예약 주문 시스템을 개발하는 방법을 소개합니다. , 자세한 코드 예제를 제공합니다. 이 글을 공부함으로써 독자들은 예약 주문 시스템의 기본 원리와 구현 방법을 익힐 수 있고, 유사한 시스템 개발을 위한 기술 지원을 제공할 수 있습니다. 또한 SQL 주입, 인증, 기타 보안 문제 방지 등 시스템의 안정성과 보안을 유지하는 데에도 주의를 기울여야 합니다.

위 내용은 Go 언어로 개발된 음식 주문 시스템에서 예약 주문 기능 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.