#include
#include
#include
#include
#include //用getch();当用户按下某个字符时,函数自动读取,无需按回车。
using namespace std;
class Goods
{
public:
Goods()
{
}
int kind;
char name[20];//名字
char Id[20];//编号
char place[10];//生产地
char brand[10];//品牌
float buyprice; //进货价;
float saleprice; //卖出价;
int amount; //存货数量;
int amount1; //售货数量;
int profit; //净利润;
Goods * Next;
void InputAll()
{
InputName();
InputKind();
InputID();
InputOther();
}
void InputKind()
{
cout<<"\t\t请选择种类:";cin>>kind;
}
void InputName()
{
cout<<"\t\t请输入商品的名称:"; cin>>name;
}
void InputID()
{
cout<<"\t\t请输入商品的编号:"; cin>>Id;
}
void InputBuyprice()
{
cout<<"\t\t请输入进货价:"; cin>>buyprice;
}
void InputSaleprice()
{
cout<<"\t\t请输入售出价:"; cin>>saleprice;
}
void InputAmount()
{
cout<<"\t\t请输入剩余商品数量:"; cin>>amount;
}
void InputProfit()
{
cout<<"\t\t请输入净利润:"; cin>>profit;
}
void InputPlace()
{
cout<<"\t\t请输入商品产地:"; cin>>place;
}
void Inputbrand()
{
cout<<"\t\t请输入生产商品牌:"; cin>>brand;
}
void InputOther()
{
cout<<"\t\t请输入进货价:"; cin>>buyprice;
cout<<"\t\t请输入售出价:"; cin>>saleprice;
cout<<"\t\t请输入存货数量:"; cin>>amount;
cout<<"\t\t请输入商品的产地:"; cin>>place;
cout<<"\t\t请输入生产商品牌:"; cin>>brand;
profit=0;
}
void ReadFile(istream & in) //将输入的东西存入文件
{
in>>name>>kind>>Id>>buyprice>>saleprice>>amount>>place>>brand>>profit;
}
void Show()
{
cout<<"商品名: "<Next;p!=End;p=p->Next)
{
p->Show();
i++;
}
cout<<"共有"<InputName();
showMenu(1);
End->InputKind();
do
{
End->InputID();
}while(FindID(End->Id));
End->InputOther();
End->Next = new Goods;
End=End->Next;
cout<<"添加成功!"<Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
if(!strcmp(p->Next->name,name))return p;
return NULL;
}
Goods *FindID(char * Id)
{
for(Goods * p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
if(!strcmp(p->Next->Id,Id))return p;
return NULL;
}
};
Goodsmessage::Goodsmessage() //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌构造函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
{
Head=new Goods;
Head->Next=new Goods;
End=Head->Next;
in.open("supermarket.txt");
if(!in)
cout<<"无商品信息。请先进货。"<ReadFile(in);
if(End->name[0]=='\0')break;
End->Next=new Goods;
End=End->Next;
}
in.close();
cout<<"\t\t\t\t读取商品信息成功!"<<"\n"<Next!=End;)
{
temp=Head->Next;
Head->Next=Head->Next->Next;
delete temp;
}
delete Head,End;
}
void Goodsmessage::showMenu(int n)//菜单 //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
{
switch(n)
{
case 1:
{
cout<<"********************************************************************************\n"
<<" 1. 食品 2. 化妆品 3. 日用品 4. 饮料 \n"
<<"********************************************************************************\n"<>x;
switch(x)
{
case 1:{cout<<"\t\t请输入要查找的商品的名称:";cin>>name;
if(p=FindItem(name))
{
p->Next->Show();
cout<<"输入任意字符!继续……";
getch();
}
else
{
cout<<"\t\t没有找到该名称的商品!"<<'\n'<>Id;
if(p=FindID(Id))
{
p->Next->Show();
cout<<"输入任意字符!继续……";
getch();
}
else
{
cout<<"\t\t没有找到该编号的商品!"<<'\n'<>x;
switch(x)
{
case 1:
{
char Id[20];
Goods * p=NULL;
cout<<"\t\t请输入要修改的商品的编号:";cin>>Id;
if(p=FindID(Id))
{
cout<<"\t\t已找到商品的信息,请输入新的信息!"<Next->InputName();
cout<<"修改成功!"<>Id;
if(p=FindID(Id))
{
cout<<"\t\t已找到商品的信息,请输入新的信息!"<Next->InputKind();
cout<<"修改成功!"<>Id;
if(p=FindID(Id))
{
cout<<"\t\t已找到商品的信息,请输入新的信息!"<Next->InputID();
cout<<"修改成功!"<>Id;
if(p=FindID(Id))
{
cout<<"\t\t已找到商品的信息,请输入新的信息!"<Next->InputBuyprice();
cout<<"修改成功!"<>Id;
if(p=FindID(Id))
{
cout<<"\t\t已找到商品的信息,请输入新的信息!"<Next->InputSaleprice();
cout<<"修改成功!"<>Id;
if(p=FindID(Id))
{
cout<<"\t\t已找到商品的信息,请输入新的信息!"<Next->InputAmount();
cout<<"修改成功!"<>Id;
if(p=FindID(Id))
{
cout<<"\t\t已找到商品的信息,请输入新的信息!"<Next->InputProfit();
cout<<"修改成功!"<>Id;
if(p=FindID(Id))
{
cout<<"\t\t已找到商品的信息,请输入新的信息!"<Next->InputPlace();
cout<<"修改成功!"<>Id;
if(p=FindID(Id))
{
cout<<"\t\t已找到商品的信息,请输入新的信息!"<Next->Inputbrand();
cout<<"修改成功!"<>Id;
if(p=FindID(Id))
{
cout<<"\t\t已找到商品的信息,请输入新的信息!"<Next->InputAll();
cout<<"修改成功!"<>Id;
if(p=FindID(Id))
{
temp=p->Next;
p->Next=p->Next->Next;
delete temp;
cout<<"\t\t删除成功!"<>Id;cin>>i;
if(p=FindID(Id))
{
if(p->Next->amount>i)
{
p->Next->amount -= i;
p->Next->amount1 += i;
p->Next->profit +=i*(p->Next->saleprice - p->Next->buyprice);
cout<<"商品售出成功!"<<"\n";
cout<<"售出商品编号: "<Next->Show();
Save();
cout<<"输入任意字符!继续……";
getch();
}
else
{
cout<<"商品数量不够,不能购买"<name,p1->name);
temp->kind=p1->kind;
strcpy(temp->Id,p1->Id);
strcpy(temp->place,p1->place);
temp->saleprice=p1->saleprice;
temp->buyprice=p1->buyprice;
temp->amount=p1->amount;
temp->profit=p1->profit;
strcpy(temp->brand,p1->brand);
strcpy(p1->name,p2->name);
p1->kind=p2->kind;
strcpy(p1->Id,p2->Id);
strcpy(p1->place,p2->place);
p1->saleprice=p2->saleprice;
p1->buyprice=p2->buyprice;
p1->amount=p2->amount;
p1->profit=p2->profit;
strcpy(p1->brand,p2->brand);
strcpy(p2->name,temp->name);
p2->kind=temp->kind;
strcpy(p2->Id,temp->Id);
strcpy(p2->place,temp->place);
p2->saleprice=temp->saleprice;
p2->buyprice=temp->buyprice;
p2->amount=temp->amount;
p2->profit=temp->profit;
strcpy(p2->brand,temp->brand);
}
int Goodsmessage::ListCount() //统计当前链表的记录总数,返回一个整数
{
if(! Head)
return 0;
int n=0;
for(Goods * p=Head->Next;p!=End;p=p->Next)
{
n++;
}
return n;
}
void Goodsmessage::Paixu() //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌排序商品﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
{
showMenu(4);
int x;
cin>>x;
switch(x)
{
case 1:
{
system("cls");
cout <<"\t\t排序中..."<Next;p!=End;p=p->Next)
for(k=p->Next;k!=End;k=k->Next)
{
if(p->buyprice>k->buyprice)
{
Goodsmessage::Swap(p,k);
}
}
Display();
out.open("进货价.txt");
for(Goods *q=Head->Next;q!=End;q=q->Next)
out<name<<"\t"<kind<<"\t"<Id<<"\t"<buyprice<<"\t"<saleprice<<"\t"<amount<<"\t"<place<<"\t"<brand<<"\t"<profit<<'\n';
out.close();
cout<<"保存信息成功"<Next;p!=End;p=p->Next)
for(k=p->Next;k!=End;k=k->Next)
{
if(p->amount>k->amount)
{
Goodsmessage::Swap(p,k);
}
}
Display();
out.open("库存量.txt");
for(Goods *q=Head->Next;q!=End;q=q->Next)
out<name<<"\t"<kind<<"\t"<Id<<"\t"<buyprice<<"\t"<saleprice<<"\t"<amount<<"\t"<place<<"\t"<brand<<"\t"<profit<<'\n';
out.close();
cout<<"保存信息成功"<Next;p!=End;p=p->Next)
for(k=p->Next;k!=End;k=k->Next)
{
if(p->profit>k->profit)
{
Goodsmessage::Swap(p,k);
}
}
Display();
out.open("净利润.txt");
for(Goods *q=Head->Next;q!=End;q=q->Next)
out<name<<"\t"<kind<<"\t"<Id<<"\t"<buyprice<<"\t"<saleprice<<"\t"<amount<<"\t"<place<<"\t"<brand<<"\t"<profit<<'\n';
out.close();
cout<<"保存信息成功"<Next;p!=End;p=p->Next)
out<name<<"\t"<kind<<"\t"<Id<<"\t"<buyprice<<"\t"<saleprice<<"\t"<amount<<"\t"<place<<"\t"<brand<<"\t"<profit<<'\n';
out.close();
cout<<"保存信息成功"<>x;
switch(x)
{
case 0:{quit=true;break;}
case 1:{Grade.AddItem();break;}
case 2:{Grade.Display();break;}
case 3:{Grade.Paixu();break;}
case 4:{Grade.Find();break;}
case 5:{Grade.RemoveItem();break;}
case 6:{Grade.ModifyItem();break;}
case 7:{Grade.Saleprice();break;}
case 8:{Grade.Save();break;}
}
}
return 0;
}