白方明
18级
2014-05-29 回答
把要求说一下 点菜系统可不轻松,得花时间才能搞定。另外用c++写可否?
追问:
只能使用C语言, 要有 顾客界面和管理员界面,点菜加菜,结账,管理员修改菜单,
追答:
大哥您这功能相当于开发这套系统了 太麻烦了吧?
追问:
我们得作业~我都想哭了~
追答:
一会的,我现在写的差不多了
追问:
谢谢大哥!
追答:
#include
#include
#define MENU_NUM_MAX 100 // 假设有100种菜式
#define LEN sizeof(struct MenuInfo)
struct MenuInfo
{
int ID;
char MenuName[20];
float price;
}Menu[MENU_NUM_MAX];
/* 基础数据维护 */
/*菜单录入*/
void AddMenu()
{
FILE *fp;
int menu_num;
printf("\t\t\t 你要添加几种菜?:");
scanf("%d",&menu_num);
for(int i=0;i
{
printf("\n\t\t请输入ID:");
scanf("%d",&Menu[i].ID);
printf("\n\t\t请输入菜名:");
scanf("%s",Menu[i].MenuName);
printf("\n\t\t请输入[%s]菜的价格:",Menu[i].MenuName);
Menu[i].price=0.0f;
scanf("%f",&Menu[i].price);
fflush(stdin);
}
if((fp=fopen("MenuInfo.dat","ab"))==NULL)
{
printf("Can't open file\n");
exit(1);
}
for(int j=0;j
{
if(fwrite(&Menu[j],LEN,1,fp)!=1)
printf("Error writing file.\n");
}
fclose(fp);
}
/*显示菜单信息*/
void DisplayMenuInfo()
{
FILE *fp;
printf("\n\t\tID 菜名\t\t价格\n");
if((fp=fopen("MenuInfo.dat","rb"))==NULL)
{
printf("Can't open file\n");
exit(1);
}
int i=0;
do
{
fseek(fp,i*LEN,SEEK_SET);
if(fread(&Menu[i],LEN,1,fp))
{
printf("\t\t%d %5s\t\t%5.1f元\n",Menu[i].ID,Menu[i].MenuName,Menu[i].price);
i++;
}
}while(!feof(fp));
fclose(fp);
}
/*删除菜单*/
void DeleteToMenu()
{
FILE *fp;
int MenuID;
int todelete=-1;
int i=0;
printf("请输入要删除的菜名的ID:");
scanf("%d",&MenuID);
if((fp=fopen("MenuInfo.dat","rb"))==NULL)
{
printf("Can't open file\n");
exit(1);
}
do
{
fseek(fp,i*LEN,SEEK_SET);
if(fread(&Menu[i],LEN,1,fp))
{
if (Menu[i].ID==MenuID) todelete=i;
i++;
}
}while(!feof(fp));
fclose(fp);
if (todelete==-1)
{
printf("A menu with that ID doesn't exist\n");
}
else
{
if((fp=fopen("MenuInfo.dat","wb"))==NULL)
{
printf("Can't open file\n");
exit(1);
}
for(int j=0;j
{
if (j==todelete) continue;
if(fwrite(&Menu[j],LEN,1,fp)!=1)
printf("Error writing file.\n");
}
fclose(fp);
}
}
/*点菜*/
void FindMenu()
{
FILE *fp;
int MenuID;
bool find_mark=false;
printf("\n\t\t请输入你要查找的菜名ID:");
scanf("%d",&MenuID);
printf("\n\t\tID 菜名\t\t价格\n");
if((fp=fopen("MenuInfo.dat","rb"))==NULL)
{
printf("Can't open file\n");
exit(1);
}
int i=0;
do
{
fseek(fp,i*LEN,SEEK_SET);
fread(&Menu[i],LEN,1,fp);
if(Menu[i].ID==MenuID)
{
printf("\t\t%d %5s\t\t%5.1f元\n",Menu[i].ID,Menu[i].MenuName,Menu[i].price);
find_mark=true;
break;
}
i++;
}while(!feof(fp));
if(!find_mark) printf("\n\t 尊敬的客户:我们餐厅没有你要点的菜喔,你可以试试我们的招牌菜^-^.\n");
fclose(fp);
}
/* 基础数据维护完毕 */
void adminORpeple()
{
printf("**************************************************************************\n");
printf("********** 欢迎进入点菜系统 您要点菜还是管理? **********\n");
printf("**************************************************************************\n\n");
printf("请输入您的操作:点菜(y)管理(m)\n");
char lu;
scanf("%c",&lu);
if (lu=='y'||lu=='Y')
{
printf("\n****************************************************************************\n");
printf("*********** 欢迎进入用户点菜系统 ***********\n");
printf("**************************************************************************\n\n");
DisplayMenuInfo();
FindMenu();
}else if(lu=='m'||lu=='M')
{
printf("\n*************************************************************************\n");
printf("********** 欢迎进入管理菜单系统 **********\n");
printf("*************************************************************************\n\n");
LOOP:
printf("\t\t\t功能选择列表\n");
printf("\t1.菜单添加\n\t2.删除菜单\n\t3.显示菜单信息\n\n请选择菜单功能:");
char shu;
scanf("%s",&shu);
printf("*************************************************************************\n\n");
if (shu=='1')
{
AddMenu();
DisplayMenuInfo();
}
else if(shu=='2')
{
DisplayMenuInfo();
DeleteToMenu();
}
else if(shu=='3')DisplayMenuInfo();
else printf("系统只有三个功能!是否继续(y/n)\n");
char xue;
scanf("%s",&xue);
if(xue=='y'||xue=='Y')goto LOOP;
}
}
void main(void)
{
adminORpeple();
}
补充:
代码可能有点小问题,你自己调试一下,如果不会,我明天再给你调试。