Thiết kế lớp  ThiSinh (thí sinh thi đại học) gồm các thông tin sau :

–  Số báo danh:                                    kiểu  char[10]  (ví dụ:  TCT123456)

–  Họ và tên:                                        kiểu  char*       (ví dụ:  Nguyen Van A)

–  Mã ngành:                                        kiểu  int           (ví dụ:  301)

–  Khu vực:                                          kiểu  int           (ví dụ:  1)

–  Điểm thi:                                          kiểu  float[3]   (vi dụ:  5; 6.5; 3.5)

        Viết các hàm :

            + Các hàm xây dựng, hàm hủy, phép gán (=).

+ Hàm nhập thông tin cơ bản của 1 thí sinh từ bàn phím

+ Hàm hiển thị thông tin cơ bản của 1 thí sinh ra màn hình.

            + Hàm nhập điểm thi cho thí sinh. Lưu ý: chỉ cho phép nhập điểm lẻ đến 0.5

+ Tái định nghĩa phép toán xuất (<<) và nhập (>>) thông tin của 1 thí sinh (dùng cho file).

            + Hàm kiểm tra xem thí sinh có bị điểm liệt hay không:        int  BiDiemLiet();

                Kết quả của hàm =1 nếu thí sinh có 1 điểm thi =0; kết quả =0 nếu tất cả các điểm thi >0.

            + Hàm xác định thí sinh có trúng tuyển hay không:

int  TrungTuyen(float  diemchuan,  int  nganh);

      Giả sử: điểm chuẩn được tính cho khu vực 1 và các khu vực sau sẽ giảm từng bước 0.5 đ.

      Thiết kế hàm main thực hiện các công việc sau :

       +  Nhập vào danh sách gồm  n  thí sinh (với n được nhập từ bàn phím).

       +  Sau khi nhập thông tin xong, nhập điểm thi của từng thí sinh dựa theo số báo danh.

       +  Hiển thị ra màn hình các thí sinh bị điểm liệt.

       +  Với điểm chuẩn của ngành 108 là 18 điểm, in ra màn hình danh sách trúng tuyển của ngành.

       +  Tìm thí sinh là thủ khoa của kỳ thi tuyển sinh trên.

       +  Lưu thông tin danh sách thí sinh trên vào 1 file (chẳng hạn TSDH.txt).

       +  Lấy thông tin các thí sinh có trong file vừa lưu ở trên và hiển thị ra màn hình.

#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <fstream.h>
class thisinh{
      char sbd[9];
      char *hoten;
      int manganh, khuvuc;
      float diemthi[3];
      public:
             thisinh();
             thisinh(char [], char *, int, int);
             thisinh(char [], char *, int, int, float, float, float);
             thisinh(const thisinh &);
             ~thisinh(){
                      delete []hoten;
                      }
             thisinh operator = (const thisinh&);
             void nhap();
             void xuat();
             void nhapdiem();
             friend ostream&  operator << (ostream&, thisinh &);
             friend istream&  operator >> (istream&, thisinh &);
             int TrungTuyen(float, int);
             int BiDiemLiet();
             char* LaySoBD() { return sbd; }
      };
thisinh::thisinh(){
                   strcpy(sbd, “”);
                   hoten = new char[30]; strcpy(hoten, “”);
                   manganh=khuvuc=0;
                   }
thisinh::thisinh(char bd[], char *ht, int mn, int kv){
                      strcpy(sbd, bd);
                      hoten = new char[30]; strcpy(hoten, ht);
                      manganh=mn;
                      khuvuc=kv;
}
thisinh::thisinh(char bd[], char *ht, int mn, int kv, float d1, float d2, float d3){
                      strcpy(sbd, bd);
                      hoten = new char[30]; strcpy(hoten, ht);
                      manganh=mn;
                      khuvuc=kv;
                      diemthi[0]=d1;
                      diemthi[1]=d2;
                      diemthi[2]=d3;
                      }
thisinh::thisinh(const thisinh &t){
                       strcpy(sbd, t.sbd);
                       hoten = new char[30]; strcpy(hoten, t.hoten);
                       manganh=t.manganh;
                       khuvuc=t.khuvuc;
                       diemthi[0]=t.diemthi[0];
                       diemthi[1]=t.diemthi[1];
                       diemthi[2]=t.diemthi[2];
                       }
thisinh thisinh::operator = (const thisinh &t){
                          delete []hoten;
                          strcpy(sbd, t.sbd);
                       hoten = new char[30]; strcpy(hoten, t.hoten);
                       manganh=t.manganh;
                       khuvuc=t.khuvuc;
                       diemthi[0]=t.diemthi[0];
                       diemthi[1]=t.diemthi[1];
                       diemthi[2]=t.diemthi[2];
                       return *this;
                 }
void thisinh::nhap(){
         cout<<“Nhap so bao danh: “; gets(sbd);
cout<<“Nhap ho ten: “; gets(hoten);
cout<<“Nhap ma nganh: “; cin>>manganh;
cout<<“Nhap khu vuc: “; cin>>khuvuc;
     }
void thisinh::xuat() {
cout<<“So bao danh: “<<sbd<<endl;
cout<<”  ho ten: ” <<hoten<<endl;
cout<<”  ma nganh: “<<manganh<<endl;
cout<<”  khu vuc: ” <<khuvuc<<endl;
cout<<”  diem cac mon: “<<diemthi[0]<<” “<<diemthi[1]<<” “<<diemthi[2]<<endl;
}
void thisinh::nhapdiem(){
     for(int i=0; i<3; i++) {
cout<<”  – Nhap diem mon “<<(i+1)<<” : “; cin>>diemthi[i];
float  sole = diemthi[i] – (int)diemthi[i];
if(diemthi[i]<0 || diemthi[i]>10 || (sole!=0 && sole!=0.5) ) {
cout<<”    ——- Nhap diem sai – Nhap lai  —— “<<endl;
i–;
}
}
     }
ostream& operator << (ostream &os, thisinh &t){
os << t.sbd<<endl;
os << t.hoten<<endl;
os << t.manganh<<endl;
os << t.khuvuc<<endl;
os << t.diemthi[0] << ” ” << t.diemthi[1] << ” ” << t.diemthi[2]<<endl;
return os;
}
istream& operator >> (istream &is, thisinh &t){
is.getline(t.sbd, 8);
is.getline(t.hoten, 29);
is >> t.manganh;
is >> t.khuvuc;
is >> t.diemthi[0] >> t.diemthi[1] >> t.diemthi[2];
return is;
}
int thisinh::BiDiemLiet() {
return  (diemthi[0]==0 || diemthi[1]==0 || diemthi[2]==0);
}
int  thisinh::TrungTuyen(float diemchuan, int nganh) {
     float TongDiem= diemthi[0]+diemthi[1]+diemthi[2];
if(manganh==nganh && !BiDiemLiet() && TongDiem >= (diemchuan – (khuvuc-1)*0.5))
return 1;
return 0;
}
int main() {
//Nhap danh sach gom n thi sinh tu ban phim
thisinh* ds;
   int n, i;
cout<<“Nhap so luong thi sinh: “; cin>>n;
ds = new thisinh[n];
for(i=0; i<n; i++) {
cout<<“Nhap thong tin cho thi sinh thu ” << (i+1)<<endl;
ds[i].nhap();
}
for(int i=0; i<n; i++) {
cout<<“Nhap diem cho thi sinh co so bao danh “<<ds[i].LaySoBD()<<endl;
ds[i].nhapdiem();
}
   // Ghi vao file
ofstream  f1(“DuLieu.txt”);
f1 << n <<endl; // Ghi vao so luong doi tuong
for(int i=0; i<n; i++)
f1 << ds[i];
f1.close();
/*
// Doc du lieu tu file va luu vao danh sach  ds2
   int i;
ifstream f2(“DuLieu.txt”);
int  n1; f2>>n1;
ThiSinh* ds2 = new ThiSinh[n1];
for(int i=0; i<n1; i++) {
f2.ignore();
f2 >> ds2[i];
}
f2.close();
cout<<“Danh sach thi sinh: “<<endl;
for(i=0; i<n1; i++) {
cout<<(i+1)<<“. Thi sinh co “;
ds2[i].In();
}
delete[] ds2;*/
getch();
}