货品包括货号和重量属性,实现简单的入库出库统计功能,实例用于加深指针和链表的认识以及类的使用。
#include <iostream> #include <string> using namespace std; class StockWeight { public: StockWeight(int c,int w = 0):weight(w),code(c) { totalWeight += w;//入库总重量增加 cout << c << "stock input! total " << totalWeight << endl; } ~StockWeight() { totalWeight -= weight;//出库析构总重量减少 cout << code << "stock output! left " << totalWeight << endl; } int getCode() { return code;//返回货号 } static int getTotalWeight() { return totalWeight;//返回总重量 } StockWeight *next; private: int weight;//重量 int code;//货号 static int totalWeight;//静态成员 总共的重量 }; int StockWeight::totalWeight = 0; void inputWeight(StockWeight *&head,int code,int w) { StockWeight *g,*p = new StockWeight(code, w);//新对象结点 p->next = NULL; if (head == NULL){head = p;return;}//链表没有内容 //循环将新结点插入到最后 g = head; while (g->next != NULL) { g = g->next;//指针挪动 } g->next = p; } void outputWeight(StockWeight *&head, int code) { StockWeight *g,*p; if (head == NULL){cout << " there is no goods!" << endl; return;}//链表没有内容 g = head;//跟踪指针 while (g->getCode() != code && g->next != NULL)//如果当前指针的code不等于特定的code 或者链表已经没有下一结点便停止循环 { g = g->next;//指针挪动 } if (g->getCode() != code) { cout << " there is no goods code " << code << endl; return; }//没找到货品code //找到了code //第一个结点特殊处理 if (g == head){ head = head->next;//头指针改变 delete g;//出库析构 return; } //遍历找出它的上结点 p = head; while (p->next != g) { p = p->next;//指针挪动 break; } p->next = g->next;//重指向 delete g;//出库析构 } void main() { StockWeight *head = NULL;//链表头指针 int leng,code,weight;//leng是指令。。code是货号。。weight是重量 do { cin >> leng;//输入指令 switch (leng) { case 1://入货 { cout << "inputWeight:" << endl;//入库 cout << "code:"; cin >> code;//输入货号 cout << "weight:"; cin >> weight;//输入重量 inputWeight(head, code, weight);//调用方法入库 break; } case 2://出货 { cout << "outputWeight:" << endl;//出库 cout << "code:"; cin >> code;//输入货号 outputWeight(head, code);//调用方法出库 break; } case 3://输出总重量 { cout << "total Weight:" << StockWeight::getTotalWeight() << endl; break; } default: break; } } while (leng);//无限循环知道输入0 getchar(); getchar(); }