读书人

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

发布时间: 2012-04-03 12:38:19 作者: rapoo

求高手帮看看出什么问题了
我们刚学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函数里面定义了过多的变量。这些变量将栈空间全部占用了。导致栈溢出。所以希望你重新考虑一下,该怎么减少在栈空间里面定义的变量。如果不知道怎么减少,就用堆空间替代一下。

读书人网 >C++

热点推荐