一、管理员进行菜单更改,点餐者对某种食物的热爱度更新后要进行热度的排序(我这里使用的是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;
}
五、不足
这个项目我用的是比较简单的结构体数组,辅助是文件,当然对于增删这种操作一般用链表是最简单便捷的,但是查找和修改用数组更简单。
存储账单的文件进行清除是还没有实现的,这个容易导致输出当天金额的时候会加上前一天的金额,这个账单文件目前只能手动删除。