Noris clark 2020-07-06 14:10 采纳率: 33.3%
浏览 1250

C语言餐厅点餐系统问题(1)

我最近的课设作业要求设计餐厅点菜系统。在关于点餐中我遇到了一个让我想不通的问题。

如下:

我的思路是先定义菜品信息结构体在一个头文件中。在餐厅管理员菜单中我可以录入新菜品并可将其保存在一个菜品信息的文本里面,然后在用户菜单中可查看文本中原有的菜品信息以及新录入的菜品信息。

可是不知道是我录入是出现错误,还是输出是出现错误,亦或是保存时出现错误,使得我输出(即查看菜单)中显示的只有菜名及菜品类型,没有菜品价格请大佬们指点我一下;

代码如下:

typedef struct dishes
{
    int price;
    char cm[15];
    char lx[9];  //菜品类型
}CP;
//定义结构体全局数组
 CP soft[30];

以下这段为录入的头文件里的代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"windows.h"
#include"string.h"
#include"time.h"

void input()
{
    int i;

    system("cls");

    printf("\t\t\t******************************************************\n");
    printf("\t\t\t******************************************************\n");
    printf("\t\t\t*************欢迎来到xx餐厅菜品录入功能*************\n");
    printf("\t\t\t******************************************************\n");
    printf("\t\t\t******************************************************\n");
    printf("\n\n\n");

    for (i = 0; i <= 49; i++)
    {
        if (soft[i].price == 0)
        {
            int select;

            printf("\t\t\t*****************************************************\n");
            printf("\t\t\t*    1 确定输入                      2 放弃输入     *\n");
            printf("\t\t\t*****************************************************\n");
            printf("\t\t\t     输入你的选择(1 or 2):");
            scanf_s("%d", &select);


            while (select != 1 && select != 2)
            {
                printf("\t\t\t     输入错误,请你重新输入你的选择(1 or 2):");
                scanf_s("%d", &select);
            }

            if (select == 2)
                break;

            else
            {
                system("cls");
                printf("\t\t\t*****************************************************\n");
                printf("\t\t\t                   输入第%d个菜品的信息            \n", i + 1);
                printf("\t\t\t*****************************************************\n");

                printf("输入价格:");
                scanf_s("%d", &soft[i].price);
                getchar();    //把上述输入价格后的回车键给处理掉

                printf("输入菜名:");
                gets_s(soft[i].cm);

                printf("输入菜品类型:");
                gets_s(soft[i].lx);
                autosave();
            }
        }
    }

 system("pause");
}

做完这些在输出即查看菜单时我发现我输入的价格没有了或者变乱码了

如图
图片说明

保存的代码如下

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"windows.h"
#include"string.h"
#include"time.h"

void autosave()
{
    int x;

    {
        FILE *p;

        p = fopen("C:\\Users\\65405\\Documents\\Visual Studio 2015\\Projects\\餐厅点餐系统.cpp\\餐厅点餐系统.cpp\\菜品信息.txt", "a");
        if (p == NULL)
        {
            printf("文件打开失败\n");
            exit(0);
        }

        fwrite(soft, sizeof(struct dishes), 30, p);

        printf("\t\t\t数据保存中");
        for (x = 1; x <= 6; x++)
        {
            printf(".");
            Sleep(1000);
        }
        printf("\n");

        fclose(p);

        printf("\t\t\t数据保存成功\n");
    }

    system("pause");
}

查看的代码如下

#include<stdlib.h>
#include<stdio.h>
#include"time.h"
#include"windows.h"
#include"string.h"
void menu()
{
    char c;
    int x;
    system("cls");

    printf("\t\t\t******************************************************\n");
    printf("\t\t\t******************************************************\n");
    printf("\t\t\t***************欢迎查看城科港式餐厅菜单***************\n");
    printf("\t\t\t******************************************************\n");
    printf("\t\t\t******************************************************\n");
    printf("\n\n\n");

    FILE *p;

    p = fopen("C:\\Users\\65405\\Documents\\Visual Studio 2015\\Projects\\餐厅点餐系统.cpp\\餐厅点餐系统.cpp\\菜品信息.txt", "r");
    c = fgetc(p);
    if (p == NULL)
    {
        printf("菜单打开失败\n");
        exit(0);
    }

    printf("\t\t\t数据读取中");
    for (x = 1; x <= 6; x++)
    {
        printf(".");
        Sleep(1000);
    }
    printf("\n");
    while ((c = fgetc(p)) != EOF)
    {
        putchar(c);
        c = fgetc(p);
        printf("%c", c);
    }

    printf("\t\t\t数据读取成功\n");

    putchar('\n');
    fclose(p);
    system("pause");
    order();
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
    • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
    • ¥15 matlab有关常微分方程的问题求解决
    • ¥15 perl MISA分析p3_in脚本出错
    • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
    • ¥15 ubuntu虚拟机打包apk错误
    • ¥199 rust编程架构设计的方案 有偿
    • ¥15 回答4f系统的像差计算
    • ¥15 java如何提取出pdf里的文字?
    • ¥100 求三轴之间相互配合画圆以及直线的算法