m0_69019084 2022-06-23 11:12 采纳率: 100%
浏览 270
已结题

自动售货机程序 c语言程序 求解答

自动售货机程序
出售若干种价格不一的货物
投币存入余额中,购买商品从余额中扣款,不足则提示继续投币
1.有停止购物选项,出货,根据购物情况找零
2.有继续投币选项
3.记录开机以来的营业额
4.货物存量应有固定数量,售完则提示缺货该商品不进行售卖
5.补货功能,补入货物后商品恢复售卖
6.售货机启动后应保持运行

  • 写回答

2条回答 默认 最新

  • qfl_sdu 2022-06-23 11:23
    关注

    定义一个结构体保存货物信息。

    img

    //当投币金额小于需要支付的金额是,询问是否继续投币,如果不继续投币,则结算失败

    img

    代码如下:

    #define _CRT_SECURE_NO_WARNINGS 1
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define MAXNMB 100
    //定义货品信息
    typedef struct _stuf
    {
        char name[20]; //物品名称
        double price; //价格
        int nmb; //数量
    }Stuf;
    
    //录入货品信息
    void input(Stuf a[], int* n)
    {
        int i;
        char ch;
        while (1)
        {
            system("cls");
            printf("请输入货品的名称:");
            scanf("%s", a[*n].name);
            printf("请输入货品的价格:");
            scanf("%lf", &a[*n].price);
            printf("请输入货品的数量:");
            scanf("%d", &a[*n].nmb);
            *n += 1;
            printf("是否继续录入(Y/N):");
            rewind(stdin); //清空输入缓存
            while (1)
            {
                ch = getchar();
                getchar(); //吸收回车符
                if (ch == 'n' || ch == 'N')
                    return;
                else if (ch == 'y' || ch == 'Y')
                    break;
                else
                    printf("是否继续录入(Y/N):");
            }
        }
    }
    
    //购物
    double shopping(Stuf a[], int n)
    {
        char tmp[20],ch;
        int cnt = 0;
        double sum = 0;
        int i;
        int flag = 0;
        system("cls");
        while (1)
        {
            printf("请输入要购买的货品名称:");
            scanf("%s", tmp);
            flag = 1;
            for (i = 0; i < n; i++)
            {
                if (strcmp(a[i].name, tmp) == 0)
                {
                    if (a[i].nmb <= 0)
                        flag = 0;
                    else
                        flag = 1;
                    break;
                }
            }
            if (flag == 0)
            {
                printf("该商品目前缺货!\n");
            }
            else
            {
                while (1)
                {
                    printf("请输入购买数量:");
                    scanf("%d", &cnt);
                    if (cnt > a[i].nmb)
                        printf("库存不足,当前库存:%d", a[i].nmb);
                    else
                        break;
                }
                sum += a[i].price * cnt;
                a[i].nmb -= cnt;
            }
    
            //询问是否继续购物
            rewind(stdin);
            while (1)
            {
                printf("是否继续购物(Y/N):");
                ch = getchar();
                getchar(); //吸收回车符
                if (ch == 'n' || ch == 'N')
                {
                    printf("购物完成,请结算!\n");
                    system("pause");
                    return sum;
                }    
                else if (ch == 'y' || ch == 'Y')
                    break;
            }
                
        }
    }
    
    //结算
    int jieSuan(double price)
    {
        int sum = 0;
        int op;
        char ch;
        while (1)
        {
            system("cls");
            printf("1.投币1元\n");
            printf("2.投币5元\n");
            printf("3.投币10元\n");
            printf("4.投币50元\n");
            printf("5.投币100元\n");
            scanf("%d", &op);
            if (op == 1)
                sum += 1;
            else if (op == 2)
                sum += 5;
            else if (op == 3)
                sum += 10;
            else if (op == 4)
                sum += 50;
            else if (op == 5)
                sum += 100;
            else
                continue;
            if (sum < price)
            {
                rewind(stdin);
                while (1)
                {
                    printf("是否继续投币(Y/N)?");
                    ch = getchar();
                    getchar(); //吸收回车符
                    if (ch == 'n' || ch == 'N') //购物失败
                    {
                        printf("投币不足,购物失败,退还投币!\n");
                        return 0;
                    }
                    else if (ch == 'y' || ch == 'Y')
                        break;
                }
            }
            else
            {
                printf("总投币:%d,找零:%.1f,购物成功!\n", sum, sum - price);
                system("pause");
                return 1;
            }
        }
    }
    
    //补充货品
    void addStuf(Stuf a[], int n)
    {
        char tmp[20], ch;
        int nmb,i;
        
        while (1)
        {
            system("cls");
            printf("请输入需要补充数量的货品名称:");
            scanf("%s", tmp);
            printf("请输入补充数量:");
            scanf("%d", &nmb);
            for (i = 0; i < n; i++)
            {
                if (strcmp(a[i].name, tmp) == 0)
                {
                    a[i].nmb += nmb;
                    printf("补货成功!\n");
                    break;
                }
            }
            if (i == n)
                printf("未找到该货品,补货失败!\n");
            printf("是否继续补货(Y/N):");
            rewind(stdin);
            while (1)
            {
                ch = getchar();
                getchar();
                if (ch == 'y' || ch == 'Y')
                    break;
                else if (ch == 'N' || ch == 'n')
                    return;
                else
                    printf("是否继续补货(Y/N):");
            }
        }
    }
    
    int main()
    {
        Stuf a[MAXNMB];
        int nmb = 0;
        int choise;
        double price=0;
        double sum = 0;
        while (1)
        {
            system("cls");
            printf("--------------欢迎使用自动售货机-----------\n");
            printf(" 1.添加货物\n");
            printf(" 2.购买货物\n");
            printf(" 3.结算\n");
            printf(" 4.补货\n");
            printf(" 5.统计销售额\n");
            printf(" 0.退出系统\n");
            scanf("%d", &choise);
            switch (choise)
            {
            case 0:return 0;
            case 1:input(a, &nmb); break;
            case 2:price = shopping(a, nmb); break;
            case 3:
                if (jieSuan(price))
                    sum += price;
                price = 0;
                break;
            case 4:addStuf(a, nmb); break;
            case 5:
                printf("自开机以来的销售额:%.1lf\n", sum);
                break;
            }
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月23日
  • 已采纳回答 6月23日
  • 创建了问题 6月23日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效