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

Đề tài: Tập tin

  1. #1
    Ngày gia nhập
    04 2008
    Bài viết
    0

    Mặc định Tập tin

    Em có một bài toán thắc mắc:
    Một sinh viên được quản lí bao gồm 4 thông tin như sau:
    + Họ và tên sinh viên (Chuỗi có độ dài tối đa 30 kí tự)
    + Mã số sinh viên (Chuỗi gồm 7 chữ số XXXXXXX)
    + Ngày tháng năm sinh (Chuỗi ngày tháng năm theo định dạng DD/MM/YYYY)
    + Điểm trung bình (Số thực với 2 chữ số phần thập phân X.XX)
    Viết chương trình:
    + Đọc thông tin của 1 lớp, bao gồm n sinh viên từ tập tin SINHVIEN.txt
    + Cho phép người dùng chọn loại sắp xếp (sắp xếp theo Tên, sắp xếp theo Ngày Tháng Năm Sinh, sắp xếp theo Mã Số Sinh Viên, sắp xếp theo Điểm Trung Bình) và ghi lại dữ liệu đã sắp xếp lên tập tin SAPXEP.txt.
    Tập tin SINHVIEN.txt và tập tin SAPXEP.txt có cấu trúc như sau:
    Dòng đầu tiên chứa số nguyên n là số sinh viên có trong tập tin.
    Các dòng tiếp theo chứa n sinh viên, mỗi sinh viên gồm 4 thông tin: Họ và Tên, MSSV, Ngày tháng năm sinh và Điểm trung bình.


    Ví dụ về một tập tin SINHVIEN.txt
    2
    Nguyen Van A
    0712177
    10/09/1989
    8.53
    Le Van B
    0712178
    16/11/1989
    8.16

    Lưu ý:
    + Thuật toán sắp xếp là tuỳ chọn.
    + Tất cả dữ liệu sẽ được sắp xếp tăng dần.
    + Sắp xếp theo Tên khác với sắp xếp theo họ Tên.
    + Khi sắp xếp theo ngày tháng năm sinh, các giá trị được ưu tiên sắp sếp sẽ là năm, tháng, ngày.

    Em thắc mắc cách đọc file SINHVIEN, làm sao mà sau khi đọc file SINHVIEn ta gán vào một mảng được để sắp xếp

  2. #2
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    Bạn sử dụng mảng để lưu danh sách sinh viên.
    Từ file nguồn, bạn dựa vào cấu trúc của file mà đọc lần lượt
    - Bước đầu đọc biến n (Số phần tử của mảng, cũng là số sinh viên).
    - Sử dụng vòng for duyệt lần lượt số sinh viên, với mỗi sinh viên bạn đọc file và lưu vào 4 thông tin.
    Thế thôi. Nó sẽ chạy đúng với bao nhiêu sinh viên đó và lưu vào mảng sinh viên với số phần tử là số sinh viên trong file nguồn.
    Còn đọc file, ghi file thế nào thì xem "tại đây"
    Không biết ghi gì luôn ...

  3. #3
    Ngày gia nhập
    12 2007
    Bài viết
    224

    Cái này đã có trong diễn đàn nhưng thôi mình cũng xin post lại cho bạn vì đây là một vấn đề cơ bản và quan trọng : đọc tệp và lưu vào bộ nhớ máy tính

    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<string.h>
    4. #include<dos.h>
    5. #include<stdlib.h>
    6.  
    7. typedef struct sinhvien{
    8.             char ht[20];
    9.             int d;
    10.                };
    11.  
    12. FILE *p;
    13.  
    14. sinhvien *svien;
    15.  
    16. int size=sizeof(sinhvien),n;
    17.  
    18. void laptep(char *ten);
    19. void doctep(char *ten);
    20.  
    21. void laptep(char *ten)
    22. {
    23.  sinhvien sv;
    24.  
    25.  p=fopen(ten,"wb");
    26.  
    27.  fflush(stdin);
    28.  while(1)
    29.  {
    30.   gets(sv.ht);
    31.   if(sv.ht[0]=='\0') break;
    32.   scanf("%d",&sv.d);
    33.   fwrite(&sv,size,1,p);
    34.   fflush(stdin);
    35.  }
    36.  
    37.  fclose(p);
    38. }
    39.  
    40. void doctep(char *ten)
    41. {
    42.  sinhvien sv;
    43.  
    44.  p=fopen(ten,"rb");
    45.  fseek(p,0,2);
    46.  n=ftell(p)/size;
    47.  rewind(p);
    48.  svien=(sinhvien*)calloc(n,size);
    49.  fread(svien,size,n,p);
    50.  
    51.  fclose(p);
    52. }
    53.  
    54. void main()
    55. {
    56.  char ten[50];
    57.  int i;
    58.  clrscr();
    59.  printf("nhap ten tep:");
    60.  gets(ten);
    61.  doctep(ten);
    62.  //laptep(ten);
    63.  p=fopen(ten,"wb");
    64.  
    65.  for(i=0;i<n;i++)
    66.  if(svien[i].d>=4) fwrite(svien+i,size,1,p);
    67.  fclose(p);
    68.  doctep(ten);
    69.  for(i=0;i<n;i++)
    70.  printf("%s %d\n",(svien+i)->ht,(svien+i)->d);
    71.  
    72.  getch();
    73. }

    Chú thích , ở đây mình giả sử bạn chưa có tệp sinhvien.txt . Mình tạo ra 2 hàm : laptep và doctep . Hàm laptep sẽ cho bạn nhập thông tin sv vào têp. Sau đó hàm doctep sẽ đọc thông tin đó lưu vào bộ nhớ .

  4. #4
    Ngày gia nhập
    04 2008
    Bài viết
    0

    Bạn lập tệp bằng p=fopen(ten,"wb");
    thi tạo ra tập tin nhj phân còn gì?
    Mà tập tin cua minh là tập tin văn bản cơ ma!

  5. #5
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    Trích dẫn Nguyên bản được gửi bởi Khanhtung Xem bài viết
    Bạn lập tệp bằng p=fopen(ten,"wb");
    thi tạo ra tập tin nhj phân còn gì?
    Mà tập tin cua minh là tập tin văn bản cơ ma!
    Nếu bạn đã biết điều này thì có thể tự nguyên cứu lấy và post lên những thắc mắc để mọi người giúp bạn.
    Bài trên là minh họa cho bạn, bạn lại đi bắt lỗi là sao, bạn hiểu sai ý sieuphuong rồi.
    Không biết ghi gì luôn ...

  6. #6
    Ngày gia nhập
    12 2007
    Bài viết
    224

    Mặc định Tập tin

    Uhm , tệp văn bản thì bạn hoàn toàn có thể lưu vào bộ nhớ bằng những hàm chuyên dùng trong tệp văn bản như fscanf , fgets v...v...Bạn cứ biết rằng khi những hàm ấy đọc xong một dòng thì con trỏ tệp sẽ tự động trỏ đến dòng tiếp theo .

  7. #7
    Ngày gia nhập
    04 2008
    Bài viết
    0

    Mình không có ý đó!
    Mình cũng đang sữa bài của mình, nhưng chưa được. Thắc mắc nhất là làm sao lưu đc thông tin những SV vào một mảng( sau khi đọc file) ?
    Xin lỗi bạn SieuPhuong nhé!

    Mình đã làm được rồi! (Mừng quá!). Dù sao cũng cám ơn mấy bạn nhé!
    Đã được chỉnh sửa lần cuối bởi Kevin Hoang : 20-04-2008 lúc 11:56 PM. Lý do: Không viết nhiều bài viết cùng lúc liền nhau trong một đề tài

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