Я знаю, что есть способы улучшить и упростить способы сделать это, но для моего класса это единственное, что я могу использовать и просто работать с тем, что у меня есть ,Переместить остальных членов массива Struct после сортировки одного из его членов
Я работаю над проектом меню инвентаря, и мне нужно отсортировать номер «sku» с сортировкой пузыря, теперь моя проблема в том, что Я не знаю, как перемещать других участников одновременно ,
Каждый номер sku имеет свое название, цену и количество. Код, который у меня есть, только с номерами sku, и это работает, единственное, что остальные члены остаются в одном месте.
Что я могу сделать?
ПРИМЕЧАНИЕ: Функция sortArray
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdlib>
using namespace std;
struct inventory {
string name;
int sku;
int quantity;
double price;
};
int size = 0;
void fillArray (inventory[], int&, ifstream&);
void sortArray (inventory[], int);
void displayIn (inventory[], int);
int lookupSku (inventory[], int, int);
int lookupName (inventory[], int, string);
int main(){
// Constants for menu choices
const int DISPLAY_INVENTORY = 1,
LOOKUP_SKU = 2,
LOOKUP_NAME = 3,
QUIT_CHOICE = 4;
// Variables
int choice;
inventory products [100];
ifstream fin;
fin.open ("inventory.dat");
if (!fin)
{
cout << endl << endl
<< " ***Program Terminated. *** " << endl << endl
<< " Input file failed to open. " << endl;
system ("PAUSE>NUL");
return 1;
}
fillArray (products, size, fin);
sortArray (products, size);
// Set up numeric output formatting.
cout << fixed << showpoint << setprecision(2);
do
{
// Display the menu.
cout << "\n\t\t Manage Inventory Menu\n\n"
<< "1. Display inventory sorted by sku\n"
<< "2. Lookup a product by sku\n"
<< "3. Lookup a product by name\n"
<< "4. Quit the Program\n\n"
<< "Enter your choice: ";
cin >> choice;
cout << endl;
// Validate the menu selection.
while (choice < DISPLAY_INVENTORY || choice > QUIT_CHOICE)
{
cout << "Please enter a valid menu choice: ";
cin >> choice;
}
// Validate and process the user's choice.
if (choice != QUIT_CHOICE)
{
int indexSku,
indexName,
skuChoice;
string nameChoice;
switch (choice)
{
case DISPLAY_INVENTORY:
displayIn (products, size);
break;
case LOOKUP_SKU:
cout << "Enter the Sku number: ";
cin >> skuChoice;
indexSku = lookupSku(products, size, skuChoice);
cout << "Product Name: " << products[indexSku].name << endl
<< "Sku: " << products[indexSku].sku << endl
<< "Quantity: " << products[indexSku].quantity << endl
<< "Price: " << products[indexSku].price << endl;
break;
case LOOKUP_NAME:
cout << "Enter name of product with no spaces: ";
cin >> nameChoice;
cout << endl;
indexName = lookupName (products, size, nameChoice);
cout << "Product Name: " << products[indexName].name << endl
<< "Sku: " << products[indexName].sku << endl
<< "Quantity: " << products[indexName].quantity << endl
<< "Price: " << products[indexName].price << endl;
break;
}
}
} while (choice != QUIT_CHOICE);
fin.close();
return 0;
}
void fillArray (inventory product[], int &size, ifstream &fin)
{
int counter = 0;
while (fin >> product[counter].name)
{
fin >> product[counter].sku>> product[counter].quantity
>> product[counter].price;
counter ++;
}
size = counter;
}
void sortArray (inventory product[], int size)
{
bool swap;
int temp;
do
{
swap = false;
for (int count = 0; count < (size - 1); count++)
{
if (product[count].sku > product[count + 1].sku)
{
temp = product[count].sku;
product[count].sku = product[count + 1].sku;
product[count + 1].sku = temp;
swap = true;
}
}
} while (swap);
}
void displayIn (inventory product[], int size)
{
for (int i = 0; i < size; i++)
{
cout << product[i].sku << " " << product[i].quantity << " "
<< product[i].price << " " << setw(4) << product[i].name
<<endl;
}
}
int lookupSku(inventory product[], int size, int value)
{
int first = 0,
last = size - 1,
middle,
position = -1;
bool found = false;
while (!found && first <= last)
{
middle = (first + last)/2;
if (product[middle].sku == value)
{
found = true;
position = middle;
}
else if (product[middle].sku > value)
last = middle - 1;
else
first = middle + 1;
}
return position;
}
int lookupName (inventory product[], int size , string value)
{
int first = 0,
last = size - 1,
middle,
position = -1;
bool found = false;
while (!found && first <= last)
{
middle = (first + last)/2;
if (product[middle].name == value)
{
found = true;
position = middle;
}
else if (product[middle].name > value)
last = middle - 1;
else
first = middle + 1;
}
return position;
}
Hii спасибо! Я пробовал это так, но это дает мне ошибку: ошибка не может преобразовать «инвентарь» в «int» в присваивании и не подходит для оператора =, поскольку типы операндов - «инвентарь» и «int ' –
@MariaFernanda, какая ошибка вы получаете? Ошибка времени компиляции? Ошибка времени выполнения? –
Это, вероятно, потому, что у вас все еще есть 'int temp;'. –