題目描述:
編寫程序,實現如下學生信息處理功能(要求用List鏈表實現)
1) 輸入每個學生的信息(學號、姓名、性別及三門課程成績);
2) 插入學生信息;
3) 刪除學生信息;
4) 輸入某學生姓名,顯示該生的信息;
5) 計算全班每名學生的平均成績,並顯示;
測試代碼:
#include <iostream> #include <string> #include <list> #include <algorithm> using std::cin; using std::cout; using std::endl; using std::string; using std::list; using std::find_if; typedef struct { double m_chinese; // 語文成績 double m_math; // 數學成績 double m_english; // 英語成績 double m_average; // 平均成績 }Score; typedef struct { string m_id; // 學號 string m_name; // 姓名 string m_sex; // 性別 Score m_grade; // 成績 }Student; typedef list<Student> StuList; typedef StuList::iterator StuListIt; /* 輸入學生信息 */ Student InputStudentInfo() { Student stu; cout << "請輸入學生的學號、姓名、性別、三門成績:" << endl; cin >> stu.m_id >> stu.m_name >> stu.m_sex; cin >> stu.m_grade.m_chinese >> stu.m_grade.m_math >> stu.m_grade.m_english; return stu; } /* 遍歷學生信息 */ void PrintAllStudent(StuList stulist) { for (Student s : stulist) { cout << s.m_id << " " << s.m_name << " " << s.m_sex << " " << s.m_grade.m_chinese << " " << s.m_grade.m_math << " " << s.m_grade.m_english << endl; } } int main(void) { StuList stulist; Student stu; /* 輸入學生信息 */ stu = InputStudentInfo(); stulist.push_back(stu); PrintAllStudent(stulist); /* 插入學生信息 */ stu = InputStudentInfo(); stulist.push_front(stu); PrintAllStudent(stulist); /* 刪除學生信息 */ string _strName; cout << "請輸入要刪除學生的姓名:" << endl; cin >> _strName; // lambdas表達式 stulist.remove_if([_strName](Student s) {return (s.m_name == _strName); }); PrintAllStudent(stulist); /* 查詢學生信息 */ cout << "請輸入要查詢學生的姓名:" << endl; cin >> _strName; for (Student& s : stulist) { if (s.m_name == _strName) { cout << s.m_id << " " << s.m_name << " " << s.m_sex << " " << s.m_grade.m_chinese << " " << s.m_grade.m_math << " " << s.m_grade.m_english << endl; break; } } /* 計算每個學生的平均成績 */ for (Student& s : stulist) { s.m_grade.m_average = (s.m_grade.m_chinese + s.m_grade.m_math + s.m_grade.m_english) / 3.0; cout << s.m_id << " " << s.m_name << " " << s.m_sex << " " << s.m_grade.m_chinese << " " << s.m_grade.m_math << " " << s.m_grade.m_english << s.m_grade.m_average << endl; } return 0; }