#include #include #include #include #include using namespace std; struct MarksRecord { string name; int maths_marks, chinese_marks, english_marks; string grade; }; vector records; string functionGetGrade(int maths_marks, int chinese_marks, int english_marks){ string grade; int marks_sum; float marks_avg; marks_sum = 1; marks_sum = (maths_marks + chinese_marks + english_marks); marks_avg = marks_sum / 3; if (marks_avg > 90) return "A"; if (marks_avg > 80) return "B"; if (marks_avg > 70) return "C"; return "D"; } void print_menu() { cout << "\n"; cout << "Mark Record System\n"; cout << "\n"; cout << "------------------------------------------\n"; cout << "1. Add marks record \n"; cout << "2. Delete marks record \n"; cout << "3. Edit marks record \n"; cout << "4. Print current marks record in system \n"; cout << "5. import records from file \n"; cout << "6. export records to file \n"; cout << "------------------------------------------\n"; cout << "E. Exit\n"; cout << "Enter your choice: "; } void functionAdd() { string temp; bool name_pass; name_pass = false; MarksRecord record; while (!name_pass){ bool error; error = false; cout << "Enter name: "; cin >> temp; for (size_t i = 0; i < records.size(); i++) { if (records[i].name == temp) { error = true; cout << "ERROR: duplicated student name found"<<"\n"; } } // check if name entered is empty if (temp == string()){ error = true; } if (!error) { record.name = temp; name_pass = true; } } cout << "Enter maths marks: "; cin >> record.maths_marks; cout << "Enter chinese marks: "; cin >> record.chinese_marks; cout << "Enter english marks: "; cin >> record.english_marks; records.push_back(record); cout << "1 record added."; } void functionDelete() { string name; bool user_found; user_found = false; cout << "Enter name to delete: "; cin >> name; for (size_t i = 0; i < records.size(); i++) { if (records[i].name == name) { records.erase(records.begin() + i); user_found = true; break; } } if (!user_found){ cout << "ERROR: student record not found"; }else{ cout << "1 record deleted."; } } void functionEdit() { string name; string temp; bool user_found; cout << "Enter name to edit: "; cin >> name; for (size_t i = 0; i < records.size(); i++) { if (records[i].name == name) { user_found = true; cout << "Enter new maths marks [- to skip]: "; cin >> temp; if (temp != "-") { records[i].maths_marks = stoi(temp); } cout << "Enter new chinese marks [- to skip]: "; cin >> temp; if (temp != "-") { records[i].chinese_marks = stoi(temp); } cout << "Enter new english marks [- to skip]: "; cin >> temp; if (temp != "-") { records[i].english_marks = stoi(temp); } break; } } if (!user_found){ cout << "sorry but no user found to update record"; }else{ cout << "1 record updated."; } } void functionPrint() { cout << endl; cout << setw(10) << setfill(' ') << left << "Name" << setw(10) << setw(10) << setfill(' ') << left << "Maths" << setw(10) << setw(10) << setfill(' ') << left << "Chinese" << setw(10) << setw(10) << setfill(' ') << left << "English" << setw(10) << setw(10) << setfill(' ') << left << "Grade" << setw(10); cout << "" << setw(50) << setfill('-') << "\n"; cout << "\n"; for (const auto& record : records) { string calc_grade; calc_grade = functionGetGrade(record.maths_marks, record.chinese_marks, record.english_marks); cout << setw(10) << setfill(' ') << left << record.name << setw(10) << setfill(' ') << left << record.maths_marks << setw(10) << setfill(' ') << left << record.chinese_marks << setw(10) << setfill(' ') << left << record.english_marks // append 2 chars on the left << setw(2) << setfill(' ') << left << " " << setw(10) << setfill(' ') << left << calc_grade << "\n"; } cout << "\n"; } void functionImport(){ ifstream inFile; ofstream outFile; string student_name, maths_mark, chinese_mark, english_mark, grade; int record_added; record_added = 0; string filename; cout << "Please enter a file with list of student: "; cin >> filename; inFile.open(filename); if (!inFile) { cout << "Cannot open the input file." << endl; // << "The program terminates." << endl; // return 1; }else{ while (true){ inFile >> student_name; if (student_name == "END") { break; }else{ inFile >> maths_mark >> chinese_mark >> english_mark; MarksRecord record; record.name = student_name; record.maths_marks = stoi(maths_mark); record.chinese_marks = stoi(chinese_mark); record.english_marks = stoi(english_mark); records.push_back(record); record_added = record_added + 1; } } cout << "record imported : " << record_added << "\n"; cout << "\n"; inFile.close(); } } void functionExport(){ ofstream outFile; string filename; cout << "Please enter a file to export: "; cin >> filename; outFile.open(filename); outFile << setw(10) << setfill(' ') << "" << "~ STUDENT RECORDS ~"; outFile << "\n"; outFile << "\n"; outFile << setw(10) << setfill(' ') << left << "Name" << setw(10) << setw(10) << setfill(' ') << left << "Maths" << setw(10) << setw(10) << setfill(' ') << left << "Chinese" << setw(10) << setw(10) << setfill(' ') << left << "English" << setw(10) << setw(10) << setfill(' ') << left << "Grade" << setw(10); outFile << "" << setw(50) << setfill('-') << "\n"; outFile << "\n"; for (const auto& record : records) { string calc_grade; calc_grade = functionGetGrade(record.maths_marks, record.chinese_marks, record.english_marks); outFile << setw(10) << setfill(' ') << left << record.name << setw(10) << setfill(' ') << left << record.maths_marks << setw(10) << setfill(' ') << left << record.chinese_marks << setw(10) << setfill(' ') << left << record.english_marks // append 2 chars on the left << setw(2) << setfill(' ') << left << " " << setw(10) << setfill(' ') << left << calc_grade << "\n"; } outFile << "\n"; cout << "export done !" << "\n"; } int main() { char choice; while (true) { print_menu(); cin >> choice; switch (choice) { case '1': functionAdd(); break; case '2': functionDelete(); break; case '3': functionEdit(); break; case '4': functionPrint(); break; case '5': functionImport(); break; case '6': functionExport(); break; // exit handler case 'E': case 'e': return 0; // exception handler default: cout << "Invalid choice. Please try again.\n"; } } return 0; }