Ví dụ về File nhị phân, chương trình con, cấu trúc và con trỏ


Bài tập thực hành Lập trình C ngày 13/4/2009 lớp 08B1

Định nghĩa cấu trúc Học sinh (họ tên, lớp)

Định nghĩa kiểu mảng Học sinh

#include <conio.h>
#include <stdio.h>
#include <string.h>
typedef struct{
    char hoten[30];
    char lop[6];
} Hocsinh;
typedef Hocsinh Mang[100];

Chương trình con: chuẩn hóa 1 xâu về dạng tên riêng (sử dụng con trỏ)

char* chuanhoaTen(char* ten){
    //bo cac dau cach thua
    int i=0;
    //dau cach o dau
    while(ten[i]==32) i++;
    strcpy(&ten[0], &ten[i]);
    //dau cach o giua
    for (i=0; i<strlen(ten)-1; i++)
        while (ten[i]==32 && ten[i+1]==32)
            strcpy(&ten[i], &ten[i+1]);
    //dau cach o cuoi
    while(ten[strlen(ten)]==32)
        ten[strlen(ten)]='\0';
    //viet hoa ki tu dau tu
    if (ten[0]>='a' && ten[0]<='z')
        ten[0]=ten[0]-32;
    for (i=0; i<strlen(ten)-1; i++)
        if (ten[i]==32 && ten[i+1]!=32 )
            if (ten[i+1]>='a' && ten[i+1]<='z')
                ten[i+1]=ten[i+1] - 32;
    return ten;
}

Chương trình con: nhập, hiện mảng học sinh

void nhap(Hocsinh *m, int *n){
    int i;
    printf("Bao nhieu hoc sinh? ");
    scanf("%d", n);
    for (i=0; i<*n; i++){    
        printf("\n Hoc sinh [%d]\n", i+1);
        printf(" Ho ten: ");
        fflush(stdin);
        gets(m[i].hoten);
        printf(" Lop: ");
        fflush(stdin);
        gets(m[i].lop);
        strcpy(m[i].hoten, chuanhoaTen(m[i].hoten) );        
    }//for
}
void hien(Hocsinh *m, int n){
    int i=0;
    for (i=0; i<n; i++){
        printf("\n Ho ten: %s", m[i].hoten);
        printf("\n Lop: %s", m[i].lop);
        printf("\n ------------");
    }
}

Chương trình con: ghi những học sinh của 1 lớp (theo tham số) từ mảng vào file Lop.dat

void ghiFile(Hocsinh *m, int n, char *lop){
    FILE *f = fopen("Lop.dat", "wb");
    int i;
    for (i=0; i<n; i++){
        if (strcmp(m[i].lop, lop)==0){
            fwrite(&m[i], sizeof(Hocsinh), 1, f);
        }
    }
    fclose(f);
}

Chương trình con: đọc và hiện nội dung file Lop.dat ra màn hình

void docFile(){
    FILE *f = fopen("Lop.dat", "rb");
    fseek(f, 0, SEEK_END);//ve cuoi file
    //vi tri hien tai cua con tro file
    //--> len la kich thuoc file
    long len = ftell(f);    
    fseek(f, 0, SEEK_SET);//ve dau file
    int n=len/sizeof(Hocsinh);//so phan tu trong file

    while(n>0){
        Hocsinh hs;
        fread(&hs, sizeof(Hocsinh) , 1, f);
        printf("\n Ho ten: %s", hs.hoten);
        printf("\n Lop: %s", hs.lop);
        printf("\n -------------");
        n--;
    }
    fclose(f);
}

Chương trình chính:

  1. Nhập N học sinh, chuẩn hóa tên của các học sinh đó.

  2. Hiện danh sách học sinh vừa nhập ra màn hình

  3. Nhập vào 1 tên lớp, ghi các học sinh lớp đó ra file  Lop.dat

  4. Đọc và hiện nội dung file đó ra màn hình

void main(){
    Mang a;
    int n;
    char l[5];
    clrscr();
    nhap(a, &n);
    clrscr();
    printf("n=%d", n);
    hien(a, n);
    printf("\n Nhap 1 lop: ");
    fflush(stdin);
    gets(l);
    ghiFile(a, n, l);

    clrscr();
    printf("\n Da ghi vao file");
    docFile();
    getch();
}


( đã được xem 2130 lần từ 13/05/2009 )

Phản hồi bài viết

   
Họ tên  
Email*
Mã xác thực email
Tiêu đề*  
Nội dung*  
Đính kèm 
 
 
Lionheart nhlionheart@...
Em chào thầy!
em cảm ơn thầy vì những bài viết của thầy rất hay và có ích. chúc thầy và gia đình luôn mạnh khỏe!!
huudung huudung@...
re Tú
char* chuanhoaTen(char* ten) {
....
}
dòng đó khai báo 1 hàm
- Nhận vào 1 xâu qua con trỏ ten kiểu char
- Trả ra 1 xâu.
Phạm Phương Tú theone_21090@...
Em hỏi về Ví dụ về File nhị phân, chương trình con, cấu trúc và con trỏ
Cho em hỏi về ý nghĩa của dòng khai báo

char* chuanhoaTen(char* ten)

Chương trình con: chuẩn hóa 1 xâu về dạng tên riêng (sử dụng con trỏ)
Trang 1
Tôi là Lê Hữu Dũng
Giảng viên CNTT
Khoa Công nghệ Tin học
Viện Đại học Mở Hà Nội