本文是針對[資料結構基礎系列(11):檔案]中的實踐專案。
【專案】索引檔案
有若干學生的成績資料如下,將這些資料儲存到st陣列中:
學號 姓名 年齡 性別 語文 數學 英語
1 陳華 20 男 78 90 84
5 張明 21 男 78 68 92
8 王英 20 女 86 81 86
3 劉麗 21 女 78 92 88
2 許可 20 男 80 83 78
4 ** 20 男 78 88 82
7 馬勝 21 男 56 67 75
6 曾強 20 男 78 89 82
基於這些資料,程式設計序實現下面的功能:
(1)將st陣列中學生記錄寫入stud.dat檔案作為主檔案
(2)輸出主檔案中的學生記錄
(3)建立與主檔案相對應的索引檔案,其中每個記錄由兩個字段組成:學號和該學生記錄在資料檔案中的位移量(例:上面列出資料中學號為2的學生許可,其位移量是5。由於本例用定長檔案,可以根據位移量計算記錄在主檔案中的相對位址)。索引檔案按學號有序。
(4)輸出索引檔案中的全部記錄
(5)根據使用者輸入的學號,利用索引檔案,用二分查詢法找到對應的記錄號,再通過主檔案輸出該記錄
(6)是否有想法,將這個專案再擴充了?加大資料量、雜湊檔案、多關鍵字檔案……
[參考解答]
#include
#include
#include
#define maxrec 100 //最多的記錄個數
typedef
struct index //定義索引檔案結構
index;
typedef
struct
studtype;
void insertsort(index r,int n) //採用直接插入排序法對r[0..n-1]按學號遞增排序
r[j+1]=temp; //在j+1處插入r[i]
}}void creatidxfile() //建立索引檔案
if ((idxfile=fopen("index.dat","wb"))==null)
i=0;
while ((fread(&st,sizeof(studtype),1,mfile)))
insertsort(idx,n); //對idx陣列按no值排序
rewind(idxfile);
for (i=0; isizeof(index),1,idxfile);
fclose(mfile);
fclose(idxfile);
}void outputmainfile() //輸出主檔案全部記錄
printf(" ----學生成績表----\n");
printf("記錄號 學號 姓名 年齡 性別 語文 數學 英語\n");
while ((fread(&st,sizeof(studtype),1,mfile))==1)
fclose(mfile);
}void outputidxfile() //輸出索引檔案全部記錄
while ((fread(&irec,sizeof(index),1,idxfile))==1)
printf("\t%5d%6ld\n",irec.no,irec.offset);
fclose(idxfile);
}void readindexfile(index idx[maxrec],int &n) //讀索引檔案資料存入idx陣列中
fseek(idxfile,0,2);
j=ftell(idxfile); //j求出檔案長度
rewind(idxfile);
n=j/sizeof(index); //n求出檔案中的記錄個數
fread(idx,sizeof(index),n,idxfile);
fclose(idxfile);
}int searchnum(index idx,int n,int no) //在含有n個記錄的索引檔案idx中查詢學號為no的記錄對應的記錄號
return -1;
}void findstudent() //輸出指定學號的記錄
readindexfile(idx,n); //讀取索引陣列idx
printf("輸入學號:");
scanf("%d",&no);
i=searchnum(idx,n,no); //在idx中查詢
if (i==-1)
else
fclose(mfile);
}void writefile(studtype st, int n) //將st陣列中的n個學生記錄寫入stud.dat檔案中
for (i=0; i1,sizeof(studtype),fp);
fclose(fp);
}int main()
, ,,,
,,,};
printf("建立主檔案\n");
writefile(st,n); //建立主檔案
do
}while (sel!=0);
return
0;}
3 解析索引檔案結構(1)
webus2.0 in action 解析索引檔案結構 2 webus的索引資料全部儲存在一種抽象的目錄結構中,它既支援實際物理目錄,也支援以流 system.io.stream 作為資料載體的邏輯目錄 為了實現這個功能,webus2.0 sdk在 webus.io 命名空間中提供了三個實用工具類 ...
索引檔案構成
1 索引檔案 索引檔案由主檔案和索引表構成。主檔案 檔案本身。索引表 在檔案本身外建立的一張表,它指明邏輯記錄和物理記錄之間的一一對應關係。2 索引表組成 索引表必須按主關鍵字有序,而主檔案本身則可以按主關鍵字有序或無序。3 索引順序檔案和索引非順序檔案 1 索引順序檔案 indexed seque...
談談索引檔案
本來是去查b tree的,翻到了索引檔案,看了兩眼,備忘一下吧。什麼是索引檔案?除了檔案本身 即資料區 之外,另建立一張表只是邏輯記錄和物理記錄之間的意義對應關係的表 索引表,這類包括檔案資料區和索引錶兩大部分的檔案叫做索引檔案。索引表示由系統自動生成的,在記錄輸入建立資料區的同時建立乙個索引表,按...