Ruby 语言 实现餐饮点单系统 桌号绑定 / 菜品下单 / 后厨打印 / 结算

Ruby阿木 发布于 1 天前 2 次阅读


Ruby 餐饮点单系统实现

随着科技的不断发展,餐饮行业也在不断寻求创新和提升服务质量。点单系统作为餐饮服务的重要组成部分,能够提高效率、减少错误,并提升顾客体验。本文将使用 Ruby 语言实现一个简单的餐饮点单系统,包括桌号绑定、菜品下单、后厨打印和结算等功能。

系统设计

系统架构

本系统采用简单的命令行界面(CLI)进行交互,系统架构如下:

1. 用户界面(CLI):负责接收用户输入,显示系统信息。
2. 数据存储:使用内存中的数据结构来存储桌号、订单和菜品信息。
3. 业务逻辑:处理点单、打印和结算等业务逻辑。
4. 后厨打印:模拟后厨打印订单。

数据结构

- 桌号:使用哈希表存储桌号和对应的订单信息。
- 菜品:使用数组存储菜品信息,包括菜品名称、价格和库存。
- 订单:使用哈希表存储订单信息,包括桌号、菜品列表和总价。

实现代码

1. 初始化系统

ruby
class RestaurantOrderSystem
def initialize
@tables = {} 桌号绑定订单
@dishes = [
{ name: '宫保鸡丁', price: 38, stock: 10 },
{ name: '红烧肉', price: 48, stock: 8 },
{ name: '清蒸鱼', price: 58, stock: 5 }
]
end

def start
puts '欢迎使用餐饮点单系统'
loop do
puts '请选择操作:1. 绑定桌号 2. 下单 3. 打印订单 4. 结算 5. 退出'
choice = gets.to_i
case choice
when 1
bind_table
when 2
order_dishes
when 3
print_order
when 4
settle_account
when 5
puts '感谢使用,再见!'
break
else
puts '无效的操作,请重新选择'
end
end
end

private

def bind_table
puts '请输入桌号:'
table_number = gets.to_i
if @tables.key?(table_number)
puts '该桌号已被绑定'
else
@tables[table_number] = { dishes: [], total: 0 }
puts '桌号绑定成功'
end
end

def order_dishes
if @tables.empty?
puts '当前没有桌号绑定,请先绑定桌号'
return
end

puts '请输入桌号:'
table_number = gets.to_i
if !@tables.key?(table_number)
puts '该桌号未绑定'
return
end

puts '请选择菜品(输入菜品名称):'
@dishes.each do |dish|
puts "{dish[:name]} - {dish[:price]}元"
end

loop do
puts '请输入菜品名称或输入"完成"结束点单:'
dish_name = gets.strip
if dish_name == '完成'
break
end

dish = @dishes.find { |d| d[:name] == dish_name }
if dish && dish[:stock] > 0
@tables[table_number][:dishes] << dish
@tables[table_number][:total] += dish[:price]
puts "已添加 {dish_name},当前总价:{@tables[table_number][:total]}元"
else
puts '菜品不存在或库存不足'
end
end
end

def print_order
if @tables.empty?
puts '当前没有订单'
return
end

puts '请输入桌号:'
table_number = gets.to_i
if !@tables.key?(table_number)
puts '该桌号未绑定'
return
end

order = @tables[table_number]
puts "桌号:{table_number}"
order[:dishes].each do |dish|
puts "{dish[:name]} - {dish[:price]}元"
end
puts "总价:{order[:total]}元"
puts '后厨打印订单...'
sleep(1) 模拟后厨打印
puts '订单打印完成'
end

def settle_account
if @tables.empty?
puts '当前没有订单'
return
end

puts '请输入桌号:'
table_number = gets.to_i
if !@tables.key?(table_number)
puts '该桌号未绑定'
return
end

order = @tables[table_number]
puts "桌号:{table_number}"
order[:dishes].each do |dish|
puts "{dish[:name]} - {dish[:price]}元"
end
puts "总价:{order[:total]}元"
puts '结算成功'
@tables.delete(table_number)
end
end

启动系统
system = RestaurantOrderSystem.new
system.start

2. 运行系统

将上述代码保存为 `restaurant_order_system.rb`,然后在命令行中运行:

bash
ruby restaurant_order_system.rb

3. 系统交互

按照提示进行操作,例如:


欢迎使用餐饮点单系统
请选择操作:1. 绑定桌号 2. 下单 3. 打印订单 4. 结算 5. 退出
1
请输入桌号:
2
桌号绑定成功
请选择操作:1. 绑定桌号 2. 下单 3. 打印订单 4. 结算 5. 退出
2
请输入桌号:
2
请选择菜品(输入菜品名称):宫保鸡丁 - 38元
请输入菜品名称或输入"完成"结束点单:红烧肉
已添加 红烧肉,当前总价:86元
请输入菜品名称或输入"完成"结束点单:完成
请选择操作:1. 绑定桌号 2. 下单 3. 打印订单 4. 结算 5. 退出
3
请输入桌号:
2
桌号:2
宫保鸡丁 - 38元
红烧肉 - 48元
总价:86元
后厨打印订单...
订单打印完成
请选择操作:1. 绑定桌号 2. 下单 3. 打印订单 4. 结算 5. 退出
4
请输入桌号:
2
桌号:2
宫保鸡丁 - 38元
红烧肉 - 48元
总价:86元
结算成功

总结

本文使用 Ruby 语言实现了一个简单的餐饮点单系统,包括桌号绑定、菜品下单、后厨打印和结算等功能。通过这个示例,我们可以了解到 Ruby 在实现类似系统时的基本思路和代码结构。在实际应用中,可以根据需求扩展功能,如添加用户管理、菜品分类、支付方式等。