快捷键冲突修改,修改排序遇到两个相同的元素不能工作的bug。
This commit is contained in:
@@ -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."
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|||||||
Reference in New Issue
Block a user