Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Fix giúp mình bài quản lí sinh viên

  1. #1
    Ngày gia nhập
    01 2012
    Nơi ở
    PTIT
    Bài viết
    0

    Mặc định Fix giúp mình bài quản lí sinh viên

    Đề bài:

    Thông tin của mỗi sinh viên bao gồm:
    - Mã sinh viên: xâu gồm 10 ký tự
    - Họ tên: xâu có không quá 30 ký tự
    - Tuổi: số nguyên
    - Điểm trung bình: số thực có 1 chữ số sau dấu phẩy.
    - Xếp loại: Giỏi (G) nếu điểm trung bình ≥ 8, Khá (K) nếu điểm trung bình ≥ 6,5, Đạt (TB) nếu điểm trung bình ≥ 5, yếu (Y) nếu điểm trung bình < 5.
    Hãy viết chương trình trên C thực hiện các yêu cầu sau:
    a) Nhập vào từ bàn phím số N và danh sách thông tin của N sinh viên?
    b) Ghi vào file văn bản SV.TXT danh sách N sinh viên đã nhập?
    c) Xuất ra màn hình thông tin của N sinh viên đọc từ file văn bản SV.TXT theo thứ tự giảm của điểm trung bình?

    Còn đây là code của mình, không biết sai chỗ nào, mong các bạn fix giúp.
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    #include<string.h>
    
    main()
    {     int n,i,j,k;
               printf("Nhap vao so sinh vien N="); scanf("%d",&n);
                struct sinhvien
          {      char MSV[11];
                 char ten[31];
                 int tuoi;
                 float diem;
                 char xeploai[3];
          };
          sinhvien sv[50];
          FILE *f;
          f=fopen("SV.TXT","wt");
        
          fwrite(&n,sizeof(int),1,f);
          for(i=0;i<n;i++)
         { 
           printf("Nhap ma sinh vien thu %d:",i+1); fflush(stdin); gets(sv[i].MSV);
           printf("Nhap ho ten sinh vien:"); fflush(stdin);  gets(sv[i].ten);
           printf("Nhap tuoi:"); fflush(stdin); scanf("%d",&sv[i].tuoi);
           printf("Nhap diem:"); fflush(stdin); scanf("%f",&sv[i].diem);
           if(sv[i].diem>=8)
           strcpy(sv[i].xeploai,"G");
           if(sv[i].diem>=6.5&&sv[i].diem<8)
           strcpy(sv[i].xeploai,"K");
           if(sv[i].diem<6.5&&sv[i].diem>=5)
           strcpy(sv[i].xeploai,"TB");
           if(sv[i].diem<5)
           strcpy(sv[i].xeploai,"Y");   
           
         }
          float tamf;
          int tami;
          char tamc[3];
          for(i=0;i<n-1;i++)
       {     if(sv[i].diem<sv[j].diem)
          { strcpy(tamc,sv[i].xeploai); strcpy(sv[i].xeploai,sv[j].xeploai); strcpy(sv[j].xeploai,tamc); 
            strcpy(tamc,sv[i].ten); strcpy(sv[i].ten,sv[j].ten); strcpy(sv[j].ten,tamc);
            strcpy(tamc,sv[i].MSV); strcpy(sv[i].MSV,sv[j].MSV); strcpy(sv[j].MSV,tamc);
            tami=sv[i].tuoi; sv[i].tuoi=sv[j].tuoi; sv[j].tuoi=tami;
            tamf=sv[i].diem; sv[i].diem=sv[j].diem; sv[j].diem=tamf;
          }
          fwrite(&sv[i],sizeof(sinhvien),1,f);
       } 
                           
          fclose(f);
          
          f=fopen("SV.TXT","rt");
          fread(&n,sizeof(int),1,f);
          
          for(i=0;i<n;i++)
        {  fread(&sv[i],sizeof(sinhvien),1,f);                
           printf("%5s %5s %5d %5.1f %5s\n",sv[i].MSV,sv[i].ten,sv[i].tuoi,sv[i].diem,sv[i].xeploai);
        }
     getch();
    }

  2. #2
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Lỗi như nào ? lỗi ra làm sao ? Tên lỗi, vị trí lỗi ? Mấy cái đó trình dịch nó báo cho ngay trước mặt sao lại bảo là "không biết lỗi gì" ???

    Dịch lại rồi thấy nó báo lỗi lên : "biết lỗi gì rồi" thì đưa lỗi lên đây là có người sửa cho.
    Um Mani Padme Hum...!!

  3. #3
    Ngày gia nhập
    01 2012
    Nơi ở
    PTIT
    Bài viết
    0

    Hic, chương trình không báo lỗi mới chán chứ.
    Mình chạy thì nó chỉ in ra thông tin một người thôi =.=

  4. #4
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Sao ko nói ngay tình trạng là "Chỉ in được 1 sinh viên đầu tiên" ngay từ đầu bài ?

    Đọc từ file ra sao ko có hàm eof() ?? Công việc fread sao chỉ làm 1 lần ?
    Ko có cái đó thì ra 1 thằng là phải
    Mỗi lần truy xuất đến file khi đã OPEN cái file đó ra thì sẽ có từng vị trí con trỏ ở trong file đấy. Đọc xong 1 cái gì đấy thì con trỏ file sẽ di chuyển, di chuyển dần cho đên cuối file (vị trí eof ) thì tức là đã đọc xong hết file . Cho nên cần đặt trong 1 vòng lặp để công việc đọc "1 cái gì đấy" được thực hiện tuần tự từ đầu file đến cuối file. Từ đó mới lấy ra được toàn bộ những gì có trong file

    Vì ko sử dụng eof cho nên mình đoán là bạn chưa học ngon cái thể loại FILE này.
    Cần đọc sách xem ví dụ là hiểu. Hoặc lên mạng search code tương tự rồi bắt chước theo mà làm
    Um Mani Padme Hum...!!

  5. #5
    Ngày gia nhập
    01 2012
    Nơi ở
    PTIT
    Bài viết
    0

    @clchicken:
    Thank bạn, đúng là phần này tài liệu viết rất sơ sài, thầy giáo giảng còn sơ sài hơn, hic.
    Mà bài này thằng bạn mình có đoạn code, mình đọc thấy đáng ra chỉ đổi điểm của 2 sinh viên thì sai, vì MSV a1 được 7.0, a2 được 8.0 đổi lại như vậy thì a1 lại được 8.0, nhưng test lại thấy đúng, bạn có thể giải thích giúp được k?
    Code:
    f=fopen("SV.TXT","rt");
          fread(&n,sizeof(int),1,f);
          for(i=0;i<n;i++)
          fread(&sv[i],sizeof(sinhvien),1,f);                
          float tg;
          for(i=0;i<n-1;i++)
           for(j=i+1;j<n;j++)
            if(sv[i].diem<sv[j].diem)
            {tg=sv[i].diem;
            sv[i].diem=sv[j].diem;
            sv[j].diem=tg;}
            for(i=0;i<n;i++)
          printf("%5s %5s %5d %5.1f %5s
    \n",sv[i].MSV,sv[i].hoten,sv[i].tuoi,sv[i].diem,sv[i].xeploai);[/CODE]
    Đã được chỉnh sửa lần cuối bởi nam156 : 29-01-2012 lúc 10:01 PM.

  6. #6
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Mặc định Fix giúp mình bài quản lí sinh viên

    Hoán đổi 2 phần tử là phải hoán đổi toàn bộ những gì thuộc về A và những gì thuộc về B cho nhau.
    Nếu chỉ đổi điểm của 2 thằng đấy thì khác nào ... chấm ẩu điểm cho nhau ??
    Vẫn là thằng A mà thay vì nó dc 7 điểm giờ nó 8 điểm, thằng B lúc trc nó 8 điểm giờ cihr còn có 7 là sao ??

    PHẢI HOÁN ĐỔI TOÀN BỘ THÔNG TIN CỦA 2 THẰNG CHO NHAU !
    sinhvien svtam=sv[i];
    sv[i]=sv[j];
    sv[j]=svtam;
    Um Mani Padme Hum...!!

Các đề tài tương tự

  1. Chương trình quản lí sinh viên c++ | Xem giúp mình lỗi gì??
    Gửi bởi reallylove256 trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 8
    Bài viết cuối: 14-03-2014, 09:40 AM
  2. Bài tập C++ Xin giúp chương trình quản lí sinh viên bị lỗi
    Gửi bởi mihoxinh trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 27-12-2013, 07:17 PM
  3. Về bài quản lý sinh viên bị sai chỗ nào em không sửa được . Mong các Bro chỉ giúp !
    Gửi bởi huynhsinh trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 18-07-2009, 12:03 PM
  4. Chỉ giúp mình chương trình quản lý sinh viên này với!
    Gửi bởi yoyo89312 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 31-05-2008, 09:18 PM
  5. Lỗi chương trình quản lý sinh viên, giúp mình sửa lỗi
    Gửi bởi iamvtn trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 25
    Bài viết cuối: 29-09-2007, 11:37 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn