用C语言单链表写一个订餐项目
时间: 2023-06-27 16:05:39 浏览: 46
以下是一个简单的基于单链表的订餐项目示例,使用C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct food {
char name[50];
float price;
struct food *next;
};
typedef struct food Food;
Food *head = NULL;
void addFood(char *name, float price) {
Food *newFood = (Food*)malloc(sizeof(Food));
strcpy(newFood->name, name);
newFood->price = price;
newFood->next = NULL;
if (head == NULL) {
head = newFood;
} else {
Food *current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = newFood;
}
printf("添加成功!\n");
}
void listFoods() {
if (head == NULL) {
printf("没有菜品!\n");
} else {
Food *current = head;
printf("编号\t菜名\t价格\n");
int i = 1;
while (current != NULL) {
printf("%d\t%s\t%.2f\n", i, current->name, current->price);
current = current->next;
i++;
}
}
}
void deleteFood(int index) {
if (head == NULL) {
printf("没有菜品!\n");
return;
} else if (index < 1) {
printf("无效编号!\n");
return;
}
Food *current = head;
Food *previous = NULL;
int i = 1;
while (i < index && current != NULL) {
previous = current;
current = current->next;
i++;
}
if (current == NULL) {
printf("无效编号!\n");
return;
}
if (previous == NULL) {
head = current->next;
} else {
previous->next = current->next;
}
free(current);
printf("删除成功!\n");
}
void clearFoods() {
if (head == NULL) {
printf("没有菜品!\n");
return;
}
Food *current = head;
while (current != NULL) {
Food *next = current->next;
free(current);
current = next;
}
head = NULL;
printf("清空成功!\n");
}
int main() {
int choice;
while (1) {
printf("请选择操作:\n");
printf("1. 添加菜品\n");
printf("2. 查看菜单\n");
printf("3. 删除菜品\n");
printf("4. 清空菜单\n");
printf("5. 退出\n");
scanf("%d", &choice);
switch (choice) {
case 1: {
char name[50];
float price;
printf("请输入菜名:");
scanf("%s", name);
printf("请输入价格:");
scanf("%f", &price);
addFood(name, price);
break;
}
case 2: {
listFoods();
break;
}
case 3: {
int index;
printf("请输入要删除的菜品编号:");
scanf("%d", &index);
deleteFood(index);
break;
}
case 4: {
clearFoods();
break;
}
case 5: {
return 0;
}
default: {
printf("无效选择!\n");
break;
}
}
}
return 0;
}
```
在这个示例中,我们定义了一个 `food` 结构体,其中包含了菜品名称和价格,以及一个指向下一个节点的指针。我们还定义了一个 `head` 指针,用于指向链表的头部。
然后,我们提供了一些基本的操作函数,例如添加菜品、列出菜单、删除菜品和清空菜单。这些函数都使用了链表来存储菜品,并且在操作时会遍历整个链表。
最后,在主函数中,我们提供了一个简单的菜单,让用户可以选择不同的操作。在用户选择退出时,程序停止运行。