自动点餐系统(四)

一、管理员进行菜单更改,点餐者对某种食物的热爱度更新后要进行热度的排序(我这里使用的是c语言的快排函数)

int comp(const void *a,const void *b)
{
    dish *aa=(dish *)a;
    dish *bb=(dish *)b;
   if(aa->hot==bb->hot)
   {
       return (aa->bianma<bb->bianma); //如果热度一样,就进行序号的排序
   }
   else
    return (aa->hot<bb->hot);
}
//qsort(caipin,count,sizeof(caipin[0]),comp);

二、管理者更改菜单后进行保存

void save(int count)
{
    //读取
    FILE *fp;
    fp=fopen("foods.txt","w+");
    if(fp==NULL)
    {
        printf("文件打开失败!\n");
        return ;
    }
    for(int i=0; i<count; i++)
        fprintf(fp,"%d\t\t%s\t\t%f\t\t%d\n",caipin[i].bianma,caipin[i].name,caipin[i].price,caipin[i].hot);
    //fwrite(caipin,sizeof(struct food),200,fp);
    // fprintf(fp, "\n%d", count);
    fclose(fp);//先保存
    printf("文件保存成功!!!\n");
}

三、对于菜单的读取并输出

int  reads() //读取
{
    system("cls");
    int i=0;
    FILE *fp;
    fp=fopen("foods.txt","r");

    if(fp==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    char row[100];
    while(fgets(row,80,fp)!=NULL&&!feof(fp))
    {
        sscanf(row,"%d\t\t%s\t\t%f\t\t%d",&caipin[i].bianma,caipin[i].name,&caipin[i].price,&caipin[i].hot);
        i++;
    }
    //fread(caipin,sizeof(struct food),200,fp);
    // fscanf(fp, "%d",&count);
    int k=i;
    fclose(fp);
    return k;
}

//输出
void output()
{

    int i,count;
    printf("%-10s","编码");
    printf("%-10s","菜名");
    printf("%10s","价格");
    printf("%-10s","热销量");
    printf("\n");
    count=reads();
    for(int i=0; i<count; i++)
        printf("%-10d%-10s%10.2f%10d\n",caipin[i].bianma,caipin[i].name,caipin[i].price,caipin[i].hot);
}

四、对于点餐者信息的保存以及读取

void pay(int users) //按照桌号保存
{
    FILE *fp;
     fp=fopen("bill.txt","a+");
    if(fp==NULL)
    {
        printf("文件打开失败!\n");
        return ;
    }
    fprintf(fp,"%d\t\t%d\t\t%f\t\t%d\n",custmer[users].seat,custmer[users].sl,custmer[users].sum,custmer[users].f);
    //fwrite(caipin,sizeof(struct food),200,fp);
    // fprintf(fp, "\n%d", count);
    fclose(fp);//先保存
    printf("文件保存成功!!!\n");
}

int payout()  //读取
{
     system("cls");
    int i=0;
    FILE *fp;
    fp=fopen("bill.txt","r");

    if(fp==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    char row[100];
    while(fgets(row,80,fp)!=NULL&&!feof(fp))
    {
        sscanf(row,"%d\t\t%d\t\t%f\t\t%d",&custmer[i].seat,&custmer[i].sl,&custmer[i].sum,&custmer[i].f);
        i++;
    }
    //fread(caipin,sizeof(struct food),200,fp);
    // fscanf(fp, "%d",&count);
    int k=i;
    fclose(fp);
    return k;
}

五、不足

这个项目我用的是比较简单的结构体数组,辅助是文件,当然对于增删这种操作一般用链表是最简单便捷的,但是查找和修改用数组更简单。

存储账单的文件进行清除是还没有实现的,这个容易导致输出当天金额的时候会加上前一天的金额,这个账单文件目前只能手动删除。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值