第一章 需求分析
1.1程序设计任务
1.1.1总体要求
运用面向对象程序设计知识,利用C++语言设计和实现一个"库存管理系统设计",主要完成对商品的销售、统计和简单管理。在实现过程中,需利用面向对象程序设计理论的基础知识,充分体现出C++语言关于类、继承和封装等核心概念,每一个类应包含数据成员和成员函数。
1.1.2具体要求
超市中商品分为四类,分别是食品、化妆品、日用品和饮料。每种商品都包含商品名称、价格、库存量和品牌等信息。本系统要求具备如下主要功能:
(1)商品简单管理功能
添加功能:主要完成商品基本信息的添加。
查询功能:可按商品类别、商品名称、生产厂家、进货日期进行查询。若存在相应信息,输出所查询的信息,若不存在该记录,则提示"该记录不存在!"。
修改功能:可根据查询结果对相应的记录进行修改。
删除功能:主要完成商品信息的删除。先输入商品类别,再输入要删除的商品名称,根据查询结果删除该物品的记录,如果该商品不在物品库中,则提示"该商品不存在"。
(2)进货功能
按要求添加相应商品的信息到库存中。添加进货日期、生产厂家、进货价等信息。
(3)出货功能
出货时,先输入商品类别,然后输入商品名称,并在库存中查找该商品的相关信息。如果有库存量,输入出货的数量、出货日期,计算销售额和利润。如果库存量不够,给出提示信息,结束出货。
(4)统计功能
输出当前库存中所有商品的总数及详细信息;能统计每种商品一周时间内的销售额和利润;能统计每类商品的一周时间内的销售额和利润。输出统计信息时,要按从大到小进行排序。(根据个人能力,至少实现一种统计功能)
1.2本程序可实现功能
1.2.1商品管理功能
1.添加商品信息功能
可添加商品基本信息。
2.查找商品信息功能
可分别按照商品编号,商品名称,商品类别,商品品牌查找相应商品信息。
3.编辑商品信息功能
可按照商品编号查找商品,从而编辑商品信息。
4.删除商品信息功能
可根据商品名称查找商品,从而删除商品信息
5.保存商品信息功能
可将商品信息保存到名为"货物信息"的txt文件中。
1.2.2商品进货功能
可按要求输入商品编号,商品名称,生产厂家,商品价格,商品数量,商品类别,入库时间等商品基本信息。
1.2.3商品出货功能
出货时可按照商品名称查找相应商品,显示相关商品库存量等基本信息。若有库存量则输入出售数量,出售价格以及出库时间,计算销售额,利润。如果库存量不足则提示出货失败,结束出货。
1.2.4商品统计功能
可显示当前所有商品数量及基本信息。
第二章 程序设计
2.1概要设计
2.1.1类的关系
在定义商品的类别时采用了枚举类型,并定义Food=1,因此在程序中阿拉伯数字1,2,3,4即分别代表食品,化妆品,日用品,饮料这四种商品。
2.1.2系统的类层次
在定义商品基本信息时采用了结构体类型,即定义了一个struct Goods,其中包含类别,名称,品牌,价格,数量等信息,同时包含struct Date表示入库时间,包含enum GoodsType表示商品类别。
定义class GoodsManage包含各成员函数进行对商品信息的管理,其中包含DisplayMainMenu(),AddGoodsInfo(),DisplayGoodsInfo(),SearchByCode()等成员函数。
2.1.3主程序流程
2.2详细设计
2.2.1各类的描述
1.商品类别
c
enum GoodsType//商品类别
{
Food=1,//食品
Cosmetic,//化妆品
Commodity,//日用品
Drink//饮料
};
2.入库时间
struct Date//入库时间
{
int year;
int month;
int day;
};
3.商品基本信息
c
struct Goods//商品基本信息
{
string code;//商品编号
string name;//商品名称
string brand;//生产厂家
double price;//商品价格
int num;//商品数量
GoodsType type;//商品类别
Date date;//入库时间
Goods *next;
};
4.商品售出信息
c
struct SellRecord//商品售出信息
{
Goods sellGoods;//已出售的商品
int sellNum;//出售数量
double sellPrice;//出售价格
Date date;//出库日期
SellRecord *next;
};
5.商品管理
c
class GoodsManage//商品管理
{
public:
GoodsManage();
~GoodsManage(){}
void DisplayMainMenu();//主菜单显示
void AddGoodsInfo();//添加商品信息
void DisplayGoodsInfo();//浏览商品信息
void SearchByCode();//按照商品编号搜索商品信息
void SearchByName();//按照商品名称搜索商品信息
void SearchByType();//按照商品类别搜索商品信息
void SearchByBrand();//按照商品品牌搜索商品信息
void EditGoodsInfo();//编辑商品信息
void DeleteGoodsInfo();//删除商品信息
void SellGoodsInfo();//出售商品信息
void SaveGoodsInfo();//保存商品信息
private:
int amount;//商品量
int DeleteAmount;
Goods *head;
Goods *DeleteHead;
};
2.2.2各成员函数定义
1.构造函数
c
GoodsManage::GoodsManage()//定义构造函数
{
amount=0;
DeleteAmount=0;
head=new Goods;
head->next=NULL;
DeleteHead=new Goods;
DeleteHead->next=NULL;
}
2.主菜单显示函数
c
void GoodsManage::DisplayMainMenu()//定义主菜单函数
{
cout<<" ━═☆┈━═☆┈━═☆┈━═☆┈━═☆┈━═☆┈━═☆┈━═☆━═☆\n";
cout<<" ┋ ┋\n";
cout<<" ┋ 欢迎使用商品库存管理系统 ┋\n";
cout<<" ┋ ┋\n";
cout<<" ┋ ┋\n";
cout<<" ┋ 【商品进货】...(a) ┋\n";
cout<<" ┋ ┋\n";
cout<<" ┋ 【商品编辑】...(b) ┋\n";
cout<<" ┋ ┋\n";
cout<<" ┋ 【商品删除】...(c) ┋\n";
cout<<" ┋ ┋\n";
cout<<" ┋ ┋ 【按照编号查询】...(d) ┋\n";
cout<<" ┋ ┋ ┋\n";
cout<<" ┋ ┋ 【按照名称查询】...(e) ┋\n";
cout<<" ┋ 【商品查询】┋ ┋\n";
cout<<" ┋ ┋ 【按照类别查询】...(f) ┋\n";
cout<<" ┋ ┋ ┋\n";
cout<<" ┋ ┋ 【按照品牌查询】...(g) ┋\n";
cout<<" ┋ ┋\n";
cout<<" ┋ 【商品出货】...(h) ┋\n";
cout<<" ┋ ┋\n";
cout<<" ┋ 【商品统计】...(i) ┋\n";
cout<<" ┋ ┋\n";
cout<<" ┋ 【信息保存】...(j) ┋\n";
cout<<" ┋ ┋\n";
cout<<" ┋ ┋\n";
cout<<" ┋ 退出系统...(k) ┋\n";
cout<<" ┋ ┋\n";
cout<<" ━═☆┈━═☆┈━═☆┈━═☆┈━═☆┈━═☆┈━═☆┈━═☆━═☆\n";
cout<<"\n 请输入你要进行的操作编号:";
}
3.添加商品信息函数
c
void GoodsManage::AddGoodsInfo()//定义添加商品信息函数
{
char c,c1;
Goods *tail=head,*p;
bool flag;
cout<<" ☆☆☆☆☆☆现在进行商品信息的添加☆☆☆☆☆☆ "<<endl;
while(tail->next!=NULL)
tail=tail->next;
do
{
flag=0;
p=new Goods;
cout<<"请选择商品类别:"<<endl;
cout<<"1.食品 2.化妆品 3.日用品 4.饮料"<<endl;
cout<<"请输入相应编号:";
do
{
cin>>c1;
if(c1>='1'&&c1<='4')//判断用户输入编号是否存在
flag=1;
else
{
cout<<"您输入的编号不存在!"<<endl;
cout<<"请选择正确的商品类别:"<<endl;
}
}while(flag==0);//输入编号存在时跳出循环
if(c1=='1')p->type=Food;
if(c1=='2')p->type=Cosmetic;
if(c1=='3')p->type=Commodity;
if(c1=='4')p->type=Drink;
cout<<"商品类别("<<p->type<<")"<<endl;//表示商品类别
cout<<"请输入商品编号: ";
cin>>p->code;
do
{
Goods *q=head->next;
while(q!=NULL&&q->code!=p->code)q=q->next;
if(q==NULL)flag=1;
else
{cout<<"存在该编号的货物!!!请重新输入编号:";
cin>>p->code;
}
}while(flag==0);
cout<<"请输入商品名称:";
cin>>p->name;
cout<<"请输入生产厂家:";
cin>>p->brand;
cout<<"请输入商品价格:";
cin>>p->price;
cout<<"请输入商品数量:";
cin>>p->num;
cout<<"请输入入库时间(年/月/日):";
cin>>p->date.year>>p->date.month>>p->date.day;
tail->next=p;
p->next=NULL;
tail=p;
amount++;//商品量加一
cout<<"数据输入成功!!!想继续添加吗(y/n):";
cin>>c;
while(c!='y'&&c!='n')
{
cout<<"指令错误!!!!!<请输入y/n>"<<endl;
cout<<"数据添加成功!!!想继续输入吗(y/n):";
cin>>c;
}
}while(c=='y');
cout<<endl;
cout<<"......信息处理完毕......"<<endl;
cout<<"......按任意键返回主菜单......"<<endl;
getchar();
getchar();
}
4.统计商品信息函数
c
void GoodsManage::DisplayGoodsInfo()//定义商品信息浏览函数
{
Goods *p=head;
cout<<" ☆☆☆☆☆☆现在进行商品信息的浏览☆☆☆☆☆☆ "<<endl;
cout<<setiosflags(ios::left)<<setw(10)<<"编号"<<setw(16)<<"名称"<<setw(10)<<"生产厂家"<<setw(10)<<"价格"<<setw(10)<<
"商品类别"<<setw(10)<<"数量"<<setw(10)<<"入库时间"<<endl;
while(p->next!=NULL)
{
p=p->next;
cout<<setiosflags(ios::left)<<setw(10)<<p->code<<setw(16)<<p->name;
cout<<setw(10)<<p->brand<<setw(10)<<p->price<<setw(10)<<p->type;
cout<<setw(10)<<p->num<<p->date.year<<"/"<<p->date.month<<"/"<<p->date.day<<endl;
}
cout<<endl;
cout<<"......信息统计完毕......"<<endl;
cout<<"......按任意键返回主菜单......"<<endl;
getchar();
getchar();
}
5.按照编号查找商品信息函数
c
void GoodsManage::SearchByCode()//按照商品编号查找商品信息
{
char c;
Goods *p;
bool flag;
string FoundCode;
cout<<" ☆☆☆☆☆☆现在进行商品信息的查找☆☆☆☆☆☆ "<<endl;
do
{
p=head;
flag=0;
cout<<"请输入您要查找的商品编号:";
cin>>FoundCode;
while(p->next!=NULL)
{
p=p->next;
if(p->code==FoundCode)
{
flag=1;
cout<<setiosflags(ios::left)<<setw(10)<<"编号"<<setw(16)<<"名称"<<setw(10)<<"生产厂家"<<setw(10)<<"价格"<<setw(10)<<
"商品类别"<<setw(10)<<"数量"<<setw(10)<<"入库时间"<<endl;
cout<<setiosflags(ios::left)<<setw(10)<<p->code<<setw(16)<<p->name;
cout<<setw(10)<<p->brand<<setw(10)<<p->price<<setw(10)<<p->type;
cout<<setw(10)<<p->num<<p->date.year<<"/"<<p->date.month<<"/"<<p->date.day<<endl;
break;
}
if(flag==0)
{
cout<<"对不起,您查询的商品不存在!!!"<<endl;
cout<<"您想要继续查找吗(y/n):";
cin>>c;
while(c!='y'&&c!='n')
{
cout<<"指令错误!!!<请输入y/n>:"<<endl;
cout<<"您想要继续查找吗(y/n):";
cin>>c;
}
}
}
}while(c=='y');
cout<<endl;
cout<<"......信息查找完毕......"<<endl;
cout<<"......按任意键返回主菜单......"<<endl;
getchar();
getchar();
}
6.按照名称查找商品信息函数
c
void GoodsManage::SearchByName()//按照商品名称查找商品信息
{
char c;
Goods *p;
bool flag;
string FoundName;
cout<<" ☆☆☆☆☆☆现在进行商品信息的查找☆☆☆☆☆☆ "<<endl;
do
{
p=head;
flag=0;
cout<<"请输入您要查找的商品名称:";
cin>>FoundName;
while(p->next!=NULL)
{
p=p->next;
if(p->name==FoundName)
{
flag=1;
cout<<setiosflags(ios::left)<<setw(10)<<"编号"<<setw(16)<<"名称"<<setw(10)<<"生产厂家"<<setw(10)<<"价格"<<setw(10)<<
"商品类别"<<setw(10)<<"数量"<<setw(10)<<"入库时间"<<endl;
cout<<setiosflags(ios::left)<<setw(10)<<p->code<<setw(16)<<p->name;
cout<<setw(10)<<p->brand<<setw(10)<<p->price<<setw(10)<<p->type;
cout<<setw(10)<<p->num<<p->date.year<<"/"<<p->date.month<<"/"<<p->date.day<<endl;
break;
}
if(flag==0)
{
cout<<"对不起,您查询的商品不存在!!!"<<endl;
cout<<"您想要继续查找吗(y/n):";
cin>>c;
while(c!='y'&&c!='n')
{
cout<<"指令错误!!!<请输入y/n>:"<<endl;
cout<<"您想要继续查找吗(y/n):";
cin>>c;
}
}
}
}while(c=='y');
cout<<endl;
cout<<"......信息查找完毕......"<<endl;
cout<<"......按任意键返回主菜单......"<<endl;
getchar();
getchar();
}
7.按照类别查找商品信息函数
c
void GoodsManage::SearchByType()//按照商品类别查找商品信息
{
char c;
Goods *p;
bool flag;
int FoundType;
cout<<" ☆☆☆☆☆☆现在进行商品信息的查找☆☆☆☆☆☆ "<<endl;
do
{
p=head;
flag=0;
cout<<"请输入您要查找的商品类别:";
cin>>FoundType;
while(p->next!=NULL)
{
p=p->next;
if(FoundType==1&&p->type==Food)
{
flag=1;
cout<<setiosflags(ios::left)<<setw(10)<<"编号"<<setw(16)<<"名称"<<setw(10)<<"生产厂家"<<setw(10)<<"价格"<<setw(10)<<
"商品类别"<<setw(10)<<"数量"<<setw(10)<<"入库时间"<<endl;
cout<<setiosflags(ios::left)<<setw(10)<<p->code<<setw(16)<<p->name;
cout<<setw(10)<<p->brand<<setw(10)<<p->price<<setw(10)<<p->type;
cout<<setw(10)<<p->num<<p->date.year<<"/"<<p->date.month<<"/"<<p->date.day<<endl;
}
else if(FoundType==2&&p->type==Cosmetic)
{
flag=1;
cout<<setiosflags(ios::left)<<setw(10)<<"编号"<<setw(16)<<"名称"<<setw(10)<<"生产厂家"<<setw(10)<<"价格"<<setw(10)<<
"商品类别"<<setw(10)<<"数量"<<setw(10)<<"入库时间"<<endl;
cout<<setiosflags(ios::left)<<setw(10)<<p->code<<setw(16)<<p->name;
cout<<setw(10)<<p->brand<<setw(10)<<p->price<<setw(10)<<p->type;
cout<<setw(10)<<p->num<<p->date.year<<"/"<<p->date.month<<"/"<<p->date.day<<endl;
}
else if(FoundType==3&&p->type==Commodity)
{
flag=1;
cout<<setiosflags(ios::left)<<setw(10)<<"编号"<<setw(16)<<"名称"<<setw(10)<<"生产厂家"<<setw(10)<<"价格"<<setw(10)<<
"商品类别"<<setw(10)<<"数量"<<setw(10)<<"入库时间"<<endl;
cout<<setiosflags(ios::left)<<setw(10)<<p->code<<setw(16)<<p->name;
cout<<setw(10)<<p->brand<<setw(10)<<p->price<<setw(10)<<p->type;
cout<<setw(10)<<p->num<<p->date.year<<"/"<<p->date.month<<"/"<<p->date.day<<endl;
}
else if(FoundType==4&&p->type==Drink)
{
flag=1;
cout<<setiosflags(ios::left)<<setw(10)<<"编号"<<setw(16)<<"名称"<<setw(10)<<"生产厂家"<<setw(10)<<"价格"<<setw(10)<<
"商品类别"<<setw(10)<<"数量"<<setw(10)<<"入库时间"<<endl;
cout<<setiosflags(ios::left)<<setw(10)<<p->code<<setw(16)<<p->name;
cout<<setw(10)<<p->brand<<setw(10)<<p->price<<setw(10)<<p->type;
cout<<setw(10)<<p->num<<p->date.year<<"/"<<p->date.month<<"/"<<p->date.day<<endl;
}
if(flag==0)
{
cout<<"对不起,您查询的商品不存在!!!"<<endl;
cout<<"您想要继续查找吗(y/n):";
cin>>c;
while(c!='y'&&c!='n')
{
cout<<"指令错误!!!<请输入y/n>:"<<endl;
cout<<"您想要继续查找吗(y/n):";
cin>>c;
}
}
}
}while(c=='y');
cout<<endl;
cout<<"......信息查找完毕......"<<endl;
cout<<"......按任意键返回主菜单......"<<endl;
getchar();
getchar();
}
8.按照品牌查找商品信息函数
c
void GoodsManage::SearchByBrand()//按照品牌查找商品信息
{
char c;
Goods *p;
bool flag;
string FoundBrand;
cout<<" ☆☆☆☆☆☆现在进行商品信息的查找☆☆☆☆☆☆ "<<endl;
do
{
p=head;
flag=0;
cout<<"请输入您要查找的商品品牌:";
cin>>FoundBrand;
while(p->next!=NULL)
{
p=p->next;
if(p->brand==FoundBrand)
{
flag=1;
cout<<setiosflags(ios::left)<<setw(10)<<"编号"<<setw(16)<<"名称"<<setw(10)<<"生产厂家"<<setw(10)<<"价格"<<setw(10)<<
"商品类别"<<setw(10)<<"数量"<<setw(10)<<"入库时间"<<endl;
cout<<setiosflags(ios::left)<<setw(10)<<p->code<<setw(16)<<p->name;
cout<<setw(10)<<p->brand<<setw(10)<<p->price<<setw(10)<<p->type;
cout<<setw(10)<<p->num<<p->date.year<<"/"<<p->date.month<<"/"<<p->date.day<<endl;
break;
}
if(flag==0)
{
cout<<"对不起,您查询的商品不存在!!!"<<endl;
cout<<"您想要继续查找吗(y/n):";
cin>>c;
while(c!='y'&&c!='n')
{
cout<<"指令错误!!!<请输入y/n>:"<<endl;
cout<<"您想要继续查找吗(y/n):";
cin>>c;
}
}
}
}while(c=='y');
cout<<endl;
cout<<"......信息查找完毕......"<<endl;
cout<<"......按任意键返回主菜单......"<<endl;
getchar();
getchar();
}
9.编辑商品信息函数
c
void GoodsManage::EditGoodsInfo()//定义编辑商品信息函数
{
char c;
Goods *p;
bool flag=0;
string EditCode;
cout<<" ☆☆☆☆☆☆现在进行商品信息的编辑☆☆☆☆☆☆ "<<endl;
do
{
p=head->next;
flag=0;
cout<<"请输入您要修改的货物编号:";
cin>>EditCode;
while(p->next!=NULL&&p->code!=EditCode)
p=p->next;
if(p->code==EditCode)
{
flag=1;
cout<<setiosflags(ios::left)<<setw(10)<<"编号"<<setw(16)<<"名称"<<setw(10)<<"生产厂家"<<setw(10)<<"价格"<<setw(10)<<
"商品类别"<<setw(10)<<"数量"<<setw(10)<<"入库时间"<<endl;
cout<<setiosflags(ios::left)<<setw(10)<<p->code<<setw(16)<<p->name;
cout<<setw(10)<<p->brand<<setw(10)<<p->price<<setw(10)<<p->type;
cout<<setw(10)<<p->num<<p->date.year<<"/"<<p->date.month<<"/"<<p->date.day<<endl;
cout<<"确认修改吗?<y/n>";
cin>>c;
while(c!='y'&&c!='n')
{
cout<<"指令错误!!!!<请输入y/n>:";
cin>>c;
}
if(c=='y')
{
cout<<"请输入商品名称:";
cin>>p->name;
cout<<"请输入生产厂家:";
cin>>p->brand;
cout<<"请输入商品价格:";
cin>>p->price;
cout<<"请输入商品数量:";
cin>>p->num;
cout<<"请输入入库时间(年/月/日):";
cin>>p->date.year>>p->date.month>>p->date.day;
cout<<"修改成功!"<<endl;
}
else cout<<"取消成功!"<<endl;
}
if(flag==0)
{
cout<<"对不起,您修改的货物不存在!!"<<endl;
}
cout<<"您想要继续修改吗?(y/n):";
cin>>c;
while(c!='y'&&c!='n')
{
cout<<"指令错误!!!<请输入y/n>:"<<endl;
cout<<"您想要继续修改吗?(y/n):";
cin>>c;
}
}while(c=='y');
cout<<endl;
cout<<"......信息编辑完毕......"<<endl;
cout<<"......按任意键返回主菜单......"<<endl;
getchar();
getchar();
}
10.删除商品信息函数
c
void GoodsManage::DeleteGoodsInfo()//定义商品信息删除函数
{
Goods *q=head,*p,*tail=DeleteHead;
p=new Goods;
char c;
string Dename;
bool flag=0;
while(tail->next!=NULL)
tail=tail->next;
cout<<" ☆☆☆☆☆☆现在进行商品信息的删除☆☆☆☆☆☆ "<<endl;
do
{
cout<<"请输入您要删除的商品名称:";
cin>>Dename;
while(q->next!=NULL&&q->next->name!=Dename)
q=q->next;
if(q->next!=NULL)
{
flag=1;
cout<<"确认删除吗?<y/n>";
cin>>c;
while(c!='y'&&c!='n')
{
cout<<"指令错误!!!!<请输入y/n>:";
cin>>c;
}
if(c=='y')
{
p=q->next;
q->next=q->next->next;
tail->next=p;
tail=p;
tail->next=NULL;
DeleteAmount++;
amount--;
cout<<"删除成功!!"<<endl;
}
else cout<<"取消成功!!!"<<endl;
}
if(flag==0)
{
cout<<"对不起,您删除的商品不存在!!!"<<endl;
}
cout<<"您想要继续删除吗?(y/n):";
cin>>c;
while(c!='y'&&c!='n')
{
cout<<"指令错误!!!<请输入y/n>:"<<endl;
cout<<"您想要继续删除吗?(y/n):";
cin>>c;
}
flag=0;
q=head;
}while(c=='y');
cout<<endl;
cout<<"......信息删除完毕......"<<endl;
cout<<"......按任意键返回主菜单......"<<endl;
getchar();
getchar();
}
2.2.4算法流程图
第三章 程序截图
3.1主菜单界面
3.2各项操作界面
3.2.2编辑商品信息
3.2.3删除商品信息
3.2.4按照编号搜索商品信息
3.2.5按照类别搜索商品信息
3.2.6按照名称搜索商品信息
3.2.7按照品牌搜索商品信息
3.2.8出售商品信息
3.2.9保存商品信息
四、联系与交流
q:969060742 完整代码、sql、报告