运用结构体和链表小餐馆点餐系统c语言完整代码
时间: 2024-08-28 10:02:43 浏览: 62
餐馆点菜系统C语言源代码
在C语言中,要实现一个简单的小餐馆点餐系统,我们可以使用结构体来存储菜品信息,包括菜品名称、价格等。同时,我们可以使用链表来管理这些结构体变量,因为链表可以动态地增加或删除节点,非常适合处理动态的数据集合。
下面是一个简单的示例代码,展示了如何定义结构体、创建链表以及实现一个简单的点餐系统。请注意,这个示例是为了演示目的,可能不包含一个完整系统所需的所有功能。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义菜品结构体
typedef struct Dish {
char name[30];
float price;
struct Dish *next;
} Dish;
// 创建新节点
Dish* createDish(const char* name, float price) {
Dish* newDish = (Dish*)malloc(sizeof(Dish));
if (newDish == NULL) {
fprintf(stderr, "内存分配失败\n");
exit(1);
}
strcpy(newDish->name, name);
newDish->price = price;
newDish->next = NULL;
return newDish;
}
// 向链表中添加菜品
void addDish(Dish **head, const char* name, float price) {
Dish *newDish = createDish(name, price);
if (*head == NULL) {
*head = newDish;
} else {
Dish *current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = newDish;
}
}
// 打印菜单
void printMenu(Dish *head) {
printf("菜单:\n");
Dish *current = head;
while (current != NULL) {
printf("%s - ¥%.2f\n", current->name, current->price);
current = current->next;
}
}
// 点餐
void orderDish(Dish *head, const char* name) {
Dish *current = head;
while (current != NULL) {
if (strcmp(current->name, name) == 0) {
printf("已点:%s - ¥%.2f\n", current->name, current->price);
return;
}
current = current->next;
}
printf("菜单上没有找到名为 %s 的菜品。\n", name);
}
// 主函数
int main() {
Dish *menu = NULL; // 创建空链表作为菜单
// 添加菜品到菜单
addDish(&menu, "宫保鸡丁", 32.0);
addDish(&menu, "鱼香肉丝", 28.0);
addDish(&menu, "青椒肉丝", 26.0);
// 打印菜单
printMenu(menu);
// 点餐
orderDish(menu, "宫保鸡丁");
orderDish(menu, "青椒土豆丝"); // 假设菜单上没有这道菜
// 清理工作:删除链表
Dish *current = menu;
while (current != NULL) {
Dish *next = current->next;
free(current);
current = next;
}
return 0;
}
```
在这个例子中,我们定义了一个`Dish`结构体来存储菜品的信息,并创建了一个链表来管理这些菜品。我们添加了几个辅助函数来处理创建新菜品、添加菜品到菜单、打印菜单和点菜的功能。
阅读全文