把文件的逻辑结构转换成存储结构,设计便于顺序存取和直接存取的文件存储结构

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

#include

#include

#define FDF -1

#define FFF -2

#define MAX1 30

#define MAX2 32

#define LIST_INIT_SIZE 100 //线性表存储空间的初始容量#define LISTINCREMENT 20 //线性存储空间的分配增量

typedef struct

{

char name;

int start;

}fcb;

fcb a[MAX1];

typedef struct

{

int order; //索引表记录号

int block; //物理块号

}indextab;

typedef struct

{

char filename; //文件名

indextab *ind; //索引表指针

int length; //当前长度

int listsize; //当前分配的初始容量

}filetab;

typedef struct

{

filetab *file; //文件目录表指针

char name[10]; //用户名

int length; //当前长度

int listsize; //当前分配的初始容量

}usertab;

usertab *newbase;

typedef struct

{

usertab *user; //用户表指针

int length;

int listsize;

}Sqlist;

Sqlist s;

int fat[MAX2]; //定义fat表项

int filenum = 1; //记录文件的个数,文件数随着保存而增加

int c = 0; //记录所有用户的数量

int h ; //记录每个用户文件的个数

int m ; //m存放的是文件的个数

int count1 = 0; //记录文件的个数,随着转换索引表而动态改变

char savename[10][1]; //保存用户名

char cr; //记录插入文件的名字

void begin();

void display();

void insert();

void save();

void change(char name[]);

void after();

void alter();

void write(int n);

void read(int n);

void main()

{

char name[10];

int x,i;

while(1)

{

for(i=0;i<10;i++)

savename[i][1] ='\0';

printf("*************************************************************** \n");

printf("\n\t模拟设计MS-DOS操作系统中磁盘文件的索引文件结构\n");

printf("\n\t\t选择1: 初始化fat");

printf("\n\t\t选择2: 写入文件");

printf("\n\t\t选择3: 读出文件");

printf("\n\t\t选择4: 显示fat表");

printf("\n\t\t选择5: 插入逻辑记录号操作");

printf("\n\t\t选择6: 保存文件操作");

printf("\n\t\t选择7: 转换索引表");

printf("\n\t\t选择8: 显示转换后的索引表");

printf("\n\t\t选择0: 结束");

printf("\n\n***************************************************** **********\n");

printf("请输入选择的操作:");

scanf("%d",&x);

switch(x)

{

case 1:begin();

break;

case 2:write(filenum);

break;

case 3:read(filenum);

break;

case 4:display();

break;

case 5:insert();

if(count1-1>=filenum)

alter();

break;

case 6:save();

break;

case

7:printf("\n*********************************************\n");

while(count1-1

{

printf("将fat表转换成索引表\n");

while(1)

{

printf("请输入用户名\n");

fflush(stdin);

scanf("%s",name);

change(name);

break;

}

}

break;

case 8:after();

break;

case 0:break;

}

if(x==0) break;

}

}

void display()

{

int i = 0,n,q;

printf("此时fat表纪录情况为:\n");

for(i=0;i

printf("%d : %d\n",i,fat[i]);

printf("\n此时文件目录表中的情况为:\n");

printf("-------------------------------------------\n");

printf("文件名\t\t起始块号\t文件长度\n");

相关文档
最新文档