[ C\C++ ] Bài tập con trỏ cấu trúc [ Quản lý điểm sinh viên - 29/08/13 ]

Bài tập con trỏ cấu trúc: Viết các hàm thực hiện
- Nhập vào danh sách có n sinh viên (2<n<20), thông tin sinh viên gồm:
  + Họ tên
  + Địa chỉ
  + Năm sinh
  + Giới tính
  + Lớp
  + Điểm: TCC(hs 3), TA(hs 4), TDC(hs 5)
- Tính điểm trung bình
- Đếm số sinh viên có điểm trung bình >= 8
- Đếm số sinh viên có điểm trung bình  < 5
- In tên sinh viên có điểm trung bình cao nhất
- Xếp loại cho sinh viên
- In danh sách sinh viên đã xếp loại
- Sắp xếp danh sách sinh viên theo thứ tự tăng dần của điểm tb



[Code Turbo C++]
/**********************************
  http://lap-trinh-may-tinh.blogspot.com/
**********************************/
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>

// khai bao
struct SV{
char ht[30], dc[50],gioitinh[3],lop[10],xepLoai[10];
int namSinh;
  float dTCC, dTA,dTDC,dTB;
};

SV a[20],*p;
int n;// so sinh vien

// Nhap thong tin sinh vien
void Nhap(){
p=a;
// nhap so sinh vien
do{
cout<<"\n Nhap so sinh vien: "; cin>>n;
if(n<2||n>20) cout<<"\n Nhap lai so sinh vien";
}while(n<2||n>20);
// Nhap thong tin sinh vien

cout<<"\n Nhap thong tin sinh vien: ";
for(int i=0;i<n;i++)
{
 fflush(stdin);
 cout<<"\n + Nhap thong tin co sinh vien thu "<<i+1<<": ";
 cout<<"\n - Ho ten: "; gets((p+i)->ht);
 cout<<"\n - Dia chi: "; gets((p+i)->dc);
 cout<<"\n - Gioi tinh: "; gets((p+i)->gioitinh);
 cout<<"\n - Lop: "; gets((p+i)->lop);
 cout<<"\n - Nam sinh: "; cin>>(p+i)->namSinh;
 cout<<"\n - Diem toan cao cap: "; cin>>(p+i)->dTCC;
 cout<<"\n - Diem toan tieng anh: "; cin>>(p+i)->dTA;
 cout<<"\n - Diem tin dai cuong: "; cin>>(p+i)->dTDC;
}
}
// Tinh diem tong ket
void TinhDiem(){
 p=a;
 for(int i=0;i<n;i++)
  (p+i)->dTB=(((p+i)->dTCC)*3+((p+i)->dTA)*4+((p+i)->dTDC)*5)/12;
}
// Dem so sinh vien co diem tb>=8
void DemDTB_LonHon8(){
 p=a;
 int dem=0;
 for(int i=0;i<n;i++)
  if((p+i)->dTB>=8) dem++;
 cout<<"\n * So sinh vien co diem trung binh >= 8: "<<dem;
}
// Dem so sinh vien co diem tb<5
void DemDTB_NhoHon5(){
 p=a;

 int dem=0;
 for(int i=0;i<n;i++)
  if((p+i)->dTB<5) dem++;
 cout<<"\n * So sinh vien co diem trung binh < 5: "<<dem;
}
// Tim sinh vien co diem cao nhat
void InSV_max(){
 p=a;

 float max=p->dTB;
 for(int i=0;i<n;i++)
  if (max<(p+i)->dTB) { max=(p+i)->dTB;}
 // in sinh vien max
 cout<<"\n * Ten sinh vien co diem cao nhat: ";
 for(i=0;i<n;i++)
  if(max==(p+i)->dTB) cout<<"\n +"<<(p+i)->ht;
}

// Xep loai cho sinh vien
void XepLoai(){
 p=a;
 for(int i=0;i<n;i++)
  {
if ((p+i)->dTB<5) strcpy((p+i)->xepLoai,"Truot");
else if ((p+i)->dTB<6) strcpy((p+i)->xepLoai,"Trung binh");
else if ((p+i)->dTB<7) strcpy((p+i)->xepLoai,"Trung binh kha");
else if ((p+i)->dTB<8) strcpy((p+i)->xepLoai,"Kha");
else if ((p+i)->dTB<9) strcpy((p+i)->xepLoai,"Gioi");
else if ((p+i)->dTB<=10) strcpy((p+i)->xepLoai,"Xuat sac");
  }
}
// In danh sach sinh vien
void InDS(){
 p=a;
 cout<<"\n * In danh sach sinh vien da xep loai:";
 for(int i=0;i<n;i++)
  cout<<"\n - "<<(p+i)->ht<<"\t - "<<(p+i)->xepLoai;
}


// doi cho
void DoiCho(SV *a, SV *b){
 char tht[30],tdc[50],tgioitinh[5],tlop[10],dxl[10];
 int tns;
 float tdtcc,tdta,tdtdc,tdtb;
 strcpy(tht,a->ht);
 strcpy(a->ht,b->ht);
 strcpy(b->ht,tht);

 strcpy(tdc,a->dc);
 strcpy(a->dc,b->dc);
 strcpy(b->dc,tdc);

 strcpy(tgioitinh,a->gioitinh);
 strcpy(a->gioitinh,b->gioitinh);
 strcpy(b->gioitinh,tgioitinh);

 strcpy(tlop,a->lop);
 strcpy(a->lop,b->lop);
 strcpy(b->lop,tlop);

 strcpy(dxl,a->xepLoai);
 strcpy(a->xepLoai,b->xepLoai);
 strcpy(b->xepLoai,dxl);

 tns=a->namSinh;
 a->namSinh=b->namSinh;
 b->namSinh=tns;

 tdtcc=a->dTCC;
 a->dTCC=b->dTCC;
 b->dTCC=tdtcc;

 tdta=a->dTA;
 a->dTA=b->dTA;
 b->dTA=tdta;

 tdtdc=a->dTDC;
 a->dTDC=b->dTDC;
 b->dTDC=tdtdc;

 tdtb=a->dTB;
 a->dTB=b->dTB;
 b->dTB=tdtb;
}

// sap xep danh sach sinh vien
void SapXep(){
 p=a;
 for(int i=0;i<n-1;i++)
  for(int j=i+1;j<n;j++)
{
 if ((p+i)->dTB>(p+j)->dTB)
{
DoiCho((p+i),(p+j));
}
}
cout<<"\n * Danh sach sinh vien da xep loai: ";
for(i=0;i<n;i++)
 cout<<"\n - "<<(p+i)->ht<<"\t - "<<(p+i)->dTB;
}
// ham chinh

void main(){
 clrscr();
 Nhap();
 TinhDiem();
 DemDTB_LonHon8();
 DemDTB_NhoHon5();
 InSV_max();
 XepLoai();
 InDS();
 SapXep();
 getch();

}

/***********************************/
[Tải code chương trình tại đây - Lưu ý: Sau 5s, Click Bỏ qua quảng cáo (Skin Ad)]