某公司现有以下设备:普通电视机、DVD、 带DVD的电视机, 带DVD的电视机的售价为普通电视机和DVD单价之和的80%。请编制一程序要求对所有的库存设备都能按照品名进行显示、查找、增加、删除和保存的功能。
详细代码如下,敲代码不易,如有帮助,请采纳一下,谢谢。
#include <stdio.h>
#include <map>
#include <vector>
using namespace std;
//定义设备类型
enum ESbType
{
e_sb_ds,
e_sb_dvd,
e_sb_dsadvd
};
float g_price_ds = 220;
float g_price_dvd = 10;
float g_price_dsadvd = (g_price_ds + g_price_dvd) * 0.8;
map<ESbType,vector<string> > g_sb_map; //存储所有设备
int g_index = 1; //记录入库设备数量,用于产生设备编号
//自动生成设备编号
string getId()
{
char buf[10] = {0};
itoa(g_index,buf,10);
g_index++;
return buf;
}
//添加设备
void addSb(ESbType e)
{
map<ESbType,vector<string> >::iterator it = g_sb_map.find(e);
if (it != g_sb_map.end())
{
vector<string> vv = it->second;
g_sb_map.erase(it);
vv.push_back(getId());
g_sb_map.insert(pair<ESbType,vector<string> >(e,vv));
}else
{
vector<string> vv;
vv.push_back(getId());
g_sb_map.insert(pair<ESbType,vector<string> >(e,vv));
}
}
//删除设备
void deleteSb(ESbType e)
{
map<ESbType,vector<string> >::iterator it = g_sb_map.find(e);
if (it == g_sb_map.end())
{
printf("当前没有该类型的设备\n");
return;
}else
{
vector<string> vv = it->second;
string id = vv.back();
vv.pop_back();
g_sb_map.erase(it);
if(vv.size() > 0)
g_sb_map.insert(pair<ESbType,vector<string> >(e,vv));
printf("出货:%s\n",id.c_str());
return;
}
}
//查询某类型的设备
void ShowSb(ESbType e)
{
map<ESbType,vector<string> >::iterator it = g_sb_map.find(e);
if (it == g_sb_map.end())
{
printf("该类型设备存量为0\n");
}else
{
vector<string> vv = it->second;
for (int i = 0; i < vv.size(); i++)
{
printf(" >>%s\n",vv.at(i).c_str());
}
printf("\n");
}
}
//查询当前全部设备
void ShowAll()
{
map<ESbType,vector<string> >::iterator it = g_sb_map.begin();
for (;it != g_sb_map.end(); it++)
{
ESbType e = it->first;
vector<string> vv = it->second;
if(e == e_sb_ds)
printf("电视:\n");
else if(e == e_sb_dvd)
printf("DVD :\n");
else
printf("带DVD的电视:\n");
for (int i = i; i < vv.size();i++)
{
printf(" >>%s\n",vv.at(i).c_str());
}
printf("\n");
}
}
//计算所有设备金额
float CaculateAllPrice()
{
map<ESbType,vector<string> >::iterator it = g_sb_map.begin();
float sum = 0.0;
for (; it != g_sb_map.end(); it++)
{
vector<string> vv = it->second;
ESbType e = it->first;
if(e == e_sb_ds)
sum += vv.size() * g_price_ds;
else if(e == e_sb_dvd)
sum += vv.size() * g_price_dvd;
else
sum += vv.size() * g_price_dsadvd;
}
return sum;
}
//计算某个类型设备的金额
float CaculateSb(ESbType e)
{
map<ESbType,vector<string> >::iterator it = g_sb_map.find(e);
if(it == g_sb_map.end())
return 0;
else
{
float sum = 0.0;
vector<string> vv = it->second;
if(e == e_sb_ds)
sum += vv.size() * g_price_ds;
else if(e == e_sb_dvd)
sum += vv.size() * g_price_dvd;
else
sum += vv.size() * g_price_dsadvd;
return sum;
}
}
int main()
{
int d = 0;
printf("1.添加一件普通电视机\n");
printf("2.添加一件DVD\n");
printf("3.添加一件带DVD的电视机\n");
printf("4.出库一件电视机\n");
printf("5.出库一件DVD\n");
printf("6.出库一件带DVD的电视机\n");
printf("7.显示所有设备\n");
printf("8.显示所有普通电视机\n");
printf("9.显示所有DVD\n");
printf("10.显示所有带DVD的电视机\n");
printf("11.计算所有设备的金额\n");
printf("12.计算所有普通电视机的金额\n");
printf("13.计算所有DVD的金额\n");
printf("14.计算所有带DVD的电视机的金额\n");
while(1)
{
printf("请输入您需要的操作:");
scanf("%d",&d);
switch(d)
{
case 1:
addSb(e_sb_ds);
break;
case 2:
addSb(e_sb_dvd);
break;
case 3:
addSb(e_sb_dsadvd);
break;
case 4:
deleteSb(e_sb_ds);
break;
case 5:
deleteSb(e_sb_dvd);
break;
case 6:
deleteSb(e_sb_dsadvd);
break;
case 7:
ShowAll();
break;
case 8:
ShowSb(e_sb_ds);
break;
case 9:
ShowSb(e_sb_dvd);
break;
case 10:
ShowSb(e_sb_dsadvd);
break;
case 11:
printf("所有设备金额:%.2f\n",CaculateAllPrice());
break;
case 12:
printf("所有普通电视机金额:%.2f\n",CaculateSb(e_sb_ds));
break;
case 13:
printf("所有DVD金额:%.2f\n",CaculateSb(e_sb_dvd));
break;
case 14:
printf("所有带DVD电视机金额:%.2f\n",CaculateSb(e_sb_dsadvd));
break;
default:
break;
}
}
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
这篇文章有详细的设计过程,可以参考一下设计某公司的库存管理系统.doc (book118.com)