Lỗi tìm kiếm sinh viên không xuất ra kết quả

Mọi người sửa giúp e chỗ void sinhvien::timtensv() này với ạ e cứ nhập xong mã sinh viên tìm kiếm thì bị dừng chạy chương trình

#include <iostream>
using namespace std; 
#define max 100
class sinhvien
{
protected:
    int masinhvien;
    string tensinhvien, gioitinh;
    int tuoi;
    float diem;

public:
    sinhvien();
    ~sinhvien();
    void nhap();
    void xuat();
    void nhapdssv();
    void xuatdssv();
    void timtensv();
};
sinhvien ::sinhvien()
{
    tensinhvien = gioitinh = "";
    masinhvien = tuoi = 0;
    diem = 0;
}
sinhvien ::~sinhvien()
{
    this->tensinhvien = this->gioitinh = "";
    this->masinhvien = this->tuoi = 0;
    this->diem = 0;
}
void sinhvien ::nhap()
{
    cout << "\nNhap ma sinh vien : ";
    fflush(stdin);
    cin>>masinhvien;
    cout << "\nNhap ten sinh vien : ";
    fflush(stdin);
    getline(cin, tensinhvien);
    cout << "\nNhap gioi tinh sinh vien : ";
    fflush(stdin);
    getline(cin, gioitinh);
    cout << "\nNhap tuoi : ";
    cin >> tuoi;
    cout << "\nNhap diem : ";
    cin >> diem;
}
void sinhvien ::xuat()
{
    cout << "\nMa sinh vien : " << this->masinhvien;
    cout << "\nTen sinh vien : " << this->tensinhvien;
    cout << "\nGioi tinh : " << this->gioitinh;
    cout << "\nTuoi sinh vien : " << this->tuoi;
    cout << "\nDiem sinh vien : " << this->diem << endl;
}
sinhvien dssv[max];
int n;
void sinhvien::timtensv()
{
    for (int i = 0; i < n; i++)
    {
        if (masinhvien == dssv[i].masinhvien)
        {
            cout << "Co sinh vien trong danh sach." << endl;
            dssv[i].xuat();
            system("pause");
            break;
        }
        else
        {
            cout << "Khong co sinh vien trong danh sach." << endl;
            break;
        }
    }
}           
int main()
{
    int n;
    cout << "\nNhap so luong sinh vien : ";
    cin >> n;
    sinhvien sv[max];
    for (int i = 0; i < n; i++)
    {
        sv[i].nhap();
    }
    for (int i = 0; i < n; i++)
    {
        sv[i].xuat();
    }
    string mssv;
    cout << "\nNhap ma sinh vien can tim : ";
    fflush(stdin);
    getline(cin, mssv);
    for (int i = 0; i < n; i++)
    {
        sv[i].timtensv();
    }
    return 0;
}
  1. Bạn sai.
  2. Bạn làm không đúng.
  3. Bạn làm không chuẩn theo hướng đối tượng.

1. Bạn sai.

Trong vòng lặp (for) có lệnh rẽ nhánh (if - else) mà cả 2 nhánh đều có break. Tức là vòng lặp chỉ chạy MỘT lần, chỉ duyệt phần tử đầu tiên và kết thúc. Nhưng bạn lại duyệt một danh sách rỗng, vô nghĩa.

2. Bạn không đúng.

Tại sao có đến 2 mảng sinhvien?
Mảng toàn cục sinhvien dssv[max]; để làm gì? Không hề gán giá trị.
Mảng cục bộ trong hàm mainsinhvien sv[max]; để làm gì?

Rồi cả biến mssv mà bạn nhập vào để tìm, không hề dùng đến nó để truyền vào hàm khác hoặc dùng để so sánh.

3. Bạn làm không chuẩn theo hướng đối tượng.

Bạn dùng C++ và tạo lớp (class) nghĩa là bạn đụng đến hướng đối tượng (object oriented). Nhưng cách bạn viết thì đang cố nhét hướng chức năng (function oriented) vào đối tượng. Nhưng nhét sai luôn.


Tự bản thân lớp sinhvien sẽ không hề có phương thức timtensv và cả các phương thức còn lại mà bạn khai báo.
Nói chung thì bạn sai rất khủng đấy.

Tính trong hàm main, từ dòng int n;

  • 3 dòng đầu: Hợp lý
  • Dòng tiếp theo: tạm.
  • 8 dòng tiếp theo: không ổn.
  • 4 dòng tiếp theo: hợp lý, có 1 dòng tạm.
  • 4 dòng tiếp theo: vô lý.
4 Likes

vâng e cảm ơn ạ để e xem lại tại e mới học đến phần class vẫn còn ngu ngơ ^^

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?