第一章 需求分析
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.商品类别
enum GoodsType//商品类别
{Food=1,//食品Cosmetic,//化妆品Commodity,//日用品Drink//饮料
};2.入库时间
struct Date//入库时间
{int year;int month;int day;
};
3.商品基本信息
struct Goods//商品基本信息
{string code;//商品编号string name;//商品名称string brand;//生产厂家double price;//商品价格int num;//商品数量GoodsType type;//商品类别Date date;//入库时间Goods *next;
};
4.商品售出信息
struct SellRecord//商品售出信息
{ Goods sellGoods;//已出售的商品int sellNum;//出售数量double sellPrice;//出售价格Date date;//出库日期SellRecord *next;
};
5.商品管理
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.构造函数
GoodsManage::GoodsManage()//定义构造函数
{amount=0;DeleteAmount=0;head=new Goods;head->next=NULL;DeleteHead=new Goods;DeleteHead->next=NULL;
}
2.主菜单显示函数
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.添加商品信息函数
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.统计商品信息函数
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.按照编号查找商品信息函数
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.按照名称查找商品信息函数
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.按照类别查找商品信息函数
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.按照品牌查找商品信息函数
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.编辑商品信息函数
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.删除商品信息函数
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、报告