デジタル時代の到来に伴い、さまざまな業界でデジタルトランスフォーメーションが加速しており、ケータリング業界も例外ではありません。より便利で効率的な食事体験を顧客に提供するために、ますます多くのレストランが注文システムを使用し始めています。中でも予約注文は、来店前に注文・決済を済ませることができるため、お客様の待ち時間が短縮され、店舗の収益向上につながる人気の注文方法です。
この記事では、Go 言語を使用して予約注文システムを開発する方法を紹介します。主にデータベース設計、インターフェイス設計、コード例が含まれます。
1. データベース設計
システムのデータベースには次の情報を保存する必要があります:
2. インターフェイスの設計
func login(username string, password string) bool { // 在数据库中查询是否存在该用户,密码是否正确 // 如果存在,则返回true,否则返回false }
type Menu struct { Id int Name string Price float64 Image string } func getMenuList() []Menu { // 查询数据库,获取菜品列表信息 // 将信息封装为Menu类型的slice返回 }
type MenuOrder struct { MenuId int Count int } func reserve(username string, orderTime string, eatTime string, eatNumber int, menuOrder []MenuOrder) bool { // 生成订单编号 // 在订单表中新增一条订单信息 // 在菜品订单表中新增相关信息 // 返回预约结果(成功或失败) }
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. コード例
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 } }
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 }
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 }
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 }
以上がGo言語で開発した料理注文システムにおける予約注文機能の実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。