Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 15 kết quả

Đề tài: Code sử dụng vector để quản lý bảng điểm trong lập trình C++

  1. #1
    Ngày gia nhập
    12 2008
    Bài viết
    25

    Mặc định Code sử dụng vector để quản lý bảng điểm trong lập trình C++

    các anh cùng các bạn xem thủ giúp mình sao khi nhập thì nó baó lổi,mình còn gà về ván đề vector và string lắm.

    Mình xin post luôn cái đề:
    Bảng điểm học sinh là một danh sách bao gồm: họ tên, điểm văn, toán, điểm trung bình, và xếp loại của từng học sinh. Biết rằng:
    - ĐTB = (Điểm Văn + Điểm Toán) / 2.
    - Xếp loại: Giỏi (>= 8), Khá (>= 6.5), TB (>= 5), Yếu (< 5).
    Sử dụng thư viện string và vector, viết chương trình thực hiện:
    - Nhập vào danh sách bảng điểm học sinh (họ tên, điểm văn, toán) của một lớp
    - Tính điểm trung bình và xếp loại cho từng học sinh.
    - Xuất danh sách học sinh thoả:
    a) Học lực Giỏi
    b) Học lực từ Khá trở lên và học đều (với học đều định nghĩa là điểm toán và điểm văn chênh lệch không quá 2)
    - Sắp xếp và in ra danh sách lớp
    a) Theo tên (thứ tự từ điển tăng dần)
    b) Theo DTB (nếu 2 HS có DTB bằng nhau thì xếp theo tên)
    .Hết.


    file.h
    C++ Code:
    1. C++#include "string"
    2. #include "iostream"
    3. #include "vector"
    4. using namespace std;
    5.  
    6. class CHocSinh  
    7. {
    8. private:
    9.     float m_fToan;
    10.     float m_fVan;
    11.     string m_pHoTen;
    12. public:
    13.     CHocSinh();
    14.     CHocSinh(string, float, float);
    15.     virtual ~CHocSinh();
    16.     void Nhap();
    17.     void Xuat();
    18.     float diemTrungBinh();
    19.     int xepLoai();
    20.     int hocDeu();
    21.     bool operator > (const CHocSinh &);
    22.     bool operator < (const CHocSinh &);
    23.     bool operator == (const CHocSinh &);
    24. };
    25.  
    26. template<class T>
    27. class CLopHoc
    28. {
    29. private:
    30.     int iNum;
    31.     vector<T> Array;
    32. public:
    33.     void Nhap()
    34.     {
    35.         cout << "How many student do you wish input: ";
    36.         cin >> iNum;
    37.         for(int i=0; i<iNum; i++)
    38.         {
    39.             cout << "Array["<<i<<"]: " << endl;
    40.             Array[i].Nhap();
    41.         }
    42.     }
    43.     void Xuat()
    44.     {
    45.         for(int i=0; i<iNum; i++)
    46.             Array[i].Xuat();
    47.     }
    48.     void sapXepTheoGioi()
    49.     {
    50.         for(int i=0; i<iNum; i++)
    51.         {
    52.             if(Array[i].xepLoai()==1)
    53.             {
    54.                 Array[i].Xuat();
    55.             }
    56.         }
    57.     }
    58.     void sapXepTheoKhaVaDeu()
    59.     {
    60.         for(int i=0; i<iNum; i++)
    61.         {
    62.             if(Array[i].xepLoai() == 2  &&  Array[i].hocDeu() == 1)
    63.             {
    64.                 Array[i].Xuat();
    65.             }
    66.         }
    67.     }
    68.     void sapXepTheoTen()
    69.     {
    70.         for(int i=0; i<iNum-1; i++)
    71.             for(int j=i+1; j<iNum; j++)
    72.             {
    73.                 if(Array[i] > Array[j])
    74.                 {
    75.                     T temp        = Array[i];
    76.                     Array[i]      = Array[j];
    77.                     Array[j]      = temp;
    78.                 }
    79.             }
    80.     }
    81.     void sapXepTheoDiemTrungBinh()
    82.     {
    83.         for(int i=0; i<iNum-1; i++)
    84.             for(int j=i+1; j<iNum; j++)
    85.             {
    86.                 if(Array[i].diemTrungBinh() > Array[j].diemTrungBinh())
    87.                 {
    88.                     T temp        = Array[i];
    89.                     Array[i]      = Array[j];
    90.                     Array[j]      = temp;
    91.                 }
    92.                 else
    93.                     if(Array[i].diemTrungBinh() == Array[j].diemTrungBinh())
    94.                     {
    95.                         for(int i=0; i<iNum-1; i++)
    96.                             for(int j=i+1; j<iNum; j++)
    97.                             {
    98.                                 if(Array[i] > Array[j])
    99.                                 {
    100.                                     T temp        = Array[i];
    101.                                     Array[i]      = Array[j];
    102.                                     Array[j]      = temp;
    103.                                 }
    104.                             }
    105.                     }
    106.                
    107.             }
    108.     }
    109.  
    110.  
    111. };


    file.cpp

    C++ Code:
    1. C++CHocSinh::CHocSinh()
    2. {
    3.     m_pHoTen = "The Nang";
    4.     m_fToan  = 8;
    5.     m_fVan   = 8;
    6. }
    7.  
    8. CHocSinh::CHocSinh(string s, float fToan, float fVan)
    9. {
    10.     m_pHoTen = s;
    11.     m_fToan  = fToan;
    12.     m_fVan   = fVan;
    13. }
    14.  
    15. CHocSinh::~CHocSinh()
    16. {
    17.  
    18. }
    19.  
    20. void CHocSinh::Nhap()
    21. {
    22.     char temp[200];
    23.     cout << "Enter Full Name: ";
    24.     cin.ignore(1);
    25.     cin.getline(temp, 200, '\n');
    26.     m_pHoTen = temp;
    27.  
    28.     do
    29.     {
    30.         cout << "Enter point mathematic: ";
    31.         cin >> this->m_fToan;
    32.         if(this->m_fToan < 0 || this->m_fToan > 10)
    33.             cout << "Error!!!, please enter again." << endl;
    34.  
    35.     }while(this->m_fToan < 0 || this->m_fVan > 10);
    36.  
    37.     do
    38.     {
    39.         cout << "Enter point Literature: ";
    40.         cin >> this->m_fVan;
    41.         if(this->m_fVan < 0 || this->m_fVan > 10)
    42.             cout << "Error!!!,please enter again." << endl;
    43.  
    44.     }while(this->m_fVan < 0 || this->m_fVan > 10);
    45. }
    46.  
    47. void CHocSinh::Xuat()
    48. {
    49.     cout << "  Full Name: "        << this->m_pHoTen << endl;
    50.     cout << "  Point mathematic: " << this->m_fToan << endl;
    51.     cout << "  Point literature: " << this->m_fVan << endl;
    52.  
    53.     int xl = xepLoai();
    54.     switch(xl)
    55.     {
    56.     case 1: cout << "  Hoc Sinh Gioi.";
    57.         break;
    58.     case 2: cout << "  Hoc Sinh Kha.";
    59.         break;
    60.     case 3: cout << "  Hoc Sinh Trung Binh.";
    61.         break;
    62.     case 4: cout << "  Hoc Sinh Yeu.";
    63.         break;
    64.     }
    65.     cout << endl;
    66. }
    67.  
    68. float CHocSinh::diemTrungBinh()
    69. {
    70.     return (this->m_fToan + this->m_fVan) / 2;
    71. }
    72.  
    73. int CHocSinh::xepLoai()
    74. {
    75.     int xeploai;
    76.  
    77.     if(this->diemTrungBinh() >= 8)
    78.         xeploai = 1;
    79.     else
    80.         if(this->diemTrungBinh() >= 6.5)
    81.             xeploai = 2;
    82.         else
    83.             if(this->diemTrungBinh() >= 5)
    84.                 xeploai = 3;
    85.             else
    86.                 xeploai = 4;
    87.  
    88.     return xeploai;
    89. }
    90.  
    91. int CHocSinh::hocDeu()
    92. {
    93.     if(abs(this->m_fToan - this->m_fVan) <=2)
    94.         return 1;
    95.     return 0;
    96. }
    97.  
    98. bool CHocSinh::operator >(const CHocSinh &a)
    99. {
    100.     for(int i=0; i<this->m_pHoTen.length(); i++)
    101.     {
    102.         if(this->m_pHoTen[i] > a.m_pHoTen[i])
    103.             return true;
    104.         else
    105.             if(this->m_pHoTen[i] != a.m_pHoTen[i])
    106.                 return false;
    107.         if(this->m_pHoTen[i] == NULL || a.m_pHoTen[i] == NULL)
    108.             break;
    109.     }
    110.  
    111.     return false;
    112. }
    113.  
    114. bool CHocSinh::operator <(const CHocSinh &a)
    115. {
    116.     for(int i=0; i<this->m_pHoTen.length(); i++)
    117.     {
    118.         if(this->m_pHoTen[i] < a.m_pHoTen[i])
    119.             return true;
    120.         else
    121.             if(this->m_pHoTen[i] != a.m_pHoTen[i])
    122.                 return false;
    123.         if(this->m_pHoTen[i] == NULL || a.m_pHoTen[i] == NULL)
    124.             break;
    125.     }
    126.     return false;
    127. }
    128.  
    129. bool CHocSinh::operator ==(const CHocSinh &a)
    130. {
    131.     if((*this) > a)
    132.         return false;
    133.     else
    134.         if((*this) < a)
    135.             return false;
    136.         else
    137.             return true;
    138. }
    Đã được chỉnh sửa lần cuối bởi anhhaibi : 19-04-2009 lúc 11:53 PM. Lý do: bài viết không hoàn chỉnh

  2. #2
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    ở đây có mỗi CHocSinh. Dùng template làm gì :|
    None!

  3. #3
    Ngày gia nhập
    12 2008
    Bài viết
    25

    Cái đó em đang tập dùng template thôi,anh coi giúp em đi tại sao mổi lần nhập lại sai,thank Xcross87

  4. #4
    Ngày gia nhập
    10 2008
    Bài viết
    178

    theo mình thì phải resize() cho no đã
    C++ Code:
    1.     void Nhap()
    2.     {
    3.         cout << "How many student do you wish input: ";
    4.         cin >> iNum;
    5.         Array.resize(iNum);//bác viết thêm dòng này và chạy thử nha.(:X) đoán vậy
    6.         for(int i=0; i<iNum; i++)
    7.         {
    8.             cout << "Array["<<i<<"]: " << endl;
    9.             Array[i].Nhap();
    10.         }
    11.     }

  5. #5
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    - rua_con đoán đúng rồi đó nhưng lập trình thì có compiler, cậu đoán làm gì cho mệt vậy, cứ chạy thử sẽ hiểu thôi.
    - Code của cậu kia không có constructor thì lấy gì vector có phần tử nào !
    - Hai cái đoạn này :
    C++ Code:
    1. C++CHocSinh::CHocSinh()
    2. {
    3.     m_pHoTen = "The Nang";
    4.     m_fToan  = 8;
    5.     m_fVan   = 8;
    6. }
    7.  
    8. CHocSinh::CHocSinh(string s, float fToan, float fVan)
    9. {
    10.     m_pHoTen = s;
    11.     m_fToan  = fToan;
    12.     m_fVan   = fVan;
    13. }
    -> nhập thành một và dùng initialization list.
    - Sao class CLopHoc cậu lại inline hết trong khi CHocSinh cậu lại không inline cho method vậy ?
    - Mấy cái const cho method không modify dữ liệu đâu hết rồi ?
    - Đoạn này :
    C++ Code:
    1. CHocSinh(string, float, float);
    -> Dùng const string& cho tham số, tạo copy của nó là quá tốn kém.
    - Đoạn này :
    C++ Code:
    1. for(int i=0; i<this->m_pHoTen.length(); i++)
    gọi length() chi mà nhiều vậy cậu, tạo 1 biến unsigned ngoài for cho nó đỡ mắt công gọi hàm đi.
    - Sao lúc lại dùng std::string lúc lại dùng char* ?
    C++ Code:
    1.  
    2.     char temp[200];
    3.     cout << "Enter Full Name: ";
    4.     cin.ignore(1);
    5.     cin.getline(temp, 200, '\n');
    6.     m_pHoTen = temp;
    -> đổi thằng temp thành std::string đi.
    - Để ý :
    C++ Code:
    1. private:
    2.     float m_fToan;
    3.     float m_fVan;
    4.     string m_pHoTen;
    và thứ tự constructor tham số
    C++ Code:
    1. CHocSinh(string, float, float);
    -> nó có thể sẽ dẫn đến bug cho cậu đấy.
    - Xếp loại thì nên dùng :
    C++ Code:
    1. enum LOAI { kha, gioi, trung_binh, yeu };
    không nên dùng integer chỗ đó, code sẽ rõ ràng hơn rất nhiều.

  6. #6
    Ngày gia nhập
    12 2008
    Bài viết
    25

    Mặc định Code sử dụng vector để quản lý bảng điểm trong lập trình C++

    Anh rox_rook có thể hướng dẫn em sơ qua về hàm enum được không, cái này em củng chưa bik : initialization list,rùi nói rỏ hơn về cái đổi temp thành std::string,cảm ơn anh nhiều lắm,tiện thể cảm ơn rua_con nha.

  7. #7
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    1.
    C++ Code:
    1. cout << "Enter Full Name: ";
    2. getline( cin, m_pHoten );
    2.
    C++ Code:
    1. CHocSinh::CHocSinh( const string& s = "The Nang", float fToan = 8.0, float fVan = 8.0 )
    2.     :m_pHoTen( s ), m_fToan( fToan ), m_fVan( fVan )
    3. {   }
    3.
    C++ Code:
    1. enum LOAI_HOC_SINH {
    2.     gioi,
    3.     kha,
    4.     trung_binh,
    5.     yeu
    6. };
    7.  
    8.  
    9. LOAI_HOC_SINH CHocSinh::xepLoai()
    10. {
    11.     LOAI_HOC_SINH xeploai;
    12.  
    13.     if(this->diemTrungBinh() >= 8)
    14.         xeploai = gioi;
    15.     else
    16.         if(this->diemTrungBinh() >= 6.5)
    17.             xeploai = kha;
    18.         else
    19.             if(this->diemTrungBinh() >= 5)
    20.                 xeploai = trung_binh;
    21.             else
    22.                 xeploai = yeu;
    23.  
    24.     return xeploai;
    25. }
    4.
    C++ Code:
    1. class CHocSinh
    2. {
    3. private:
    4.     float m_fToan;
    5.     float m_fVan;
    6.     string m_pHoTen;
    7.  
    8. public:
    9.     CHocSinh();
    10.     CHocSinh(string, float, float);
    11.     virtual ~CHocSinh();
    12.     void Nhap();
    13.     void Xuat() const;
    14.     float diemTrungBinh() const;
    15.     int xepLoai() const;
    16.     int hocDeu() const;
    17.     bool operator > (const CHocSinh &) const;
    18.     bool operator < (const CHocSinh &) const;
    19.     bool operator == (const CHocSinh &) const;
    20. };
    5.
    C++ Code:
    1. bool CHocSinh::operator <(const CHocSinh &a)
    2. {
    3.     /*
    4.         !!!
    5.     */
    6.     int len = m_pHoTen.length();
    7.    
    8.     for(int i=0; i< len; i++)
    9.     {
    10.         if(this->m_pHoTen[i] < a.m_pHoTen[i])
    11.             return true;
    12.         else
    13.             if(this->m_pHoTen[i] != a.m_pHoTen[i])
    14.                 return false;
    15.         if(this->m_pHoTen[i] == NULL || a.m_pHoTen[i] == NULL)
    16.             break;
    17.     }
    18.     return false;
    19. }
    6.
    C++ Code:
    1. template< class T >
    2. class CLopHoc
    3. {
    4. private:
    5.     int iNum;
    6.     vector< T > Array;
    7.    
    8. public :
    9.     CLopHoc( int iNum = 10 )
    10.         :iNum( iNum ), Array( iNum )
    11.     {   }
    12.  
    13.     .....
    14. }

  8. #8
    Ngày gia nhập
    12 2008
    Bài viết
    25

    woa cảm ơn anh rất nhiều.Một diển đàn thật tuyệt vời.

  9. #9
    Ngày gia nhập
    04 2009
    Bài viết
    17

    PHP Code:
    if(this->m_pHoTen[i] != a.m_pHoTen[i])
                    return 
    false
    cho mình hỏi cái phần số 5 ak cái doạn code trên có y nghĩa j, minh thấy kô cần cũng đc mà

  10. #10
    Ngày gia nhập
    04 2009
    Bài viết
    17

    trong đoạn code 5 mình đổi dòng cuối cùng return false thành return true thì ý nghĩa có thay đổi kô?thank

Các đề tài tương tự

  1. lỗi no matching function for call to `vector::vector(vector)'
    Gửi bởi ngonchanloi89 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 10-11-2013, 11:25 AM
  2. Lập trình C++ code chương trình nhân vector với ma trận, kết quả sai?
    Gửi bởi duachuot30_4 trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 2
    Bài viết cuối: 04-06-2012, 09:23 AM
  3. Mã nguồn C Lỗi code khai báo lại toán tử + trong việc cộng 2 vector, mong giúp đỡ ạ
    Gửi bởi tuansaker3291 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 22-02-2012, 12:11 AM
  4. Code tính tích có hướng 2 vector bằng C++. Tại sao borland C++ không biên dịch được?
    Gửi bởi prt_awm trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 5
    Bài viết cuối: 28-10-2010, 07:02 PM
  5. vector trong lập trình OOP là gì? vector trên C++ là gì?
    Gửi bởi tunglong123 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 01-05-2009, 12:03 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn