请问该c++代码怎样改成c代码?
骨头教主 2015-07-14 10:34:03 #include <iostream>
#include <fstream>
#include <sstream>
#include <string.h>
using namespace std;
/*
菜单食物的类
*/
class Food
{
private:
string name;//菜名
string kind;//分类
int price;//价格
public:
friend class Dish;
Food(){}
Food(string n,string k,int p )
{
name = n;
price = p;
kind=k;
}
void setName(string n)
{
name = n;
}
string getName()
{
return name;
}
void setKind(string k)
{
kind = k;
}
string getKind()
{
return kind;
}
int getPrice()
{
return price;
}
void setPrice(int p)
{
price = p;
}
string numberToString (int x )
{
string result;
stringstream convert;
convert << x;
result = convert.str();
return result;
}
};
Food foods[100];
int FoodsOfnumbr =0;
/*
在磁盘文件对菜单的读写
*/
class Dish
{
public :
friend class Food;
//字符串转为数字
int stringToInt(string s)
{
int thevalue;
istringstream ss(s);
ss >> thevalue;
return thevalue;
}
//字符串分割函数
void split(string s, string fields[] )
{
istringstream ss( s );
int f = 0;
while (ss)
{
string s;
if (!getline( ss, s, '\t' )) break;
fields[f] = s;
f++;
}
}
/*
读取磁盘文件里面的菜单信息
*/
bool readFood()
{
ifstream myDish;
myDish.open("d://food.txt");//打开D盘根目录的food.txt
string line;
string members[3];
int p = 0;;
int highestId = 0;
if (myDish.is_open())
{
while ( ! myDish.eof() )
{
getline (myDish,line);
if(line.length() > 0)
{ // avoid empty lines
split(line, members);
foods[p] = Food(members[0],members[2],stringToInt(members[1]));
p++;
}
}
FoodsOfnumbr = p;
myDish.close();
return true;
}
else
{
ofstream out;
out.open("d://food.txt");//若是还没有任何菜单信息则创建一个food.txt文件
return false;
}
}
/*
吧菜单信息写入磁盘文件
*/
bool writeFood()
{
ofstream myDish;
myDish.open("d://food.txt");//打开D盘根目录的food.txt
if (myDish.is_open())
{
for (int i = 0; i < FoodsOfnumbr; i++){
myDish << foods[i].getName() + "\t" + foods[i].numberToString(foods[i].getPrice()) + "\t" +foods[i].getKind() <<"\n";
}
myDish.close();
return true;
} else return false;
}
/*
输出菜单
*/
void printFoods()
{
if(FoodsOfnumbr==0){cout<<"暂时还没有任何菜式"<<endl;return ;
}
cout << "菜单如下:" << endl;
cout << "菜单号\t菜名\t价格\t分类\n" ;
for (int i = 0; i < FoodsOfnumbr; i++)
{
cout << i << "\t" << foods[i].getName() + "\t" + foods[i].numberToString(foods[i].getPrice()) + "\t" + foods[i].getKind()<< endl;
}
}
/*
修改菜式
*/
void changeFood(int p)
{
if(p<0||p>=FoodsOfnumbr)
{
cout << "没有菜单号为" <<p<<"的菜\n";return;
}
int action;
cout << "当前菜式的信息:\n" ;
cout << "编号\t菜名\t价格\t分类\n" ;
cout<< p << "\t" << foods[p].getName() + "\t" + foods[p].numberToString(foods[p].getPrice()) + "\t" +foods[p].getKind()<< endl;
cout<< "请选择:"<<endl;
cout<<"1.修改菜名"<<endl;
cout<<"2.修改价格"<<endl;
cout<<"3.修改分类"<<endl;
cin >> action ;
string name;
string kind;
int price;
switch(action)
{
case 1:cout << "请输入新菜名 :" ;
cin >>name ;
foods[p].setName(name);break;
case 2:cout << "请输入它的价格 :" ;
cin >>price ;
foods[p].setPrice(price);break;
case 3:cout << "请输入它的分类 :" ;
cin >>kind ;
foods[p].setKind(kind);break;
default:cout<<"输入错误\n"<<endl;
}
}
/*
删除菜式
*/
void deleteFood(int p)
{
if(p<0||p>=FoodsOfnumbr)
{
cout << "没有菜单号为" <<p<<"的菜\n";return;
}
for (int i = p; i < FoodsOfnumbr; i++)
{
foods[i] = foods[i+1];
}
FoodsOfnumbr--;
cout << "删除成功!\n";
}
/*
增加菜式
*/
void addFood()
{
string n = "";
string k = "";
int p;
bool word;
cout << "输入新的菜式的信息: " << endl;
do
{
cout << "菜名 : ";
cin >> n;
word = false ;
for(int i=0;i<FoodsOfnumbr;i++)
if(n == foods[i].getName()) {word = true;cout << "已经有" <<n<<"这个菜了!请重新输入!\n";break;}
}
while(word);
cout << "价格 :";
cin >> p;
cout << "分类 :";
cin >> k;
foods[FoodsOfnumbr] = Food(n,k,p);
FoodsOfnumbr++;
}
};
class Mangement
{
public:
void showDish()
{
int action = 0;
int pos = 0;
Dish d;
do
{
d.printFoods();
cout<<"\n"<<endl;
cout<< "1.修改菜单"<<endl;
cout<<"2.删除菜式"<<endl;
cout<<"3.添加菜式"<<endl;
cout << "4.退出"<<endl;
cin >> action;
switch (action)
{
case 1:
cout <<"输入要修改的菜 :";
cin >> pos ;
d.changeFood(pos);
break;
case 2:
cout <<"输入要删除的菜 :";
cin >> pos ;
d.deleteFood(pos);
break;
case 3:
d.addFood();
break;
case 4: return;
default:
cout << "非法操作!";
}
}
while (1);
}
};
class client
{
private : int money;
int rpMoney;
int b[100];
int number;
public :
client()
{
number=0;
money=0;
}
void add()
{
int p ;
cout << "请出入你想点的菜单号:";
cin >> p ;
for(int i=0;i<number;i++)
if(p==b[i])
{
cout << "您已经点过这个菜了!\n" ;
return ;
}
b[number++] = p ;
money+=foods[p].getPrice();
}
void deletefood()
{
int p ;
int i;
if(money == 0) {cout<<"您还没有点菜\n";
return;
}
for(i=0;i<number;i++)
{
cout << b[i] <<"\t"<< foods[b[i]].getName() + "\t" + foods[b[i]].numberToString(foods[b[i]].getPrice())<<endl;
}
cout << "共" << money << "元\n" ;
cout << "请出入你想撤销的菜单号:";
cin >> p ;
for( i=0;i<=number;i++)
{
if(b[i] == p) { b[i] = b[number--] ; money-=foods[p].getPrice();
}
}
if(i>number) cout<<"没有点这个菜\n";
}
void show()
{
int i;
if(money==0) return ;
cout << "您已点:" <<endl;
for(i=0;i<number;i++)
{
cout << foods[b[i]].getName() + "\t" + foods[b[i]].numberToString(foods[b[i]].getPrice())<<"元"<<endl;
}
cout << "共" << money << "元\n" ;
}
void showclient()
{
int pos;
Dish d;
d.printFoods();
cout<<"\n"<<endl;
do
{
cout<<"请选择:"<<endl;
cout<<"1.点菜"<<endl;
cout<<"2.取消"<<endl;
cout<<"3.结账"<<endl;
cout<<"4.退出"<<endl;
cin >> pos ;
switch(pos)
{
case 1: add();break;
case 2: deletefood();break;
case 3: cout << "你共消费了" << money << "元钱。\n欢迎您下次光临!\n"; return ;
case 4 : return ;
default:
cout << "非法操作!\n";
}
show();
}
while(1);
}
};
int main()
{
Dish dish;
client c;
Mangement mangement;
int i;
dish.readFood();
while(1)
{
cout << " ***************************欢迎使用点餐管理系统!****************************" <<endl;
cout << "------------------------------1.用户点餐-------------------------------------"<<endl;
cout << "------------------------------2.菜单管理-------------------------------------"<<endl;
cout << "------------------------------3.退出-----------------------------------------"<<endl;
cin >> i;
switch(i)
{
case 1:c.showclient();break;
case 2:mangement.showDish();break;
case 3:dish.writeFood();system("pause");return 0;
default: cout<<"输入错误,请重新选择!"<<endl;break;
}
}
return 0;
}