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 3203 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
nay là
Khoa Công nghệ Thông tin
Trường Đại học Mở Hà Nội