📄 filesoperatingsystem.cpp
字号:
//#include <iostream.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
#define N 5
#define L 10
#define S 10
int i=0 ;
struct MFD{
char username[10];
int filedir;
}mfd[N];
struct UFD
{ int filedir;
char filename[10];
char filecaption[4];
int recordlength;
int fileadd;
}ufd[N][L];
struct UOF
{int filedir;
char filename[10];
char filecaption[4];
int recordlength;
char state[10];
int readip;
int writeip;
}uof[N][S];
//******关闭文件*******************
int close(){
char name[10];
int q,j;
printf("\n请输入文件名");scanf("%s",&name);
for(j=0;j<L;j++)
{if(!strcmp(uof[i][j].filename,name)) break; }
if(j==L) {printf("无此文件\n");return 0;}
else if(!strcmp(uof[i][j].state,"creat"))
{
uof[i][j].writeip=0;
uof[i][j].readip=0;
uof[i][j].recordlength=0;
strcpy(uof[i][j].filename,"");
strcpy(uof[i][j].filecaption,"");
strcpy(uof[i][j].state,"");
printf("\n此文件关闭成功");}
else if(!strcmp(uof[i][j].state,"open"))
{
uof[i][j].writeip=0;
uof[i][j].readip=0;
uof[i][j].recordlength=0;
strcpy(uof[i][j].filename,"");
strcpy(uof[i][j].filecaption,"");
strcpy(uof[i][j].state,"");
printf("\n此文件关闭成功\n");}
else {printf("\n此文件已关闭\n");}
return 0;
}
//********撤消文件 ********************
int delet()
{
char name[10];
int j;
printf("\n请输入文件名");
scanf("%s",&name);
for(j=0;j<L;j++)
{if(!strcmp(ufd[i][j].filename,name)) break;}
if(j==L) {printf("\n此文件已撤消");return 0;}
for(j=0;j<L;j++)
{if(!strcmp(uof[i][j].filename,name))
{uof[i][j].filedir=0;
uof[i][j].writeip=0;
uof[i][j].readip=0;
uof[i][j].recordlength=0;
strcpy(uof[i][j].filename,"");
strcpy(uof[i][j].filecaption,"");
strcpy(uof[i][j].state,"");
break;}
}
ufd[i][j].fileadd=0;
ufd[i][j].recordlength=0;
strcpy(ufd[i][j].filename,"");
strcpy(ufd[i][j].filecaption,"");
printf("\n此文件已撤消");
printf("用户%s的文件目录为\n",mfd[i].username);
printf(" filedir ");
printf(" filename ");
printf(" filecaption");
printf(" recordlength ");
printf(" fileadd\n");
for(j=0;j<L;j++)
{printf(" %d ",ufd[i][j].filedir);
printf(" %s ",ufd[i][j].filename);
printf(" %s ",ufd[i][j].filecaption);
printf(" %d ",ufd[i][j].recordlength);
printf(" %d\n",ufd[i][j].fileadd);}
printf("用户%s的已打开的文件为\n",mfd[i].username);
printf(" filedir ");
printf(" filename ");
printf(" filecaption");
printf(" recordlength ");
printf(" readip ");
printf(" writeip \n");
for(j=0;j<S;j++)
{printf(" %d ",uof[i][j].filedir);
printf(" %s ",uof[i][j].filename);
printf(" %s ",uof[i][j].filecaption);
printf(" %d ",uof[i][j].recordlength);
printf(" %d ",uof[i][j].readip);
printf(" %d\n",uof[i][j].writeip);}
system("PAUSE");
return 0;
}
//**********读文件**************************
int read()
{
char name[10];
int j,m,q;
printf("\n请输入文件名");
scanf("%s",&name);
for(j=0;j<L;j++)
{if(!strcmp(uof[i][j].filename,name)) break;
}
if(j==L) {printf("\n无此文件\n");return 0;}
m=strcmp(uof[i][j].state,"open");
if(m!=0) {printf("文件未打开,不能读\n");return 0;}
printf("%d\n当前读指针的位置即当前起始地址是",uof[i][j].readip);
printf("\n请输入读长度1到10");
scanf("%d",&q);
uof[i][j].readip=uof[i][j].readip+q;
printf("\n修改后读指针的位置是%d",uof[i][j].readip);
printf("\n读文件成功");
return 0;
}
//************创建文件**************************
int create(){
int m,j,recordlength1;
char name[10],caption[10];
printf("请输入文件名:");
scanf("%s",&name);
printf("请输入文件属性:");
scanf("%s",&caption);
printf("请输入记录长度:");
scanf("%d",&recordlength1);
for(j=0;j<L;j++)
{if(!strcmp(ufd[i][j].filename,name))
{printf ("\n同名文件不能显示!"); return 0;}
}
for(j=0;j<L;j++)
{if(ufd[i][j].fileadd==0) break;}
strcpy(ufd[i][j].filename,name);
strcpy(ufd[i][j].filecaption,caption);
ufd[i][j].fileadd=100*i+10*j+10 ;
ufd[i][j].filedir=i;
ufd[i][j].recordlength=recordlength1;
printf("用户%s的文件目录为\n",mfd[i].username);
printf("filedir ");
printf(" filename ");
printf(" filefcaption ");
printf(" recordlength ");
printf(" fileadd\n");
for(j=0;j<L;j++)
{printf(" %d ",ufd[i][j].filedir);
printf(" %s ",ufd[i][j].filename);
printf(" %s ",ufd[i][j].filecaption);
printf(" %d ",ufd[i][j].recordlength);
printf(" %d\n",ufd[i][j].fileadd);
}
for(j=0;j<L;j++){if(ufd[i][j].fileadd==0) break;}
uof[i][j].filedir=i;
uof[i][j].recordlength=recordlength1; //UFD中登记
strcpy(uof[i][j].filename,name);
strcpy(uof[i][j].filecaption,caption);
uof[i][j].writeip=100*i+10*j+10;
uof[i][j].readip=100*i+10*j+10;
strcpy(uof[i][j].state,"create");//UOF登记
printf("用户%s的已打开的文件为\n",mfd[i].username);
printf("filedir ");
printf("filename ");
printf("filecaption ");
printf("recordlength ");
printf("readip ");
printf("writeip ");
printf(" state \n");
for(j=0;j<S;j++)
{printf(" %d ",uof[i][j].filedir);
printf(" %s ",uof[i][j].filename);
printf(" %s ",uof[i][j].filecaption);
printf(" %d ",uof[i][j].recordlength);
printf(" %d ",uof[i][j].readip);
printf(" %d ",uof[i][j].writeip);
printf(" %s\n",uof[i][j].state);
}
printf("\n建立成功");
return 0;
}
//**********打开文件****************************
int open(){
char fname[10],style[10];
int m,j;
printf("\n请输入用户文件名");
scanf("%s",&fname);
for(m=0;m<L;m++)
{if(!strcmp(fname,ufd[i][m].filename))
{ j=m;printf("\n UFD中有该文件");break;}//查UFD中是否有该文件
}
if(m==L) {printf("\n文件不存在不能打开");return 0;}
for(m=0;m<S;m++)
{
if(!strcmp(fname,uof[i][m].filename))
{
if(!strcmp("create",uof[i][m].state)) printf("\n正在建立,不能打开");
else printf("\n文件已打开");
return 0;
}
}
printf("\n请输入操作类型,wr 还是 r");
scanf("%s",&style);
if(!strcmp(style,ufd[i][j].filecaption))
{
uof[i][m].filedir=mfd[i].filedir ;
strcpy(uof[i][m].filecaption,style);
strcpy(uof[i][m].filename,fname);
uof[i][m].writeip=ufd[i][j].fileadd;
strcpy(uof[i][m].state,"open");
uof[i][m].readip=ufd[i][j].fileadd;
printf("\n打开成功");
return 0;
}
printf("\n操作不合法") ;
return 0;
}
//***************读文件*******************
int write()
{
char name[10];
int j,q,m;
printf("\n请输入文件名");scanf("%s",&name);
for(j=0;j<L;j++)
{if(!strcmp(uof[i][j].filename,name)) break;
}
if(j==L) {printf("\n此文件尚未建立或打开不能写!\n");return 0;}
else if(!strcmp(uof[i][j].state,"create"))
{ printf("\n写指针指向的物理块号是");
printf("%d\n",uof[i][j].writeip);
}
else if(!strcmp(uof[i][j].filecaption,"r"))
{printf("\n操作不合法,不能写!\n");return 0;}
else {
printf("\n选择顺序修改输入数字0,随机修改输入1\n") ;
scanf("%d",&q);//system("PAUSE");
// printf("%d",q);
if(q==0){ printf("之前写指针指向的块号是");
printf("%d\n",uof[i][j].writeip);
printf("顺序修改写指针指向的块号是");
printf("%d\n",uof[i][j].writeip+1);
}
else{
printf("请输入要查找的记录号\n");
scanf("%d",&m);
uof[i][j].writeip=uof[i][j].writeip+m*uof[i][j].recordlength;
printf("\n修改写指针指向的物理块号是");
printf("%d\n",uof[i][j].writeip);
}
}
printf("写文件成功");
system("PAUSE");return 0;
}
//*****************结束命令 *******************
int end()
{
printf("\n程序结束!!\n");return 0;
}
//创建用户
int createuser()
{
char command[20],name[10];
int k,j;
printf("是否要建立用户,是选择yes,否选择no\n");
scanf("%s",&command);
if(!strcmp("yes",command))
{
printf("请输入用户名:\n");
scanf("%s",&name);
for(k=0;k<N;k++)
{if(!strcmp(mfd[k].username,"")) break; }
strcpy(mfd[k].username,name);
mfd[k].filedir=k;
for(j=0;j<N;j++)
{
ufd[k][j].filedir=k;
}
for(j=0;j<3;j++)
{ puts(mfd[j].username);//printf("%s\n",mfd[k].username);
printf("%d\n",mfd[j].filedir);
}
}
system("PAUSE");
return 0;
}
//**********主程序部分********************************
int main()
{int k,j;
char command[10],name[10]; //初始化文件目录
strcpy(mfd[0].username,"xing");
strcpy(mfd[1].username,"lily");
for(k=0;k<2;k++)
mfd[k].filedir=k;
for(k=2;k<N;k++)
strcpy(mfd[k].username,"");
for(k=0;k<2;k++)
{ puts(mfd[k].username);//printf("%s\n",mfd[k].username);
printf("%d\n",mfd[k].filedir);
}
//初始化用户文件目录
ufd[0][0].filedir=0; //初始化用户xing两个文件
strcpy(ufd[0][0].filename,"xing0");
strcpy(ufd[0][0].filecaption,"r");
ufd[0][0].recordlength=1;
ufd[0][0].fileadd=10;
ufd[0][1].filedir=0;
strcpy(ufd[0][1].filename,"xing1");
strcpy(ufd[0][1].filecaption,"wr");
ufd[0][1].recordlength=1;
ufd[0][1].fileadd=20;
ufd[1][0].filedir=1; //初始化用户lily一个文件
strcpy(ufd[1][0].filename,"lily0");
strcpy(ufd[1][0].filecaption,"r");
ufd[1][0].recordlength=1;
ufd[1][0].fileadd=110;
printf("************************各个用户的文件是********************** \n");
printf("filedir ");
printf(" filename ");
printf(" filefcaption ");
printf(" recordlength ");
printf(" fileadd\n");
//system("PAUSE");
for(k=0;k<2;k++)
for(j=0;j<2;j++)
{
printf(" %d ",ufd[k][j].filedir);
printf(" %s ",ufd[k][j].filename);
printf(" %s ",ufd[k][j].filecaption);
printf(" %d ",ufd[k][j].recordlength);
printf(" %d\n",ufd[k][j].fileadd);
}
//初始化各个用户的已打开文件
uof[0][0].filedir=0;
strcpy(uof[0][0].filename,"xing0");
strcpy(uof[0][0].filecaption,"r");
uof[0][0].recordlength=1;
strcpy(uof[0][0].state,"open");
uof[0][0].readip=10;
uof[0][0].writeip=10;
uof[0][1].filedir=0;
strcpy(uof[0][1].filename,"xing1");
strcpy(uof[0][1].filecaption,"wr");
uof[0][1].recordlength=1;
strcpy(uof[0][1].state,"open");
uof[0][1].readip=20;
uof[0][1].writeip=20;
printf(" \n**********用户已打开的文件是********************************\n");
printf("filedir ");
printf("filename ");
printf("filecaption ");
printf("recordlength ");
printf("readip ");
printf("writeip ");
printf(" state \n");
for(j=0;j<2;j++)
{
printf(" %d ",uof[0][j].filedir);
printf(" %s ",uof[0][j].filename);
printf(" %s ",uof[0][j].filecaption);
printf(" %d ",uof[0][j].recordlength);
printf(" %d ",uof[0][j].readip);
printf(" %d ",uof[0][j].writeip);
printf(" %s\n",uof[0][j].state);
}
//system("PAUSE");
start:printf("\n请输入用户名:\n");
scanf("%s",&name);
for(k=0;k<N;k++)
{if(!strcmp(mfd[k].username,name)) {i=k;break;}}
if(k>=5) {printf("无此用户\n"); createuser();goto start;}
printf("请输入命令\n");
scanf("%s",&command);
if(!strcmp(command,"create")) {create();goto start;}
else if(!strcmp(command,"open")) {open();goto start;}
else if(!strcmp(command,"close")) {close();goto start;}
else if(!strcmp(command,"read")) {read();goto start;}
else if(!strcmp(command,"write")) {write();goto start;}
else if(!strcmp(command,"delet")) {delet();goto start;}
else if(!strcmp(command,"end")) {end();return 0;}
else {printf("您输入的命令错了!!");goto start;}
system("PAUSE");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -