Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: kế thừa

  1. #1
    Ngày gia nhập
    09 2021
    Bài viết
    0

    Mặc định kế thừa

    Đề của em đây ạ

    - Khai báo lớp môn học với các thuộc tính: tên môn học, điểm chuyên cần (CC), điểm kiểm tra (KT), điểm thi (DT).

    - Khai báo lớp sinh viên kế thừa từ lớp môn học và thêm các thuộc tính: họ tên, lớp, mã sinh viên

    - Xây dựng các toán tử >>, <<, phương thức tính điểm học phần cho một sinh viên (theo công thực dhp = CC * 0.1 + KT *0.2 + DT *0.7)

    - Viết chương trình nhập vào danh sách gồm n sinh viên. Thực hiện:

    + In ra màn hình thông tin các sinh viên bị cấm thi (điểm chuyên cần dưới 5 hoặc điểm kiểm tra bằng 0).

    + In ra màn hình thông tin các sinh viên phải thi lại (điểm học phần dưới 4.0)

    + Xếp loại sinh viên 8<=dhp<=10: loại giỏi, 7<=dtb<8: loại khá, 6<=dtb<7: trung bình, 5<=dtb<6: loại kém, còn lại là loại yếu. In kết quả lên màn hình.

    C++ Code:
    1. #include<iostream>
    2. #include<iomanip>
    3. using namespace std;
    4.  
    5. class monHoc{
    6.     private:
    7.         string tenMonHoc;
    8.         float CC, KT, DT, diemHocPhan;
    9.     public:
    10.         void nhap(){
    11.             cout<<"Nhap mon hoc: ";
    12.             cin.ignore();
    13.             getline(cin, tenMonHoc);
    14.             cout<<"Diem CC:";
    15.             cin>>CC;
    16.             cout<<"Diem KT:";
    17.             cin>>KT;
    18.             cout<<"Diem DT:";
    19.             cin>>DT;
    20.         }
    21.         void xuat(){
    22.             cout<<setw(15)<<left<<tenMonHoc;
    23.             cout<<setw(10)<<left<<CC;
    24.             cout<<setw(10)<<left<<KT;
    25.             cout<<setw(10)<<left<<DT;
    26.         }
    27.         float tinhDiem(){
    28.             return diemHocPhan = (0.1*CC) + (0.2*KT) + (0.7*DT);
    29.         }
    30.         float diemCC(){
    31.             return CC; 
    32.         }
    33.         float diemKT(){
    34.             return KT;
    35.         }
    36. };
    37.  
    38. class sinhVien: public monHoc{
    39.     private:
    40.         string hoTen, lop, maSV;
    41.     public:
    42.         void nhapSV(){
    43.             monHoc::nhap();
    44.             cin.ignore();
    45.             cout<<"Ho Ten: "; getline(cin, hoTen);
    46.             cout<<"Lop: "; getline(cin, lop);  
    47.             cout<<"Ma SV: "; getline(cin, maSV);
    48.         }
    49.         void xuatSV(){
    50.             monHoc::xuat();
    51.             cout<<setw(15)<<left<<hoTen;
    52.             cout<<setw(15)<<left<<lop; 
    53.             cout<<setw(15)<<left<<maSV;
    54.             cout<<setw(15)<<left<<monHoc::tinhDiem();  
    55.             cout<<endl;
    56.         }
    57.        
    58. };
    59.  
    60. void nhapDS(sinhVien *sv, int n){
    61.     for(int i = 0; i<n; i++){
    62.         cout<<"Sinh Vien ["<<i+1<<"]: "<<endl;
    63.         sv[i].nhapSV();  
    64.         cout<<endl;      
    65.     }
    66. }
    67. void xuatDS(sinhVien *sv, int n)
    68. {
    69.     cout<<setw(15)<<left<<"Mon Hoc";
    70.     cout<<setw(10)<<left<<"Diem CC";
    71.     cout<<setw(10)<<left<<"Diem KT";   
    72.     cout<<setw(10)<<left<<"Diem Thi";
    73.     cout<<setw(15)<<left<<"Ho Ten";
    74.     cout<<setw(15)<<left<<"Lop";
    75.     cout<<setw(15)<<left<<"Ma SV";
    76.     cout<<setw(15)<<left<<"Diem HP";
    77.     cout<<endl;
    78.     for(int i = 0; i<n; i++){  
    79.         sv[i].xuatSV();    
    80.     }
    81. }
    82. void kiemTra(sinhVien *sv, int n)
    83. {
    84.     cout<<setw(15)<<left<<"Mon Hoc";
    85.     cout<<setw(10)<<left<<"Diem CC";
    86.     cout<<setw(10)<<left<<"Diem KT";
    87.     cout<<setw(10)<<left<<"Diem Thi";  
    88.     cout<<setw(15)<<left<<"Ho Ten";
    89.     cout<<setw(15)<<left<<"Lop";
    90.     cout<<setw(15)<<left<<"Ma SV";
    91.     cout<<setw(15)<<left<<"Diem HP";
    92.     cout<<endl;
    93.     for(int i = 0; i<n; i++){
    94.         if(sv[i].diemCC() < 5 || sv[i].diemKT() == 0){
    95.             sv[i].xuatSV();                        
    96.             }
    97.     }
    98.     for(int i = 0; i<n; i++){
    99.         if(sv[i]).
    100. }
    101.  
    102. int main()
    103. {
    104.     int n;
    105.     do{
    106.         cout<<"Nhap so luong Sinh Vien: ";
    107.         cin>>n;
    108.     }while(n<0);
    109.    
    110.     sinhVien *sv = new sinhVien[n];
    111.     nhapDS(sv, n);
    112.     xuatDS(sv,n);
    113.     cout<<"----------------------------------------"<<endl;
    114.     cout<<"DANH SACH SINH VIEN BI CAM THI"<<endl;
    115.     kiemTra(sv,n);
    116.    
    117. }
    Đây là code của em ạ, mọi người xem giúp em 2 ý cuối làm thế nào ạ, em làm sai tùm lum hết ạ

    - - - Nội dung đã được cập nhật ngày 15-09-2021 lúc 10:12 PM - - -

    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		Chưa có tên.jpg
Lần xem:	3
Size:		85.2 KB
ID:		74099Click vào hình ảnh để lấy hình ảnh lớn

Tên:		f.jpg
Lần xem:	3
Size:		90.3 KB
ID:		74100
    mọi người xem giúp em đoạn sắp xếp em sai chỗ nào ạ
    Đã được chỉnh sửa lần cuối bởi MHoang : 16-09-2021 lúc 07:42 AM. Lý do: Đưa mã vào khung C++

  2. #2
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    990

    Bạn giải thích gần 30 thành phần left trong mã là cái gì - khai báo ở đâu ?

  3. #3
    Ngày gia nhập
    09 2021
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi MHoang Xem bài viết
    Bạn giải thích gần 30 thành phần left trong mã là cái gì - khai báo ở đâu ?
    em định xuất theo cột với căn lề trái nên làm kiểu đấy ạ, em khai báo ở cái iomanip ạ

  4. #4
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    990

    OK Bạn. Nhìn trên tổng thể thì mình thấy cách viết của bạn khác với cách mình thường viết, có lẽ là do mình không qua trường lớp. Với mình thì khi đã viết mã tạo lớp thì không còn chỗ cho các hàm toàn cục ngoại trừ hàm main().

    Mã bên dưới mình viết theo nhu cầu của bạn nhưng cách viết có lẽ hơi lạ với bạn. Chương trình không xử lý lỗi liên quan Unicode, các kiểu dữ liệu float nếu muốn chỉn chu hơn thì dùng double (nhưng lại dẫn tới các rắc rối khác ngoài đề tài này).

    C++ Code:
    1. #include <iostream>
    2. #include <string>
    3. #include <iomanip>
    4. #include <vector>
    5. using std::vector;
    6. using namespace std;
    7.  
    8. class CMonHoc
    9. {
    10. protected:      // Khai báo các thuộc tính là protected để các lớp kế thừa có thể truy xuất nó
    11.     string  m_TenMH;
    12.     float   m_DiemCC, m_DiemKT, m_DiemDT;
    13. public:
    14.     // Khởi dựng
    15.     CMonHoc() : m_TenMH(""), m_DiemCC(0), m_DiemKT(0), m_DiemDT(0) {}
    16.     CMonHoc(string tenMH, float diemCC, float diemKT, float diemDT) : m_TenMH(tenMH), m_DiemCC(diemCC), m_DiemKT(diemKT), m_DiemDT(diemDT) {}
    17.     // Các phương thức Get
    18.     string TenMH() { return m_TenMH; }
    19.     float DiemCC() { return m_DiemCC; }
    20.     float DiemKT() { return m_DiemKT; }
    21.     float DiemDT() { return m_DiemDT; }
    22.     float DiemHP() { return (float)((0.1 * m_DiemCC) + (0.2 * m_DiemKT) + (0.7 * m_DiemDT)); }
    23.     // Các phương thức Set
    24.     void TenMH(string tenMH) { m_TenMH = tenMH; }
    25.     void DiemCC(float diemCC) { m_DiemCC = diemCC; }
    26.     void DiemKT(float diemKT) { m_DiemKT = diemKT; }
    27.     void DiemDT(float diemDT) { m_DiemDT = diemDT; }
    28. };
    29. class CSinhVien : public CMonHoc
    30. {
    31. private:        // Không có kế thừa nên để private cho thuộc tính
    32.     string  m_HoTen, m_Lop, m_MaSV;
    33. public:
    34.     // Khởi dựng
    35.     CSinhVien() : CMonHoc(), m_HoTen(""), m_Lop(""), m_MaSV("") {}
    36.     CSinhVien(string hoTen, string lop, string maSV) : CMonHoc(), m_HoTen(hoTen), m_Lop(lop), m_MaSV(maSV) {}
    37.     CSinhVien(string hoTen, string lop, string maSV, string tenMH, float diemCC, float diemKT, float diemDT)
    38.         : CMonHoc(tenMH, diemCC, diemKT, diemDT), m_HoTen(hoTen), m_Lop(lop), m_MaSV(maSV) {}
    39.     // Các phương thức Get
    40.     string HoTen() { return m_HoTen; }
    41.     string Lop() { return m_Lop; }
    42.     string MaSV() { return m_MaSV; }
    43.     // Các phương thức Set
    44.     void HoTen(string hoTen) { m_HoTen = hoTen; }
    45.     void Lop(string lop) { m_Lop = lop; }
    46.     void MaSV(string maSV) { m_MaSV = maSV; }
    47. };
    48. class CDanhSach
    49. {
    50. private:
    51.     vector<CSinhVien *>     m_vtpSV;    // Cái đặt động bằng vector
    52.     void Clear()
    53.     {
    54.         if (!m_vtpSV.empty())
    55.         {
    56.             for (int i = (int)m_vtpSV.size() - 1; i >= 0; i--)
    57.                 if (m_vtpSV[i])
    58.                     delete m_vtpSV[i];
    59.             m_vtpSV.clear();
    60.             m_vtpSV.resize(0);
    61.         }
    62.     }
    63.     // Hàm thời vụ
    64.     void CanhChinhTieuDe()
    65.     {
    66.         cout << "  ";
    67.         cout << setw(15) << left << "Mon Hoc";
    68.         cout << setw(10) << left << "Diem CC";
    69.         cout << setw(10) << left << "Diem KT";
    70.         cout << setw(10) << left << "Diem Thi";
    71.         cout << setw(15) << left << "Ho Ten";
    72.         cout << setw(15) << left << "Lop";
    73.         cout << setw(15) << left << "Ma SV";
    74.         cout << setw(15) << left << "Diem HP";
    75.         cout << endl;
    76.     }
    77.     void CanhChinhDuLieu(CSinhVien * pSV)
    78.     {
    79.         cout << "  ";
    80.         cout << setw(15) << left << pSV->TenMH();
    81.         cout << setw(10) << left << pSV->DiemCC();
    82.         cout << setw(10) << left << pSV->DiemKT();
    83.         cout << setw(10) << left << pSV->DiemDT();
    84.         cout << setw(15) << left << pSV->HoTen();
    85.         cout << setw(15) << left << pSV->Lop();
    86.         cout << setw(15) << left << pSV->MaSV();
    87.         cout << setw(15) << left << pSV->DiemHP();
    88.         cout << endl;
    89.     }
    90. public:
    91.     // Khởi dựng - hủy
    92.     CDanhSach() {}
    93.     CDanhSach(vector<CSinhVien *> vtpSV) : m_vtpSV(vtpSV) {}
    94.     ~CDanhSach() { Clear(); }
    95.     // Các phương thức Get
    96.     // Các phương thức Set
    97.     // Các hàm cơ bản
    98.     void add(CSinhVien * pSinhVien) { m_vtpSV.push_back(pSinhVien); }
    99.     bool erase(int index)
    100.     {
    101.         int size = (int)m_vtpSV.size();
    102.         if (index < 0 || index >= size)
    103.             return false;
    104.         if (m_vtpSV[index])
    105.             delete m_vtpSV[index];
    106.         m_vtpSV.erase(m_vtpSV.begin() + index);
    107.         return true;
    108.     }
    109.     // Các hàm thời vụ
    110.     void Nhap()
    111.     {
    112.         int         n;
    113.         string      text;
    114.  
    115.         do
    116.         {
    117.             cout << "Nhap so luong Sinh Vien: ";
    118.             cin >> n;
    119.         } while (n < 0);
    120.         getchar();  // làm trống luồng nhập
    121.  
    122.         for (int i = 0; i < n; i++)
    123.         {
    124.             CSinhVien * pSV = new CSinhVien();
    125.  
    126.             cout << "Sinh Vien [" << (i + 1) << "]: " << endl;
    127.  
    128.             cout << "Ho Ten: ";     getline(cin, text); pSV->HoTen(text);
    129.             cout << "Lop: ";        getline(cin, text); pSV->Lop(text);
    130.             cout << "Ma SV: ";      getline(cin, text); pSV->MaSV(text);
    131.  
    132.             cout << "Ten MH: ";     getline(cin, text); pSV->TenMH(text);
    133.             cout << "Diem CC: ";    getline(cin, text); pSV->DiemCC((float)atof(text.c_str()));
    134.             cout << "Diem KT: ";    getline(cin, text); pSV->DiemKT((float)atof(text.c_str()));
    135.             cout << "Diem DT: ";    getline(cin, text); pSV->DiemDT((float)atof(text.c_str()));
    136.  
    137.             m_vtpSV.push_back(pSV);
    138.         }
    139.     }
    140.     void Xuat()
    141.     {
    142.         cout << "--------------------------------------------------------" << endl;
    143.         CanhChinhTieuDe();
    144.         for (int i = 0, size = (int)m_vtpSV.size(); i < size; i++)
    145.         {
    146.             if (m_vtpSV[i])
    147.                 CanhChinhDuLieu(m_vtpSV[i]);
    148.         }
    149.     }
    150.     void XuatCT()           // Xuất các sinh viên cấm thi
    151.     {
    152.         cout << "--------------------------------------------------------" << endl;
    153.         cout << " DANH SACH SINH VIEN BI CAM THI" << endl;
    154.         CanhChinhTieuDe();
    155.         for (int i = 0, size = (int)m_vtpSV.size(); i < size; i++)
    156.             if (m_vtpSV[i] && (m_vtpSV[i]->DiemCC() < 5 || m_vtpSV[i]->DiemKT() == 0))
    157.                 CanhChinhDuLieu(m_vtpSV[i]);
    158.     }
    159.     void XuatTL()           // Xuất các sinh viên phải thi lại
    160.     {
    161.         cout << "--------------------------------------------------------" << endl;
    162.         cout << " DANH SACH SINH VIEN PHAI THI LAI" << endl;
    163.         CanhChinhTieuDe();
    164.         for (int i = 0, size = (int)m_vtpSV.size(); i < size; i++)
    165.             if (m_vtpSV[i] && m_vtpSV[i]->DiemHP() < 4)
    166.                 CanhChinhDuLieu(m_vtpSV[i]);
    167.     }
    168. };
    169.  
    170. int main()
    171. {
    172.     CDanhSach   ds;
    173.     ds.Nhap();
    174.     ds.Xuat();
    175.     ds.XuatCT();    // Cấm thi
    176.     ds.XuatTL();    // Thi lại
    177.  
    178.     // getchar();   // Các TBD chuẩn
    179.     // getchar();
    180.     cout << endl;
    181.     system("pause");    // Chỉ trên VS
    182.     return 0;
    183. }

  5. #5
    Ngày gia nhập
    02 2016
    Bài viết
    328

    "OK Bạn" là gì nhỉ?

    1. Đề bài bảo phải viết các hàm toán tử >> và << để nhập/xuất tin tức sinh viên.
    2. lô gic: nếu không đạt điểm chuyên cần hoặc kiểm tra thì bị cấm thi. Tức là không thể có điểm thi. Phần nhập điểm và xuất điểm phải kể lô gic này.
    3. trong phần diễn đạt đề bài, thớt vữa dùng từ dhp (điểm học phần), vừa dùng từ dtb (điểm trung bình?). Nếu có yêu cầu điểm trung bình thì cách xếp hạng hơi rắc rối.
    4. hình như không thấy lô gic tránh trùng lặp sinh viên. mã SV + tên môn học phải là khoá duy nhất --> đề bài dỏm.
    (trên thực tế, thường thì thiết kế khoá là: mã SV + mã môn học + mã Học Kỳ)

  6. #6
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    990

    Mặc định kế thừa

    Thường thì các giáo viên ra đề bài họ không quan tâm tới người ngoài nhìn đề bài ra sao, họ mặc định là sinh viên hiểu được họ nói gì (hoặc cũng có thể vì bận rộn với các việc khác).
    Thực ra giáo viên không kiếm tiền từ việc lập trình mà chỉ nhận lương từ giảng dạy nên cách nhìn khác nhau cũng là thường tình. Nhìn các đề bài không tròn vẹn thì trên diễn đàn có hàng tá, đôi lúc nhìn đã thấy chán không muốn đọc nói chi tới hỗ trợ.

    Gần đây mình thường chừa lại một phần cho các bạn tự làm, nếu chưa làm được cái trước thì thêm cái sau cũng thừa, có lúc chỉ chừa lại hàm main() để người hỏi ghép nối mã lại thôi mà cũng chưa biết người hỏi có ghép hay không.

    Lan man chút trong thời gian dãn cách.

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