public:
CItem(){strcpy(Item_name,\//缺省构造函数
CItem(char*name){strcpy(Item_name,name);Item_code=0;}//用品种名称构造
CItem(intcode){Item_code=code;strcpy(Item_name,\//用品种代码构造
intSetItem(intn=0);//置品种数据,正确返回1,当n为1时,是新进货物,输出至出清单文件
char*GetItemName(){returnItem_name;}//返回品种名
intGetItemCode(){returnItem_code;}//返回品种代码
intCompare(CItem&);//比较品种名称,供查找用,比较结果为1,0
intCompareCode(CItem&);//比较品种代码,比较结果为1,0
voidShow();//显示品种数据
voidOutModify();//出货,修改结点中的数据部分
voidInModify();//已有商品,再次进货,修改结点中的数据部分
};
classCNode//结点类
{
private:
CNode*pNext;//指向链表下一结点的指针
CItem*pData;//用于指向数据类的指针
public:
CNode(){pData=0;pNext=0;}//结点构造函数
CNode(CNode&node)//用于拷贝的构造函数
{
pData=node.pData;
pNext=node.pNext;
}
voidInputData(CItem*pSal){pData=pSal;}//输入数据
voidShowNode(){pData->Show();}//输出结点中的数据
CItem*GetData(){returnpData;}//返回下一结点的指针
friendclassCList;//定义链表类为友元类
};
classCList//定义链表类
{
protected:
CNode*pHead;//链表头结点指针
public:
CList(){pHead=0;}
~CList(){DeleteList();}
voidAddNode(CNode*pnode);//首部添加结点
CNode*DeleteNode(CNode*);//删除一个指定的结点,返回该结点的指针
CNode*LookUp(CItem&);/*查找一个指定的数据,返回该数据所在结点在链表中的指针,若未找
到返回0*/
voidShowList();//打印整个链表
voidDeleteList();//删除整个链表
CNode*GetListHead(){returnpHead;}//返回链表首结点
CNode*GetListNextNode(CNode*);//返回链表指定结点的下一个结点
voidInsert(CNode*);//按代码的顺序插入一个结点
};
classcustomer//仿品牌类增加客户类
{
private:
charcustomer_name[10];//客户姓名
intcustomer_code;//客户代码
charcustomer_tel[15];//客户电话
charcustomer_Item_name[10];//客户选择的品种名称
charcustomer_brnd_name[20];//客户选择的品牌名称
voidgetdata();
voidshowdata();
public:
voidadd();//新增
voidremove();//移除
voidsearch();//搜索
voidshowab();//显示
friendclassCItem;//定义友元类
friendclassBrand;
};
intCItem:
:
Compare(CItem&pitem)//比较品种名称,供查找用,比较结果为1,0
{
intn;
n=strcmp(Item_name,pitem.Item_name);//两个字符串相等,n=0
if(n!
=0)return0;
elsereturn1;
}
intCItem:
:
CompareCode(CItem&pitem)//比较品种代码,比较结果为1,0
{
return(Item_code==pitem.Item_code);
}
intCItem:
:
SetItem(intn)//置品种数据,正确返回1,当n为1时,是新进货物,输出至出清单文件
{
cout<<\
输入商品名称:
;
Flush(cin);//把输入流固化,不会对程序造成太大的影响
cin.getline(Item_name,20);
cout<<\
输入商品代码:
;
cin>>Item_code;
cout<<\
输入商品颜色:
;
Flush(cin);
cin.getline(colour,20);
cout<<\
输入品牌数:
<<(不超过?
?
塁啎?
尼个);
cin>>nBrnd;
//循环实现品牌数据的输入,count为商品总数
for(inti=0,count=0;i{
cout<<\
输入品牌?
椼?
?
的数据\n;
cout<<\
输入品牌名称:
;
Flush(cin);
cin.getline(brnd[i].brnd_name,20);
cout<<\
输入品牌代码:
;
cin>>brnd[i].Brand_code;
cout<<\
输入数量:
;
cin>>brnd[i].quantity;
cout<<\
输入价格:
;
cin>>brnd[i].brnd_price;
voidcustomer:
:
getdata();
count+=brnd[i].quantity;
}
quantity=count;
if(n==1)
{
景瑳敲浡映汩?
进货清单.txt,ios:
:
out|ios:
:
ate);
if(!
file)
{
潣瑵?
错误,不能打开文件.;
getch();
exit
(1);
}
timer=time(NULL);
file<楦敬?
品种?
尼屜屴?
代码?
尼屜屴?
颜色<<\
;
file<;
<<\
;
价格?
尼屜屴?
数量?
尼屜屴?
代码?
尼屜屴?
品牌楦敬?
for(inti=0;i{
file<<;
}
file<<\
;
file.close();
}
return1;
}
voidCItem:
:
Show()//显示品种数据
{
潣瑵?
品种?
尼屜屴?
代码?
尼屜屴?
颜色<<\
;
cout<;
潣瑵?
品牌?
尼屜屴?
代码?
尼屜屴?
数量?
尼屜屴?
价格<<\
;
for(inti=0;i{
cout<<;
}
cout<<\
\n<system(pause);//命令行上输出一行类似于“pressanykeytoexit”的字,等待用户按一个键,然后返回
cout<<\
;
}
voidCItem:
:
OutModify()//出货,修改结点中的数据部分
{
intchoice,count,chuhuo;
floatprice=0;//chuhuo为出货量,price为总价格
int*num;
num=newint[nBrnd];
if(quantity==0)
{
潣瑵?
数量为0.;
exit
(1);//随时结束程序
}
for(inti=0;i{
num[i]=brnd[i].quantity;
}
潣瑵?
品牌?
尼屜屴?
代码?
尼屜屴?
数量?
尼屜屴?
价格<<\
;
for(i=0;i{
cout<
<;
}
cout<<\
\n;
潣瑵?
输入数字选择出货商品或按0退出.\n;
cin>>choice;
while(choice>=1&&choice<=nBrnd)
{
潣瑵?
输入商品数量:
;
cin>>count;
while(count>brnd[choice-1].quantity)
{
潣瑵?
库存不足,重新输入:
;
cin>>count;
}
brnd[choice-1].quantity-=count;
潣瑵?
出货成功,按0退出或按数字继续出货.\n;
cin>>choice;
}
景瑳敲浡映汩?
出货清单.txt,ios:
:
out|ios:
:
ate);
if(!
file)
{
潣瑵?
错误,不能打开文件.;
getch();
exit
(1);
}
timer=time(NULL);
file<楦敬?
品种?
尼屜屴?
代码?
尼屜屴?
颜色<<\
;
file<\n;
楦敬?
品牌?
尼屜屴?
代码?
尼屜屴?
价格?
尼屜屴?
出货量<<\
;
for(i=0;i{
if(chuhuo=num[i]-brnd[i].quantity)
{
price=chuhuo*brnd[i].brnd_price;
file<<;
}
}
楦敬?
总价格为:
<\n;
delete[]num;
file.close();
}
voidCItem:
:
InModify()//已有商品,再次进货,修改结点中的数据部分
{
charname[20];
charchoice;
intcount,jinhuo=0;
intprenBrnd=nBrnd;//原先品牌数
intn=1;//用于判断是否继续进货
intflag=0;//用于判断是否新品牌
int*num;
num=newint[prenBrnd];
for(inti=0;i{
num[i]=brnd[i].quantity;
}
while(n)
{
cout<<\
\n输入品牌名称:
;
Flush(cin);
cin.getline(name,20);
for(inti=0;i{
if(strcmp(brnd[i].brnd_name,name)==0)
{
cout<<\
\n输入进货数量:
;
cin>>count;
brnd[i].quantity+=count;
quantity+=count;
flag=1;
break;
}
}
if(flag==0)
{
strcpy(brnd[nBrnd].brnd_name,name);
cout<<\
输入品牌代码:
;
cin>>brnd[nBrnd].Brand_code;
:
;
输入数量cout<<\
cin>>brnd[nBrnd].quantity;
cout<<\
输入价格:
;
cin>>brnd[nBrnd].brnd_price;
quantity+=brnd[nBrnd].quantity;
nBrnd++;
}
cout<<\
继续进货:
y/n;
cin>>choice;
if(choice=='y'||choice=='Y')
n=1;
elsen=0;
}
景瑳敲浡映汩?
进货清单.txt,ios:
:
out|ios:
:
ate);
if(!
file)
{
潣瑵?
错误,不能打开文件.;
getch();
exit
(1);
}
timer=time(NULL);
file<楦敬?
品种?
尼屜屴?
代码?
尼屜屴?
颜色<<\
;
file<\n;
楦敬?
品牌?
尼屜屴?
代码?
尼屜屴?
价格?
尼屜屴?
进货量<<\
;
for(i=0;i{
if(jinhuo=brnd[i].quantity-num[i])
{
file<<;
}
}
if(nBrnd>prenBrnd)
{
for(i=prenBrnd;i{
file<<;
}
}
file<<\
\n;
delete[]num;
file.close();
}
voidCList:
:
AddNode(CNode*pnode)//首部添加结点
{
if(pHead==0)
{
pHead=pnode;
pnode->pNext=0;
}
else
{
pnode->pNext=pHead;
pHead=pnode;
}
}
CNode*CList:
:
DeleteNode(CNode*pnode)//删除一个指定的结点,返回该结点的指针
{
if(pnode==pHead)//删除的结点是链表的首结点
{
pHead=pnode->pNext;
pnode->pNext=0;
}
else
{
CNode*p=pHead;
while(p->pNext!
=pnode)
p=p->pNext;
p->pNext=pnode->pNext;//删除结点后将前后两个结点再连结起来
pnode->pNext=0;
}
return(pnode);
}
CNode*CList:
:
LookUp(CItem&pitem)/*查找一个指定的数据,返回该数据所在结点在链表中的指针,若未找
到返回0*/
{
CNode*pn=pHead;
if(pitem.GetItemCode()==0)
{
while(pn)
{
if(pn->pData->Compare(pitem))returnpn;//按品种名称查找
pn=pn->pNext;
}
}
else
{
while(pn)
{
if(pn->pData->CompareCode(pitem))returnpn;//按品种代码查找
pn=pn->pNext;
}
}
return0;
}
voidCList:
:
ShowList()//打印整个链表
{
CNode*p=pHead;
while(p)
{
p->pData->Show();
p=p->pNext;
}
}
voidCList:
:
DeleteList()//删除整个链表
{
CNode*p,*q;
p=pHead;
while(p)
{
deletep->pData;
q=p;
p=p->pNext;
deleteq;
}
}
CNode*CList:
:
GetListNextNode(CNode*pnode)//返回链表指定结点的下一个结点
{
returnpnode->pNext;
}
按代码的顺序插入一个结点voidCList:
:
Insert(CNode*pnode)//
{
CNode*p1,*p2;
if(pHead==0)
{
pHead=pnode;
pnode->pNext=0;
}
elseif(pHead->pData->GetItemCode()>=pnode->pData->GetItemCode())
{
pnode->pNext=pHead;
pHead=pnode;
}
else
{
p2=p1=pHead;
while(p2->pNext&&p2->pData->GetItemCode()pData->GetItemCode())
{
p1=p2;
p2=p2->pNext;
}
if(p2->pData->GetItemCode()pData->GetItemCode())
{
p2->pNext=pnode;
pnode->pNext=0;
}
else
{
pnode->pNext=p2;
p1->pNext=pnode;
}
}
}
voidcustomer:
:
getdata()//获取客户资料
{
cout<<\
输入客户名称:
;
cin.getline(customer_name,10);
cout<<\
输入客户代码:
;
cin>>customer_code;
cout<<\
输入客户电话:
;
cin>>customer_tel;
cout<<\
输入客户选择的品种名称:
;
Flush(cin);
cin.getline(customer_Item_name,10);
:
;输入客户选择的品牌名称cout<<\
cin.getline(customer_brnd_name,10);
}
voidcustomer:
:
showdata()//显示客户资料
{
cout<<\
客户名称:
;
cout<cout<<\
客户代码:
;