Đề bài

[AH]

Mã:

- Khai báo kiểu dữ liệu về sinh viên trong lớp: Họ tên SV, MSSV, Điểm Giữa kỳ, Thường kỳ, Thi Cuối kỳ, Xếp loại.

- Nhập liệu lớp n sinh viên, trong đó chưa có cột cuối kỳ.

- Đưa ra danh sách thí sinh được dự thi cuối kỳ (Giữa Kỳ >= 3).

- Nhập dữ liệu kết quả thi kết thúc môn.

- Đưa ra danh sách đậu và học lại, xếp loại tương ứng.

- Liệt kê thông tin 5 sinh viên được khen thưởng

- thực hiện việc thống kê % sinh viên giỏi, khá, TB, số lượng sv bị cấm thi và thi rớt.

- Sắp xếp Kq của môn học theo thứ tự giảm dần.

[/AH]

Code

[AH]

Mã:

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

#include<string.h>

struct SinhVien

{

char Ten[30];

char MSSV[5];

float dGK,dTK,dCK;

char XepLoai[15];

};

void TaoDSSV(SinhVien a[], int n)

{

for (int i=0; i < n; i++)

{

for (int j=0; j < 11; j++)

a[i].Ten[j] = 65 + rand()%25; // random ngay nhien ku ty vao ten

a[i].Ten[11] = 0;

for (int j=0; j < 5; j++)

a[i].MSSV[j] = 65 + rand()%25;// random ngay nhien ku ty vao mssv

a[i].MSSV[5] = 0; // ky tu cuoi cung cua chuoi

a[i].dTK = rand() % 10;

a[i].dGK = rand() % 10;

}

}

void XuatDSSV(SinhVien a[], int n)

{

printf("\n--------------------DS sinh vien-------------------\n");

printf("\n%5s | %10s %8s %5s","MSSV","Ho Va Ten","Diem TK", "Diem GK");

for (int i=0; i < n; i++)

printf("\n%-5s | %s %4.2f %4.2f",a[i].MSSV,a[i].Ten,a[i].dTK, a[i].dGK);

// xuat thong tin sinh vien

}

void XuatDSDT(SinhVien a[], int n)

{

printf("\n----------------DS duoc thi cuoi ky----------------\n");

printf("\n%5s | %10s %8s %5s","MSSV","Ho Va Ten","Diem TK", "Diem GK");

for (int i=0; i < n; i++)

{

if( a[i].dGK >= 3)

printf("\n%-5s | %s %4.2f %4.2f",a[i].MSSV,a[i].Ten,a[i].dTK, a[i].dGK);

}

}

void NhapDCK(SinhVien a[], int n)

{

// printf("\n----------------NHAP DIEM CUOI KY----------------\n");

// printf("\n%5s | %10s %8s %5s %8s","MSSV","Ho Va Ten","Diem TK", "Diem GK","Diem CK");

for (int i=0; i < n; i++)

{

// if( a[i].dGK >= 3)

// {

// printf("\n%-5s | %s %4.2f %4.2f ",a[i].MSSV,a[i].Ten,a[i].dTK, a[i].dGK);

// scanf("%f",&a[i].dCK);

// }

/// khuc o tren tu nhap diem cuoi ky = tay, xuat ra day sach roi nhap nhu bang diem cua gv

if( a[i].dGK >= 3)

a[i].dCK = rand() % 10;

// gan ngau nhien gia tri diem cuoi ky luon

// 2 cai tieu de o tren la nhap = tay

}

}

void XuatKQ(SinhVien a[], int n)

{

printf("\n------------------KQ Sau khi ket thuc mon hoc------------------\n");

printf("\n%5s | %10s %8s %5s %8s %7s %9s","MSSV","Ho Va Ten","Diem TK", "Diem GK","Diem CK","Ket Qua","Xep Loai");

for (int i=0; i < n; i++)

{

if(a[i].dGK < 3)

{

printf("\n%-5s | %s %4.2f %4.2f %4d %5s",a[i].MSSV,a[i].Ten,a[i].dTK,a[i].dGK, 0,"Rot");

}

float dtb = (a[i].dTK*2+a[i].dGK*3+a[i].dCK*5)/10;

if(a[i].dGK >= 3 && dtb < 4)

printf("\n%-5s | %s %4.2f %4.2f %4.2f %5s",a[i].MSSV,a[i].Ten,a[i].dTK,a[i].dGK, a[i].dCK,"Rot");

if(a[i].dGK >= 3 && dtb >= 4)

{

if(dtb < 5)

strcpy(a[i].XepLoai,"Yeu");

if(dtb >= 5 && dtb < 6.5 )

strcpy(a[i].XepLoai,"Trung Binh");

if(dtb >= 6.5 && dtb < Cool

strcpy(a[i].XepLoai,"Kha");

if(dtb >= 8 )

strcpy(a[i].XepLoai,"Gioi");

printf("\n%-5s | %s %4.2f %4.2f %4.2f %5s\t%s",a[i].MSSV,a[i].Ten,a[i].dTK,a[i].dGK, a[i].dCK,"Dau",a[i].XepLoai);

}

}

}

int check(int a[], int spt, int GT)

{

for(int i = 0 ; i < spt ; i ++)

if(a[i] == GT)

return 0;

return 1;

}

void Xuat1SV(SinhVien a)

{

printf("\n%-5s | %s %4.2f %4.2f %4.2f %5s\t%s",a.MSSV,a.Ten,a.dTK,a.dGK, a.dCK,"Dau",a.XepLoai);

}

void XuatSVDK(SinhVien a[], int n)

{

int dem = 0;

for(int i = 0 ; i < n ; i ++ )

{

if(a[i].dGK >= 3)

{

if((a[0].dTK*2+a[0].dGK*3+a[0].dCK*5)/10 >= 4 )

dem++;

}

}

if(dem ==0)

{

printf("\n-------------------Khong co sv nao dc khen----------------------\n");

return ;

}

printf("\n-----------------------DS SV dc khen thuong --------------------\n");

printf("\n%5s | %10s %8s %5s %8s %7s %9s","MSSV","Ho Va Ten","Diem TK", "Diem GK","Diem CK","Ket Qua","Xep Loai");

if(dem != 5)

{

if(dem > 5)

dem = 5;

int b[5],spt=0;

while(dem != 0)

{

float dtb = (a[0].dTK*2+a[0].dGK*3+a[0].dCK*5)/10;

float max = dtb;

SinhVien tmp;

int tmp1;

for(int i = 0 ; i < n ; i ++ )

{

if(a[i].dGK < 3)

continue;

dtb = (a[i].dTK*2+a[i].dGK*3+a[i].dCK*5)/10;

if(max <= dtb && check(b,spt,i)==1)

{

max = dtb;

tmp = a[i];

tmp1 = i;

}

}

b[spt] = tmp1;

spt++;

dem--;

Xuat1SV(tmp);

}

}

}

void ThongKe(SinhVien a[], int n)

{

int demG = 0,demK=0,demTB=0,demCT=0,demTR=0;

for(int i = 0 ; i < n ; i ++ )

{

if(a[i].dGK >= 3)

{

float dtb = (a[i].dTK*2+a[i].dGK*3+a[i].dCK*5)/10;

if(dtb < 4 )

demTR++;

if(dtb >= Cool

demG++;

if(dtb<8 && dtb >=6.5)

demK++;

if(dtb>5 && dtb < 6.5)

demTB++;

}

if(a[i].dGK < 3)

demCT++;

}

printf("\nPhan tram so sv bi cam thi la: %.3f \n",(float)(100*demCT/n));

printf("Phan tram so sv thi rot la: %.3f \n",(float)(100*demTR/n));

printf("Phan tram so sv xep loai trung binh la: %.3f \n",(float)(100*demTB/n));

printf("Phan tram so sv xep loai kha la: %.3f \n",(float)(100*demK/n));

printf("Phan tram so sv xep loai gioi la: %.3f \n",(float)(100*demG/n));

}

void SapXep(SinhVien a[], int n)

{

int dem =1;

int n1 = n;

for(int i = 0 ; i < n1 ; i ++ )

if(a[i].dGK < 3)

{

SinhVien tmp = a[i];

a[i] = a[n-dem];

a[n-dem] = tmp;

dem++;

i--;

n1--;

}

// dua het nhung dua nao bi cam thi ra sau cung;

for(int i = 0 ; i < n-dem+1 ; i ++)

{

for(int j = i ; j < n-dem+1 ; j++)

{

if((a[i].dTK*2+a[i].dGK*3+a[i].dCK*5) < (a[j].dTK*2+a[j].dGK*3+a[j].dCK*5))

{

SinhVien tmp = a[j];

a[j] = a[i];

a[i] = tmp;

}

}

}

printf("\n========================DA XEP XONG===========================");

// li do tai sao phai xep nhung dua bi cam thi ra dang sau//

// nhung dua bi cam thi thi k co diem cuoi ki

// nen k tinh dc diem trung binh

// o day co the cho dua nao cam thi co diem cuoi ky la 0 nhung nhu the thi don gian qua

}

int menu()

{

printf("\n+++++++++++++++++++++++CHON DI++++++++++++++++++++++++++++++\n");

printf("1.Tao danh sach sinh vien \n");

printf("2.Xem nhung sinh vien duoc thi cuoi ki\n");

printf("3.Nhap diem thi cuoi ki\n");

printf("4.Xem ket qua cua mon hoc\n");

printf("5.Xem ds sinhvien duoc khen htuong\n");

printf("6.Thong ke danh sach\n");

printf("7.Sap Xep\n");

printf("-------------------------0.THOAT-----------------------------\n");

int n;

scanf("%d",&n);

return n;

}

int main()

{

int n ;

scanf("%d",&n);

SinhVien a[n];

srand(time(NULL));

int chon;

do

{

chon = menu();

switch(chon)

{

case 1:

TaoDSSV(a,n);

printf("\nDa Tao Xong\n");

break;

case 2:

XuatDSDT(a,n);

break;

case 3:

NhapDCK(a,n);

printf("\nDa Nhap tu dong xong\n");

break;

case 4:

XuatKQ(a,n);

break;

case 5:

XuatSVDK(a,n);

break;

case 6:

ThongKe(a,n);

break;

case 7:

SapXep(a,n);

break;

case 0:

printf("+++++++++++++++++++++++++++Thoat+++++++++++++++++++++++++++");

break;

default:

printf("chon sai roi ");

break;

}

}while(chon != 0);

printf("\n\n");

}

[/AH]

// Giải thích chút ý về code //

// qua môn thì có điểm trung bình lớp hơn hoặc bằng 4

// được thi cuối kỳ thì điểm giữa kỳ phải lớp hơn hoặc bằng 3

// điểm trung bình để xếp loại = thường ký * 2 + giữa kỳ * 3 + cưới kỳ * 5 tất cả chia 10

// mọi dữ liệu đề được tạo random( từ họ tên mã cho tới điểm) chỉ có số sinh viên là nhập tay