试为下表的圆柱齿轮减速器齿轮参数设计一个数据结构,存放每个齿轮的各个数据项(图号、名称、模数、齿数、蜴旋角、宽度、材料),编写程序应达到下述要求:
1)可按名称或材料排序输出所有齿轮的参数
2)选用-种查找办法检索制定齿轮的信息,若找不到,出示有关信息。
3)在可能的情况下,允许向表中增加齿轮,也可以对某齿轮的数据进行修改。
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
//定义齿轮数据结构
struct Gear {
string graphNum; //图号
string name; //名称
double module; //模数
int teethNum; //齿数
string helixAngle; //螺旋角
double width; //宽度
string material; //材料
};
//按名称排序
bool cmpByName(const Gear& a, const Gear& b) {
return a.name < b.name;
}
//按材料排序
bool cmpByMaterial(const Gear& a, const Gear& b) {
return a.material < b.material;
}
//查找齿轮
string searchGear(const string graphNum, const vector<Gear>& gears) {
for (const auto& gear : gears) {
if (gear.graphNum == graphNum) {
return "名称:" + gear.name + ",模数:" + to_string(gear.module) + ",齿数:" + to_string(gear.teethNum) + ",螺旋角:" + gear.helixAngle + ",宽度:" + to_string(gear.width) + ",材料:" + gear.material;
}
}
return "没有找到该齿轮的信息";
}
//添加齿轮
void addGear(vector<Gear>& gears) {
Gear newGear;
cout << "请输入齿轮的图号:" << endl;
cin >> newGear.graphNum;
cout << "请输入齿轮的名称:" << endl;
cin >> newGear.name;
cout << "请输入齿轮的模数:" << endl;
cin >> newGear.module;
cout << "请输入齿轮的齿数:" << endl;
cin >> newGear.teethNum;
cout << "请输入齿轮的螺旋角:" << endl;
cin >> newGear.helixAngle;
cout << "请输入齿轮的宽度:" << endl;
cin >> newGear.width;
cout << "请输入齿轮的材料:" << endl;
cin >> newGear.material;
gears.push_back(newGear);
}
//修改齿轮
void modifyGear(vector<Gear>& gears) {
string graphNum;
cout << "请输入要修改的齿轮的图号:" << endl;
cin >> graphNum;
bool found = false;
for (auto& gear : gears) {
if (gear.graphNum == graphNum) {
found = true;
cout << "请输入修改后的齿轮的模数:" << endl;
cin >> gear.module;
cout << "请输入修改后的齿轮的齿数:" << endl;
cin >> gear.teethNum;
cout << "请输入修改后的齿轮的螺旋角:" << endl;
cin >> gear.helixAngle;
cout << "请输入修改后的齿轮的宽度:" << endl;
cin >> gear.width;
cout << "请输入修改后的齿轮的材料:" << endl;
cin >> gear.material;
}
}
if (!found) {
cout << "没有找到该齿轮的信息" << endl;
}
}
int main() {
vector<Gear> gears = {
{"JSQ-01", "小锥齿轮", 2.5, 24, "0", 25, "35SiMn"},
{"JSQ-02", "大锥齿轮", 2.5, 75, "0", 25, "45"},
{"JSQ-03", "二级小圆柱齿轮", 3, 21, "0", 55, "45"},
{"JSQ-04", "二级大圆柱齿轮", 3, 59, "0", 50, "45"},
{"JSQ-05", "三级小圆柱齿轮", 4, 20, "12°11′20″", 70,"45"},
{"JSQ-06", "三级大圆柱齿轮", 4, 78, "12°11′20″", 65, "45"}
};
//按名称排序输出齿轮参数
cout << "按名称排序输出所有齿轮的参数:" << endl;
sort(gears.begin(), gears.end(), cmpByName);
for (const auto& gear : gears) {
cout << "图号:" << gear.graphNum << ",名称:" << gear.name << ",模数:" << gear.module << ",齿数:" << gear.teethNum << ",螺旋角:" << gear.helixAngle << ",宽度:" << gear.width << ",材料:" << gear.material << endl;
}
cout << endl;
//按材料排序输出齿轮参数
cout << "按材料排序输出所有齿轮的参数:" << endl;
sort(gears.begin(), gears.end(), cmpByMaterial);
for (const auto& gear : gears) {
cout << "图号:" << gear.graphNum << ",名称:" << gear.name << ",模数:" << gear.module << ",齿数:" << gear.teethNum << ",螺旋角:" << gear.helixAngle << ",宽度:" << gear.width << ",材料:" << gear.material << endl;
}
cout << endl;
//查找齿轮
cout << "查找齿轮:" << endl;
string graphNum;
cout << "请输入要查找的齿轮的图号:" << endl;
cin >> graphNum;
cout << searchGear(graphNum, gears) << endl;
cout << endl;
//添加齿轮
addGear(gears);
cout << "添加齿轮后的参数:" << endl;
for (const auto& gear : gears) {
cout << "图号:" << gear.graphNum << ",名称:" << gear.name << ",模数:" << gear.module << ",齿数:" << gear.teethNum << ",螺旋角:" << gear.helixAngle << ",宽度:" << gear.width << ",材料:" << gear.material << endl;
}
cout << endl;
//修改齿轮
modifyGear(gears);
cout << "修改齿轮后的参数:" << endl;
for (const auto& gear : gears) {
cout << "图号:" << gear.graphNum << ",名称:" << gear.name << ",模数:" << gear.module << ",齿数:" << gear.teethNum << ",螺旋角:" << gear.helixAngle << ",宽度:" << gear.width << ",材料:" << gear.material << endl;
}
cout << endl;
return 0;
}