⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filesoperatingsystem.cpp

📁 进城调度操作系统课程设计
💻 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 + -