快捷键冲突修改,修改排序遇到两个相同的元素不能工作的bug。

This commit is contained in:
unlockable
2023-06-24 11:51:26 +08:00
parent 958a36c5d0
commit 1e9533fb91
2 changed files with 41 additions and 33 deletions

View File

@@ -138,6 +138,7 @@ void ListDisplay::display() {
void ListDisplay::setSortBy(const SortBy _propName) { void ListDisplay::setSortBy(const SortBy _propName) {
this->sortByProp = _propName; this->sortByProp = _propName;
this->sortOrder = ASCENT;
this->reapplyFilter(); this->reapplyFilter();
this->currentPageIndex = 0; this->currentPageIndex = 0;
} }
@@ -170,52 +171,59 @@ void ListDisplay::reapplyFilter() {
this->filteredRecordsPtrList.sort( this->filteredRecordsPtrList.sort(
[&](BaseRecord *const &recordAPtr, [&](BaseRecord *const &recordAPtr,
BaseRecord *const &recordBPtr) -> bool { BaseRecord *const &recordBPtr) -> bool {
return recordAPtr->getRecordID() < recordBPtr->getRecordID() == return (recordAPtr->getRecordID() < recordBPtr->getRecordID() ==
this->sortOrder; this->sortOrder ||
recordAPtr->getRecordID() == recordBPtr->getRecordID());
}); });
break; break;
case SortBy::RecordDate: case SortBy::RecordDate:
this->filteredRecordsPtrList.sort( this->filteredRecordsPtrList.sort(
[&](BaseRecord *const &recordAPtr, [&](BaseRecord *const &recordAPtr,
BaseRecord *const &recordBPtr) -> bool { BaseRecord *const &recordBPtr) -> bool {
return recordAPtr->getDate() > recordBPtr->getDate() == return (recordAPtr->getDate() > recordBPtr->getDate() ==
this->sortOrder; this->sortOrder ||
recordAPtr->getDate() == recordBPtr->getDate());
}); });
break; break;
case SortBy::RecordCourseName: case SortBy::RecordCourseName:
this->filteredRecordsPtrList.sort( this->filteredRecordsPtrList.sort(
[&](BaseRecord *const &recordAPtr, [&](BaseRecord *const &recordAPtr,
BaseRecord *const &recordBPtr) -> bool { BaseRecord *const &recordBPtr) -> bool {
return recordAPtr->getCourseName() < return (
recordBPtr->getCourseName() == recordAPtr->getCourseName() < recordBPtr->getCourseName() ==
this->sortOrder; this->sortOrder ||
recordAPtr->getCourseName() == recordBPtr->getCourseName());
}); });
break; break;
case SortBy::RecordStudentID: case SortBy::RecordStudentID:
this->filteredRecordsPtrList.sort( this->filteredRecordsPtrList.sort(
[&](BaseRecord *const &recordAPtr, [&](BaseRecord *const &recordAPtr,
BaseRecord *const &recordBPtr) -> bool { BaseRecord *const &recordBPtr) -> bool {
return recordAPtr->getStudentNumber() < return (recordAPtr->getStudentNumber() <
recordBPtr->getStudentNumber() == recordBPtr->getStudentNumber() ==
this->sortOrder; this->sortOrder ||
recordAPtr->getStudentNumber() ==
recordBPtr->getStudentNumber());
}); });
break; break;
case SortBy::RecordStudentName: case SortBy::RecordStudentName:
this->filteredRecordsPtrList.sort( this->filteredRecordsPtrList.sort(
[&](BaseRecord *const &recordAPtr, [&](BaseRecord *const &recordAPtr,
BaseRecord *const &recordBPtr) -> bool { BaseRecord *const &recordBPtr) -> bool {
return recordAPtr->getStudentName() < return (recordAPtr->getStudentName() <
recordBPtr->getStudentName() == recordBPtr->getStudentName() ==
this->sortOrder; this->sortOrder ||
recordAPtr->getStudentName() ==
recordBPtr->getStudentName());
}); });
break; break;
case SortBy::RecordType: case SortBy::RecordType:
this->filteredRecordsPtrList.sort( this->filteredRecordsPtrList.sort(
[&](BaseRecord *const &recordAPtr, [&](BaseRecord *const &recordAPtr,
BaseRecord *const &recordBPtr) -> bool { BaseRecord *const &recordBPtr) -> bool {
return recordAPtr->getRecordType() < return (recordAPtr->getRecordType() <
recordBPtr->getRecordType() == recordBPtr->getRecordType() ==
this->sortOrder; this->sortOrder || recordAPtr->getRecordType() == recordBPtr->getRecordType());
}); });
break; break;
default: { default: {
@@ -234,7 +242,7 @@ void ListDisplay::promptForRecordID() {
<< "Record ID to search for: " << resetOutputColor << std::flush; << "Record ID to search for: " << resetOutputColor << std::flush;
// std::cin >> targetID; // std::cin >> targetID;
targetID = safeInputNum<int>("Please input a positive integer.\n", targetID = safeInputNum<int>("Please input a positive integer.\n",
[](const int &num) { return num > 0; }); [](const int &num) { return num > 0; });
try { try {
clearScreen(); clearScreen();
this->allRecordsPtrList this->allRecordsPtrList
@@ -266,7 +274,7 @@ void ListDisplay::promptForFromDate() {
// std::cin >> tempInput; // std::cin >> tempInput;
// std::cin.ignore(); // std::cin.ignore();
tempInput = safeInputNum<int>("Please input a positive integer.\n", tempInput = safeInputNum<int>("Please input a positive integer.\n",
[](const int &num) { return num > 0; }); [](const int &num) { return num > 0; });
curDate->tm_year = curDate->tm_year =
(tempInput == 0 ? curDate->tm_year : tempInput - 1900); (tempInput == 0 ? curDate->tm_year : tempInput - 1900);
std::cout << setoutputcolor(ConsoleColorTool::blue) std::cout << setoutputcolor(ConsoleColorTool::blue)
@@ -274,14 +282,14 @@ void ListDisplay::promptForFromDate() {
// std::cin >> tempInput; // std::cin >> tempInput;
// std::cin.ignore(); // std::cin.ignore();
tempInput = safeInputNum<int>("Please input a positive integer.\n", tempInput = safeInputNum<int>("Please input a positive integer.\n",
[](const int &num) { return num > 0; }); [](const int &num) { return num > 0; });
curDate->tm_mon = (tempInput == 0 ? curDate->tm_mon : tempInput - 1); curDate->tm_mon = (tempInput == 0 ? curDate->tm_mon : tempInput - 1);
std::cout << setoutputcolor(ConsoleColorTool::blue) std::cout << setoutputcolor(ConsoleColorTool::blue)
<< "Day: " << resetOutputColor << std::flush; << "Day: " << resetOutputColor << std::flush;
// std::cin >> tempInput; // std::cin >> tempInput;
// std::cin.ignore(); // std::cin.ignore();
tempInput = safeInputNum<int>("Please input a positive integer.\n", tempInput = safeInputNum<int>("Please input a positive integer.\n",
[](const int &num) { return num > 0; }); [](const int &num) { return num > 0; });
curDate->tm_mday = (tempInput == 0 ? curDate->tm_mday : tempInput); curDate->tm_mday = (tempInput == 0 ? curDate->tm_mday : tempInput);
} }
else { else {
@@ -290,21 +298,21 @@ void ListDisplay::promptForFromDate() {
// std::cin >> tempInput; // std::cin >> tempInput;
// std::cin.ignore(); // std::cin.ignore();
tempInput = safeInputNum<int>("Please input a positive integer.\n", tempInput = safeInputNum<int>("Please input a positive integer.\n",
[](const int &num) { return num > 0; }); [](const int &num) { return num > 0; });
curDate->tm_year = tempInput - 1900; curDate->tm_year = tempInput - 1900;
std::cout << setoutputcolor(ConsoleColorTool::blue) std::cout << setoutputcolor(ConsoleColorTool::blue)
<< "Month: " << resetOutputColor << std::flush; << "Month: " << resetOutputColor << std::flush;
// std::cin >> tempInput; // std::cin >> tempInput;
// std::cin.ignore(); // std::cin.ignore();
tempInput = safeInputNum<int>("Please input a positive integer.\n", tempInput = safeInputNum<int>("Please input a positive integer.\n",
[](const int &num) { return num > 0; }); [](const int &num) { return num > 0; });
curDate->tm_mon = tempInput - 1; curDate->tm_mon = tempInput - 1;
std::cout << setoutputcolor(ConsoleColorTool::blue) std::cout << setoutputcolor(ConsoleColorTool::blue)
<< "Day: " << resetOutputColor << std::flush; << "Day: " << resetOutputColor << std::flush;
// std::cin >> tempInput; // std::cin >> tempInput;
// std::cin.ignore(); // std::cin.ignore();
tempInput = safeInputNum<int>("Please input a positive integer.\n", tempInput = safeInputNum<int>("Please input a positive integer.\n",
[](const int &num) { return num > 0; }); [](const int &num) { return num > 0; });
curDate->tm_mday = tempInput; curDate->tm_mday = tempInput;
} }
this->fromDate = mktime(curDate); this->fromDate = mktime(curDate);
@@ -327,7 +335,7 @@ void ListDisplay::promptForToDate() {
// std::cin >> tempInput; // std::cin >> tempInput;
// std::cin.ignore(); // std::cin.ignore();
tempInput = safeInputNum<int>("Please input a positive integer.\n", tempInput = safeInputNum<int>("Please input a positive integer.\n",
[](const int &num) { return num > 0; }); [](const int &num) { return num > 0; });
curDate->tm_year = curDate->tm_year =
(tempInput == 0 ? curDate->tm_year : tempInput - 1900); (tempInput == 0 ? curDate->tm_year : tempInput - 1900);
std::cout << setoutputcolor(ConsoleColorTool::blue) std::cout << setoutputcolor(ConsoleColorTool::blue)
@@ -335,14 +343,14 @@ void ListDisplay::promptForToDate() {
// std::cin >> tempInput; // std::cin >> tempInput;
// std::cin.ignore(); // std::cin.ignore();
tempInput = safeInputNum<int>("Please input a positive integer.\n", tempInput = safeInputNum<int>("Please input a positive integer.\n",
[](const int &num) { return num > 0; }); [](const int &num) { return num > 0; });
curDate->tm_mon = (tempInput == 0 ? curDate->tm_mon : tempInput - 1); curDate->tm_mon = (tempInput == 0 ? curDate->tm_mon : tempInput - 1);
std::cout << setoutputcolor(ConsoleColorTool::blue) std::cout << setoutputcolor(ConsoleColorTool::blue)
<< "Day: " << resetOutputColor << std::flush; << "Day: " << resetOutputColor << std::flush;
// std::cin >> tempInput; // std::cin >> tempInput;
// std::cin.ignore(); // std::cin.ignore();
tempInput = safeInputNum<int>("Please input a positive integer.\n", tempInput = safeInputNum<int>("Please input a positive integer.\n",
[](const int &num) { return num > 0; }); [](const int &num) { return num > 0; });
curDate->tm_mday = (tempInput == 0 ? curDate->tm_mday : tempInput); curDate->tm_mday = (tempInput == 0 ? curDate->tm_mday : tempInput);
} }
else { else {
@@ -351,21 +359,21 @@ void ListDisplay::promptForToDate() {
// std::cin >> tempInput; // std::cin >> tempInput;
// std::cin.ignore(); // std::cin.ignore();
tempInput = safeInputNum<int>("Please input a positive integer.\n", tempInput = safeInputNum<int>("Please input a positive integer.\n",
[](const int &num) { return num > 0; }); [](const int &num) { return num > 0; });
curDate->tm_year = tempInput - 1900; curDate->tm_year = tempInput - 1900;
std::cout << setoutputcolor(ConsoleColorTool::blue) std::cout << setoutputcolor(ConsoleColorTool::blue)
<< "Month: " << resetOutputColor << std::flush; << "Month: " << resetOutputColor << std::flush;
// std::cin >> tempInput; // std::cin >> tempInput;
// std::cin.ignore(); // std::cin.ignore();
tempInput = safeInputNum<int>("Please input a positive integer.\n", tempInput = safeInputNum<int>("Please input a positive integer.\n",
[](const int &num) { return num > 0; }); [](const int &num) { return num > 0; });
curDate->tm_mon = tempInput - 1; curDate->tm_mon = tempInput - 1;
std::cout << setoutputcolor(ConsoleColorTool::blue) std::cout << setoutputcolor(ConsoleColorTool::blue)
<< "Day: " << resetOutputColor << std::flush; << "Day: " << resetOutputColor << std::flush;
// std::cin >> tempInput; // std::cin >> tempInput;
// std::cin.ignore(); // std::cin.ignore();
tempInput = safeInputNum<int>("Please input a positive integer.\n", tempInput = safeInputNum<int>("Please input a positive integer.\n",
[](const int &num) { return num > 0; }); [](const int &num) { return num > 0; });
curDate->tm_mday = tempInput; curDate->tm_mday = tempInput;
} }
curDate->tm_hour = 0; curDate->tm_hour = 0;
@@ -393,7 +401,7 @@ void ListDisplay::promptForSearchStuID() {
// std::cin >> tempStuID; // std::cin >> tempStuID;
// std::cin.ignore(); // std::cin.ignore();
tempStuID = safeInputNum<int>("Please input a positive integer.\n", tempStuID = safeInputNum<int>("Please input a positive integer.\n",
[](const int &num) { return num > 0; }); [](const int &num) { return num > 0; });
this->searchForStu.setNumber(tempStuID == 0 ? this->searchForStu.getNumber() this->searchForStu.setNumber(tempStuID == 0 ? this->searchForStu.getNumber()
: tempStuID); : tempStuID);
this->reapplyFilter(); this->reapplyFilter();
@@ -487,7 +495,7 @@ void ListDisplay::promptRecordNumPerPage() {
// std::cin >> tempPerPageNum; // std::cin >> tempPerPageNum;
// std::cin.ignore(); // std::cin.ignore();
tempPerPageNum = safeInputNum<int>("Please input a positive integer.\n", tempPerPageNum = safeInputNum<int>("Please input a positive integer.\n",
[](const int &num) { return num > 0; }); [](const int &num) { return num > 0; });
if (tempPerPageNum <= 0) { if (tempPerPageNum <= 0) {
std::cout << setoutputcolor(ConsoleColorTool::red) std::cout << setoutputcolor(ConsoleColorTool::red)
<< "Not a valid number! Record number per page not changed." << "Not a valid number! Record number per page not changed."

View File

@@ -551,7 +551,7 @@ bool StudentInfoManager::cmdSetFilter() {
backSpaceCount = 9; backSpaceCount = 9;
cmd = infoManagerCommand::filterSettings::fromDate; cmd = infoManagerCommand::filterSettings::fromDate;
} }
else if (commandLetter == 't') { else if (commandLetter == 'o') {
std::cout << "To date" << std::flush; std::cout << "To date" << std::flush;
backSpaceCount = 7; backSpaceCount = 7;
cmd = infoManagerCommand::filterSettings::toDate; cmd = infoManagerCommand::filterSettings::toDate;
@@ -606,7 +606,7 @@ bool StudentInfoManager::cmdSetFilter() {
break; break;
case infoManagerCommand::filterSettings::toDate: case infoManagerCommand::filterSettings::toDate:
this->displayer.promptForFromDate(); this->displayer.promptForToDate();
break; break;
case infoManagerCommand::filterSettings::courseName: case infoManagerCommand::filterSettings::courseName:
@@ -735,7 +735,7 @@ void StudentInfoManager::displayHelp() {
std::cout << resetOutputColor; std::cout << resetOutputColor;
std::cout << "├─ Record (I)D\n"; std::cout << "├─ Record (I)D\n";
std::cout << "├─ (F)rom date\n"; std::cout << "├─ (F)rom date\n";
std::cout << "├─ (T)o date\n"; std::cout << "├─ T(o) date\n";
std::cout << "├─ (C)ourse name\n"; std::cout << "├─ (C)ourse name\n";
std::cout << "├─ Studen(t) ID\n"; std::cout << "├─ Studen(t) ID\n";
std::cout << "├─ Student (N)ame\n"; std::cout << "├─ Student (N)ame\n";