lemsca 2023-04-12 11:33 采纳率: 71.4%
浏览 8
已结题

作为答辩设计需要什么改进或会提出什么提问在答辩中


 #include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int count;//用这个来表示今日有多少菜品
int count1=0;//这个来表示这在用餐的人数
int count2[200];//这个来表示菜品销量 
int *gettime()
{
    time_t rawtime;//时间类型
    struct tm *ptminfo;//时间结构体,指针变量
    static int today[3];
    time(&rawtime);
    ptminfo=localtime(&rawtime);
    printf("%02d-%02d-%02d %02d:%02d:%02d",ptminfo->tm_year+1900,ptminfo->tm_mon+1,ptminfo->tm_mday,ptminfo->tm_hour,ptminfo->tm_min,ptminfo->tm_sec);
    today[0]=ptminfo->tm_year+1900;
    today[1]=ptminfo->tm_mon+1;
    today[2]=ptminfo->tm_mday;
    return today;
}
struct menu1
{
    int bianma;//编码 
    char leixing[1000]; 
    char caiming[1000]; 
    char zhuangtai[1000]; 
    int price; 
}caipin[200];
struct desk
{
    int people;
    int grcd[50];//个人菜单的里的编码 
    int sl;//点菜的数量 
    int sum; 
}can_desk[200]; 
void save()//保存函数
{
    FILE *fp;
    fp=fopen("菜单.txt","wb+");
    if(fp==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    fwrite(caipin,sizeof(struct menu1),200,fp);//把菜品名给存储
    fprintf(fp, "\n%d", count);
    fclose(fp);//先保存
    printf("文件保存成功!\n");
}
void load()//读取函数 
{
    int i;
    FILE *fp;
    system("cls");//清屏 
    fp=fopen("菜单.txt","rb");
    if(fp==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    fread(caipin,sizeof(struct menu1),200,fp);
    fscanf(fp, "%d",&count);
    fclose(fp);
    printf("数据读取成功!\n");
    system("pause");
}
void output()
{
    int i;
    printf("%-15s","编码");
    printf("%-15s","类型");    
    printf("%-15s","菜名");    
    printf("%-15s","状态");    
    printf("%-5s","价格");
    printf("\n");
    for(i=0;i<count;i++)
    {    
        printf("%-15d",caipin[i].bianma);
        printf("%-15s",caipin[i].leixing);
        printf("%-15s",caipin[i].caiming);
        printf("%-15s",caipin[i].zhuangtai);
        printf("%-5d",caipin[i].price);
        printf("\n");
    }
    system("pause");//暂停窗口 
}
void cansave()
{
    //存储 
    FILE *fp;
    fp=fopen("餐桌信息.txt","wb");
    if(fp==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    fwrite(can_desk,sizeof(struct desk),200,fp);//把菜品名给存储
    fprintf(fp,"\n%d",count1);
    fclose(fp);//先保存
}
void canload()
{
    int i;
    FILE *fp; 
    fp=fopen("餐桌信息.txt","rb");
    if(fp==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    fread(can_desk,sizeof(struct desk),200,fp);
    fscanf(fp,"%d",&count1);//读取正在用餐的餐桌信息 
    fclose(fp);
}
void menu2()
{
    int sel,n,x,i,j;
    int flag;
    system("cls"); //清屏 
    printf("----------------------------------------\n");
    printf("|             欢迎来到龙凤阁            |\n"); 
    printf("----------------------------------------\n");
    printf("今日菜品有如下:\n");
    output();
    //餐桌信息 
    printf("----------------------------------------\n");
    printf("|****          1.点餐              ****|\n"); 
    printf("|****          2.查询              ****|\n"); 
    printf("----------------------------------------\n");
    printf("请输入你的选择【1 or 2】:");
    scanf("%d",&sel);
    //判断是否输入错误
    while(sel!=1 && sel!=2)
    {
        printf("输入错误,请重新再输入:");
        scanf("%d",&sel);
    } 
    if(sel==1)
    {
        printf("\n请你输入你当前所坐桌的桌号【1~199】:");
    tt:    scanf("%d",&n);
        //判断一下输入的桌号是否正确
        if(can_desk[n].people!=0)
        {
            printf("这个餐桌号已经有人,请输入你自己所处的餐桌位:");
            goto tt;
        }
        
        //先将餐桌的用餐额赋值为0
        can_desk[n].sum=0;
        //将餐桌的book[]数组赋值为0,给他标记 
        printf("请你输入用餐人数:");
        scanf("%d",&can_desk[n].people);
        printf("请你输入点菜的个数:");
        scanf("%d",&can_desk[n].sl);
        x=can_desk[n].sl;//将数量赋值给x好看一点 
        for(j=0;j<x;j++) 
        {
            printf("----------------------------------------\n");
            printf("第%d个菜品的编码:",j+1);
    here:    scanf("%d",&can_desk[n].grcd[j]);
            //判断是否有此编码 
            flag=1;//假设为不存在的状态 
            for(i=0;i<count;i++)
                if(can_desk[n].grcd[j]==caipin[i].bianma)
                    flag=0;//寻找到就改变状态
                    count2[i]++;
            if(flag==1)
            {
                printf("非常抱歉亲爱的顾客,你所输入编码对应的菜品今日不供应!!!\n"); 
                printf("请重新输入你第%d道菜的编码:",j+1);
                goto here;//无条件跳转到here,goto语句可以使程序在无任何的条件下跳转到指定位置 在此及回到输入餐品编码。 
            } 
            for(i=0;i<count;i++) //查找菜品的金额
                if(can_desk[n].grcd[j]==caipin[i].bianma)
                    can_desk[n].sum+=caipin[i].price;
        }
        printf("你当前所需要支付的金额:%d\n",can_desk[n].sum);
        printf("是否选择提交订单【1 or 2】:");
        scanf("%d",&sel);
        while(sel!=1 && sel!=2)
        {
            printf("输入错误,请重新再输入:");
            scanf("%d",&sel);
        } 
        if(sel==1)
        {
            count1++;
            cansave();//调用结账 
        }
        else
            menu2();//加餐过程 
    }
    else if(sel==2)//客人查询自己餐桌的信息 
    {
        printf("输入当前的所在桌位:");
        scanf("%d",&n);
        gettime(); //调用时间函数 
        printf("\n%5s","餐桌号码");
        printf("%15s","餐桌人数");
        printf("%13s","点菜道数");
        printf("%11s","需付金额");
        printf("%20s","所点菜品");
        printf("\n"); 
        
        printf("%4d号",n);
        printf("%11d人",can_desk[n].people);
        printf("%11d道",can_desk[n].sl);
        printf("%11dRmb",can_desk[n].sum);
        //找菜名 
        flag=1;//标记一下,用来美化一下界面 
        for(x=0;x<can_desk[n].sl;x++)
        for(i=0;i<count;i++)
            if(can_desk[n].grcd[x]==caipin[i].bianma)
            {
                if(flag==1)
                {
                    printf("%20s",caipin[i].caiming);
                    flag=0;
                }
                else
                    printf(" %s",caipin[i].caiming);
            }
        printf("\n"); 
        //顾客点单完查看后,根据需要加餐和减餐 
        printf("----------------------------------------\n");
        printf("|****          1.加菜              ****|\n"); 
        printf("|****          2.减菜              ****|\n"); 
        printf("|****          3.返回              ****|\n"); 
        printf("----------------------------------------\n");
        printf("请输入你的选择【1 or 2 or 3】:");
        scanf("%d",&sel);
        //判断是否输入错误
        while(sel!=1 && sel!=2 && sel!=3)
        {
            printf("输入错误,请重新再输入:");
            scanf("%d",&sel);
        }
        printf("----------------------------------------\n");
        switch(sel)
        {    //加菜 
            case 1:
                {     
                    int c;
                    printf("请输入您想添加菜的编码:");
            aaa:    scanf("%d",&can_desk[n].grcd[j]);
                    //判断是否有此编码 
                    flag=1;//假设为不存在的状态 
                    for(i=0;i<count;i++)
                        if(can_desk[n].grcd[j]==caipin[i].bianma)
                            flag=0;//寻找到就改变状态
                            count2[i]++;
                    if(flag==1)
                    {
                        printf("非常抱歉亲爱的顾客,你所输入编码对应的菜品今日不供应!!!\n"); 
                        printf("请重新输入你第%d道菜的编码:",j+1);
                        goto aaa;//同理无条件回到输入菜的编码的过程 
                    }
                    can_desk[n].sl++;//菜数增加 
                    for(i=0;i<count;i++) //查找菜品的金额
                        if(can_desk[n].grcd[j]==caipin[i].bianma)
                            can_desk[n].sum+=caipin[i].price;
                            
                    //保存
                    printf("是否选择提交订单【1 or 2】:");
                    scanf("%d",&sel);
                    while(sel!=1 && sel!=2)
                    {
                        printf("输入错误,请重新再输入:");
                        scanf("%d",&sel);
                    } 
                    if(sel==1)
                        cansave();
                }
                    break;
            case 2:    //减菜 
                {
                    int code;
                    printf("请输入你想删去菜品的编码:");
                    scanf("%d",&code);
                    flag=1;//给标记看是否能找到
                    for(i=0;i<can_desk[n].sl;i++)
                    {
                        if(code==can_desk[n].grcd[i])
                        {
                            flag=0;
                            int j;
                            for(j=i;j<can_desk[n].sl;j++)
                            {
                                if(j<can_desk[n].sl-1)
                                    can_desk[n].grcd[j]=can_desk[n].grcd[j+1];
                                if(j==can_desk[n].sl-1)
                                    can_desk[n].grcd[j]=0;
                                    count2[i]--;
                            }
                        }
                    }
                    
                    if(flag==1)
                        printf("您的订单中尚未添加该菜\n");
                    else
                    {
                        can_desk[n].sl--;//所点菜品数减去一道
                        //再把所需要的金额减去所删去的菜品对应的价格
                        for(i=0;i<count;i++) //查找菜品的金额
                        if(code==caipin[i].bianma)
                            can_desk[n].sum-=caipin[i].price;
                    }
                        
                    printf("是否选择提交订单【1 or 2】:");
                    scanf("%d",&sel);
                    while(sel!=1 && sel!=2)
                    {
                        printf("输入错误,请重新再输入:");
                        scanf("%d",&sel);
                    } 
                    if(sel==1)
                        cansave();
                }
                    break;
            case 3:menu2();break;
        }  
        
    }
    system("pause");//暂停窗口 
}
void input()
{
    int n,sel,i,j,zhuohao,x; 
    int name,flag;//用来标志 
    int code;//用来输入密码用 
    system("cls");
    printf("----------------------------------\n");
    printf("|       欢迎来到管理者系统界面   |\n");
    printf("----------------------------------\n");
    printf("|          1.添加菜品            |\n"); //ok 
    printf("|          2.删除菜品            |\n"); //ok 
    printf("|          3.结账删除            |\n");
    printf("|          4.查看订单            |\n");
    printf("|          5.热销菜品            |\n");
    printf("----------------------------------\n");
    printf("已有菜品%d个:\n",count);
    output();
    printf("请输入管理员登入密码:");
    scanf("%d",&code);
    if(code==8520)//在这里可以自己设置管理员密码
    {
        printf("恭喜你登入成功!!!\n");
        printf("请输入你的选择【1-5】:");
        scanf("%d",&j);
        if(j==1)//添加菜品 
        {
            printf("请输入今日可增加添做的菜品数:");
            scanf("%d",&n);
            //getchar();
            //循环输入
            for(i=0;i<n;i++)
            {
            it:    printf("----------------------------------------\n");
                printf("请输入第%d个菜品编码:",i+1);
                scanf("%d",&caipin[count].bianma);
                //来判断一下编码是否以存在
                flag=1;//表示不存在 
                for(x=0;x<count;x++)
                    if(caipin[count].bianma==caipin[x].bianma)
                        flag=!flag;
                
                //如果存在则返回
                if(flag==0)
                {
                    printf("此编码已经被其它的菜品所征用!>﹏<\n"); 
                    goto it;//同理无条件回到输入菜品编码的过程 
                } 
                getchar();
                printf("请输入菜品类型:"); 
                gets(caipin[count].leixing); 
                printf("请输入第%d个菜品名:",i+1);
                gets(caipin[count].caiming);
                printf("请输入菜品状态:");
                gets(caipin[count].zhuangtai);
                printf("请输入价格:");
                scanf("%d",&caipin[count].price);
                count++;
                //getchar();
            }
            //输入菜品后存储 
            save();//保存一下输入的 
            
            printf("是否需要核对今日菜单【1 or 2】:");
            
            scanf("%d",&sel);
            
            while(sel!=1 && sel!=2)
            {
                printf("输入错误,请重新再输入:");
                scanf("%d",&sel);
            }
            
            if(sel==1)
                output(); 
            
        }
        else if(j==2)//删除菜品
        {
            getchar();
            printf("----------------------------------------\n");
            printf("输入要删除的菜品编码:");
            scanf("%d",&name);
            for(i=0;i<count;i++)
            {
                if(name==caipin[i].bianma)
                {
                    if(i==199)
                    {
                        //如果是int 或者 double  直接给0
                        //如果是char 字符串 直接给"" 空串
                        caipin[i].price=0;
                        strcpy(caipin[i].caiming,"");                                            
                    }
                    else
                    {
                        //把 i+1199的同学所有信息整体往前赋值
                        int j;//定义局部变量
                        for(j=i+1;j<=199;j++)
                            caipin[j-1]=caipin[j];
                    }
                    
                    count--; 
                    printf("数据已经删除!\n");
                    system("pause");
                    save();//需要调用保存函数 
                }    
            } 
        }
        else if(j==3)
        {
            printf("--------------------------------------\n");
            printf("请输入结账走人的桌号:");
            scanf("%d",&i); 
            //判断输入的桌号是否未结账并用过餐 
            while(can_desk[i].sum==0)
            {
                printf("为查询到此餐桌用餐情况,请重新查询:");
                scanf("%d",&i);
            }
            //显示一下餐桌,并询问是否删除
            printf("%5s","餐桌号码");
            printf("%15s","餐桌人数");
            printf("%13s","点菜道数");
            printf("%11s","需付金额");
            printf("%20s","所点菜品"); 
            printf("\n"); 
            
            printf("%4d号",i);
            printf("%11d人",can_desk[i].people);
            printf("%11d道",can_desk[i].sl);
            printf("%11dRmb",can_desk[i].sum);
            //找菜名
            flag=1; 
            for(x=0;x<can_desk[i].sl;x++)
            for(n=0;n<count;n++)
                if(can_desk[i].grcd[x]==caipin[n].bianma)
                {
                    if(flag==1)
                    {
                        printf("%20s",caipin[n].caiming);
                        flag=0;
                    }
                    else
                        printf(" %s",caipin[n].caiming);
                }
            printf("\n"); 
            
            printf("是否需要删除[1 or 2]:");
            scanf("%d",&sel);
            
            while(sel!=1 && sel!=2)
            {
                printf("输入错误,请重新再输入:");
                scanf("%d",&sel);
            } 
            if(sel==1)
            {
                can_desk[i].people=0;
                can_desk[i].sum=0;
                for(n=0;n<can_desk[i].sl;i++)
                    can_desk[i].grcd[n]=0;
                can_desk[i].sl=0;
                count1--;
            }
            cansave();
            canload();
                
        }
        else if(j==4)
        {
            system("cls");//清屏 
            printf("当前还有%d桌:\n",count1); 
            printf("%5s","餐桌号码");
            printf("%15s","餐桌人数");
            printf("%13s","点菜道数");
            printf("%11s","需付金额");
            printf("%20s","所点菜品"); 
            printf("\n"); 
            printf("-------------------------------------------------------------------------\n");
            
            for(i=0;i<200;i++)
            {
                if(can_desk[i].sum!=0)
                {
                    printf("%4d号",i);
                    printf("%11d人",can_desk[i].people);
                    printf("%11d道",can_desk[i].sl);
                    printf("%11dRmb",can_desk[i].sum);
                    //找菜名 
                    flag=1;
                    for(x=0;x<can_desk[i].sl;x++)
                    for(n=0;n<count;n++)
                        if(can_desk[i].grcd[x]==caipin[n].bianma)
                        {
                            if(flag==1)
                            {
                                printf("%20s",caipin[n].caiming);
                                flag=0;
                            }
                            else
                                printf(" %s",caipin[n].caiming);
                        }
                    printf("\n"); 
                }
            }
        }
        else if(j==5)
        {
            int i,z=0;
            for(i=1;i<count;i++)
            {
                if(count2[i]>count2[i-1])//通过比较来找寻热销 
                z=i;
            }
            printf("热销菜品是:%s\n",caipin[z].caiming);
        }
        system("pause");
    }
    else
    {
        printf("啊哦~密码输入错误无法进入\n");
        system("pause");
    } 
}
void menu()
{
    int sel;
    system("cls"); //清屏 
    printf("----------------------------------------\n");
    printf("|             欢迎来到龙凤阁            |\n"); 
    printf("----------------------------------------\n");
    printf("请问你是餐厅管理者还是点餐者【1 or 2】:\n");
    scanf("%d",&sel); 
    //选择是管理员还是顾客
    //判断是否输入错误 
    while(sel!=1 && sel!=2)
    {
        printf("输入错误,请重新再输入:");
        scanf("%d",&sel);
    }
    
    switch(sel)
    {
        case 1:input();menu();break;
        case 2:menu2();menu();break;
    }
}
int main()
{
    canload();
    load();//打开就读取文档 
    menu();
    return 0;
}

作为一个课程需要答辩的餐厅点菜系统争对这个代码有什么需要 改进的或者能否专门针对这个代码来提几个答辩可能会遇到的提问

  • 写回答

1条回答 默认 最新

  • threenewbee 2023-04-12 11:51
    关注

    只要这个代码是你自己写的,按理说应该怎么问都难不倒你。如果不是你写的,最好在答辩前全部看懂,否则很容易穿帮。即,你应该准备的是代码,而不是问题。代码是有限的,问题是无穷的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月20日
  • 已采纳回答 4月12日
  • 创建了问题 4月12日

悬赏问题

  • ¥15 python使用pulp线性优化时报错
  • ¥15 开源或低价数据中台哪个最好
  • ¥15 arduino编程出现字符串疑似覆盖现象
  • ¥15 我的b站在没有碰到屏幕的情况下偶尔会自动跳出进度条,就像在屏幕上点了一下一样,但我并没有点。而且视频进度并没有变。这可能是什么原因造成的?
  • ¥30 STK matlab python仿真
  • ¥15 关于IMageEnView 图标定位问题
  • ¥20 求解答(matlab)
  • ¥30 ffmpeg库使用过程中遇到的问题
  • ¥15 pyqt5 中python如何通过Qtwebchannel主动发消息给web前端
  • ¥15 关于HTML中title获取xml内容的问题