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

Đề tài: Cách thay đổi 1 giá trị bất kỳ trong tập tin nhị phân, mà không làm thay đổi các phần tử còn lại???

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

    Mặc định Cách thay đổi 1 giá trị bất kỳ trong tập tin nhị phân, mà không làm thay đổi các phần tử còn lại???

    Bạn nào biết cách thay đổi 1 giá trị bất kỳ trong tập tin nhị phân, mà không làm thay đổi các phần tử còn lại k?? Khi đã biết vị trí của nó??

    Giã sử: Mình có 1 tập tin nhị phân "Xoa.txt", trong đó lưu các phần tử ứng với 1 sv, nếu del.xoa=0, thì sv đó có thể in ra, ngược lại del.xoa= 1 thì k thể in ra:
    Code:
    fk=fopen("C:\\CTDL\\Xoa.txt","w+b");
    fseek(fk,pos2,SEEK_SET);   //pos 2 là vị trí cần xóa của sinh viên
    del.xoa=1;
    fflush(stdin);
    fwrite(&del,sizeof(Xoa),1,fk);
    fflush(stdin);
    printf("Da xoa thanh cong sinh vien co MSSV %d!!!\n\n",MSSV);
    fclose(fk);
    Nhưng vấn đề khi mình làm như trên thì các ví trí sau pos2 đều có giá trị = 1. Bạn nào biết chỉ mình vs!

  2. #2
    Ngày gia nhập
    04 2010
    Nơi ở
    Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
    Bài viết
    504

    Up nguyên đoạn code lên đi bạn, nhìn vầy ko hiểu đc. Cái biến del bạn khai báo ra sao?
    C Code:
    1. fk=fopen("C:\\CTDL\\Xoa.txt","a+b"); // Sửa lại là ok.
    2.  
    3. del.xoa=1;
    4.  
    5. fseek(fk, pos2, SEEK_SET);   //pos 2 là vị trí cần xóa của sinh viên
    6. fwrite(&del, sizeof(Xoa), 1, fk);
    7.  
    8. printf("Da xoa thanh cong sinh vien co MSSV %d!!!\n\n",MSSV);
    9. fclose(fk);
    Đã được chỉnh sửa lần cuối bởi doicanhden : 10-05-2012 lúc 06:47 PM.
    Kết bạn với tôi <3
    Skype: giautm
    Facebook:
    https://fb.com/giautm.duongntt
    Email:
    giau.tmg@gmail.com

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

    Trích dẫn Nguyên bản được gửi bởi doicanhden Xem bài viết
    Up nguyên đoạn code lên đi bạn, nhìn vầy ko hiểu đc. Cái biến del bạn khai báo ra sao?
    nèk bạn!
    Code:
    // vl.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include<conio.h>
    #include<stdlib.h>
    #include<stdio.h.>
    #include<iostream>
    #include<time.h>
    #include<Windows.h> 
    #include<string.h>
    using namespace std;
    #define MAX 100
    //Khai báo biến toàn cục
    FILE*f; //File sinh vien
    FILE*fi; //File index
    FILE*fj; //File index tạm "temp"
    FILE*fk; //File Xóa
    int SoSV=1;
    //Dành cho phần sắp xếp
    int m,Eor;			//Biến Eor dùng để kt kết thúc Run hoặc File
    FILE*f0,*f1,*f2;
    typedef int DataType;
    DataType x,y,x1,x2;
    //Khai báo cấu trúc Sinh Viên
    struct SinhVien
    {
    	char HoTen[MAX];
    	long MSSV;
    	float DiemTB;
    };
    //Khai báo cấu trúc INDEX_File
    struct IndexSV
    {
    	long MSSV;
    	long Pos;
    	long Posxoa;
    };
    struct Temp
    {
    	long MSSV;
    };
    struct Xoa
    {
    	int xoa;
    };
    SinhVien sv;
    IndexSV index;
    Temp temp;
    Xoa del;
    //Hàm kiểm tra số SV trong tập tin
    int KiemTraSL()
    {
    	int soSV=0;
    	f=fopen("C:\\CTDL\\SinhVien.txt","rb");
    	while(!feof(f))
    	{
    		fread(&sv,sizeof(SinhVien),1,f);
    		soSV++;
    	}
    	return soSV;
    }
    
    //Hàm nhập thông tin sinh viên & thiết lập Index_file
    void NhapThongTin(int n)
    {
    	SoSV=KiemTraSL();
    	f=fopen("C:\\CTDL\\SinhVien.txt","ab");
    	fi=fopen("C:\\CTDL\\index.txt","ab");
    	fk=fopen("C:\\CTDL\\Xoa.txt","ab");
    	system("cls");
    	int i;
    	printf(" ____________________________________________________________________ \n"); 
        printf("|                                                                    |\n"); 
        printf("|                      NHAP THONG TIN SINH VIEN                      |\n"); 
        printf("|____________________________________________________________________|\n"); 
    	for(i=0;i<n;i++)
    	{
    		printf("Ban dang nhap thong tin cho sinh vien thu %d trong danh sach: \n",SoSV);
    		Sleep(1000);
    		printf("	-Nhap MSSV: ");
    		scanf("%d",&sv.MSSV);
    		fflush(stdin);
    		printf("	-Nhap Ho va ten: ");
    		gets(sv.HoTen);
    		fflush(stdin);
    		printf("	-Nhap diem TB: ");
    		scanf("%f",&sv.DiemTB);
    		fflush(stdin);
    		fwrite(&sv,sizeof(SinhVien),1,f);
    		//xây dựng file index
    		index.MSSV=sv.MSSV;
    		fflush(stdin);
    		index.Pos=(SoSV-1)*sizeof(SinhVien);
    		fflush(stdin);
    		index.Posxoa=(SoSV-1)*sizeof(Xoa);
    		fflush(stdin);
    		fwrite(&index,sizeof(IndexSV),1,fi);
    		//Xây dựng file xóa
    		del.xoa=0;
    		fflush(stdin);
    		fwrite(&del,sizeof(Xoa),1,fk);
    		SoSV++;
    	}
    	fclose(f);
    	fclose(fi);
    	fclose(fk);
    	printf("Nhan Enter de tiep tuc!!\n");
    	getch();
    };
    //Hàm xuất thông tin sinh viên
    void XuatThongTin()
    {
    	system("cls");
    	int i;
    	f=fopen("C:\\CTDL\\SinhVien.txt","rb");
    	fk=fopen("C:\\CTDL\\Xoa.txt","rb");
    	system("cls");
    	printf(" ____________________________________________________________________ \n"); 
        printf("|                        THONG TIN SINH VIEN                         |\n"); 
        printf("|____________________________________________________________________|\n");
    	i=0;
    	fread(&sv,sizeof(SinhVien),1,f);
    	fread(&del,sizeof(Xoa),1,fk);
    	while(!feof(f) && del.xoa==0)
    	{
    			printf("* Sinh vien thu %d: \n",i+1);
    			printf("|Ho va ten: ");
    			puts(sv.HoTen);
    			printf("|Ma so sinh vien: %d\n",sv.MSSV);
    			printf("|Diem trung binh: %2.2f\n",sv.DiemTB);
    			i++;
    			fread(&sv,sizeof(SinhVien),1,f);
    			fread(&del,sizeof(Xoa),1,fk);
    			printf("\n\n");
    	}
    	fclose(f);
    	printf("Nhan Enter de tiep tuc!!\n");
    	getch();
    }
    //Hàm tìm kiếm sinh viên sử dụng file_index
    void TimKiem()
    {
    	int MSSV;
    	int TimThay=0;
    	int pos1,pos2;
    	system("cls");
    	printf(" ____________________________________________________________________ \n"); 
        printf("|                       DANG TIM KIEM SINH VIEN                      |\n"); 
        printf("|____________________________________________________________________|\n");
    	printf("Nhap vao MSSV can tim: ");
    	scanf("%d",&MSSV);
    	fi=fopen("C:\\CTDL\\index.txt","rb");	//Mở file để đọc file index
    	while(!feof(fi) && TimThay==0)
    	{
    		fread(&index,sizeof(IndexSV),1,fi);
    		if(MSSV==index.MSSV)
    		{
    			TimThay=1;
    			pos1=index.Pos;
    			pos2=index.Posxoa;
    			break;
    		}
    	}
    	fclose(fi);
    	/*printf("\n");
    	printf("%d\n",TimThay);*/
    	if(TimThay==1)
    	{
    		f=fopen("C:\\CTDL\\SinhVien.txt","rb");
    		fk=fopen("C:\\CTDL\\Xoa.txt","rb");
    		fseek(f,pos1,SEEK_SET);
    		fread(&sv,sizeof(SinhVien),1,f);
    		fseek(fk,pos2,SEEK_SET);
    		fread(&del,sizeof(Xoa),1,fk);
    		if(del.xoa==0)
    		{
    			printf("Da tim thay sinh vien co MSSV: %d\n",MSSV);
    			printf("Ho va ten: ");
    			puts(sv.HoTen);
    			printf("Diem: %2.2f\n\n",sv.DiemTB);
    		}
    		else
    			printf("Thong tin sinh vien da bi xoa!\n\n");
    		fclose(f);
    	}
    	else
    	{
    		printf("Khong tim thay sinh vien co MSSV %d !!!\n\n",MSSV);
    	}
    	printf("Nhan Enter de tiep tuc!!\n");
    	getch();
    }
    //Sắp xếp sinh viên sử dụng phương pháp trộn tự nhiên
    
    //Đọc 1 phần tử x từ tập tin fi ghi vào tập tin fj
    void Copy(FILE*fi,FILE*fj)
    {
    	fscanf(fi,"%3d",&x);
    	fprintf(fj,"%3d",x);
    	if(!feof(fi))
    	{
    		fscanf(fi,"%3d",&y);
    		long offset=ftell(fi)-2;
    		fseek(fi,offset,SEEK_SET);
    	}
    	if(feof(fi))
    		Eor=1;		//Nếu fi hết run hoặc hết file
    	else
    		Eor=(x>y)?1:0;
    }
    //Copy một run từ file fi vào fj
    void CopyRun(FILE*fi,FILE*fj)
    {
    	do
    	{
    		Copy(fi,fj);
    	}
    	while(!Eor);
    }
    //Phân bố luân phiên các Run tự nhiên từ f0 vào f1 và f2
    void Chia()
    {
    	do
    	{
    		CopyRun(fj,f1);
    		if(!feof(fj))
    			CopyRun(fj,f2);
    	}
    	while(!feof(fj));
    	fclose(fj);
    	fclose(f1);
    	fclose(f2);
    }
    //Trộn 1 run của f1 và f2 vào fj
    void TronRun()
    {
    	do
    	{
    		fscanf(f1,"%3d",&x1);
    		long offset=ftell(f1)-2;
    		fseek(f1,offset,SEEK_SET);
    		fscanf(f2,"%3d",&x2);
    		offset=ftell(f2)-2;
    		fseek(f2,offset,SEEK_SET);
    		if(x1<=x2)
    		{
    			Copy(f1,fj);
    			if(Eor)
    				CopyRun(f2,fj);
    		}
    		else
    		{
    			Copy(f2,fj);
    			if(Eor)
    				CopyRun(f1,fj);
    		}
    	}
    	while(!Eor);
    }
    //Trộn các run từ f1 và f2 vào fj
    void Tron()
    {
    	while((!feof(f1))&&(!feof(f2)))
    	{
    		TronRun();
    		m++;
    	}
    	while(!feof(f1))
    	{
    		CopyRun(f1,fj);
    		m++;
    	}
    	while(!feof(f2))
    	{
    		CopyRun(f2,fj);
    		m++;
    	}
    	fclose(fj);
    	fclose(f1);
    	fclose(f2);
    }
    //Hàm sắp xếp sinh viên theo MSSV tăng dần
    void SapXepSV()
    {
    	int i;
    	SoSV=KiemTraSL()-1;
    	fj=fopen("C:\\CTDL\\temp.txt","ab");
    	fi=fopen("C:\\CTDL\\index.txt","rb");
    	for(i=0;i<SoSV;i++)
    	{
    		fread(&index,sizeof(IndexSV),1,fi);
    		temp.MSSV=index.MSSV;
    		fflush(stdin);
    		fwrite(&temp,sizeof(Temp),1,fj);
    	}
    	fclose(fi);
    	fclose(fj);
    	fj=fopen("C:\\CTDL\\temp.txt","rb");
    	while(!feof(fj))
    	{
    		fread(&temp,sizeof(Temp),1,fj);
    		printf("%5d",temp.MSSV);
    	}
    	fclose(fj);
    	/*do
    	{
    		fj=fopen("C:\\CTDL\\temp.txt","rb");
    		f1=fopen("C:\\CTDL\\BangB.txt","wb");
    		f2=fopen("C:\\CTDL\\BangC.txt","wb");
    		Chia();
    		fj=fopen("C:\\CTDL\\temp.txt","wb");
    		f1=fopen("C:\\CTDL\\BangB.txt","rb");
    		f2=fopen("C:\\CTDL\\BangC.txt","rb");
    		m=0;
    		Tron();
    	}
    	while(m!=1);
    	fclose(fj);
    	fclose(f1);
    	fclose(f2);
    	fj=fopen("C:\\CTDL\\temp.txt","rb");
    	for(i=0;i<SoSV;i++)
    	{
    		fread(&temp,sizeof(Temp),1,fj);
    		printf("\n%d\n",temp.MSSV);
    	}
    	fclose(fj);*/
    	printf("Nhan Enter de tiep tuc!!\n");
    	getch();
    }
    //Hàm xóa thông tin sinh viên
    void XoaTT()
    {
    	int TimThay=0,pos1,pos2;
    	long MSSV;
    	system("cls");
    	printf(" ____________________________________________________________________ \n"); 
        printf("|                   DANG XOA THONG TIN SINH VIEN                     |\n"); 
        printf("|____________________________________________________________________|\n");
    	printf("Nhap vao ma so sinh vien can xoa: ");
    	scanf("%d",&MSSV);
    	fi=fopen("C:\\CTDL\\index.txt","rb");	//Mở file để đọc file index
    	while(!feof(fi) && TimThay==0)
    	{
    		fread(&index,sizeof(IndexSV),1,fi);
    		if(MSSV==index.MSSV)
    		{
    			TimThay=1;
    			pos2=index.Posxoa;
    			break;
    		}
    	}
    	fclose(fi);
    	if(TimThay==1)
    	{
    		fk=fopen("C:\\CTDL\\Xoa.txt","w+b");
    		fseek(fk,pos2,SEEK_SET);
    		del.xoa=1;
    		fflush(stdin);
    		fwrite(&del,sizeof(Xoa),1,fk);
    		fflush(stdin);
    		printf("Da xoa thanh cong sinh vien co MSSV %d!!!\n\n",MSSV);
    		fclose(fk);
    	}
    	else
    		printf("Khong ton tai sinh vien co MSSV %d!!!\n\n",MSSV);
    	printf("Nhan Enter de tiep tuc!!\n");
    	getch();
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
    	f=fopen("C:\\CTDL\\SinhVien.txt","ab");
    	int k,n;
    	for(;;)
    	{
    		printf("***************************************\n");
    		printf("*                MENU                 *\n");
    		printf("***************************************\n\n");
    		printf("1. Nhap danh sach sinh vien\n");
    		printf("2. In danh sach sinh vien\n");
    		printf("3. Tim kiem\n");
    		printf("4. Sap xep sinh vien tang dan theo MSSV\n");
    		printf("5. Xoa thong tin sinh vien\n");
    		printf("6. Thoat\n\n");
    		printf("Moi ban chon: ");
    		scanf("%d",&k);
    		if(k==1)
    		{
    			system("cls");
    			printf("Nhap vao so sinh vien can nhap: ");
    			scanf("%d",&n);
    			NhapThongTin(n);
    		}
    		else if(k==2)
    		{
    			system("cls");
    			XuatThongTin();
    		}
    		else if(k==3)
    		{
    			system("cls");
    			TimKiem();
    		}
    		else if(k==4)
    		{
    			system("cls");
    			SapXepSV();
    		}
    		else if(k==5)
    		{
    			system("cls");
    			XoaTT();
    		}
    		else 
    			break;
    	}
    	fclose(f);
    	return 0;
    }

  4. #4
    Ngày gia nhập
    04 2010
    Nơi ở
    Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
    Bài viết
    504

    * Tôi có thể re-code lại cho bạn ko? Viết bằng C phải không? Nếu đc thì chờ khoảng 30 phút nữa sẽ có code.
    * Sorry, đọc cái thuật toán trộn tự nhiên của bạn, ko hiểu gì hết. Ngâm cứu sau vậy.
    C Code:
    1. // vl.cpp : Defines the entry point for the console application.
    2. //
    3.  
    4. #include "stdafx.h"
    5. #include<conio.h>
    6. #include<stdlib.h>
    7. #include<stdio.h.>
    8. #include<iostream>
    9. #include<time.h>
    10. #include<Windows.h>
    11. #include<string.h>
    12. #define MAX 100
    13.  
    14. #define __PATH__SINHVIEN        "F:\\test\\SinhVien.txt"
    15. #define __PATH__SINHVIEN_INDEX  "F:\\test\\index.txt"
    16. //Khai báo biến toàn cục
    17. FILE*f; //File sinh vien
    18. FILE*fi; //File index
    19. FILE*fj; //File index tạm "temp"
    20. FILE*fk; //File Xóa
    21.  
    22. //Dành cho phần sắp xếp
    23. int m,Eor;          //Biến Eor dùng để kt kết thúc Run hoặc File
    24. FILE*f0,*f1,*f2;
    25. typedef int DataType;
    26. DataType x,y,x1,x2;
    27. //Khai báo cấu trúc Sinh Viên
    28. typedef struct _SINHVIEN
    29. {
    30.     char szName[MAX];
    31.     unsigned long ulMssv;
    32.     float DiemTB;
    33. } SinhVien, *LPSinhVien;
    34.  
    35. //Khai báo cấu trúc INDEX_File
    36. typedef struct _SINHVIEN_INDEX
    37. {
    38.     unsigned long ulMssv;
    39.     long lPos_sinhvien;
    40.     int iRemoved;
    41. }SinhVien_Index, *LPSinhVien_Index;
    42.  
    43. //Hàm kiểm tra số SV trong tập tin
    44. long KiemTraSL()
    45. {
    46.     long iRet = 0;
    47.     FILE *file = fopen(__PATH__SINHVIEN, "rb");
    48.    
    49.     if(0 == file)
    50.         return -1;
    51.  
    52.     fseek(file, 0, FILE_END);
    53.     /* Kích thước tập tin / Kích thước struct = số lượng struct. */
    54.     iRet = ftell(file) / sizeof(SinhVien);
    55.  
    56.     fclose(file);
    57.  
    58.     return iRet;
    59. }
    60.  
    61. //Hàm nhập thông tin sinh viên & thiết lập Index_file
    62. void NhapThongTin(int n)
    63. {
    64.     int iNumberOfSV = KiemTraSL();
    65.  
    66.     FILE *fSinhVien = fopen(__PATH__SINHVIEN, "ab");
    67.     FILE *fIndex    = fopen(__PATH__SINHVIEN_INDEX, "ab");
    68.    
    69.     printf(" ____________________________________________________________________ \n");
    70.     printf("|                                                                    |\n");
    71.     printf("|                      NHAP THONG TIN SINH VIEN                      |\n");
    72.     printf("|____________________________________________________________________|\n");
    73.  
    74.     SinhVien sinhvien;
    75.     SinhVien_Index sinhvien_index;
    76.  
    77.     int i;
    78.     for(i = 0; i < n; ++i)
    79.     {
    80.         printf("Ban dang nhap thong tin cho sinh vien thu %d trong danh sach: \n", ++iNumberOfSV);
    81.         Sleep(1000);
    82.  
    83.         printf("    -Nhap ulMssv: ");
    84.         scanf("%d", &sinhvien.ulMssv);
    85.         fflush(stdin);
    86.  
    87.         printf("    -Nhap Ho va ten: ");
    88.         gets(sinhvien.szName);
    89.         fflush(stdin);
    90.        
    91.         printf("    -Nhap diem TB: ");
    92.         scanf("%f", &sinhvien.DiemTB);
    93.         fflush(stdin);
    94.  
    95.         sinhvien_index.ulMssv = sinhvien.ulMssv;
    96.         sinhvien_index.lPos_sinhvien = ftell(fSinhVien);
    97.         sinhvien_index.iRemoved = 0;
    98.  
    99.         fwrite(&sinhvien_index, sizeof(SinhVien_Index), 1, fIndex);
    100.  
    101.         fwrite(&sinhvien, sizeof(SinhVien), 1, fSinhVien);
    102.     }
    103.     fclose(fSinhVien);
    104.     fclose(fIndex);
    105.  
    106.     printf("Nhan Enter de tiep tuc!!\n");
    107.     getch();
    108. };
    109. //Hàm xuất thông tin sinh viên
    110. void XuatThongTin()
    111. {
    112.     printf(" ____________________________________________________________________ \n");
    113.     printf("|                        THONG TIN SINH VIEN                         |\n");
    114.     printf("|____________________________________________________________________|\n");
    115.  
    116.     int i = 0;
    117.     SinhVien        sinhvien;
    118.     SinhVien_Index  sinhvien_index;
    119.  
    120.     FILE *fSinhVien = fopen(__PATH__SINHVIEN, "rb");
    121.     FILE *fIndex    = fopen(__PATH__SINHVIEN_INDEX, "rb");
    122.  
    123.     while(!feof(fIndex))
    124.     {
    125.         fread(&sinhvien_index, sizeof(SinhVien_Index), 1, fIndex);
    126.  
    127.         if(!sinhvien_index.iRemoved &&
    128.            0 == fseek(fSinhVien, sinhvien_index.lPos_sinhvien, SEEK_SET))
    129.         {
    130.             fread(&sinhvien, sizeof(SinhVien), 1, fSinhVien);
    131.  
    132.             printf("* Sinh vien thu %d: \n", ++i);
    133.             printf("| Ho va ten: ");
    134.             puts(sinhvien.szName);
    135.             printf("| Ma so sinh vien: %d\n", sinhvien.ulMssv);
    136.             printf("| Diem trung binh: %2.2f\n", sinhvien.DiemTB);
    137.             printf("\n\n");
    138.         }
    139.     }
    140.  
    141.     fclose(fSinhVien);
    142.     printf("Nhan Enter de tiep tuc!!\n");
    143.     getch();
    144. }
    145. //Hàm tìm kiếm sinh viên sử dụng file_index
    146. void TimKiem()
    147. {
    148.     unsigned long ulMssv = 0;
    149.    
    150.     printf(" ____________________________________________________________________ \n");
    151.     printf("|                       DANG TIM KIEM SINH VIEN                      |\n");
    152.     printf("|____________________________________________________________________|\n");
    153.     printf("Nhap vao ulMssv can tim: ");
    154.     scanf("%d", &ulMssv);
    155.    
    156.     SinhVien        sinhvien;
    157.     SinhVien_Index  sinhvien_index;
    158.  
    159.     int iFlag_found = 0;
    160.     FILE *fIndex = fopen(__PATH__SINHVIEN_INDEX, "rb");
    161.     while(!feof(fIndex))
    162.     {
    163.         fread(&sinhvien_index, sizeof(SinhVien_Index), 1, fIndex);
    164.  
    165.         if(ulMssv == sinhvien_index.ulMssv)
    166.         {
    167.             iFlag_found = 1;
    168.             break;
    169.         }
    170.     }
    171.     fclose(fIndex);
    172.  
    173.     if(iFlag_found)
    174.     {
    175.         if(sinhvien_index.iRemoved)
    176.             printf("Thong tin sinh vien da bi xoa!\n\n");
    177.         else
    178.         {
    179.             FILE *fSinhVien = fopen(__PATH__SINHVIEN, "rb");
    180.             if(0 != fSinhVien &&
    181.                0 == fseek(fSinhVien, sinhvien_index.lPos_sinhvien, SEEK_SET))
    182.             {
    183.                 fread(&sinhvien, sizeof(SinhVien), 1, fSinhVien);
    184.  
    185.                 printf("* Da tim thay sinh vien co Mssv: %d\n",ulMssv);
    186.                 printf("| Ho va ten: ");
    187.                 puts(sinhvien.szName);
    188.                 printf("| Diem trung binh: %2.2f\n", sinhvien.DiemTB);
    189.  
    190.                 fclose(fSinhVien);
    191.             }
    192.         }
    193.     }
    194.     else
    195.         printf("Khong tim thay sinh vien co Mssv %d !!!\n\n",ulMssv);
    196.  
    197.     printf("Nhan Enter de tiep tuc!!\n");
    198.     getch();
    199. }
    200.  
    201. void XoaTT()
    202. {
    203.     unsigned long ulMssv = 0;
    204.  
    205.     printf(" ____________________________________________________________________ \n");
    206.     printf("|                   DANG XOA THONG TIN SINH VIEN                     |\n");
    207.     printf("|____________________________________________________________________|\n");
    208.     printf("Nhap vao ma so sinh vien can xoa: ");
    209.     scanf("%d", &ulMssv);
    210.  
    211.     int iFlag_found = 0;
    212.     SinhVien_Index sinhvien_index;
    213.     FILE *fIndex = fopen(__PATH__SINHVIEN_INDEX, "r+b");    //Mở file để đọc file index
    214.     while(!feof(fIndex))
    215.     {
    216.         fread(&sinhvien_index, sizeof(SinhVien_Index), 1, fIndex);
    217.         if(ulMssv == sinhvien_index.ulMssv)
    218.         {
    219.             iFlag_found = 1;
    220.             break;
    221.         }
    222.     }
    223.  
    224.     if(iFlag_found)
    225.     {
    226.         if(0 == fseek(fIndex, -sizeof(SinhVien_Index), SEEK_CUR))
    227.         {
    228.             sinhvien_index.iRemoved = 1;
    229.             fwrite(&sinhvien_index, sizeof(SinhVien_Index), 1, fIndex);
    230.             printf("Da xoa thanh cong sinh vien co ulMssv %d!!!\n\n", ulMssv);
    231.         }
    232.        
    233.     }
    234.     else
    235.         printf("Khong ton tai sinh vien co ulMssv %d!!!\n\n", ulMssv);
    236.  
    237.     fclose(fIndex);
    238.  
    239.     printf("Nhan Enter de tiep tuc!!\n");
    240.     getch();
    241. }
    242. int _tmain(int argc, _TCHAR* argv[])
    243. {
    244.     int iKey = 0;
    245.     int iNumberOf = 0;
    246.  
    247.     for(int flag_exit = 0; !flag_exit;)
    248.     {
    249.         printf("***************************************\n");
    250.         printf("*                MENU                 *\n");
    251.         printf("***************************************\n\n");
    252.         printf("1. Nhap danh sach sinh vien\n");
    253.         printf("2. In danh sach sinh vien\n");
    254.         printf("3. Tim kiem\n");
    255.         printf("4. Sap xep sinh vien tang dan theo ulMssv\n");
    256.         printf("5. Xoa thong tin sinh vien\n");
    257.         printf("6. Thoat\n\n");
    258.         printf("Moi ban chon: ");
    259.         scanf("%d",&iKey);
    260.  
    261.         system("cls");
    262.         switch (iKey)
    263.         {
    264.         case 1:
    265.             printf("Nhap vao so sinh vien can nhap: ");
    266.             scanf("%d", &iNumberOf);
    267.             NhapThongTin(iNumberOf);
    268.             break;
    269.         case 2:
    270.             XuatThongTin();
    271.             break;
    272.         case 3:
    273.             TimKiem();
    274.             break;
    275.         case 4:
    276. //          SapXepSV();
    277.             break;
    278.         case 5:
    279.             XoaTT();
    280.             break;
    281.         default:
    282.             flag_exit = 1;
    283.             break;
    284.         }
    285.     }
    286.     return 0;
    287. }
    * Tôi nghĩ bạn dùng phương pháp trộn để sắp xếp danh sách thì ko ổn:
    - Sắp xếp dựa trên file index, trong khi dữ liệu lại lưu trên file sinhvien.txt => Phải định vị lẫn đọc ghi nhiều lần.
    Bây giờ ta đọc hết file index vào một mảng, xong xắp xếp. Dựa vào vị trí sau khi sắp xếp, tính ra vị trí mới của dữ liệu. Xong thì đổi chỗ, hoặc ghi tất cả vào file tạm rồi xóa file cũ và đổi tên.
    Đã được chỉnh sửa lần cuối bởi doicanhden : 10-05-2012 lúc 07:17 PM. Lý do: Tự ghép bài. ~>"<~
    Kết bạn với tôi <3
    Skype: giautm
    Facebook:
    https://fb.com/giautm.duongntt
    Email:
    giau.tmg@gmail.com

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

    Trích dẫn Nguyên bản được gửi bởi doicanhden Xem bài viết
    Tôi nghĩ bạn dùng phương pháp trộn để sắp xếp danh sách thì ko ổn:
    - Sắp xếp dựa trên file index, trong khi dữ liệu lại lưu trên file sinhvien.txt => Phải định vị lẫn đọc ghi nhiều lần.
    Bây giờ ta đọc hết file index vào một mảng, xong xắp xếp. Dựa vào vị trí sau khi sắp xếp, tính ra vị trí mới của dữ liệu. Xong thì đổi chỗ, hoặc ghi tất cả vào file tạm rồi xóa file cũ và đổi tên.
    Đúng r, ý tưởng của mình cũng giống bạn! Nhưng vấn đề là ở chổ: mình đã đưa tất cả các MSSV và 1 mảng temp.txt r sắp xếp...nhưng k đc!! Còn cái sắp xếp đó chỉ sắp xếp cho tập tin đc thôi bạn ơi! Bạn có muốn Source code của pp Trộn tự nhiên k?
    P/s: S code của bạn khi xóa các sinh viên ở trên, r in ra, thì sinh viên cuối bị in 2 lần z?? và 0==fseek(f,index.Pos,SEEK_SET) dùng để làm j??
    Đã được chỉnh sửa lần cuối bởi bratlove123 : 10-05-2012 lúc 09:44 AM.

  6. #6
    Ngày gia nhập
    04 2010
    Nơi ở
    Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
    Bài viết
    504

    Mặc định Cách thay đổi 1 giá trị bất kỳ trong tập tin nhị phân, mà không làm thay đổi các phần tử còn lại???

    Chỗ nào có fread, bạn thêm một if để kiểm tra đọc nữa
    C Code:
    1.     if(0 != fread(...))
    2.     {
    3.         // Do something
    4.     }
    Tập tin index.txt, lưu vị trí Struct SinhVien chứa trong tập tin sinhvien.txt. Vì vậy ta cần đọc tập index.txt trước rồi dựa vào đó, đọc sinhvien ra. Và nếu sắp xếp thì chỉ cần sắp xếp tệp index.txt, còn tập sinhvien.txt thì không cần thay đổi gì.
    Kết bạn với tôi <3
    Skype: giautm
    Facebook:
    https://fb.com/giautm.duongntt
    Email:
    giau.tmg@gmail.com

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

    Trích dẫn Nguyên bản được gửi bởi doicanhden Xem bài viết
    Chỗ nào có fread, bạn thêm một if để kiểm tra đọc nữa
    C Code:
    1.     if(0 != fread(...))
    2.     {
    3.         // Do something
    4.     }
    Tập tin index.txt, lưu vị trí Struct SinhVien chứa trong tập tin sinhvien.txt. Vì vậy ta cần đọc tập index.txt trước rồi dựa vào đó, đọc sinhvien ra. Và nếu sắp xếp thì chỉ cần sắp xếp tệp index.txt, còn tập sinhvien.txt thì không cần thay đổi gì.
    Hàm fread có trả về giá trị nào đâu bạn ghi là if(0!=fread)???

  8. #8
    Ngày gia nhập
    04 2010
    Nơi ở
    Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
    Bài viết
    504

    * Đọc ở đây nè bạn. __http://cplusplus.com/reference/clibrary/cstdio/fread/
    Còn vụ xắp xếp, tôi định là xắp xếp ngay lúc thêm sinhvien luôn. Sau đó chỉ in ra, ko sắp lại nữa. Và hàm tìm kiếm chuyển sang tìm kiếm nhị phân. Nếu đc thì tôi code thử.

    * Đã xong làm xong tất cả những điều tôi nói ở trên. Kèm theo có CSDL mà tôi dùng để test.

    index.txt
    SinhVien.txt
    C Code:
    1. // kosCreator.cpp : Defines the entry point for the console application.
    2. // Author : doicanhden@gmail.com
    3.  
    4. #include "stdafx.h"
    5. #include<conio.h>
    6. #include<stdlib.h>
    7. #include<stdio.h.>
    8. #include<iostream>
    9. #include<time.h>
    10. #include<Windows.h>
    11. #include <string.h>
    12. #include <malloc.h>
    13. #define MAX_NAME 100
    14. #define __PATH__SINHVIEN        "F:\\test\\SinhVien.txt"
    15. #define __PATH__SINHVIEN_INDEX  "F:\\test\\index.txt"
    16.  
    17. //Khai báo cấu trúc Sinh Viên
    18. typedef struct _SINHVIEN
    19. {
    20.     char szName[MAX_NAME];
    21.     unsigned long ulMssv;
    22.     float DiemTB;
    23. } SinhVien, *LPSinhVien;
    24.  
    25. //Khai báo cấu trúc INDEX_File
    26. typedef struct _SINHVIEN_INDEX
    27. {
    28.     unsigned long ulMssv;
    29.     long lPos_sinhvien;
    30.     int iRemoved;
    31. }SinhVien_Index, *LPSinhVien_Index;
    32.  
    33. typedef struct _SINHVIEN_INDEXLIST
    34. {
    35.     LPSinhVien_Index sinhvien_index;
    36.     _SINHVIEN_INDEXLIST *next;
    37. }SinhVien_IndexList, *LPSinhVien_IndexList;
    38.  
    39. //Hàm kiểm tra số SV trong tập tin
    40. long numberOfSV()
    41. {
    42.     long iRet = 0;
    43.     FILE *file = fopen(__PATH__SINHVIEN_INDEX, "rb");
    44.    
    45.     if(0 == file)
    46.         return -1;
    47.  
    48.     fseek(file, 0, FILE_END);
    49.     /* Kích thước tập tin / Kích thước struct = số lượng struct. */
    50.     iRet = ftell(file) / sizeof(SinhVien_Index);
    51.  
    52.     fclose(file);
    53.  
    54.     return iRet;
    55. }
    56. /* Tìm vị trí thích hợp để chèn "chỉ số của sinh viên" vào danh sách*/
    57. LPSinhVien_IndexList insertIndexList(LPSinhVien_IndexList lst, LPSinhVien_Index index)
    58. {
    59.     LPSinhVien_IndexList newNode = (LPSinhVien_IndexList)malloc(sizeof(SinhVien_Index));
    60.     newNode->sinhvien_index = index;
    61.     newNode->next = NULL;
    62.  
    63.     if(lst)
    64.     {
    65.         if(lst->sinhvien_index->ulMssv > newNode->sinhvien_index->ulMssv)
    66.         {
    67.             newNode->next = lst;
    68.             lst = newNode;
    69.         }
    70.         else
    71.         {
    72.             LPSinhVien_IndexList insertTo = lst;
    73.             for(; (insertTo->next != NULL) && (insertTo->next->sinhvien_index->ulMssv < index->ulMssv); insertTo = insertTo->next);
    74.             newNode->next = insertTo->next;
    75.             insertTo->next = newNode;
    76.         }
    77.        
    78.     }
    79.     else
    80.         lst = newNode;
    81.  
    82.     return lst;
    83. }
    84.  
    85. //Hàm nhập thông tin sinh viên & thiết lập Index_file
    86. void NhapThongTin(int n)
    87. {
    88.     int iNumberOfSV = numberOfSV();
    89.    
    90.     FILE *fSinhVien = fopen(__PATH__SINHVIEN, "ab");
    91.    
    92.     printf(" ____________________________________________________________________ \n");
    93.     printf("|                                                                    |\n");
    94.     printf("|                      NHAP THONG TIN SINH VIEN                      |\n");
    95.     printf("|____________________________________________________________________|\n");
    96.  
    97.     SinhVien sinhvien;
    98.    
    99.     LPSinhVien_IndexList    lstIndex = NULL;
    100.     LPSinhVien_Index        lpSinhVien_Index = NULL;
    101.  
    102.     if(iNumberOfSV == -1)
    103.         iNumberOfSV = 0;
    104.  
    105.     int i;
    106.     for(i = 0; i < n; ++i)
    107.     {
    108.         printf("Ban dang nhap thong tin cho sinh vien thu %d trong danh sach: \n", ++iNumberOfSV);
    109.         Sleep(1000);
    110.  
    111.         printf("    -Nhap ulMssv: ");
    112.         scanf("%d", &sinhvien.ulMssv);
    113.         fflush(stdin);
    114.  
    115.         printf("    -Nhap Ho va ten: ");
    116.         gets(sinhvien.szName);
    117.         fflush(stdin);
    118.        
    119.         printf("    -Nhap diem TB: ");
    120.         scanf("%f", &sinhvien.DiemTB);
    121.         fflush(stdin);
    122.         /* Ghi thông tin sinh viên vào tập tin. */
    123.         fwrite(&sinhvien, sizeof(SinhVien), 1, fSinhVien);
    124.  
    125.         /* Tạo "chỉ số của sinh viên". */
    126.         lpSinhVien_Index = (LPSinhVien_Index)malloc(sizeof(SinhVien_Index));
    127.  
    128.         lpSinhVien_Index->ulMssv = sinhvien.ulMssv;
    129.        
    130.         /* Tính toán vị trí của sinhvien trong tập tin. */
    131.         lpSinhVien_Index->lPos_sinhvien = ftell(fSinhVien) - sizeof(SinhVien);
    132.  
    133.         lpSinhVien_Index->iRemoved = 0;
    134.  
    135.         /* Thêm "chỉ số của sinh viên" vào danh sách đã sắp xếp. */
    136.         lstIndex = insertIndexList(lstIndex, lpSinhVien_Index);
    137.     }
    138.     fclose(fSinhVien);
    139.  
    140.     FILE *fIndex    = fopen(__PATH__SINHVIEN_INDEX, "r+b");
    141.  
    142.     SinhVien_Index sinhvien_index;
    143.     while(!feof(fIndex))
    144.     {
    145.         if(0 != fread(&sinhvien_index, sizeof(SinhVien_Index), 1, fIndex))
    146.             /* Tìm vị trí "chỉ số của sinh viên" có mã số lớn hơn mã số đầu danh sách "chỉ số của sinh viên". */
    147.             if(sinhvien_index.ulMssv > lstIndex->sinhvien_index->ulMssv)
    148.             {
    149.                 /* Lùi con trỏ tệp về vị trí trước khi đọc. */
    150.                 fseek(fIndex, -sizeof(SinhVien_Index), SEEK_CUR);
    151.                 break;
    152.             }
    153.     }
    154.     /* Lấy vị trí con trỏ tệp hiện tại*/
    155.     long lPos = ftell(fIndex);
    156.     if (!feof(fIndex))
    157.     {
    158.         do  /* Đọc từng "chỉ số của sinh viên" trong tập tin index, rồi thêm chúng vào danh sách. */
    159.         {
    160.            
    161.             lpSinhVien_Index = (LPSinhVien_Index)malloc(sizeof(SinhVien_Index));
    162.  
    163.             if(0 != fread(lpSinhVien_Index, sizeof(SinhVien_Index), 1, fIndex))
    164.                 /* Thêm "chỉ số của sinh viên" vào danh sách đã sắp xếp. */
    165.                 lstIndex = insertIndexList(lstIndex, lpSinhVien_Index);
    166.             else
    167.                 /* Đọc thất bại thì giải phóng .*/
    168.                 free(lpSinhVien_Index);
    169.  
    170.         }while(!feof(fIndex));
    171.     }
    172.     /* Lùi con trỏ tập tin về vị trí trước khi đọc. */
    173.     fseek(fIndex, lPos, SEEK_SET);
    174.  
    175.     while(lstIndex)
    176.     {
    177.         /* Ghi toàn bộ danh sách vào tập tin, và giải phóng dữ liệu của danh sách. */
    178.         LPSinhVien_IndexList next = lstIndex->next;
    179.         fwrite(lstIndex->sinhvien_index, sizeof(SinhVien_Index), 1, fIndex);
    180.  
    181.         free(lstIndex->sinhvien_index);
    182.         free(lstIndex);
    183.  
    184.         lstIndex = next;
    185.     }
    186.  
    187.     fclose(fIndex);
    188.  
    189.     printf("Nhan Enter de tiep tuc!!\n");
    190.     getch();
    191. };
    192. //Hàm xuất thông tin sinh viên
    193. void XuatThongTin()
    194. {
    195.     printf(" ____________________________________________________________________ \n");
    196.     printf("|                        THONG TIN SINH VIEN                         |\n");
    197.     printf("|____________________________________________________________________|\n");
    198.     printf("|___So luong sinh vien: %4d_________________________________________|\n", numberOfSV());
    199.     int i = 0;
    200.  
    201.     FILE *fSinhVien = fopen(__PATH__SINHVIEN, "rb");
    202.     FILE *fIndex    = fopen(__PATH__SINHVIEN_INDEX, "rb");
    203.    
    204.     SinhVien        sinhvien;
    205.     SinhVien_Index  sinhvien_index;
    206.     while(!feof(fIndex))
    207.     {
    208.         if (0 != fread(&sinhvien_index, sizeof(SinhVien_Index), 1, fIndex))
    209.         {
    210.             if(!sinhvien_index.iRemoved &&
    211.                 0 == fseek(fSinhVien, sinhvien_index.lPos_sinhvien, SEEK_SET))
    212.             {
    213.                 fread(&sinhvien, sizeof(SinhVien), 1, fSinhVien);
    214.                 printf("* Sinh vien thu %d: \n", ++i);
    215.                 printf("| Ho va ten: ");
    216.                 puts(sinhvien.szName);
    217.                 printf("| Ma so sinh vien: %d\n", sinhvien.ulMssv);
    218.                 printf("| Diem trung binh: %2.2f\n", sinhvien.DiemTB);
    219.                 printf("\n\n");
    220.             }
    221.         }
    222.     }
    223.     fclose(fSinhVien);
    224.     printf("Nhan Enter de tiep tuc!!\n");
    225.     getch();
    226. }
    227. long binarySearch(unsigned long ulMssv, LPSinhVien_Index lpSinhVien_Index)
    228. {
    229.     FILE *fIndex = fopen(__PATH__SINHVIEN_INDEX, "rb");
    230.     long lPos_midle = 0;
    231.     long lPos_left = 0;
    232.     long lPos_right = numberOfSV() - 1;
    233.     do
    234.     {
    235.         lPos_midle = (lPos_left + lPos_right) / 2;
    236.  
    237.         fseek(fIndex, lPos_midle * sizeof(SinhVien_Index), SEEK_SET);
    238.  
    239.         if(0 != fread(lpSinhVien_Index, sizeof(SinhVien_Index), 1, fIndex))
    240.         {
    241.             if(ulMssv == lpSinhVien_Index->ulMssv)
    242.             {
    243.                 fclose(fIndex);
    244.                 return  lPos_midle * sizeof(SinhVien_Index);
    245.             }
    246.             else
    247.             {
    248.                 if(ulMssv < lpSinhVien_Index->ulMssv)
    249.                     lPos_right = lPos_midle - 1;
    250.                 else
    251.                     lPos_left = lPos_midle + 1;
    252.             }
    253.         }
    254.         else
    255.             break;
    256.     }while(lPos_left <= lPos_right);
    257.  
    258.     fclose(fIndex);
    259.  
    260.     return -1;
    261. }
    262. //Hàm tìm kiếm sinh viên sử dụng file_index
    263. void TimKiem()
    264. {
    265.     unsigned long ulMssv = 0;
    266.    
    267.     printf(" ____________________________________________________________________ \n");
    268.     printf("|                       DANG TIM KIEM SINH VIEN                      |\n");
    269.     printf("|____________________________________________________________________|\n");
    270.     printf("Nhap vao ulMssv can tim: ");
    271.     scanf("%d", &ulMssv);
    272.  
    273.     SinhVien_Index sinhvien_index;
    274.  
    275.     if(-1 != binarySearch(ulMssv, &sinhvien_index))
    276.     {
    277.         if(sinhvien_index.iRemoved)
    278.             printf("Thong tin sinh vien da bi xoa!\n\n");
    279.         else
    280.         {
    281.             FILE *fSinhVien = fopen(__PATH__SINHVIEN, "rb");
    282.             if(0 != fSinhVien &&
    283.                0 == fseek(fSinhVien, sinhvien_index.lPos_sinhvien, SEEK_SET))
    284.             {
    285.                 SinhVien sinhvien;
    286.  
    287.                 fread(&sinhvien, sizeof(SinhVien), 1, fSinhVien);
    288.  
    289.                 printf("* Da tim thay sinh vien co Mssv: %d\n",ulMssv);
    290.                 printf("| Ho va ten: ");
    291.                 puts(sinhvien.szName);
    292.                 printf("| Diem trung binh: %2.2f\n", sinhvien.DiemTB);
    293.  
    294.                 fclose(fSinhVien);
    295.             }
    296.         }
    297.     }
    298.     else
    299.         printf("Khong tim thay sinh vien co Mssv %d !!!\n\n",ulMssv);
    300.  
    301.     printf("Nhan Enter de tiep tuc!!\n");
    302.     getch();
    303. }
    304.  
    305. //Hàm xóa thông tin sinh viên
    306. void XoaTT()
    307. {
    308.     unsigned long ulMssv = 0;
    309.  
    310.     printf(" ____________________________________________________________________ \n");
    311.     printf("|                   DANG XOA THONG TIN SINH VIEN                     |\n");
    312.     printf("|____________________________________________________________________|\n");
    313.     printf("Nhap vao ma so sinh vien can xoa: ");
    314.     scanf("%d", &ulMssv);
    315.  
    316.     SinhVien_Index sinhvien_index;
    317.  
    318.     long lPos = binarySearch(ulMssv, &sinhvien_index);
    319.  
    320.     if(-1 != lPos)
    321.     {
    322.         FILE *fIndex = fopen(__PATH__SINHVIEN_INDEX, "ab");
    323.         if(0 == fseek(fIndex, lPos, SEEK_SET))
    324.         {
    325.             sinhvien_index.iRemoved = 1;
    326.             fwrite(&sinhvien_index, sizeof(SinhVien_Index), 1, fIndex);
    327.             printf("Da xoa thanh cong sinh vien co ulMssv %d!!!\n\n", ulMssv);
    328.         }
    329.         fclose(fIndex);
    330.     }
    331.     else
    332.         printf("Khong ton tai sinh vien co ulMssv %d!!!\n\n", ulMssv);
    333.  
    334.     printf("Nhan Enter de tiep tuc!!\n");
    335.     getch();
    336. }
    337. int _tmain(int argc, _TCHAR* argv[])
    338. {
    339.     int iKey = 0;
    340.     int iNumberOf = 0;
    341.  
    342.     for(int flag_exit = 0; !flag_exit;)
    343.     {
    344.         printf("***************************************\n");
    345.         printf("*                MENU                 *\n");
    346.         printf("***************************************\n\n");
    347.         printf("1. Nhap danh sach sinh vien\n");
    348.         printf("2. In danh sach sinh vien\n");
    349.         printf("3. Tim kiem\n");
    350.         printf("4. Sap xep sinh vien tang dan theo ulMssv\n");
    351.         printf("5. Xoa thong tin sinh vien\n");
    352.         printf("6. Thoat\n\n");
    353.         printf("Moi ban chon: ");
    354.         scanf("%d",&iKey);
    355.  
    356.         system("cls");
    357.         switch (iKey)
    358.         {
    359.         case 1:
    360.             printf("Nhap vao so sinh vien can nhap: ");
    361.             scanf("%d", &iNumberOf);
    362.             NhapThongTin(iNumberOf);
    363.             break;
    364.         case 2:
    365.             XuatThongTin();
    366.             break;
    367.         case 3:
    368.             TimKiem();
    369.             break;
    370.         case 4:
    371.             XuatThongTin();
    372.             break;
    373.         case 5:
    374.             XoaTT();
    375.             break;
    376.         default:
    377.             flag_exit = 1;
    378.             break;
    379.         }
    380.     }
    381.     return 0;
    382. }
    Attached Thumbnails Attached Thumbnails sorted.jpg  
    Đã được chỉnh sửa lần cuối bởi doicanhden : 23-07-2013 lúc 02:52 PM. Lý do: Thay đổi code một chút để có thể dùng binarySearch khi xóa thông tin.
    Kết bạn với tôi <3
    Skype: giautm
    Facebook:
    https://fb.com/giautm.duongntt
    Email:
    giau.tmg@gmail.com

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

    Trích dẫn Nguyên bản được gửi bởi doicanhden Xem bài viết
    * Đọc ở đây nè bạn. __http://cplusplus.com/reference/clibrary/cstdio/fread/
    Còn vụ xắp xếp, tôi định là xắp xếp ngay lúc thêm sinhvien luôn. Sau đó chỉ in ra, ko sắp lại nữa. Và hàm tìm kiếm chuyển sang tìm kiếm nhị phân. Nếu đc thì tôi code thử.

    * Đã xong làm xong tất cả những điều tôi nói ở trên. Kèm theo có CSDL mà tôi dùng để test.
    Cám ơn bạn nhiều nha...mình làm đc r...

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

  1. Khi thay đổi text trong Combo Box sẽ thay đổi cách hiển thị trong ListView?
    Gửi bởi 0nly trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 12-03-2012, 09:30 PM
  2. Trả lời: 3
    Bài viết cuối: 08-08-2011, 02:26 PM
  3. Lỗi Visual Studio 2008 | Không thay đổi chương trình khi thay đổi code
    Gửi bởi matseo trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 20-12-2010, 10:51 PM
  4. Thay đổi màu của cell bị thay đổi trong Data Grid Views
    Gửi bởi tetuonggu trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 16-10-2009, 10:33 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