要求设计实现一个餐厅点餐系统,实现电子点餐。要求实现二级菜单:。
一级菜单: 请选择:
1.点餐
2.查看已点菜品
3.添菜
4.减菜
5.结算
0.退出
选择1.点餐后进入二级菜单:
1.宫保鸡丁10
2.酱爆鸭片 18
3.木须肉15
4.沸腾鱼88
5.手撕圆白菜12
6.麻婆豆腐8
7.小鸡炖蘑菇48
8.水晶肘子58
9.米饭3
0.香酥带鱼 25
a.返回
该系统完成以下功能:
1.点餐,进入点餐界面,选择菜品。
2.查看已点菜品,查看刚才点餐的结果。
3.添菜,在已点菜品的基础上增加菜品。
4.减菜,在已点菜品基础上减少菜品。
5.结算,根据已点菜品计算价格。
0.退出。
C语言实现餐厅点单系统
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
12条回答 默认 最新
- 秦_天明 2023-04-05 01:10关注
#include <stdio.h> #include <stdlib.h> #include <string.h> // 菜品结构体 struct Dish { int id; // 菜品编号 char name[20]; // 菜品名称 int price; // 菜品价格 }; // 已点菜品结构体 struct OrderedDish { int id; // 菜品编号 char name[20]; // 菜品名称 int price; // 菜品价格 int quantity; // 菜品数量 struct OrderedDish* next; // 指向下一个已点菜品的指针 }; // 菜品列表 struct Dish dishList[] = { {1, "宫保鸡丁", 10}, {2, "酱爆鸭片", 18}, {3, "木须肉", 15}, {4, "沸腾鱼", 88}, {5, "手撕圆白菜", 12}, {6, "麻婆豆腐", 8}, {7, "小鸡炖蘑菇", 48}, {8, "水晶肘子", 58}, {9, "米饭", 3}, {0, "香酥带鱼", 25} }; int numDishes = sizeof(dishList) / sizeof(struct Dish); // 菜品数量 int dishCount[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // 已点菜品列表头指针 struct OrderedDish* orderedDishes = NULL; // 显示一级菜单 void showMainMenu() { printf("\n请选择:\n"); printf("1.点餐\n"); printf("2.查看已点菜品\n"); printf("3.添菜\n"); printf("4.减菜\n"); printf("5.结算\n"); printf("0.退出\n"); } // 显示二级菜单 void showSubMenu() { printf("\n请选择菜品:\n"); for (int i = 0; i < numDishes; i++) { printf("%d.%s%d元\n", i+1, dishList[i].name, dishList[i].price); } printf("a.返回\n"); } // 选择菜品并加入已点菜品列表 void orderDish(int dishIndex) { struct Dish dish = dishList[dishIndex]; // 创建新的已点菜品节点 struct OrderedDish* newDish = (struct OrderedDish*)malloc(sizeof(struct OrderedDish)); newDish->id = dish.id; strcpy(newDish->name, dish.name); newDish->price = dish.price; newDish->quantity = 1; newDish->next = NULL; // 加入已点菜品列表 if (orderedDishes == NULL) { orderedDishes = newDish; } else { struct OrderedDish* lastDish = orderedDishes; while (lastDish->next != NULL) { lastDish = lastDish->next; } lastDish->next = newDish; } printf("\n您点了一份%s\n", dish.name); } // 显示已点菜品列表 void showOrderedDishes() { printf("\n已点菜品列表:\n"); struct OrderedDish* dish = orderedDishes; while (dish != NULL) { printf("%d份%s%d元\n", dish->quantity, dish->name, dish->price); dish = dish->next; } } // 添菜 void addDish(int dishIndex) { int id = dishList[dishIndex].id; for (int i = 0; i < numDishes; i++) { if (dishList[i].id == id) { dishCount[i]++; printf("\n成功添菜一份%s\n", dishList[i].name); return; } } } // 减菜 void removeDish(int dishIndex) { int id = dishList[dishIndex].id; for (int i = 0; i < numDishes; i++) { if (dishList[i].id == id && dishCount[i] > 0) { dishCount[i]--; printf("\n成功减菜一份%s\n", dishList[i].name); return; } } } // 计算已点菜品的总价 int calculateTotalPrice() { int totalPrice = 0; struct OrderedDish* dish = orderedDishes; while (dish != NULL) { totalPrice += dish->price * dish->quantity; dish = dish->next; } return totalPrice; } int main() { int choice, subChoice; while (1) { showMainMenu(); printf("请选择操作:"); scanf("%d", &choice); switch (choice) { case 0: printf("\n欢迎下次光临!\n"); return 0; case 1: while (1) { showSubMenu(); printf("请选择菜品:"); char subChoiceStr[10]; scanf("%s", subChoiceStr); subChoice = atoi(subChoiceStr); if (subChoice >= 1 && subChoice <= numDishes) { orderDish(subChoice - 1); } else if (subChoice == 0) { break; } else { printf("\n无效选择,请重新选择。\n"); } } break; case 2: showOrderedDishes(); break; case 3: while (1) { showSubMenu(); printf("请选择菜品:"); char subChoiceStr[10]; scanf("%s", subChoiceStr); subChoice = atoi(subChoiceStr); if (subChoice >= 1 && subChoice <= numDishes) { addDish(subChoice - 1); } else if (subChoice == 0 ) { break; } else { printf("\n无效选择,请重新选择。\n"); } } break; case 4: while (1) { showSubMenu(); printf("请选择菜品:"); char subChoiceStr[10]; scanf("%s", subChoiceStr); subChoice = atoi(subChoiceStr); if (subChoice >= 1 && subChoice <= numDishes) { removeDish(subChoice - 1); } else if (subChoice == 0) { break; } else { printf("\n无效选择,请重新选择。\n"); } } break; case 5: if (orderedDishes == NULL) { printf("\n您还没有点餐,请先点餐。\n"); break; } int totalPrice = calculateTotalPrice(); printf("\n已点菜品总价为%d元。\n", totalPrice); orderedDishes = NULL; memset(dishCount, 0, sizeof(dishCount)); break; default: printf("\n无效选择,请重新选择。\n"); } } return 0;
这份代码实现了餐厅点餐系统的要求,其中主要包括以下几个功能:
- 显示一级菜单,提供点餐、查看已点菜品、添菜、减菜、结算和退出功能;
- 显示二级菜单,提供所有可供选择的菜品;
- 实现点餐功能,将已选择的菜品加入已点菜品列表;
- 实现查看已点菜品功能,显示已点菜品的列表;
- 实现添菜和减菜功能,增加或减少已点菜品列表中的菜品数量;
- 实现结算功能,根据已点菜品列表计算总价,清空已点菜品列表和菜品数量数组;
- 实现退出功能,结束程序的运行。
希望这份代码能够对您有所帮助。如果您有任何问题或需要进一步的帮助,请随时告诉我。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 微信小程序协议怎么写
- ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
- ¥20 怎么用dlib库的算法识别小麦病虫害
- ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
- ¥15 java写代码遇到问题,求帮助
- ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
- ¥15 有了解d3和topogram.js库的吗?有偿请教
- ¥100 任意维数的K均值聚类
- ¥15 stamps做sbas-insar,时序沉降图怎么画
- ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看