#include <iostream>
using namespace std;
class Goods
{
public:
Goods() //货物的无参构造
{
weight = 0;
next = NULL;
cout << "创建了一个重量为" << weight << "的货物" << endl;
}
Goods(int w) //传进一个重量为w的货物,且仓库的总重量加上w
{
weight = w;
next = NULL; //每创建一个货物,其指针域要为空,否则会出现乱码
a_weight += w;
cout << "创建了一个重量为" << weight << "的货物" << endl;
}
~Goods() //仓库减少这个重量的货物
{
cout << "删除了一箱重量为" << weight << "的货物" << endl;
a_weight -= weight;
}
Goods *next; //定义每个类的指针域,用于链表的连接
static int sum() //定义静态统计函数,用于返回私有的静态成员变量
{
return a_weight;
}
private:
int weight;
static int a_weight; //统计仓库的总重量
};
int Goods::a_weight = 0; //静态成员的初始化
void buy(Goods *&head, int w) //定义进货函数,形参为引用,或者二级指针,目的是为了能够通过函数修改主函数名为head的链表
{
Goods *new_goods = new Goods(w);
if (head == NULL)
{
head = new_goods;
}
else
{
new_goods->next = head; //在表头插入,此步骤意为新传入的w的next指向头指针head所指向的地址,即原链表的第一个元素
head = new_goods; //修改表头指针使表头指针指向新添加的w的地址空间
}
}
void sale(Goods *&head) //定义出货函数,形参为引用,目的是为了能够通过函数修改主函数名为head的链表
{
if (head == NULL)
{
cout << "仓库已经没有货物了" << endl;
}
else {
Goods *temp = head; //建立一个临时temp,使其指向Head指向的第一个元素的地址
head = head->next; //修改头指针,使其指向第二个元素
delete temp;
cout << "saled..." << endl;
}
}
int main()
{
int choice;
int w; //定义需要进货的货物的重量的变量w
Goods *head = NULL;
do {
cout << "------------------------" << endl;
cout << " 1.进货 " << endl;
cout << " 2.出货 " << endl;
cout << " 0.退出 " << endl;
cout << "------------------------" << endl;
cin >> choice;
switch (choice)
{
case 1:
//进货
cout << "请输入需要进货的货物的重量" << endl;
cin >> w;
buy(head, w); //传进链表和重量w
break;
case 2:
//出货
sale(head); //传进链表
break;
case 0:
return 0;
default:
break;
}
cout << "当前仓库的总重量为" << Goods::sum() << endl;
} while (1);
system("pause");
return 0;
}
C++
点赞
收藏