?? fcb.cpp
字號:
// ddf.cpp : Defines the entry point for the console application.
//
#include "stdio.h"
#include "conio.h"
#include <string.h>
int jp=0,flag=0; /*flag為當前系統是否有用戶登錄的標記,jp保存當前用戶的號數*/
char name[10];
struct ufd{char filename[10]; /*用戶文件目錄*/
char pcode[4];
char type[5];
char length[5];
}file[10][10];
typedef struct ufd UFD;
struct mfd{char username[12]; /*用戶主目錄*/
UFD *link;
}user[10];
typedef struct mfd MFD;
struct afd{char aname[10]; /*正在運行文件目錄*/
char pcode[4];
char type[5];
char state[2];
}afile[5];
typedef struct afd AFD;
void init() /*對系統初始化*/
{int i=0;
for(i=0;i<10;i++) /*初始化主目錄*/
{user[i].link=file[0];
strcpy(user[0].username,"user1");
strcpy(user[1].username,"user2");
strcpy(user[2].username,"user3");
strcpy(user[3].username,"user4");
strcpy(user[4].username,"user5");
strcpy(user[5].username,"user6");
strcpy(user[6].username,"user7");
strcpy(user[7].username,"user8");
strcpy(user[8].username,"user9");
strcpy(user[9].username,"user0");
}
for(i=0;i<10;i++) /*初始化用戶文件*/
{ strcpy(file[i][0].filename,"f1"); /*初始化文件名*/
strcpy(file[i][1].filename,"f2");
strcpy(file[i][2].filename,"f3");
strcpy(file[i][3].filename,"f4");
strcpy(file[i][4].filename,"f5");
strcpy(file[i][5].filename,"f6");
strcpy(file[i][6].filename,"f7");
strcpy(file[i][7].filename,"f8");
strcpy(file[i][8].filename,"");
strcpy(file[i][9].filename,"");
strcpy(file[i][0].pcode,"434"); /*初始化保護碼*/
strcpy(file[i][1].pcode,"054");
strcpy(file[i][2].pcode,"662");
strcpy(file[i][3].pcode,"667");
strcpy(file[i][4].pcode,"333");
strcpy(file[i][5].pcode,"885");
strcpy(file[i][6].pcode,"998");
strcpy(file[i][7].pcode,"777");
strcpy(file[i][8].pcode,"");
strcpy(file[i][9].pcode,"");
strcpy(file[i][0].type,"jpg"); /*初始化文件類型*/
strcpy(file[i][1].type,"cc");
strcpy(file[i][2].type,"jsp");
strcpy(file[i][3].type,"obj");
strcpy(file[i][4].type,"docx");
strcpy(file[i][5].type,"psf");
strcpy(file[i][6].type,"png");
strcpy(file[i][7].type,"exl");
strcpy(file[i][8].type,"");
strcpy(file[i][9].type,"");
strcpy(file[i][0].length,"2"); /*初始化文件長度*/
strcpy(file[i][1].length,"4");
strcpy(file[i][2].length,"2");
strcpy(file[i][3].length,"6");
strcpy(file[i][4].length,"5");
strcpy(file[i][5].length,"6");
strcpy(file[i][6].length,"1");
strcpy(file[i][7].length,"8");
strcpy(file[i][8].length,"");
strcpy(file[i][9].length,"");
}
}
void printMFD() /*打印輸出系統全部用戶*/
{
int i;
printf("\n--------------------------------系統中的全部用戶--------------------------------");
for(i=0;i<10;i++)
{
printf("%d.%s\t\t",i,user[i].username);
}
printf("--------------------------------------------------------------------------------");
}
void printUFD(int n) /*打印輸出當前用戶全部文件及其狀態*/
{ int i;
printf("\n------------------------------用戶%s目錄下的文件-----------------------------\n",user[jp].username);
printf("文件名\t 保護碼\t 文件類型\t 文件長度\n");
for(i=0;i<10;i++)
{
printf("%d.%s\t",i,file[n][i].filename);
printf(" %s\t ",file[n][i].pcode);
printf("%s\t\t ", file[n][i].type);
printf("%s\n", file[n][i].length);
}
printf("--------------------------------------------------------------------------------");
}
void printAFD() /*打印輸出正在運行的文件及其狀態*/
{int i;
printf("\n-------------------------------運行文件目錄-------------------------------------");
printf("文件名\t 保護碼\t 類型\t 狀態\n");
for(i=0;i<5;i++)
{
printf("%d.%s\t",i,afile[i].aname);
printf(" %s\t",afile[i].pcode);
printf(" %s\t ",afile[i].type);
printf("%s\n",afile[i].state);
}
printf("--------------------------------------------------------------------------------");
}
void printExcel() /*打印輸出操作功能選項表*/
{
printf("\n-----------------------------------命令選項表-----------------------------------");
printf("1.create\t\t2.delete\t\t3.open\t\t4.bye\t\t5.close\t\t\t6.read\t\t\t7.write\t\t8.print\n");
printf("--------------------------------------------------------------------------------");
}
checkFilename(int i) /*當創建新文件時,檢查是否重名*/
{int j=0;
for(j=0;j<i;j++)
{if(strcmp(file[jp][i].filename,file[jp][j].filename)==0)
{strcpy(file[jp][i].filename,"");
printf("輸入的文件名已有,請重新輸入\n");
scanf("%s",file[jp][i].filename);
j=0;
}
}
}
void Create() /*創建用戶文件*/
{
int n,i,flag1=0;
for(i=0;i<10;i++)
{if(strcmp(file[jp][i].filename,"")==0) /*如當前用戶創建的文件還沒有10個,則在末尾建立新文件*/
{printf("請輸入要創建的文件的文件名:");
scanf("%s",file[jp][i].filename);
checkFilename(i); /*檢查所輸入的文件名是否與原文件名重名*/
printf("輸入保護碼:");
scanf("%s",file[jp][i].pcode); /*輸入保護碼*/
printf("輸入文件類型:");
scanf("%s",file[jp][i].type);
printf("輸入文件的長度:");
scanf("%s",file[jp][i].length); /*輸入文件長度*/
flag1=1;
}
if(flag1==1)break;
}
if(flag1==1)printUFD(jp);
if(flag1==0)printf("不能創建文件,當前用戶文件目錄已滿!\n"); /*若文件滿10個,則輸出出錯信息*/
}
void Delete() /*刪除文件*/
{
int n,p,i,j,flag2=0;
printUFD(jp);
printf("請輸入要刪除的文件名");
scanf("%s",name);
for(i=0;i<10;i++)
{
if (strcmp(file[jp][i].filename,name)==0)
{
p=i;
break;
}
}
if(i==10)
{
printf("無此文件\n");
return;
}
if(strcmp(file[jp][p].filename,"")!=0) /*若所選用戶文件非空,則刪除所選文件*/
{flag2=1;
for(i=0;i<5;i++) /*若所選文件在AFD中,則刪除AFD中的所選文件*/
{if(strcmp(afile[i].aname,file[jp][p].filename)==0)
{strcpy(afile[i].aname,"");
strcpy(afile[i].pcode,"");
strcpy(afile[i].state,"");
for(j=i;j<4;j++) /*AFD中在刪除文件之后的文件前移*/
{afile[j]=afile[j+1];
strcpy(afile[j+1].aname,"");
strcpy(afile[j+1].pcode,"");
strcpy(afile[j+1].type,"");
strcpy(afile[j+1].state,"");
}
}
}
strcpy(file[jp][p].filename,"");
strcpy(file[jp][p].pcode,"");
strcpy(file[jp][p].length,"");
for(i=p;i<9;i++) /*刪除文件之后,所刪除文件之后的文件前移*/
{file[jp][i]=file[jp][i+1];
strcpy(file[jp][i+1].filename,"");
strcpy(file[jp][i+1].pcode,"");
strcpy(file[jp][i+1].length,"");
}
}
if(flag2==1)printUFD(jp);
if(flag2==0) printf("\n沒有該文件\n"); /*當前用戶無該文件,出錯*/
}
void Open() /*打開文件*/
{
int n=0,i=0,flag3=0;
printUFD(jp);
printf("請輸入你要打開的文件名:");
scanf("%s",name);
for(i=0;i<10;i++)
{
if (strcmp(file[jp][i].filename,name)==0)
{
n=i;
break;
}
}
if(i==10)
{
printf("無此文件\n");
return;
}
for(i=0;i<5;i++)
{if(strcmp(afile[i].aname,"")==0) /*如AFD沒滿5個文件,把文件放進AFD*/
{strcpy(afile[i].aname,file[jp][n].filename);
strcpy(afile[i].pcode,file[jp][n].pcode);
strcpy(afile[i].type,file[jp][n].type);
strcpy(afile[i].state,"O");
flag3=1;
}
if(flag3==1)break;
}
if(flag3==0)printf("不能打開此文件,當前運行文件目錄已滿!\n"); /*滿5個則出錯*/
if(flag3==1)printAFD();
}
void Read() /*讀文件*/
{int n=0,i=0,flag4=0;
printUFD(jp); /*打印用戶文件列表*/
printf("請輸入要讀的文件名:");
scanf("%s",name);
for(i=0;i<10;i++)
{
if (strcmp(file[jp][i].filename,name)==0)
{
n=i;
break;
}
}
if(i==10)
{
printf("無此文件\n");
return;
}
if(file[jp][n].pcode[0]=='1') /*若有讀的權限并且AFD沒滿5個文件,則把文件放`進AFD*/
{for(i=0;i<5;i++)
{if(strcmp(afile[i].aname,"")==0)
{strcpy(afile[i].aname,file[jp][n].filename);
strcpy(afile[i].pcode,file[jp][n].pcode);
strcpy(afile[i].type,file[jp][n].type);
strcpy(afile[i].state,"R");
flag4=1 ;
}
if(flag4==1)break;
}
if(flag4==0)printf("不能讀此文件,當前運行文件目錄已滿!\n"); /*若滿5個則出錯*/
}
else if(file[jp][n].pcode[0]=='0') /*無讀的權限,出錯信息*/
printf("你沒有權利讀該文件\n");
if(flag4==1)printAFD();
}
void Write() /*寫文件*/
{
int n=0,i=0,flag5=0;
printUFD(jp); /*打印用戶文件列表*/
printf("請輸入你要寫的文件名:");
scanf("%s",name);
for(i=0;i<10;i++)
{
if (strcmp(file[jp][i].filename,name)==0)
{
n=i;
break;
}
}
if(i==10)
{
printf("無此文件\n");
return;
}
if(file[jp][n].pcode[1]=='1') /*若有寫的權限,則把文件寫進AFD*/
{for(i=0;i<5;i++)
{if(strcmp(afile[i].aname,"")==0)
{strcpy(afile[i].aname,file[jp][n].filename);
strcpy(afile[i].pcode,file[jp][n].pcode);
strcpy(afile[i].type,file[jp][n].type);
strcpy(afile[i].state,"W");
flag5=1;
}
if(flag5==1)break; printAFD();
}
if(flag5==0)printf("不能寫此文件,當前運行文件目錄已滿!\n"); /*若滿5個則出錯*/
}
else if(file[jp][n].pcode[1]=='0') /*無寫的權限,出錯信息*/
printf("你沒有權利寫該文件\n");
if(flag5==1)printAFD();
}
void Close() /*關閉文件*/
{int n=0,i=0;
printAFD();
printf("你要關閉的文件是:");
scanf("%s",name);
for(i=0;i<10;i++)
{
if (strcmp(afile[i].aname,name)==0)
{
n=i;
break;
}
}
if(i==10)
{
printf("無此文件");
return;
}
if(strcmp(afile[n].aname,"")!=0) /*若AFD中有文件,則關掉選擇的文件*/
{strcpy(afile[n].aname,"");
strcpy(afile[n].pcode,"");
strcpy(afile[n].type,"");
strcpy(afile[n].state,"");
for(i=n;i<4;i++) /*AFD中在所關閉文件之后的正在運行的文件前移*/
{afile[i]=afile[i+1];
strcpy(afile[i+1].aname,"");
strcpy(afile[i+1].pcode,"");
strcpy(afile[n+1].type,"");
strcpy(afile[i+1].state,"");
}
printAFD();
}
else printf("當前沒該文件在運行\n"); /*AFD中無該文件,出錯信息*/
}
void Bye() /*退出系統*/
{ char m;
int i=0;
printf("你是否要退出系統:(y/n)");
getchar();
scanf("%c",&m);
if(m=='y'||m=='Y') /*選擇退出,則退出程序*/
{
printf("歡迎下次登錄!\n");
flag=1;
}
else /*否則不退出程序*/
{for(i=0;i<5;i++)
{strcpy(afile[i].aname,"");
strcpy(afile[i].pcode,"");
strcpy(afile[i].state,"");
}
}
}
void main(){ int i,l=0; /*l為輸入命令是否合法的標志*/
char m[10];
char n[12];
char temp[8][8];
strcpy(temp[0],"create");
strcpy(temp[1],"delete");
strcpy(temp[2],"open");
strcpy(temp[3],"bye");
strcpy(temp[4],"close");
strcpy(temp[5],"read");
strcpy(temp[6],"write");
strcpy(temp[7],"print");
init(); /*初始化文件系統*/
printf(" 歡迎使用文件管理系統\n");
printMFD(); /*打印輸出全部用戶*/
printf("請輸入您要進入的用戶名:");
scanf("%s",n);
for(i=0;i<10;i++)
{
if (strcmp(user[i].username,n)==0)
{
jp=i;
break;
}
}
if(i==10)
{
printf("無此用戶\n");
return;
}
printUFD(jp);
while(flag==0)
{
getchar();
printExcel();
while(1)
{if(l==1) break;
printf("請輸入命令名:");
scanf("%s",m);
for(i=0;i<8;i++)
{
if (strcmp(temp[i],m)==0) {l=1;break;}
}
}
switch(i+1) /*選擇功能操作*/
{case 1:Create();{l=0;break;}
case 2:Delete();{l=0;break;}
case 3:Open();{l=0;break;}
case 4:Bye();{l=0;break;}
case 5:Close();{l=0;break;}
case 6:Read();{l=0;break;}
case 7:Write();{l=0;break;}
case 8:printUFD(jp);{l=0;break;}
default:flag=1;break;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -