文件管理实验4.docx

上传人:b****6 文档编号:7798389 上传时间:2023-01-26 格式:DOCX 页数:17 大小:79.27KB
下载 相关 举报
文件管理实验4.docx_第1页
第1页 / 共17页
文件管理实验4.docx_第2页
第2页 / 共17页
文件管理实验4.docx_第3页
第3页 / 共17页
文件管理实验4.docx_第4页
第4页 / 共17页
文件管理实验4.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

文件管理实验4.docx

《文件管理实验4.docx》由会员分享,可在线阅读,更多相关《文件管理实验4.docx(17页珍藏版)》请在冰豆网上搜索。

文件管理实验4.docx

文件管理实验4

文件管理-实验4

江南大学物联网工程学院实验报告

课程名称《操作系统》实验名称文件系统实验实验日期2015/5/28

班级计算机1206姓名王成义学号1030412612仪器编号

实验报告要求1.实验目的2.实验要求3.实验步骤4.程序清单5.运行情况5.实验体会

.实验目的

用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。

从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。

.实验要求

要求设计一个n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。

3.实验步骤

主目录操作:

流程图:

4.程序清单

编一个通过屏幕选择命令的文件管理系统,每屏要为用户提供足够的选择信息,不需要打入冗长的命令。

#include

#include

#include

//主文件结构体

structMasterFile{

charusername[20];//用户名

charpassword[20];//用户名密码

charflag;//标志

structMasterFile*next;

};

//用户文件结构体

structUserFile{

intfnum;//文件编号

charfname[20];//文件名

intflength;//文件长度

charflag;//标志

charfpw[20];//文件保护码

structUserFile*link;

};

//全局变量

intshoudsave;//存储标记

intusingnum;//当前用户标记

structMasterFileMFD[20];//主目录

structUserFileUFD[20][20];//用户目录

//寻找主目录空闲区

structMasterFile*MoveMFDToLast()

{

for(inti=0;i<20;i++){

if(MFD[i].flag==0)

usingnum=i;

return&MFD[i];

}

returnNULL;

}

//查找用户

structMasterFile*SearchMFD(charstr[]){

for(inti=0;i<20;i++){

if(strcmp(str,MFD[i].username)==0){

usingnum=i;

return&MFD[i];

}

}

returnNULL;

}

//寻找用户目录空闲区

structUserFile*MoveUFDToLast(){

for(inti=0;i<20;i++){

if(UFD[usingnum][i].flag==0)

return&UFD[usingnum][i];

}

returnNULL;

}

//查找用户文件

structUserFile*SearchUFD(intnum){

for(inti=0;i<20;i++){

if(UFD[usingnum][i].fnum==num)

return&UFD[usingnum][i];

}

returnNULL;

}

//删除用户文件目录

voidLeftMoveUFD(intnum){

for(inti=0;i<20;i++){

if(UFD[usingnum][i].fnum==num){

for(intj=i;j<19;j++){

UFD[usingnum][i].flag=UFD[usingnum][i+1].flag;

UFD[usingnum][i].flength=UFD[usingnum][i+1].flength;

strcpy(UFD[usingnum][i].fname,UFD[usingnum][i+1].fname);

UFD[usingnum][i].fnum=UFD[usingnum][i+1].fnum;

strcpy(UFD[usingnum][i].fpw,UFD[usingnum][i+1].fpw);

UFD[usingnum][i].link=UFD[usingnum][i+1].link;

}

}

}

}

//用户登陆

voidLogin(){

charflag1,flag2,flag3;

charstr1[20],str2[20],str3[20],str4[20];

structMasterFile*p;

printf("你是已有用户吗(y/n)?

");

scanf("%s",&flag1);

if(flag1=='n'){//新用户登录

printf("请创建新的用户:

(y/n)");

scanf("%s",&flag2);

if(flag2=='n'){

printf("你已退出了系统!

\n");

exit

(1);

}else{

printf("请输入你的用户名:

");

scanf("%s",&str1);

printf("请输入口令:

");

scanf("%s",&str2);

p=MoveMFDToLast();

strcpy(p->username,str1);

strcpy(p->password,str2);

p->flag=1;

printf("%d",MFD[usingnum].flag);

p->next=NULL;

shoudsave=1;//存储标记

}

}else{//旧用户登录

while

(1){

printf("请输入你的用户名:

");//输入用户名

scanf("%s",&str3);

p=SearchMFD(str3);

if(p==NULL){

printf("对不起,你输入的用户名不存在!

\n");

printf("继续(y)还是放弃(n)?

");

scanf("%s",&flag3);

if(flag3=='y')continue;

else{

printf("你已退出了系统!

\n");

exit

(1);

}

}else{

while

(1){

printf("请输入口令:

");//输入口令

scanf("%s",&str4);

if(strcmp(str4,p->password)!

=0){

printf("对不起,你输入的口令不正确,请重新输入.\n");

continue;

}elsebreak;

}

}break;

}

}

}

//菜单

voidmenu(){

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

printf("\t1列文件目录\t\t\t\t\t2创建文件\n");

printf("\t3删除文件\t\t\t\t\t4读文件\n");

printf("\t5写文件\t\t\t\t\t\t0退出系统\n");

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

}

//列文件目录

voidDir(){

if(MFD[usingnum].next==0)

printf("目前你不存在任何文件!

\n");

else{

for(inti=0;i<20;i++){

if(UFD[usingnum][i].flag==1)

printf("文件编号\t%d\t文件名\t%s\t文件长度\t%d\t保护码\t%s\n",UFD[usingnum][i].fnum,UFD[usingnum][i].fname,UFD[usingnum][i].flength,UFD[usingnum][i].fpw);

}

}

}

//创建文件

voidCreate(){

FILE*fp;

intnum;

structUserFile*f;

charstr1[20],str2[20];

printf("请输入你要创建的文件名:

");//输入文件信息

scanf("%s",&str1);

printf("请输入文件编号:

");

scanf("%d",&num);

printf("请输入文件保护码:

");

scanf("%s",&str2);

fp=fopen(str1,"w");//创建文件

f=MoveUFDToLast();//寻找用户目录空闲区

if(&UFD[usingnum][0]==f)//连接主目录

MFD[usingnum].next=(structMasterFile*)f;

f->link=(structUserFile*)fp;//设置用户目录

MFD[usingnum].next=(structMasterFile*)&UFD[usingnum][0];

strcpy(f->fname,str1);

strcpy(f->fpw,str2);

f->fnum=num;

f->flength=0;

f->flag=1;

fclose(fp);

shoudsave=1;//设置存储标记

printf("文件已创建!

\n");

}

//删除文件

voidDelete(){

structUserFile*f;

intnum;

printf("请输入你要删除的文件编号:

");

scanf("%d",&num);

f=SearchUFD(num);//查找用户文件

if(f==NULL){

printf("你要删除的文件不存在!

\n");

}else{

LeftMoveUFD(num);//删除用户文件目录

printf("文件已删除!

\n");

}

shoudsave=1;//设置存储标记

}

//读文件

voidRead(){

charch;

structUserFile*f;

FILE*fp;

intnum;

printf("请输入你要读的文件的编号:

");

scanf("%d",&num);

f=SearchUFD(num);//查找文件

if(f==NULL){

printf("你输入的文件不存在!

\n");

}else{

if((fp=fopen(f->fname,"r"))==NULL){//打开指定文件

printf("不能打开该文件!

\n");

exit(0);

}

}

ch=fgetc(fp);//输出文件内容

while(ch!

=EOF){

putchar(ch);

ch=fgetc(fp);

}

printf("\n");

fclose(fp);//关闭文件

printf("文件已读完毕!

\n");

}

//写文件

voidWrite(){

charch;

structUserFile*f;

FILE*fp;

intnum;

printf("请输入你要写的文件的编号:

");

scanf("%d",&num);

f=SearchUFD(num);//查找文件

if(f==NULL){

printf("你输入的文件不存在!

\n");

}else{

if((fp=fopen(f->fname,"wr"))==NULL){//打开指定文件

printf("不能打开该文件!

\n");

exit(0);

}

}

printf("请按字符输入内容(以'#'表示结束符)");//写入文件

scanf("%s",&ch);

while(ch!

='#'){

fwrite(&ch,1,1,fp);

scanf("%s",&ch);

}

fclose(fp);//关闭文件

shoudsave=1;//设置存储标记

printf("文件写入完毕!

\n");

}

//保存

voidSave(){

FILE*fpm,*fpu;

intflag=1,count=0;

fpm=fopen("F:

\\MasterFile.txt","wb");//打开主文件

if(fpm==NULL){

printf("\n提示:

重新打开主文件信息文件时发生错误!

\n");

exit

(1);

}

for(inti=0;i<20;i++)

fwrite(&MFD[i],sizeof(structMasterFile),1,fpm);//保存主文件目录信息

fclose(fpm);

printf("主文件目录信息保存完毕!

\n");

fpu=fopen("F:

\\UserFile.txt","wb");//打开用户文件

if(fpu==NULL){

printf("\n提示:

重新打开用户目录信息文件时发生错误!

\n");

exit

(1);

}

for(intj=0;j<20;j++)//保存用户文件目录信息

fwrite(&UFD[j],sizeof(structUserFile),20,fpu);

fclose(fpu);

printf("用户文件目录信息保存完毕!

\n");

}

//主函数

intmain(){

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

printf("\t\t\t\t实验四文件管理\n");

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

printf("\n\n\n\t\t\t\t\t计算机1206\n");

printf("\t\t\t\t\t王成义\n");

printf("\t\t\t\t\t1030412612\n");

printf("\t\t\t\t\t完成时间:

2015/5/28\n\n\n\n");

printf("\t\t\t\tWelcome\n\n");

FILE*fpm,*fpu;//文件指针

intsel;

charch;

charjian;

printf("\t\t\t\t文件管理系统\n\t\t\t\t\n");

fpm=fopen("D:

\\MasterFile.txt","rb");//打开主文件目录信息文件

if(fpm==NULL){

printf("\n提示:

主文件目录信息文件还不存在,是否创建?

(y/n)\n");

scanf("%s",&jian);

if(jian=='y'||jian=='Y')

fpm=fopen("D:

\\MasterFile.txt","wb");//创建主文件目录的文件

elseexit(0);

}

fpu=fopen("D:

\\UserFile.txt","rb");//打开用户文件目录信息文件

if(fpu==NULL){

printf("\n提示:

用户文件目录信息文件还不存在,是否创建?

(y/n)\n");

scanf("%s",&jian);

if(jian=='y'||jian=='Y')

fpu=fopen("D:

\\UserFile.txt","wb");//创建用户文件目录的文件

elseexit(0);

}

printf("文件正在打开,请稍等...");

for(inti=0;i<20;i++)//读取主文件目录信息

fread(&MFD[i],sizeof(structMasterFile),1,fpm);//将文件的内容放入接点中

fclose(fpm);//关闭文件

while(!

feof(fpu)){//读取用户目录文件信息

for(inti=0;i<20;i++){

if(fread(&UFD[i][0],sizeof(structUserFile),20,fpu))//将文件的内容放入接点中

MFD[i].next=(structMasterFile*)&UFD[i][0];

}

}

fclose(fpu);//关闭文件

printf("\n文件已导入完毕!

\n");

Login();//用户登录

while

(1){//菜单操作

menu();

printf("请你选择操作:

");

scanf("%d",&sel);

if(sel==0){//保存文件信息

if(shoudsave==1){

getchar();

printf("\n资料已经改动,是否将改动保存到文件中(y/n)?

\n");

scanf("%c",&ch);

if(ch=='y'||ch=='Y')

Save();

}

printf("\n你已经退出系统,再见!

\n");

break;

}

switch(sel){

case1:

Dir();

break;//列文件目录

case2:

Create();

break;//创建文件

case3:

Delete();

break;//删除文件

case4:

Read();

break;//读文件

case5:

Write();

break;//写文件

default:

printf("你输的选项有误,请重新输入!

\n");

break;

}

}

system("PAUSE");

return0;

}

5.运行情况

6.实验体会

通过编写和调试此次文件系统,加深了对各种文件操作命令的实质内容和执行过程的了解。

对文件系统有了更深的了解。

教师评价

及格

不及格

教师签名

日期

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 电力水利

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1