diff --git a/大作业/ListDisplay.cpp b/大作业/ListDisplay.cpp index b1d7e1e..c77e44b 100644 --- a/大作业/ListDisplay.cpp +++ b/大作业/ListDisplay.cpp @@ -138,6 +138,7 @@ void ListDisplay::display() { void ListDisplay::setSortBy(const SortBy _propName) { this->sortByProp = _propName; + this->sortOrder = ASCENT; this->reapplyFilter(); this->currentPageIndex = 0; } @@ -170,52 +171,59 @@ void ListDisplay::reapplyFilter() { this->filteredRecordsPtrList.sort( [&](BaseRecord *const &recordAPtr, BaseRecord *const &recordBPtr) -> bool { - return recordAPtr->getRecordID() < recordBPtr->getRecordID() == - this->sortOrder; + return (recordAPtr->getRecordID() < recordBPtr->getRecordID() == + this->sortOrder || + recordAPtr->getRecordID() == recordBPtr->getRecordID()); }); break; case SortBy::RecordDate: this->filteredRecordsPtrList.sort( [&](BaseRecord *const &recordAPtr, BaseRecord *const &recordBPtr) -> bool { - return recordAPtr->getDate() > recordBPtr->getDate() == - this->sortOrder; + return (recordAPtr->getDate() > recordBPtr->getDate() == + this->sortOrder || + recordAPtr->getDate() == recordBPtr->getDate()); }); break; case SortBy::RecordCourseName: this->filteredRecordsPtrList.sort( [&](BaseRecord *const &recordAPtr, BaseRecord *const &recordBPtr) -> bool { - return recordAPtr->getCourseName() < - recordBPtr->getCourseName() == - this->sortOrder; + return ( + recordAPtr->getCourseName() < recordBPtr->getCourseName() == + this->sortOrder || + recordAPtr->getCourseName() == recordBPtr->getCourseName()); }); break; case SortBy::RecordStudentID: this->filteredRecordsPtrList.sort( [&](BaseRecord *const &recordAPtr, BaseRecord *const &recordBPtr) -> bool { - return recordAPtr->getStudentNumber() < - recordBPtr->getStudentNumber() == - this->sortOrder; + return (recordAPtr->getStudentNumber() < + recordBPtr->getStudentNumber() == + this->sortOrder || + recordAPtr->getStudentNumber() == + recordBPtr->getStudentNumber()); }); break; case SortBy::RecordStudentName: this->filteredRecordsPtrList.sort( [&](BaseRecord *const &recordAPtr, BaseRecord *const &recordBPtr) -> bool { - return recordAPtr->getStudentName() < - recordBPtr->getStudentName() == - this->sortOrder; + return (recordAPtr->getStudentName() < + recordBPtr->getStudentName() == + this->sortOrder || + recordAPtr->getStudentName() == + recordBPtr->getStudentName()); }); break; case SortBy::RecordType: this->filteredRecordsPtrList.sort( [&](BaseRecord *const &recordAPtr, BaseRecord *const &recordBPtr) -> bool { - return recordAPtr->getRecordType() < + return (recordAPtr->getRecordType() < recordBPtr->getRecordType() == - this->sortOrder; + this->sortOrder || recordAPtr->getRecordType() == recordBPtr->getRecordType()); }); break; default: { @@ -234,7 +242,7 @@ void ListDisplay::promptForRecordID() { << "Record ID to search for: " << resetOutputColor << std::flush; // std::cin >> targetID; targetID = safeInputNum("Please input a positive integer.\n", - [](const int &num) { return num > 0; }); + [](const int &num) { return num > 0; }); try { clearScreen(); this->allRecordsPtrList @@ -266,7 +274,7 @@ void ListDisplay::promptForFromDate() { // std::cin >> tempInput; // std::cin.ignore(); tempInput = safeInputNum("Please input a positive integer.\n", - [](const int &num) { return num > 0; }); + [](const int &num) { return num > 0; }); curDate->tm_year = (tempInput == 0 ? curDate->tm_year : tempInput - 1900); std::cout << setoutputcolor(ConsoleColorTool::blue) @@ -274,14 +282,14 @@ void ListDisplay::promptForFromDate() { // std::cin >> tempInput; // std::cin.ignore(); tempInput = safeInputNum("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); std::cout << setoutputcolor(ConsoleColorTool::blue) << "Day: " << resetOutputColor << std::flush; // std::cin >> tempInput; // std::cin.ignore(); tempInput = safeInputNum("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); } else { @@ -290,21 +298,21 @@ void ListDisplay::promptForFromDate() { // std::cin >> tempInput; // std::cin.ignore(); tempInput = safeInputNum("Please input a positive integer.\n", - [](const int &num) { return num > 0; }); + [](const int &num) { return num > 0; }); curDate->tm_year = tempInput - 1900; std::cout << setoutputcolor(ConsoleColorTool::blue) << "Month: " << resetOutputColor << std::flush; // std::cin >> tempInput; // std::cin.ignore(); tempInput = safeInputNum("Please input a positive integer.\n", - [](const int &num) { return num > 0; }); + [](const int &num) { return num > 0; }); curDate->tm_mon = tempInput - 1; std::cout << setoutputcolor(ConsoleColorTool::blue) << "Day: " << resetOutputColor << std::flush; // std::cin >> tempInput; // std::cin.ignore(); tempInput = safeInputNum("Please input a positive integer.\n", - [](const int &num) { return num > 0; }); + [](const int &num) { return num > 0; }); curDate->tm_mday = tempInput; } this->fromDate = mktime(curDate); @@ -327,7 +335,7 @@ void ListDisplay::promptForToDate() { // std::cin >> tempInput; // std::cin.ignore(); tempInput = safeInputNum("Please input a positive integer.\n", - [](const int &num) { return num > 0; }); + [](const int &num) { return num > 0; }); curDate->tm_year = (tempInput == 0 ? curDate->tm_year : tempInput - 1900); std::cout << setoutputcolor(ConsoleColorTool::blue) @@ -335,14 +343,14 @@ void ListDisplay::promptForToDate() { // std::cin >> tempInput; // std::cin.ignore(); tempInput = safeInputNum("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); std::cout << setoutputcolor(ConsoleColorTool::blue) << "Day: " << resetOutputColor << std::flush; // std::cin >> tempInput; // std::cin.ignore(); tempInput = safeInputNum("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); } else { @@ -351,21 +359,21 @@ void ListDisplay::promptForToDate() { // std::cin >> tempInput; // std::cin.ignore(); tempInput = safeInputNum("Please input a positive integer.\n", - [](const int &num) { return num > 0; }); + [](const int &num) { return num > 0; }); curDate->tm_year = tempInput - 1900; std::cout << setoutputcolor(ConsoleColorTool::blue) << "Month: " << resetOutputColor << std::flush; // std::cin >> tempInput; // std::cin.ignore(); tempInput = safeInputNum("Please input a positive integer.\n", - [](const int &num) { return num > 0; }); + [](const int &num) { return num > 0; }); curDate->tm_mon = tempInput - 1; std::cout << setoutputcolor(ConsoleColorTool::blue) << "Day: " << resetOutputColor << std::flush; // std::cin >> tempInput; // std::cin.ignore(); tempInput = safeInputNum("Please input a positive integer.\n", - [](const int &num) { return num > 0; }); + [](const int &num) { return num > 0; }); curDate->tm_mday = tempInput; } curDate->tm_hour = 0; @@ -393,7 +401,7 @@ void ListDisplay::promptForSearchStuID() { // std::cin >> tempStuID; // std::cin.ignore(); tempStuID = safeInputNum("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() : tempStuID); this->reapplyFilter(); @@ -487,7 +495,7 @@ void ListDisplay::promptRecordNumPerPage() { // std::cin >> tempPerPageNum; // std::cin.ignore(); tempPerPageNum = safeInputNum("Please input a positive integer.\n", - [](const int &num) { return num > 0; }); + [](const int &num) { return num > 0; }); if (tempPerPageNum <= 0) { std::cout << setoutputcolor(ConsoleColorTool::red) << "Not a valid number! Record number per page not changed." diff --git a/大作业/StudentInfoManager.cpp b/大作业/StudentInfoManager.cpp index cd58cd1..51a85ec 100644 --- a/大作业/StudentInfoManager.cpp +++ b/大作业/StudentInfoManager.cpp @@ -551,7 +551,7 @@ bool StudentInfoManager::cmdSetFilter() { backSpaceCount = 9; cmd = infoManagerCommand::filterSettings::fromDate; } - else if (commandLetter == 't') { + else if (commandLetter == 'o') { std::cout << "To date" << std::flush; backSpaceCount = 7; cmd = infoManagerCommand::filterSettings::toDate; @@ -606,7 +606,7 @@ bool StudentInfoManager::cmdSetFilter() { break; case infoManagerCommand::filterSettings::toDate: - this->displayer.promptForFromDate(); + this->displayer.promptForToDate(); break; case infoManagerCommand::filterSettings::courseName: @@ -735,7 +735,7 @@ void StudentInfoManager::displayHelp() { std::cout << resetOutputColor; std::cout << "├─ Record (I)D\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 << "├─ Studen(t) ID\n"; std::cout << "├─ Student (N)ame\n";