ユーザーが実行したい方法に応じて、ファイルの内容を順番に並べ替えるプログラムを作成しています。このファイルには、学生の姓、名、GPA、家族の収入が含まれています。姓、収入、GPA を含むユーザーの選択に基づいてプログラムを並べ替えました。私の問題は、プログラムがファイルを並べ替えると、具体的には収入、gpa、または姓のみを並べ替えてしまうことです。行全体を交換したい。
たとえば、下に 4 つの名前があり、姓、名、GPA、家族の収入が左から右に表示されます。
ヘルナンデス ジョシュア 3.40 65000
スーハリー 3.33 60000
唐エドワード 4.00 100000
関ジェシカ 3.20 50000
私のプログラムが姓でファイルをソートした後、姓のみをソートし、姓がどこにあるかに合わせて残りのデータを変更しません。
関ジョシュア 3.40 65000
ヘルナンデス・ハリー 3.33 60000
Su エドワード 4.00 100000
唐ジェシカ 3.20 50000
これが私のクラスの人です
void getData(Person student[], int& item)
{
ifstream fin;
fin.open("C:students.txt");
item = 0;
while(!fin.eof())
{
fin >> student[item].lastName >> student[item].firstName >> student[item].gpa >> student[item].income;
item++;
}
}
void swap(string& name1, string& name2)
{
//this is a swap function that swaps the data of the two string arguments.
string temp;
temp = name1;
name1 = name2;
name2 = temp;
}
void swap2(float& num1, float& num2)
{
//this is a swap function that swaps the data of the two float arguments
float temp;
temp = num1;
num1 = num2;
num2 = temp;
}
void sortByLastName(Person student[], int item)
{
//This for loop will put the items in alphabetical order.
for(int j=0; j<item-1; j++)
{
//will perform the swapping until all items are in alphabetical order.
for(int i=0; i<item-1; i++)
//will swap the two items next to each other if the first item is bigger than the next item.
if(student[i].lastName > student[i+1].lastName)
swap(student[i].lastName, student[i+1].lastName);
}
}
void sortByGpa(Person student[], int item)
{
//This for loop will put the items in descending order.
for(int j=0; j<item-1; j++)
{
//will perform the swapping until all items are in descending order.
for(int i=0; i<item-1; i++)
//will swap the two items next to each other if the first item is smaller than the next item.
if(student[i].gpa < student[i+1].gpa)
swap2(student[i].gpa, student[i+1].gpa);
}
}
void sortByIncome(Person student[], int item)
{
//This for loop will put the items in ascending order.
for(int j=0; j<item-1; j++)
{
//will perform the swapping until all items are in descending order.
for(int i=0; i<item-1; i++)
//will swap the two items next to each other if the first item is smaller than the next item.
if(student[i].income < student[i+1].income)
swap2(student[i].income, student[i+1].income);
}
}
void getChoice(int choice, Person student[], int item)
{
cout << "Press 1 to sort by last name. Press 2 to sort by gpa. Press 3 to sort by income.";
cin >> choice;
if(choice == 1)
sortByLastName(student, item);
else if(choice == 2)
sortByGpa(student, item);
else if(choice == 3)
sortByIncome(student, item);
}
void output(Person student[], int item)
{
//Displays all of the names to the screen.
for(int i=0; i<item; i++)
cout << student[i].lastName << " " << student[i].firstName << " " << student[i].gpa << " " << student[i].income << endl;
}