首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求高手帮看看出什么有关问题了

2012-04-03 
求高手帮看看出什么问题了我们刚学C++,老师要求我们写一个餐厅消费管理的程序,程序如下,可是第三第四块功

求高手帮看看出什么问题了
我们刚学C++,老师要求我们写一个餐厅消费管理的程序,程序如下,可是第三第四块功能运行不了的,为什么?谢谢

#include<fstream.h>
#include<stdio.h>
#include<string.h>
#include<iostream.h>

struct Menu
{
  int Sno;//编号
  char itemname[100];//名称
int count;//数量
  double price;//单价
};
struct custom
  {
   
int food_num[100];//菜名编号
  char itemname1[100][100];//菜名
int food_amount[100];//数量
  };

int wirtefile(char filename[100])
{  
Menu item;
ofstream file1(filename,ios::out|ios::binary);
if (!file1)
{
cout<<"cannot open output file.\n";
return 0;
}
while (1)
{
  printf("编号:");
scanf("%d",&item.Sno);
if (item.Sno==-1) break;
printf("名称:");
scanf("%s",&item.itemname);
  printf("单价:");
  cin>>item.price;
item.count=1;
printf("--------------");
file1.write((char *)&item,sizeof(Menu));
}
file1.close();
return 1;  
}
int readfile(char filename[100], Menu item[])
{
 
  ifstream file1(filename,ios::in|ios::binary);
  if (!file1)
{
cout<<"cannot open output file.\n";
return 0;
}
int i=0;
while (!file1.eof())
{
file1.read((char *)&item[i],sizeof(Menu));
i++;
}

file1.close();
return i-1;
}

  


void printmenu(char filename[100])
{
Menu menulist[100];
  int count=readfile(filename,menulist);
  printf("\n欢乐餐厅今日菜单\n");
  printf("********************\n");
printf("%5s\t%10s\t%8s\n","编号","菜 式","单价");
for (int i=0;i<count;i++)
{
  printf("%5d\t%10s\t%8.2f\n",menulist[i].Sno,menulist[i].itemname,menulist[i].price);
}
  printf("********************\n");

}



void mainmenu()
{
  printf("\n欢迎使用欢乐餐厅消费管理程序\n");
  printf("--------------------------------\n");
  printf("1、消费项目管理\n");
  printf("2、今日菜单\n");
  printf("3、顾客消费信息登记\n");
  printf("4、打印消费清单\n");
  printf("5、退出\n");
  printf("--------------------------------\n");
  printf("请选择:");
}


customrecord(char filename1[100],char filename2[100])
{ int num,t,j=0;float sum[100];float sum1=0.00;
custom desk[100];
Menu menulist[100];
int count=readfile(filename2,menulist);
ofstream file1(filename1,ios::out|ios::binary);
if (!file1)
{
cout<<"cannot open output file.\n";
return 0;
}
  printf("餐台号:");
scanf("%d",&num);
  sum[num]=0.00;
while(1)
{

printf("菜名编号:");
scanf("%d",&desk[num].food_num[j]);
if(desk[num].food_num[j]==-1)break;
  for(int i=0;i<count;i++)
{
if(desk[num].food_num[j]==menulist[i].Sno)
{t=i;break;}
}

printf("数量:");
scanf("%d",&desk[num].food_amount[j]);
strcpy(desk[num].itemname1[j],menulist[t].itemname);
  printf("--------------");
sum1=menulist[t].price*desk[num].food_amount[j];
sum[num]=sum[num]+sum1;
   

file1.write((char *)&desk[num],sizeof(custom));
file1.write((char *)&sum[num],sizeof(sum));
j++;}
file1.close();


return 1;
}

void printrecord(char filename[100])
{ int j=0;float sum[100];
ifstream file1(filename,ios::in|ios::binary);
  if(!file1)
{
cout<<"cannot open output file.\n";
}
   
   
int num;
custom list[100];
   
printf("请输入餐台号:\n");
  scanf("%d",&num);
file1.read((char *)&list[num],sizeof(custom));
printf("********%d号餐台消费清单*********\n",num);

printf("%5s\t%10s\t%10s\n","编号","菜 式","数量");
for(j=0;;j++)
{printf("%5d\t%10s\t%10d\n",list[num].food_num[j],list[num].itemname1[j],list[num].food_amount[j]);}
printf("总计金额:%.2f",sum[num]);
}



void main()
{
int choice;
mainmenu();
while (1)
{
scanf("%d",&choice);
switch (choice)
{
case 1:wirtefile("HappyMenu.dat");break;
case 2:printmenu("HappyMenu.dat");break;
case 3:customrecord("Customrecord.dat","HappyMenu.dat");break;
case 4:printrecord("Customrecord.dat");break;
case 5:break;
default:printf("请输入数字1-5\n");  
}

  if (choice==5) break;
mainmenu();
}
}

[解决办法]
customrecord缺少返回值类型,好像还有别的错误的地方
[解决办法]
看了你的代码后,我调试了下。惊人的发现,你的customrecord函数里面定义了过多的变量。这些变量将栈空间全部占用了。导致栈溢出。所以希望你重新考虑一下,该怎么减少在栈空间里面定义的变量。如果不知道怎么减少,就用堆空间替代一下。

热点排行