?? filesoperatingsystem.cpp
字號(hào):
//#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];
//******關(guān)閉文件*******************
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此文件關(guā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此文件關(guān)閉成功\n");}
else {printf("\n此文件已關(guā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當(dāng)前讀指針的位置即當(dāng)前起始地址是",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;
}
//************創(chuàng)建文件**************************
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寫指針指向的物理塊號(hào)是");
printf("%d\n",uof[i][j].writeip);
}
else if(!strcmp(uof[i][j].filecaption,"r"))
{printf("\n操作不合法,不能寫!\n");return 0;}
else {
printf("\n選擇順序修改輸入數(shù)字0,隨機(jī)修改輸入1\n") ;
scanf("%d",&q);//system("PAUSE");
// printf("%d",q);
if(q==0){ printf("之前寫指針指向的塊號(hào)是");
printf("%d\n",uof[i][j].writeip);
printf("順序修改寫指針指向的塊號(hào)是");
printf("%d\n",uof[i][j].writeip+1);
}
else{
printf("請輸入要查找的記錄號(hào)\n");
scanf("%d",&m);
uof[i][j].writeip=uof[i][j].writeip+m*uof[i][j].recordlength;
printf("\n修改寫指針指向的物理塊號(hào)是");
printf("%d\n",uof[i][j].writeip);
}
}
printf("寫文件成功");
system("PAUSE");return 0;
}
//*****************結(jié)束命令 *******************
int end()
{
printf("\n程序結(jié)束!!\n");return 0;
}
//創(chuàng)建用戶
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兩個(gè)文件
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一個(gè)文件
strcpy(ufd[1][0].filename,"lily0");
strcpy(ufd[1][0].filecaption,"r");
ufd[1][0].recordlength=1;
ufd[1][0].fileadd=110;
printf("************************各個(gè)用戶的文件是********************** \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);
}
//初始化各個(gè)用戶的已打開文件
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("您輸入的命令錯(cuò)了!!");goto start;}
system("PAUSE");
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -