Nhập môn học, nếu môn có trùng trong danh sách môn học thì nhập lại

void Gets_Chuoi(char* TieuDe ,char* s ){
	cout<<TieuDe ;
	do{
		gets(s) ;
	}while(strcmp(s,"")==0) ;
}

int Search_Ma_Mon_Hoc(DanhSachMonHoc &dsmh, char* mamonhoc ){
	for(int i=0 ; i<dsmh.n ; i++){
		if(dsmh.node[i]->MaMH==mamonhoc) return 1;
	}
	return 0 ;
}

int Search_Ten_Mon_Hoc(DanhSachMonHoc &dsmh, char* tenmonhoc){
	for(int i=0 ; i<dsmh.n ; i++){
		if(dsmh.node[i]->TenMonHoc==tenmonhoc) return 1;
	}
	return 0 ;
}
void Nhap_Mon_Hoc(DanhSachMonHoc &dsmh,MonHoc &mh){
	while(1){
		Gets_Chuoi("\nNhap ma mon hoc: ",mh.MaMH) ;
		if(!Search_Ma_Mon_Hoc(dsmh,mh.MaMH)) break ;
	}
	while(1){
		Gets_Chuoi("\nNhap ten mon hoc: ",mh.TenMonHoc) ;
		if(!Search_Ten_Mon_Hoc(dsmh,mh.TenMonHoc)) break ;		
	}
}


void Nhap_Danh_Sach_Mon_Hoc(DanhSachMonHoc &dsmh){
	MonHoc mh ;
	while(dsmh.n<SoLuongMonHoc){
		Nhap_Mon_Hoc(dsmh,mh) ;
		dsmh.node[dsmh.n] = new MonHoc ;
		*dsmh.node[dsmh.n] = mh ;
		dsmh.n++ ;
	}
}


void Xuat_Danh_Sach_Mon_Hoc(DanhSachMonHoc dsmh){
	cout<<"\t\tDANH SACH MON HOC\n";
	cout<<"\nMa mon hoc\tTen mon hoc\n";
	for(int i=0 ; i<dsmh.n ; i++){
		cout<<dsmh.node[i]->MaMH<<"\t\t"<<dsmh.node[i]->TenMonHoc<<endl;
	}	
}

Đoạn nhập môn học , em muốn khi nhập nó kiểm tra (mã môn,tên môn) nếu có trùng trong danh sách môn học thì bắt nhập lại .Không biết em sai chổ nào ? Em cảm ơn ạ!

Cho xem cả hàm main() luôn đi, biết đâu cái dsmh có vấn đề thì sao?

2 Likes

Hàm main của em đây ạ

int main(int argc, char** argv) {
	char* Tenfile="DanhSachMonHoc.txt" ;
	DanhSachMonHoc dsmh ;
	Initialize(dsmh) ; //dsmh.n=0 
	Nhap_Danh_Sach_Mon_Hoc(dsmh) ;
	return 0;
}

So sánh chuỗi thì dùng strcmp() nhé. Mình thấy bạn có dùng 1 chỗ đấy.

2 Likes

Thanks anh , nó chạy được rồi al!

Bạn không nên dùng hàm gets
nữa nha, nó đã bị remove từ C11 và từ C++14, thay vào đó bạn nên dùng fgets hoặc gets_s, hoặc dùng getline với C++ - string

4 Likes

Mình sẽ tìm hiểu nó, cảm ơn bạn nhiều nha .

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