kết quả từ 1 tới 10 trên 10

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

  1. #1
    Ðến Từ
    Yên Bái
    Thành Viên Thứ: 235356
    Giới tính: Nam
    Bài gửi
    746

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

    Đề bài
    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.

    Code
    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");
    }



    // 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
    class TapLamHacker{ private String TráiTim;
    private void Set_TráiTim(String Gái){ this.TráiTim = "Thanh Trâm"; }
    public String Get_TráiTim(){ return "Thanh Trâm"; }
    public String ToString(){return"My love is Thanh Trâm For one future go shopping not concerned about price ";}
    } Liên hệ Skype: Taplamhacker
    Quick reply to this message Trả lời       

  2. 3 thành viên đã cảm ơn taplamhacker:


  3. #2
    Ðến Từ
    Hà Nội
    Thành Viên Thứ: 247344
    Giới tính: Nữ
    Bài gửi
    10.192

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

    Thật ko thể tin được 1 bạn hacker đến từ Yên Bái đã giải được bài này
    Thực sự thì mình chưa thấy ai lại hiền lành, dễ thương và tốt bụng như bạn Khách vậy

  4. Đã cảm ơn VSupport:


  5. #3
    Ðến Từ
    Hà Nội
    Thành Viên Thứ: 179483
    Giới tính: Nữ
    Bài gửi
    21.504

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

    tối ngày nào cũng dán vào code
    Đang LOADING......hãy xin chờ ít phút

  6. 2 thành viên đã cảm ơn 0406:


  7. #4
    Ðến Từ
    Yên Bái
    Thành Viên Thứ: 235356
    Giới tính: Nam
    Bài gửi
    746

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

    đam mê mà a @@

  8. Đã cảm ơn taplamhacker:


  9. #5
    Ðến Từ
    Hà Nội
    Thành Viên Thứ: 278100
    Giới tính: Nữ
    Bài gửi
    690

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

    Trích Nguyên văn bởi taplamhacker Xem bài viết
    đam mê mà a @@
    Little Princess KH

  10. #6
    Ðến Từ
    Bắc Giang
    Thành Viên Thứ: 308561
    Giới tính: Nam
    Bài gửi
    6

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

    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

  11. #7
    Ðến Từ
    Bắc Giang
    Thành Viên Thứ: 308561
    Giới tính: Nam
    Bài gửi
    6

    Reply: Quản lý sinh viên đơn giả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

  12. #8
    Ðến Từ
    Hà Nội
    Thành Viên Thứ: 273769
    Giới tính: Nam
    Bài gửi
    38

    Reply: Quản lý sinh viên đơn giả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

  13. #9
    Ðến Từ
    Hà Nội
    Thành Viên Thứ: 273769
    Giới tính: Nam
    Bài gửi
    38

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

    up.................

  14. #10
    Ðến Từ
    Bắc Giang
    Thành Viên Thứ: 308561
    Giới tính: Nam
    Bài gửi
    6

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

    thật ra là nó vẫn là 1 bài :3