Code:

#include "stdio.h"
#include "conio.h"
#include "string.h"

typedef struct NgayThang{
  unsigned char Ngay;
  unsigned char Thang;
  unsigned int Nam;
};

typedef struct SinhVien{
   char MSSV[10];
   char HoTen[40];
   NgayThang NgaySinh;
   int Phai;
   char DiaChi[40];
};

//nhap sinh vien
SinhVien Nhap(){
   SinhVien sV;
   printf("\tMSSV: ");
   gets(sV.MSSV);
   printf("\tHo ten: ");
   gets(sV.HoTen);
   printf("\tNgay sinh: ");
   scanf("%d",&sV.NgaySinh.Ngay);
   printf("\tThang: ");
   scanf("%d",&sV.NgaySinh.Thang);
   printf("\tNam sinh: ");
   scanf("%d",&sV.NgaySinh.Nam);
   printf("\tGioi tinh (0:Nu,1:Nam): ");
   scanf("%d",&sV.Phai);
   flushall();
   printf("\tDia chi:");
   gets(sV.DiaChi);
   return sV;
}

//nhap n sinh vien
SinhVien * Nhap(unsigned int n) {
   SinhVien *temp = new SinhVien[n];
   for(int i = 0; i<n; i++)
   {
      printf("Nhap sinh vien thu %d\n",i+1);
      temp[i] = Nhap();
   }
   return temp;
}

//xuat 1 sinh vien
void Xuat(SinhVien sv) {
   printf("%s", sv.MSSV);
   printf("\t%s\t",sv.HoTen);
   if(sv.Phai == 1)
      printf("\tNam");
   else
      printf("\tNu");
   printf("\t%d-%d-%d\t",sv.NgaySinh.Ngay,sv.NgaySinh.Thang,sv.NgaySinh.Nam);
   printf("\t%s\n",sv.DiaChi);
}

//xuat n sinh vien ra man hinh
void Xuat(SinhVien *sv, unsigned int n) {
   printf("\nMSSV\tHo ten\t\tPhai\tNgay sinh\tDia vhi\n");
   for(int i =0; i<n; i++)
      Xuat(sv[i]);
}

//sap xep danh sach sinh vien tang dan theo Nam sinh
void BubbleSort(SinhVien * sv,unsigned int n) {
   for(unsigned int i=0; i<n-1; i++)
      for(unsigned int j=n-1; j>i; j--)
         if(sv[j].NgaySinh.Nam>sv[j-1].NgaySinh.Nam)
         {
            SinhVien temp = sv[j];
            sv[j] = sv[j-1];
            sv[j-1] = temp;
         }
}

//chuong trinh chinh
void main() {
   clrscr();
   unsigned int n;
   SinhVien *sv;
   printf("Nhap vao so sinh vien:");
   scanf("%d",&n);
   flushall();
   sv = Nhap(n);
   BubbleSort(sv,n);
   Xuat(sv,n);
   getch();
}