某商店经销一种货物。货物购进和卖出时以箱为单位,各箱的重量不一样,因此,商店需要记录目前库存的总重量。现在用C++模拟商店货物购进和卖出的情况。
#include<iostream>
using namespace std;
class Goods
{
private:
int weight;
static int total_weight;
public:
Goods *pNext;
Goods(int weight)
{
this->weight = weight;
total_weight += weight;
}
//使用delete释放内存时会调用析构函数
~Goods()
{
total_weight -= weight;
}
int GetWeight()
{
return weight;
}
static int GetTotalWeight()
{
return total_weight;
}
};
int Goods::total_weight = 0;
void menu()
{
cout << "============================" << endl;
cout << " 商店货物系统" << endl;
cout << " 输入1购进" << endl;
cout << " 输入2卖出" << endl;
cout << " 输入0退出" << endl;
cout << "============================" << endl;
}
//某商店经销一种货物。货物购进和卖出时以箱为单位,各箱的重量不一样,因此,
//商店需要记录目前库存的总重量。现在用C++模拟商店货物购进和卖出的情况。
void Purchase(Goods * &Head, Goods * &Tail,int weight)
{
Goods *pNew = new Goods(weight);//这个时候会调用pNew这个指针变量指向的对象的构造函数啊
pNew->pNext = NULL;
if (Head == NULL && Tail == NULL)
{
Head = Tail = pNew;
}
else
{
Tail->pNext = pNew;
Tail = pNew;
}
}
void Sale(Goods * &Head)
{
if (Head == NULL)
{
cout << "没有货物!" << endl;
return;
}
Goods *Temp = Head->pNext;
delete Head;
Head = Temp;
}
int main()
{
Goods *Head = NULL;
Goods *Tail = NULL;
int choice = -1;
int weight = 0;
do {
menu();
cin >> choice;
//scanf("%d", &choice); ? ? ?
switch (choice)
{
case 1:
{
cout << "请输入重量:";
cin >> weight;
Purchase(Head, Tail, weight);
break;
}
case 2:
{
Sale(Head);
break;
}
case 0:exit(0); break;
default:cout << "输入错误,请重新输入!" << endl; break;
}
cout << "总重量为:" << Goods::GetTotalWeight() << endl << endl;
} while (1);
return 0;
}