Quản lý sinh viên đơn giản

Đề bài
[AH]
Mã:
[FONT=arial]- 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. [/FONT]
[FONT=arial]- Nhập liệu lớp n sinh viên, trong đó chưa có cột cuối kỳ.[/FONT]
[FONT=arial]- Đưa ra danh sách thí sinh được dự thi cuối kỳ (Giữa Kỳ >= 3).[/FONT]
[FONT=arial]- Nhập dữ liệu kết quả thi kết thúc môn.[/FONT]
[FONT=arial]- Đưa ra danh sách đậu và học lại, xếp loại tương ứng.[/FONT]
[FONT=arial]- Liệt kê thông tin 5 sinh viên được khen thưởng[/FONT]
[FONT=arial]- 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.[/FONT]
[FONT=arial]- Sắp xếp Kq của môn học theo thứ tự giảm dần.[/FONT]
[/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 < 8)
                 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 >= 8)
                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
 

VSupport

Ngây thơ trong tối
Thật ko thể tin được 1 bạn hacker đến từ Yên Bái đã giải được bài này :rage3:
 

0406

✩✩✩✩
tối ngày nào cũng dán vào code
zj0shgN.jpg
 
AI giúp giải bài này với !!!!
ĐỀ bài: Viết chương trình tạo 1 menu để quản lý danh sách sinh viên, mỗi sinh viên là 1 cấu trúc gồm:

- Mã số sinh viên
- Họ đệm, tên sinh viên
- Điểm TB
- Tên lớp
Chương trình gồm các công việc sau:
1. Tạo danh sách sinh viên. Quá trình nhập danh sách sẽ dừng lại khi mã số sẽ dừng lại khi nhập mã số <=0
2. Thêm 1 sinh viên vào danh sách, vị trí sinh viên thêm vào do ta chọn
3. Liệt kê danh sách sinh viên trên màn hình theo thứ tự giảm dần của tổng điểm
4. Căn cứ vào điểm trung bình của sinh viên, liệt kê tất cả sinh viên đạt loại giỏi( Có ĐTB>= 8,0)
...
Biết rằng : Danh sách sinh viên được tổ chức theo danh sách liên kết đơn
 
bạn giúp mình bài này với
ĐỀ bài: Viết chương trình tạo 1 menu để quản lý danh sách sinh viên, mỗi sinh viên là 1 cấu trúc gồm:

- Mã số sinh viên
- Họ đệm, tên sinh viên
- Điểm TB
- Tên lớp
Chương trình gồm các công việc sau:
1. Tạo danh sách sinh viên. Quá trình nhập danh sách sẽ dừng lại khi mã số sẽ dừng lại khi nhập mã số <=0
2. Thêm 1 sinh viên vào danh sách, vị trí sinh viên thêm vào do ta chọn
3. Liệt kê danh sách sinh viên trên màn hình theo thứ tự giảm dần của tổng điểm
4. Căn cứ vào điểm trung bình của sinh viên, liệt kê tất cả sinh viên đạt loại giỏi( Có ĐTB>= 8,0)
...
Biết rằng : Danh sách sinh viên được tổ chức theo danh sách liên kết đơn
 
cho em hỏi là. vẫn như bài trên, có thêm câu hỏi.
xóa học sinh đầu tiên
xóa sinh viên cuối cùng
loại sinh viên có điểm <5 và sắp xếp tăng dần
 
Top