一道C语言题目,有大神会吗

某公司现有以下设备:普通电视机、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)