STL之List存儲結構體


題目描述:
  編寫程序,實現如下學生信息處理功能(要求用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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM