基于C语言实现点餐操作

前言:本代码只实现点餐和结算操作,一种菜品如果需要点多份需要输入多次。
在本次实现过程中,最大的bug是strcmp段错误。原因是:strcmp()函数的对比参数不可以为空(null),所以在使用strcmp()函数之前需要对参数进行判断。
在这里插入图片描述
具体代码:

#include <bits/stdc++.h>

using namespace std;

int main()
{
    //定义菜单
    char *cai[12] = {"0","1.芥兰炒牛肉","2.黄瓜炒肉","3.苦瓜煎蛋","4.川味回锅肉","5.卤味拼盘","6.蒜蓉时蔬","7.玉米排骨汤","8.炸酱面","9.米饭","10.可乐"};
    //定义价格
    float p[12] = {0,28.88,16.88,16.88,30.88,30.88,12.88,18.88,10.88,2.88,3};
    //定义一个数组用于存放已点的菜
    char *s[30];
    int i = 1;
    //定义一个数组用于存放已点的菜的价格
    float p1[30];
    //结算价格
    float num = 0;
    printf("***************欢迎光临小甘饭馆******************\n");
    printf("                ——请点菜——                    \n");
    for(int i=1; i<=10; i++)
    {
        printf("%s   %.2f\n",cai[i],p[i]);
    }
    printf("\n");
    printf("输入序号即可选择菜品!\n(22)取消菜品\n(88)确定点菜\n");
    while(1)
    {
        int n = 0;
        scanf("%d",&n);
        if(n == 88) break;
        if(n == 22)
        {
            printf("——请输入需要取消菜品序号——            ");
            int m[30];
            char c;
            int h1 =0;
            for(int h=1; h<=30 && c != '\n'; h++)
            {
                scanf("%d",&m[h]);
                h1 = h;
                c = getchar();
            }
            //二重循环
            //外循环:用于遍历需取消菜品
            //内循环:用于遍历已点菜品
            //使用strcmp函数进行字符串对比,相等返回0,不相等返回其他值
            for(int j=1; j <= h1; j++)
            {
                for(int k=1; k <= i-1; k++)
                {
                    //需注意的是!在进行字符串对比前,需为对比字符串添加条件判断,字符串为空不能进行strcmp操作
                    if(s[k] != NULL && cai[m[j]] != NULL)
                    {
                        if(strcmp(s[k],cai[m[j]]) == 0)
                        {
                            s[k]=NULL;
                            num = num - p1[k];
                            p1[k]=NULL;
                        }
                    }
                }
            }
            printf("\n");
            printf("****取消成功!请继续点菜****\n");
        }
        s[i] = cai[n];
        p1[i] = p[n];
        num = num + p[n];
        i++;
    }
    printf("-------------------------------------------------\n");
    printf("您的菜单如下\n");
    for(int j= 1; j<i; j++)
    {
        if(s[j] != NULL && p1[j] != NULL)
        {
            printf("%s  %.2f¥\n",s[j],p1[j]);
        }
    }

    printf("共计:%.0f元\n谢谢!",num);
    return 0;
}

运行结果:
在这里插入图片描述
小白一枚,欢迎交流~

  • 11
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是一个简单的C语言点餐系统程序设计的示例代码,仅供参考: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_MENU_ITEMS 10 #define MAX_NAME_LENGTH 20 typedef struct { char name[MAX_NAME_LENGTH]; double price; } MenuItem; MenuItem menu[MAX_MENU_ITEMS] = { {"Hamburger", 10.0}, {"Cheeseburger", 12.0}, {"Fries", 5.0}, {"Onion Rings", 6.0}, {"Coke", 3.0}, {"Pepsi", 3.0}, {"Water", 2.0}, {"Ice Cream", 4.0}, {"Cake", 5.0}, {"Coffee", 4.0} }; int main() { int option; int quantity; double total = 0.0; printf("Welcome to our restaurant!\n"); printf("Here is our menu:\n"); for (int i = 0; i < MAX_MENU_ITEMS; i++) { printf("%d. %s ($%.2f)\n", i + 1, menu[i].name, menu[i].price); } while (1) { printf("Enter the item number you want to order (0 to finish): "); scanf("%d", &option); if (option == 0) { break; } if (option < 1 || option > MAX_MENU_ITEMS) { printf("Invalid option!\n"); continue; } printf("Enter the quantity: "); scanf("%d", &quantity); if (quantity <= 0) { printf("Invalid quantity!\n"); continue; } total += menu[option - 1].price * quantity; printf("%d x %s added to your order.\n", quantity, menu[option - 1].name); } printf("Your total is: $%.2f\n", total); return 0; } ``` 这个程序定义了一个 `MenuItem` 结构体,包含了菜品名称和价格。然后定义了一个 `menu` 数组,包含了所有菜品的信息。在主函数中,使用一个循环来不断接收用户的点餐信息,直到用户输入 0 结束点餐。在每次循环中,先让用户输入要点的菜品的序号和数量,然后计算出本次订单的总价。最后输出订单的总价。 需要注意的是,这个程序非常简单,只是一个基本的点餐系统程序设计示例,实际应用中可能需要更复杂的功能和逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值