把文件的逻辑结构转换成存储结构,设计便于顺序存取和直接存取的文件存储结构
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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");