商品管理系统C++详细代码加注释
问题描述
系统应具有下列主要功能:输入记录功能:从键盘输入货物信息:商品代号,商品名称, 数 量,价格,所属类别(如家用电器、日用品等)等;修改商品数量、删除记录功能、按商品代号查询、按商品代号排序并显示等功能。
基本要求
(1)使用面向对象编程思想编写开发过程中需要用到的类,使用继承的方法构造至少 3 个类(即商品类(虚基类),家用电器类和日用品类(派生类)),另外再设计一个管理类,实现对商品的管理;
(2)输入和输出可以使用文本文件重定向输入(保存数据为磁盘文件);也可以使用标准输入输出进行(提交时需要提交TXT格式输入数据)。包含各类商品信息,程序运行时进行 初始化数据,使用vector 数组存放对象指针。并能保存数据为磁盘文件。
(3)程序运行时使用菜单显示添加(输入)记录,修改商品数量,浏览商品信息,按商品代号查找 ,删除记录。
(4)编写同名 display() 成员函数既虚函数,用来输出所有商品的信息。要求对<<和>> 运算符进行重载,实现信息的输入输出。
(5)基本功能要求具有增、删、改、查。
需求分析
(1)系统目的:货物管理系统主要针对于日常库存信息的管理,它针对仓库日常发生的业务,分为两大类:即入库和出库。通过这两大板块在自由选择里面的小的模块,用户通过自身需求及物品的基本情况进行增删替换等操作,对库存数量进行查询,用户通过简单的操作即可轻松管理仓库。
(2)用户需求:商品出库、入库管理,对进、出库信息进行记录保存审核;通过主菜单按钮查询商品编号,保证了对信息的直接显示;商店资料管理;界面尽量简化,做到实用、方便,删除不必要的管理功能冗余;商品一经录入,便可重复使用,包括代号、名称的自动更新,原始记录能保证及时、正确;在断网时,也能够进入离线系统模式,不影响日常的管理。
(3)功能需求:系统的业务处理功能包括:商品入出库的登记,确认入出库信息,删除库内信息,报损、借出信息,登记、商品分类管理。
##4. 概要设计
(1) 应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2) 分析系统中的各个实体及它们之间的关系;
(3) 根据问题描述,设计系统的类层次;
(4) 完成类层次中各个类的描述;
(5) 完成类中各个成员函数的定义;
(6) 完成系统的应用模块;
(7) 功能调试;
详细设计
(1)
派生类:家用电器类和日用品类继承了虚基类商品类中的所有函数,可在此基础上添加新的函数,进行别的功能。
(2)① 菜单界面设置:用cout<<显示界面,用#include <windows.h> system(“cls”)清屏,切换界面,同时用#include <conio.h> getch()函数 系统会等待输入,直到有新的输入,才会退出界面。
② 运算符<<和>>重载,实现信息在文件中的输入输出
friend ostream& operator<<(ostream& out,Commodity& obj)
{
out<<obj.code<<obj.name<<obj.amount<<obj.kind;
}
friend istream& operator>>(istream& in,Commodity& obj)
{
in>>obj.code>>obj.name>>obj.amount>>obj.kind;
}
③ Commodity类中完成输入各信息的函数,定义公有数据和函数,用cin和cout完成。
④ Display函数,首先借助Commoditymanagerment类中的Save()函数利用cout>>将商品的全部信息输出,然后通过for循环和指针计算商品总个数。
void Display()
{
system(“cls”);
i=0;
for(Commodity * p=Head->Next;p!=End;p=p->Next)
{
p->Disp();
i++;
}
cout<<“共有”<<i<<“种商品”<<"\n"<<endl;
Save();
cout<<“输入任意字符!继续……”;
getch();
}
void Commoditymanagerment::Save()
{
out.open(“cangku.txt”);
for(Commodity *p=Head->Next;p!=End;p=p->Next)
out<name<<"\t"<kind<<"\t"<code<<"\t"<price<<"\t"<amount<<’\n’;
out.close();
cout<<“保存信息成功”<<endl;
}
⑤ 在Commoditymanagerment类中定义公有函数和私有型指针以及文件的打开与关闭,在此基础上完成各功能的实现。
⑥ AddItem函数完成添加商品信息功能,将末尾指针指向新输入的信息上,创建新的存储空间,末尾指针向后移动,即完成增加商品信息功能。
void AddItem()
{
system(“cls”);
End->InputName();
showMenu(1);
End->InputKind();
do
{
End->InputCode();
}while(FindCode(End->code));
End->InputOther();
End->Next = new Commodity;
End=End->Next;
cout<<“添加成功!”<<endl;
Save();
cout<<“输入任意字符!继续……”;
getch();
}
⑦ Find函数完成查询商品信息功能,通过字符指针,switch()语句进行选择,FindItem函数和FindCode函数完成寻找,如果指针匹配成功则返回上一个指针,不成功就返回空(Null)
void Commoditymanagerment::Find()
{
system(“cls”);
char name[20] ,code[10];
int x;
Commodity * p=NULL;
showMenu(5);
cin>>x;
switch(x)
{
case 1:{cout<<"\t\t请输入要查找的商品的名称:";cin>>name;
if(p=FindItem(name))
{
p->Next->Disp();
cout<<“输入任意字符!继续……”;
getch();
}
else
{
cout<<"\t\t没有找到该名称的商品!"<<’\n’<<endl;
cout<<“输入任意字符!继续……”;
getch();
}
}break;
case 2:
{ cout<<"\t\t请输入要查找的商品的代号:";cin>>code;
if(p=FindCode(code))
{
p->Next->Disp();
cout<<“输入任意字符!继续……”;
getch();
}
else
{
cout<<"\t\t没有找到该代号的商品!"<<’\n’<<endl;
cout<<“输入任意字符!继续……”;
getch();
}
}break;
}
}
Commodity *FindItem(char * name)
{
for(Commodity * p=Head;p->Next!=End;p=p->Next)
if(!strcmp(p->Next->name,name))return p;
return NULL;
}
Commodity *FindCode(char * code)
{
for(Commodity * p=Head;p->Next!=End;p=p->Next)
if(!strcmp(p->Next->code,code))return p;
return NULL;
}
⑧ ModifyItem函数完成修改商品信息功能,switch()语句进行选择修改哪一项信息,先用FindCode函数寻找到要修改的信息,并将指针指向这个信息,然后输入新的信息替换它。
void Commoditymanagerment::ModifyItem()
{
showMenu(3);
int x;
cin>>x;
switch(x)
{
case 1:
{
char code[20];
Commodity * p=NULL;
cout<<"\t\t请输入要修改的商品的代号:";cin>>code;
if(p=FindCode(code))
{
cout<<"\t\t已找到商品的信息,请输入新的名字!"<<endl;
p->Next->InputName();
cout<<“修改成功!”<<endl;
cout<<“输入任意字符!继续……”;
getch();
}
else
{
cout<<"\t\t没有找到您需要的商品!"<<endl;
cout<<“输入任意字符!继续……”;
getch();
}
break;
}
case 2:
{
char code[20];
Commodity * p=NULL;
cout<<"\t\t请输入要修改的商品的代号:";cin>>code;
if(p=FindCode(code))
{
cout<<"\t\t已找到商品的信息,请输入新的种类!"<<endl;
p->Ne