Demo entry 6641225

001

   

Submitted by anonymous on Sep 16, 2017 at 16:06
Language: C. Code size: 11.9 kB.

#include "stdio.h" 
#include "stdlib.h"  
#include "conio.h" 
#include "string.h" 
#include "iostream" 
#define getpch(type) (type*)malloc(sizeof(type))  
//#define NULL 0   
#define UserNumber 10 
#define UserFNumber 10 
#define UserOFNumber 5
using namespace std;
 
/*******结构体**********/

struct fname{                
	char fnamea[1];               
	int flag;                
} fnameA[26]={'a',0,'b',0,'c',0,'d',0,'e',0,'f',0,'g',0,'h',0,'i',0,'j',0,'k',0,'l',0, 
	'm',0,'n',0,'o',0,'p',0,'q',0,'r',0,'s',0,'t',0,'u',0,'v',0,'w',0,'x',0,'y',0,'z',0}; 
struct afd {              
	char opname[10];/* 打开文件名 */             
	int flag;              
	char opfprotect[3];/* 打开保护码 */             
	int rwpoint;/* 读写指针 */              
} AFD[UserOFNumber];/* 用户打开的文件 文件目录 */
typedef struct {              
	char fname[10];/* 用户文件名 */            
	int flag;/* 文件存在标志 */              
	int  fprotect[3];/* 文件保护码r\w\t */             
	int  flength;              
 } ufd,UF[UserFNumber];/* 用户文件 */ 
struct mdf {              
	char uname[10];/* 用户名 */             
	UF  Udir;/* 用户文件目录 */             
 } UFD[UserNumber];/* 用户 */ 

/*******初始化分配************/


/**
 *初始化10个用户
 *每个用户定义5个文件
 *
**/

void intFSystem(){             
	int i,j,k,l;               
	strcpy(UFD[0].uname,"a");  //用户名 (a~j)            
	strcpy(UFD[1].uname,"b");              
	strcpy(UFD[2].uname,"c");              
	strcpy(UFD[3].uname,"d");              
	strcpy(UFD[4].uname,"e");              
	strcpy(UFD[5].uname,"f");              
	strcpy(UFD[6].uname,"g");              
	strcpy(UFD[7].uname,"h");              
	strcpy(UFD[8].uname,"i");              
	strcpy(UFD[9].uname,"j");
	for(i=0;i<10;i++) {               
		for(k=0;k<5;k++){                   
			do j=rand()%26; 
			while(fnameA[j].flag);               
			strcpy(UFD[i].Udir[k].fname,fnameA[j].fnamea);                  
			fnameA[j].flag=1;                    
			UFD[i].Udir[k].flength=rand()%2048+1;                   
			UFD[i].Udir[k].flag=1;                    
			UFD[i].Udir[k].fprotect[0]=rand()%2;                   
			UFD[i].Udir[k].fprotect[1]=rand()%2;                  
			UFD[i].Udir[k].fprotect[2]=rand()%2;                          
		}                           
	  for(j=0;j<26;j++) fnameA[j].flag=0;                    
	}                     
	for(l=0;l<5;l++){               
		strcpy(AFD[i].opname,""); 
		AFD[l].flag=0;                
		AFD[l].opfprotect[0]=0;               
		AFD[l].opfprotect[1]=0;               
		AFD[l].opfprotect[2]=0;               
		AFD[l].rwpoint=0;                     
	}                
 }

/********函数声明*************/
void Open(int i);//打开文件
void Create(int i);//创建文件
void Delete(int i); //删除文件
void Read(); //读文件
void Write(); //写文件
void printUFD(int i); // 显示文件目录
void printAFD(int i); // 显示打开文件目录 



/********函数实现************/
void Rename(int i){
	char file1[10],file2[10];
	int k;
	printf("请输入修改前的文件名:");
	scanf("%s",file1);
	for(k=0; k<10; k++){
		if(strcmp(UFD[i].Udir[k].fname,file1)){
			printf("文件不存在!\n");
			break;
		}
		else if(!strcmp(UFD[i].Udir[k].fname,file1)&&UFD[i].Udir[k].flag)
		{
			printf("请输入修改后的文件名:");
			scanf("%s",file2);
			strcpy(UFD[i].Udir[k].fname,file2);
			printf("文件名已修改\n");
			break;
		}		
	}
	return ;
}

void Copy(int i){
	//system("cls");
	char filename1[16];
	char filename2[16];
	char c; 
	printf("请输入原文件名:");
	scanf("%s",&filename1);
	printf("\n");
	printf("请输入目标文件名:");
	scanf("%s",&filename2);
	printf("\n");
 	FILE *fp1=fopen(filename1,"r");
	FILE *fp2=fopen(filename2,"w"); 
 	while(!feof(fp1)){
	 	c=fgetc(fp1); 
  		fputc(c,fp2); 
 	} 
 	fclose(fp1); 
 	fclose(fp2); 
 	printf("复制文件成功!\n");
//	system("pause");
	return;
}

void Open(int i){ 
	int l,k,n; 
	

	char file[10];  
	for(l=0;l<5;l++) 
	{ 
		if(!AFD[l].flag) break; 
	}                   
	printf("请输入你想打开的文件名:");       
	scanf("%s",file); 
	for(n=0;n<5;n++)  
		if(!strcmp(AFD[n].opname,file)&&AFD[n].flag)                         
		{
			printf("文件已被打开!\n",file);	
			return ;
		}                   
	for(k=0;k<10;k++)  
		if(!strcmp(UFD[i].Udir[k].fname,file)&&UFD[i].Udir[k].flag)             
		{ 
			strcpy(AFD[l].opname,UFD[i].Udir[k].fname);                  
			AFD[l].opfprotect[0]=UFD[i].Udir[k].fprotect[0];         
			AFD[l].opfprotect[1]=UFD[i].Udir[k].fprotect[1];        
			AFD[l].opfprotect[2]=UFD[i].Udir[k].fprotect[2];                     
			AFD[l].flag=1;                      
			printf("文件已打开!\n");                     
			return;
		}                    
	printf("文件不存在!\n");                   
	return ; 
}       
void Create(int i){ 
	int k;                      
	for(k=0;k<10;k++) 
	{
		if(!UFD[i].Udir[k].flag) break;  
	}                      
	if(k>=10) 
	{
		printf("一个用户不能拥有超过10个文件\n\n");
		return ;
	}                     
	printf("请输入你想创建的文件名:");                     
	scanf("%s",UFD[i].Udir[k].fname);                     
	printf("请输入文件长度:");                      
	scanf("%d",&UFD[i].Udir[k].flength);                     
	printf("只读?(1 yes,0 no):");                      
	scanf("%d",&UFD[i].Udir[k].fprotect[0]);                     
	printf("可写?(1 yes,0 no):");                      
	scanf("%d",&UFD[i].Udir[k].fprotect[1]);                     
	printf("可执行?(1 yes,0 no):");                      
	scanf("%d",&UFD[i].Udir[k].fprotect[2]);                     
	UFD[i].Udir[k].flag=1;                     
	return ;
}  
void Delete(int i){
	char file[10]; 
	int k;                
	printf("请输入你想删除的文件名:");               
	scanf("%s",file); 
	for(k=0;k<10;k++) {                   
		if(UFD[i].Udir[k].flag&&!strcmp(UFD[i].Udir[k].fname,file))                             
		{               
			printf("文件已删除!\n");                      
			UFD[i].Udir[k].flag=0;	break;
			}      
		else if(!UFD[i].Udir[k].flag&&!strcmp(UFD[i].Udir[k].fname,file))                       
			printf("文件不存在!\n");                  
	}               
	return ;
} 
void Read(){ 
	char szTest[1000] = {0};

	int l;
	char file[10];               
	printf("请输入你想读的文件:");              
	scanf("%s",file); 
	FILE *pFile=fopen(file,"r"); //获取文件的指针
	char *pBuf;  //定义文件指针
	for(l=0;l<5;l++) 
		if(!strcmp(AFD[l].opname,file)&&AFD[l].flag) 	                 
			if(AFD[l].opfprotect[0])
			{ 
				fseek(pFile,0,SEEK_END); //把指针移动到文件的结尾 ,获取文件长度
				int len=ftell(pFile); //获取文件长度
				pBuf=new char[len+1]; //定义数组长度
				rewind(pFile); //把指针移动到文件开头 因为我们一开始把指针移动到结尾,如果不移动回来 会出错
				fread(pBuf,1,len,pFile); //读文件
				pBuf[len]=0; //把读到的文件最后一位 写为0 要不然系统会一直寻找到0后才结束
				printf(pBuf);  //显示读到的数据
				fclose(pFile); // 关闭文件
				printf("\n");
				return ;
			}
		else 
		{
			printf("文件不可读!\n"); 
			return ;
		}               
	if(l>=5) printf("文件尚未打开,请先打开文件!\n");                
	return ;
} 
void Write(){               
	int l;
	char file[10]; 
	char s[100];
	printf("请输入你想写的文件:");              
	scanf("%s",file);
	printf("请输入要写的内容:\n");
	scanf("%s",s);	
	FILE *p=fopen(file,"w");	               
	for(l=0;l<5;l++) 
	if(!strcmp(AFD[l].opname,file)&&AFD[l].flag)                 
		if(AFD[l].opfprotect[1]){ 
		fprintf(p,"%s",s);	
		printf("文件已被写入!\n");
		fclose(p); 
		return ;
	}
	else{ 
		printf("不可写!\n"); 
		return ;
	}               
	if(l>=5) printf("文件尚未打开,请先打开文件!\n");                
	return ;
}
void printUFD(int i){
	int k;
	printf("-------------------------------------------------------\n");                    
	printf("主文件目录:\n",UFD[i].uname);                  
	printf("用户名\t文件名\t可读 可写 可执行\t文件长度\n");                 
	for(k=0;k<10;k++)
	{                   
		if(UFD[i].Udir[k].flag)                    
		printf("%s\t%s\t%d    %d    %d\t\t%dB\n",UFD[i].uname,UFD[i].Udir[k].fname,UFD[i].Udir[k].fprotect[0],                     
		UFD[i].Udir[k].fprotect[1],UFD[i].Udir[k].fprotect[2],UFD[i].Udir[k].flength);                  
	}     
    printf("-------------------------------------------------------\n");            
}  
void printAFD(int i) 
{ 
	int l,k;     
	if (!AFD[0].flag&&!AFD[1].flag&&!AFD[2].flag&&!AFD[3].flag&&!AFD[4].flag)       
	{           
		printf("当前没有运行的文件!\n");           
		return ;       
	} 
	else       
	{   
	    printf("-------------------------------------------------------\n");                    
		printf("运行文件目录:\n");                    
		printf("文件名\t可读 可写 可执行\n");                   
		for(l=0;l<5;l++)        
		{                        
				for(k=0;k<10;k++)                        
				{           
					if(!strcmp(UFD[i].Udir[k].fname,AFD[l].opname)&&UFD[i].Udir[k].flag&&AFD[l].flag)
				{ 
					break;
				}          
				else continue;                        
		}          
		if(!strcmp(UFD[i].Udir[k].fname,AFD[l].opname)&&UFD[i].Udir[k].flag&&AFD[l].flag)  
			{ 
				printf("%s\t%d    %d    %d\n",AFD[l].opname,AFD[l].opfprotect[0],AFD[l].opfprotect[1],AFD[l].opfprotect[2]); 
			}     
		}   
		printf("-------------------------------------------------------\n");       
	}                  
} 
void Close()
{ 
	int l;                
	char file[10];                
	printf("请选择文件:");      
	scanf("%s",file);               
	for(l=0;l<5;l++)   
	if(!strcmp(AFD[l].opname,file)&&AFD[l].flag) 
	{
		AFD[l].flag=0;
		printf("文件已关闭!\n");
		return ;
	}                
	if(l>=5) printf("文件打开失败!\n");               
		return ;
} 
int main()
{ 
	int i,n=0;               
	char m[10];  
//	string m;
	char login[10];              
	intFSystem();     	
	/*************************************/
	printf("----------------Welcome   to    FileSystem------------- ");
	printf("\n                    功能实现内容                      \n");  
    printf("-------------------------------------------------------\n");  
    printf("|| create   :创建文件.                               || \n");  
    printf("|| delete   :删除文件.                               || \n");  
    printf("|| open     :打开文件.                               || \n");  
    printf("|| close    :关闭文件.                               || \n");  
    printf("|| read     :读取文件.                               || \n");  
    printf("|| write    :编写文件.                               || \n");
    printf("|| copy     :拷贝文件.                               || \n");  
    printf("|| rename   :重命名文件.                             || \n");   
    printf("|| ufd      :显示文件目录.                           || \n");  
    printf("|| dir      :显示打开文件目录.                       || \n");  
	printf("|| exit     :退出.                                   || \n");  
	printf("-------------------------------------------------------\n");  
    /*******************************************************************/

	lgin: printf("请输入用户名(a~j):");              
	scanf("%s",login); 

	if(!strcmp(login,"exit")) return 0;               
	for(i=0;i<10;i++)
	{ 
		if(!strcmp(UFD[i].uname,login)) break;
	}              
	if(i>=10)
	{ 
		printf("该用户名不存在!"); goto lgin; 
	}              
	printUFD(i);              
	for(;n!=1;)
	{               
		printf("请输入命令:");     
		scanf("%s",&m);               
		if(strcmp(m,"create")==0) Create(i);    
		else if(strcmp(m,"delete")==0) Delete(i);     
		else if(strcmp(m,"open")==0) Open(i);     
		else if(strcmp(m,"close")==0) Close();     
		else if(strcmp(m,"read")==0) Read();     
		else if(strcmp(m,"write")==0) Write();
		else if(strcmp(m,"copy")==0) Copy(i);                
		else if(strcmp(m,"ufd")==0) printUFD(i);     
		else if(strcmp(m,"dir")==0) printAFD(i); 
		else if(strcmp(m,"rename")==0) Rename(i);
		else if(strcmp(m,"exit")==0) n=1;     
		else printf("出错\n");     
	}               
	printf("Saving....\n");              
	printUFD(i);              
	getch();              
	return 0; 
}       

This snippet took 0.02 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).